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对第三方库的依赖。
 
网易新闻
AppleReachability
ASIHTTPRequest
EGOTableViewPullRefresh
GTMNSString+HTML
MGTemplateEngine
MPOAuth
RegexKitLite
SDWebImage
SSZipArchive
wax
 
Garageband
MurmurHash
libpng
zlib
SBJson  (json-framework)
 
iWork三套件
MOKit
Boost C++ Library
protobuf
OpenGL Mathematics
SQLite
cephes math library
 
Pinterest
AFNetworking
AFHttpClientLogger
Facebook SDK
iRate
MAKVONotificationCenter
SDWebImage
SFHFKeychainUtils
SSPullToRefresh
SVProgressHUD
TTTAttributedLabel
TTTLocalizedPluralString
UIAlertView-Blocks
 
多看阅读
fmdb
ASIHTTPRequest
FreeType
JSONKit
Objective-Zip
Skia  (Google)
MBProgressHUD
 
淘宝
MAZeroingWeakRef
MBProgressHUD
ABContactHelper
ASIHTTPRequest
CocoaLumberjack
EGOTableViewPullRefresh
fmdb
GTMBase64
JSONKit
SBJson  (json-framework)
RTLabel
SDWebImage
SVPullToRefresh
three20
ziparchive
 
微信
cocos2d
EGOTableViewPullRefresh
Facebook iOS SDK
JSONKit
SBJson
ziparchive
 
QQ
ASIHTTPRequest
FMDB
CocoaAsyncSocket
JSONKit
MBProgressHUD
OpenUDID
SBJson
SVPullToRefresh
 
百度地图
AFNetworking
GTMBase64
JSONKit
MBProgressHUD
RNCachingURLProtocol
SDWebImage
 
微博
ABContactHelper
AFNetworking
ASIHTTPRequest
DACircularProgressView
DDProgressView
DTFoundation
fmdb
JSONKit
SBJson
MBProgressHUD
MTStatusBarOverlay
OpenUDID
SFHFKeychainUtils
 
人人
cocoaasyncsocket
ZipArchive
MBProgressHUD
JSONKit
GTMBase64
MKNetworkKit
HPGrowingTextView
zxing
 
可以看到,这些大型的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不兼容以前的版本,不过你也可以访问使用以前的版本。
项目地址>>
iOS第三方开源库的吐槽和备忘_第1张图片
 
 
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。
项目地址>>
官方网站>>
iOS第三方开源库的吐槽和备忘_第2张图片
 
Route-Me 
Route-Me是一个曾经非常火爆的iPhone开源地图库,可以为你提供高质量的地图和定位功能。该项目在8个月前进行过一次更新。它的外观设计和感觉更像iOS 内置的地图库,但却是完全开源的,适用于任何地图资源。支持    OpenStreetMap Microsoft VirtualEarth CloudMade OpenAerialMap OpenCycleMap SpatialCloud , TileStream 7 以及DBMap和  MBTiles 。
项目地址>>
iOS第三方开源库的吐槽和备忘_第3张图片
 
 
iOS-Artwork-Extractor 
iOS Artwork Extractor可以把所有图片和emoji符号提取出来,并导入png文件。为了提取出视网膜显示屏 @2x高分辨率的图片,在模拟器中选择硬件>设备>iPhone 4菜单。png文件会被保存至桌面上的文件夹。
项目地址>>
iOS第三方开源库的吐槽和备忘_第4张图片
 
 
CMPopTipView 
是一个开源的泡泡风格文本提示框控件,从UIView派生而来,可用于iPad和iPhone app上,主要用来对用户操作进行提示,反馈系统状态等。
CMPopTipView可以自定义文本和背景的颜色,提供了边测滑出和弹出两种动画效果。可以通过用户点击或者以编程方式解除。全部使用Core Graphics进行渲染。
项目地址>> 
iOS第三方开源库的吐槽和备忘_第5张图片
 
 
Reachability(检查网络连接)
Reachability是用来检查应用当前的网络连接状况,是苹果Reachability类的直接替代品,支持ARC,支持block,使用GCD方法来通知网络接口的变化。
项目地址>>
 
 
Slash 
在iOS 6中显示属性字符串已经简单多了,但以编程的方式来创建还是有点恐怖。Slash提供了一个简单的可扩展的HTML风格的标记语言,充分利用了iOS 6中NSAttributedString的新功能。
项目地址>>
作者通过自述文件展示了如何自定义不同的标签:
 
 
BCGenieEffect
实现了在Mac OS 中最小化或最大化窗口时的过渡效果。BCGenieEffect包含一个UIView category,允许你在iOS视图中添加这个效果。自定义长方形的起点、终点以及边缘。基于CoreAnimation。
项目地址>>
iOS第三方开源库的吐槽和备忘_第6张图片
iOS第三方开源库的吐槽和备忘_第7张图片
Underscore.m  
Underscore.m是一个小型实用工具库,可以帮助开发者更方便地处理Objective-C中常见的数据结构。灵感来自于了不起的underscore.js( http://documentcloud.github.io/underscore/)。
项目地址>>

你可能感兴趣的:(iOS第三方开源库的吐槽和备忘)