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

作iOS開發總會接觸到一些第三方庫,這裏整理一下,作一些吐槽。
html

目前比較活躍的社區仍舊是Github,除此之外也有一些不錯的庫散落在Google Code、SourceForge等地方。因爲Github社區太過主流,這裏主要介紹一下Github裏面流行的iOS庫。java

首先整理了一份Github上排名靠前的iOS庫(大概600個repos)ios

除了逛一下每日/每個月流行以外,也能夠到這裏來看一下整個iOS Repos的排名。git

下面是一些比較流行的第三方庫:github

HTTPweb

相比較之下,AFNetworking是目前最優秀的一個了:輕量、易用、使用者多、開發者有在積極維護。在AFN出現以前,這個角色是由ASIHTTPRequest扮演的,只是到如今年久失修了。關於AFN和ASI的對比,這裏有一篇不錯的文章www.infoq.com/cn/articles…。除此以外,MKNetworkKitRestKit也有必定的使用者。sql

Socket編程

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

JSONapi

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.法律問題。。大公司須要仔細審查許可協議,小公司各類不怕那就沒問題。。

相關文章
相關標籤/搜索