第三方庫備忘

轉自ibireme的博客
 
做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。除此之外,MKNetworkKitRestKit也有一定的使用者。
 
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.法律問題。。大公司需要仔細審查許可協議,小公司各種不怕那就沒問題。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章