iOS第三方开源库的吐槽和备忘

做iOS开发总会接触到一些第三方库,这里整理一下,做一些吐槽。
 
目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code、SourceForge等地方。由于Github社区太过主流,这里主要介绍一下Github里面流行的iOS库。
 
首先整理了一份 Github上排名靠前的iOS库(大概600个repos)
 
除了逛一下每日/每月流行之外,也可以到 这里来看一下整个iOS Repos的排名。
 
下面是一些比较流行的第三方库:
 
HTTP
相比较之下, AFNetworking是目前最优秀的一个了:轻量、易用、使用者多、开发者有在积极维护。在AFN出现之前,这个角色是由ASIHTTPRequest扮演的,只是到现在年久失修了。关于AFN和ASI的对比,这里有一篇不错的文章 http://www.infoq.com/cn/articles/afn_vs_asi。除此之外, MKNetworkKit RestKit也有一定的使用者。
 
Socket
CocoaAsyncSocket无疑是目前封装得最完善的Socket库了:支持异步TCP/UDP,支持GCD,Objective-C接口封装。。目前没有发现可以与之相比的同类产品。。
 
JSON
JSONKit算是第三方中最优秀的一个了:性能很高,文件少。在JSONKit之前,SBJson非常非常流行,但是SBJson性能够差,只是由于历史原因仍然存在在某些工程里面。如果工程只需要支持iOS5以上的系统,那就可以放弃那些第三方Json库了,直接用系统提供的NSJSONSerialization,性能比第三方的好,又是官方API。。
 
XMPP
现在做个实时聊天,XMPP协议算是很成熟的方案了。 XMPPFramework一个很不错的选择,可以直接和OpenFire服务器打交道。项目不大人手不多的话,可以看看这个。
 
基础工具类
SSToolkit算是一个不错的工具包,提供各种比如编码、加密、字符串处理等等东西,还提供了一些不错的自定义控件,并且文档非常齐全。
 
框架
过去有很多人再用 three20,这个东西太大太重,文档又少,到头来连Facebook都停止维护了。作为替代品nimbus现在流行了开来,关键在于它文档齐全。国内有个MVC框架叫 BeeFramework,号称是顶级框架并且功能超过 nimbus,有兴趣的可以看一下。  ReactiveCocoa把响应式编程这种上流的东西带了过来,值得试一试。。
 
数据存储
还是挺多人(比如我)喜欢直接跟SQLite打交道的,这方面 fmdb封装的很不错。如果用CoreData来做存储的,可以用一下 MagicalRecord
 
图像处理
GPUImage无疑是这方面的集大成者了。用OpenGL ES2.0来实时处理图片和视频流,性能和功能都是顶尖的。
 
开发和调试工具
PonyDebugger看上去是一个不错的调试工具,可以在电脑浏览器上远程调试iOS程序、查看试图层次、网络等等。 CocoaLumberjack是个Log工具,号称是可以提供企业级Log,使用者也挺多。
 
为了了解一下目前第三方库的普及程度,下面列举一些知名App对第三方库的依赖。
 
网易新闻
 
Garageband
MurmurHash
libpng
zlib
SBJson  (json-framework)
 
iWork三套件
 
Pinterest
 
多看阅读
 
淘宝
 
微信
 
QQ
ASIHTTPRequest
FMDB
CocoaAsyncSocket
JSONKit
MBProgressHUD
OpenUDID
SBJson
SVPullToRefresh
 
百度地图
 
微博
 
人人
可以看到,这些大型的App的依赖都很混乱,所以稍微解释一下。这些大公司都有一个iOS团队来协同开发,团队成员的水平也参差不齐。有时由于历史原因,例如某个App的某个组件依赖了ASIHttpRequest,但之后的新人改用了AFNetworking,就造成上面这种比较混乱的库依赖关系。这就造成难以维护、代码冗余等问题了。所以,引入一个第三方库一定要慎重考虑,如果可能,尽量自己开发和实现相应的功能,第三方库尽量只作为参考。 小团队或者个人开发者可以不必过多考虑,开发速度优先。
 

最后吐槽一下cocoapods。
 
 一个语言的流行总伴随着第三方库的丰富,相应的也会出现依赖库管理的工具。cocoapods之于ObjC,就像maven/gradle 之于java、gem之于ruby那样。 cocoapods基本上是创建在在github社区上的,开源并且社区活跃。除了用github上的中央仓库外,也可以自己搭建私服什么的随便乱搞。
 但就我来说,不推荐使用cocoapods,吐槽如下:
1.像maven这样的工具,是为了管理庞大的第三方库依赖、控制版本、构建工程等等而产生的,很难想象一个依赖了上百个jar包的web项目不用包管理构建会变成什么样。。但是,iOS开发是客户端的开发啊,如果真有一个工程依赖了那么多第三方工具,这个App能保持稳定吗。。通常情况下一个iOS工程不会有那么多包依赖。
2.按常理来看,一个人的手头不可能有太多的工程同时进行,也不太可能一天之内创建N个App来发布。cocoapods能节省的重复工作量,还不如它带来麻烦多。。
3.修改和调试不便。如果某个第三方库需要少量修改才能实现需求,用cocoapods来处理会比较麻烦。
 
关于第三方库,同样也不推荐过多使用,吐槽如下:
1.消耗时间,一个开源库,拿过来需要仔细考察代码质量,确认是否足够可靠。如果出现问题,需要仔细审查开源库的内部实现。如果这些工作太消耗时间,还不如自己实现。
2.可维护性差。一旦遇到系统升级、API更换,第三方库不能确保不出问题。当出问题后也难以找到人来维护。如果跟进第三方库的改变,仍然容易出现新问题。
3.法律问题。。大公司需要仔细审查许可协议,小公司各种不怕那就没问题。

/******************************addtion*********************************************/

知名应用程序的设计和技术一直都是开发者需要学习的,同样这些应用所使用的开源框架也是不可忽视的一部分。此前《iOS第三方开源库的吐槽和备忘》中作者ibireme列举了国内多款知名应用所使用的开源框架,并对其中一些框架进行了分析,同样国外开发者@iOSCowboy也在博客中给我们列出了国外多款知名应用使用的开源框架。另外txx's blog中详细介绍了Facebook Paper使用的第三方库

Instagram

AFNetworking:适用于iOS和OS X的网络框架。

Appirater: 提醒用户打分。

ASIHTTPRequest:简单使用CFNetwork API封装进行HTTP网络请求,用Objective-C编写,可应用在Mac OSX和iOS开发中。

CocoaHTTPServer: 用于Mac OS X和iOS应用程序的轻量级、可嵌入的HTTP服务器框架。

Cocoa Lumberjack:适用于Mac和iOS的日志框架,集简单、快速、强大以及灵活于一身。

MBProgressHUD: 用多种样式展示半透明的HUD,并带有指示器和标签,自定义功能强大。

PLCrashReporter (Github mirror): 进程内崩溃报告框架。

QSUtilities: 实用工具、控件以及其他辅助类的集合。

SocketRocket: Objective-C WebSocket客户端库。 https://github.com/square/SocketRocket

XBImageFilters:允许实时过滤摄像头拍摄的照片,使用OpenGL ES 2 来快速处理各种图片效果。

Foursquare

Facebook SDK for iOS: 集成Facebook,构建强大的社交app。

FSNetworking: Foursquare iOS网络库。

kingpin: MapKit/MKAnnotation pin 聚合库,主要用来在地图上面添加锚点。

AFNetworking:适用于iOS和OS X的网络框架。

SKBounceAnimation:CAKeyframeAnimation子类,可快速简单地设置弹动的数量,开始和结束的值,以及创建动画。

DB5:通过Plist配置文件。

LinkedIn

BlocksKit: blocks工具包。

SDWebImage: 提供一个UIImageVIew类以支持远程加载网络图片。具有缓存管理、异步图片下载等功能,支持GIF动画,使用GCD和ARC。

DTCOreText:文字效果代码类库。在UITextView上实现丰富的文字效果,比如文字大小、颜色、字体、下划线,链接,给文字加上图片、视频,文字任意间距等等。实现类似于CSS网页的文字效果。

Shazam

AudioStreamer:Mac OS X和iPhone上适用的流媒体音频播放器,可播放来自网络上的音乐。.

ColorArt: iTunes 11风格的颜色匹配代码。

objc-geohash: Objective-C GeoHash库,通过经纬度获得哈希表。

FormatterKit: 收集了精心构思的NSFormatter子类。

UIView+Glow: UIView的一个类别,可添加对制作发光视图的支持,以突出屏幕上重要的部分,方便用户与之进行交互。

WEbViewJavascriptBridge: 在使用UIWebView时,它优雅地实现了JS与ios 的ObjC 原生代码之间的互调,支持消息发送、接收、消息处理器的注册与调用以及设置消息处理的回调。

Skype

AFNetworking: 适用于iOS和OS X的网络框架。

Hockey SDK: HockeyApp service官方iOS SDK。

PLCrashReporter (Github mirror): 进程内的崩溃报告框架。

TTTAttributedLabel是一个文字视图开源组件,是UILabel的替代元件,可以以简单的方式展现渲染的属性字符串。另外,还支持链接植入,不管是手动还是使用UIDataDetectorTypes自动把电话号码、事件、地址以及其他信息变成链接。

SDWebImage: 提供一个UIImageVIew类以支持远程加载网络图片。具有缓存管理、异步图片下载等功能,支持GIF动画,使用GCD和ARC。

Cocoa Lumberjack: 适用于Mac和iOS的日志框架,集简单、快速、强大以及灵活于一身。

MWPhotoBrowser: 一个简单的带有栅格视图的iOS照片浏览器,可添加标题和选择多个图片。照片浏览器效果类似iOS原生的照片应用,可显示来自手机的图片或者是网络图片,也可自动从网络下载图片并进行缓存,还可图片进行缩放等。

BlocksKit: Objective-C blocks工具包。

Spotify

FMDB: SQLite API封装库。

MAObjCRuntime:将运行时API封装成ObjC。

Nu: 编程语言。

PLCrashReporter (Github mirror):进程内崩溃报告框架。

SBJSON:Objective-C 实现的一个严格的JSON 解析器和生成器。


//--------------------------------------------------------------------------------------------------------------

将Github上600多个iOS开源项目进行分类并且有相应介绍,小伙伴们快来看呀

地址:http://github.ibireme.com/github/list/ios/


//--------------------------------------------------------------------------------------------------------------

PKRevealController
PKRevealController是一个iOS平台上的视图控制器集合,通过展现多个视图控制器来进行控制器之间的切换。设置简单,高度灵活。
PKRevealController是ZUUIRevealController的进化,ZUUIRevealController是一个类似Facebook 客户端的视图横向切换的效果。PKRevealController整个控制器从头至尾进行了重写,API不兼容以前的版本,不过你也可以访问使用以前的版本。
 
 
Nimbus  
Nimbus是Three20 开发团体中一个非常热门的项目。
Three20是在Facebook 的iPhone程序剥离出来的框架,发布已经有好长时间了。Three20包含很多非常实用的类,可以帮你快速把一些功能添加至app中,比如照片浏览,缓存等。Three20被用在很多不同的应用中,但是它有一个缺点--很难找到相关文档,你只能花费大量时间从例子中弄明白一些东西。
 
Nimbus项目旨在落实Three20,但是提供文档放在第一位,其次才是功能。Nimbus并不能完全替代Three20,但也包含Three20的一些功能,并且提供了部分优秀的例子,比如如何异步下载和缓存图片。Nimbus在6个月前进行过一次更新。
 
 
Cheddar for iOS
Cheddar for iOS是Cheddar的iPhone与iPad 通用客户端,是一个简单的,即时的任务管理器。
你可以从App Store免费下载Cheddar for iOS。
 
Route-Me 
Route-Me是一个曾经非常火爆的iPhone开源地图库,可以为你提供高质量的地图和定位功能。该项目在8个月前进行过一次更新。它的外观设计和感觉更像iOS 内置的地图库,但却是完全开源的,适用于任何地图资源。支持    OpenStreetMap Microsoft VirtualEarth CloudMade OpenAerialMap OpenCycleMap SpatialCloud , TileStream 7 以及DBMap和  MBTiles 。
 
 
iOS-Artwork-Extractor 
iOS Artwork Extractor可以把所有图片和emoji符号提取出来,并导入png文件。为了提取出视网膜显示屏 @2x高分辨率的图片,在模拟器中选择硬件>设备>iPhone 4菜单。png文件会被保存至桌面上的文件夹。
 
 
CMPopTipView 
是一个开源的泡泡风格文本提示框控件,从UIView派生而来,可用于iPad和iPhone app上,主要用来对用户操作进行提示,反馈系统状态等。
CMPopTipView可以自定义文本和背景的颜色,提供了边测滑出和弹出两种动画效果。可以通过用户点击或者以编程方式解除。全部使用Core Graphics进行渲染。
 
 
Reachability(检查网络连接)
Reachability是用来检查应用当前的网络连接状况,是苹果Reachability类的直接替代品,支持ARC,支持block,使用GCD方法来通知网络接口的变化。
 
 
Slash 
在iOS 6中显示属性字符串已经简单多了,但以编程的方式来创建还是有点恐怖。Slash提供了一个简单的可扩展的HTML风格的标记语言,充分利用了iOS 6中NSAttributedString的新功能。
作者通过自述文件展示了如何自定义不同的标签:
 
 
BCGenieEffect
实现了在Mac OS 中最小化或最大化窗口时的过渡效果。BCGenieEffect包含一个UIView category,允许你在iOS视图中添加这个效果。自定义长方形的起点、终点以及边缘。基于CoreAnimation。
Underscore.m  
Underscore.m是一个小型实用工具库,可以帮助开发者更方便地处理Objective-C中常见的数据结构。灵感来自于了不起的underscore.js( http://documentcloud.github.io/underscore/)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值