iOS 第三方開源庫的吐槽和備忘

jopen 9年前發布 | 26K 次閱讀 IOS 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。除此之外,MKNetworkKitRestKit也有一定的使用者。

Socket

CocoaAsyncSocket無疑是目前封裝得最完善的Socket庫了:支持異步TCP/UDP,支持GCD,Objective-C接口封裝。。目前沒有發現可以與之相比的同類產品。。

JSON

JSONKit算是第三方中最優秀的一個了:性能很高,文件少。在JSONKit之前,SBJson非常非常流行,但是SBJson性能夠差,只是由于歷史原因仍然存在在某些工程里面。如果工程只需要支持iOS5以上的系統,那就可以放棄那些第三方Json庫了,直接用系統提供的NSJSONSerialization,性能比第三方的好,又是官方API。。

XMPP

現在做個實時聊天,XMPP協議算是很成熟的方案了。XMPPFramework一個很不錯的選擇,可以直接和OpenFire服務器打交道。項目不大人手不多的話,可以看看這個。

基礎工具類

SSToolkit算是一個不錯的工具包,提供各種比如編碼、加密、字符串處理等等東西,還提供了一些不錯的自定義控件,并且文檔非常齊全。

框架

過去有很多人再用three20,這個東西太大太重,文檔又少,到頭來連非死book都停止維護了。作為替代品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
非死book 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
非死book 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. 法律問題。。大公司需要仔細審查許可協議,小公司各種不怕那就沒問題。。

來自:http://blog.ibireme.com/2013/09/23/ios-third-party-libs/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!