轉自ibireme的博客html
作iOS開發總會接觸到一些第三方庫,這裏整理一下,作一些吐槽。java
目前比較活躍的社區仍舊是Github,除此之外也有一些不錯的庫散落在Google Code、SourceForge等地方。因爲Github社區太過主流,這裏主要介紹一下Github裏面流行的iOS庫。ios
首先整理了一份Github上排名靠前的iOS庫(大概600個repos)git
除了逛一下每日/每個月流行以外,也能夠到這裏來看一下整個iOS Repos的排名。github
下面是一些比較流行的第三方庫:web
HTTPsql
相比較之下,AFNetworking是目前最優秀的一個了:輕量、易用、使用者多、開發者有在積極維護。在AFN出現以前,這個角色是由ASIHTTPRequest扮演的,只是到如今年久失修了。關於AFN和ASI的對比,這裏有一篇不錯的文章http://www.infoq.com/cn/articles/afn_vs_asi。除此以外,MKNetworkKit和RestKit也有必定的使用者。編程
Socketjson
CocoaAsyncSocket無疑是目前封裝得最完善的Socket庫了:支持異步TCP/UDP,支持GCD,Objective-C接口封裝。。目前沒有發現能夠與之相比的同類產品。。api
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
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
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.法律問題。。大公司須要仔細審查許可協議,小公司各類不怕那就沒問題。。