图像:
1.图片浏览控件MWPhotoBrowser
实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存。可对图片进行缩放等操作。
下载:https://github.com/mwaterfall/MWPhotoBrowser
目前比较活跃的社区仍旧是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
ASIHTTPRequest
EGOTableViewPullRefresh
GTMNSString+HTML
MGTemplateEngine
MPOAuth
RegexKitLite
SDWebImage
SSZipArchive
wax
Garageband
iWork三套件
Pinterest
AFNetworking
AFHttpClientLogger
Facebook SDK
iRate
MAKVONotificationCenter
SDWebImage
SFHFKeychainUtils
SSPullToRefresh
SVProgressHUD
TTTAttributedLabel
TTTLocalizedPluralString
UIAlertView-Blocks
AFHttpClientLogger
Facebook SDK
iRate
MAKVONotificationCenter
SDWebImage
SFHFKeychainUtils
SSPullToRefresh
SVProgressHUD
TTTAttributedLabel
TTTLocalizedPluralString
UIAlertView-Blocks
多看阅读
淘宝
MAZeroingWeakRef
MBProgressHUD
ABContactHelper
ASIHTTPRequest
CocoaLumberjack
EGOTableViewPullRefresh
fmdb
GTMBase64
JSONKit
SBJson (json-framework)
RTLabel
SDWebImage
SVPullToRefresh
three20
ziparchive
MBProgressHUD
ABContactHelper
ASIHTTPRequest
CocoaLumberjack
EGOTableViewPullRefresh
fmdb
GTMBase64
JSONKit
SBJson (json-framework)
RTLabel
SDWebImage
SVPullToRefresh
three20
ziparchive
微信
QQ
ASIHTTPRequest
FMDB
CocoaAsyncSocket
JSONKit
MBProgressHUD
OpenUDID
SBJson
SVPullToRefresh
百度地图
微博
ABContactHelper
AFNetworking
ASIHTTPRequest
DACircularProgressView
DDProgressView
DTFoundation
fmdb
JSONKit
SBJson
MBProgressHUD
MTStatusBarOverlay
OpenUDID
SFHFKeychainUtils
AFNetworking
ASIHTTPRequest
DACircularProgressView
DDProgressView
DTFoundation
fmdb
JSONKit
SBJson
MBProgressHUD
MTStatusBarOverlay
OpenUDID
SFHFKeychainUtils
人人
可以看到,这些大型的App的依赖都很混乱,所以稍微解释一下。这些大公司都有一个iOS团队来协同开发,团队成员的水平也参差不齐。有时由于历史原因,例如某个App的某个组件依赖了ASIHttpRequest,但之后的新人改用了AFNetworking,就造成上面这种比较混乱的库依赖关系。这就造成难以维护、代码冗余等问题了。所以,引入一个第三方库一定要慎重考虑,如果可能,尽量自己开发和实现相应的功能,第三方库尽量只作为参考。 小团队或者个人开发者可以不必过多考虑,开发速度优先。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2014年8月7号新增
系统基础库
Category/Util
sstoolkit | 一套Category类型的库,附带很多自定义控件 功能不错~ | ||
BlocksKit | 将Block风格带入UIKit和Founcation | ||
cocoa-helpers | 一些Cocoa的扩展 2年前的工程 | ||
CoconutKit | 一系列扩展和一些自定组件 | ||
STUtils | 一系列扩展包 | ||
PSFoundation | 一系列扩展 和功能增强 | ||
ConciseKit | 一系列宏定义 挺有意思 | ||
DTFoundation | 又一系列扩展。。。 | ||
BBBootstrap | 一些常见功能的扩展库 | ||
cooliris-toolkit | cooliris出品的基础工具库,从GoogleCode clone过来 | ||
BaseKit | 一套基础工具库 | ||
NSObject-Utility-Categories | 如题 | ||
NSArray-Utilities | 如题 | ||
aqtoolkit | 一些常用的东西 | ||
DLIntrospection | 一些NSObject的扩展 | ||
NSDate-Extensions | 如题日期 | ||
ALActionBlocks | 在UIControl上添加的Block事件 | ||
jrswizzle | 主要是swizzling | ||
moriarty | 一些还算有用的功能 | ||
QSUtilities | 一些基础库 (Instagram有用到) | ||
libextobjc | 一堆oc的扩展 | ||
PrettyTimestamp | 友好时间的扩展 | ||
ios-jail-break-detector | 检测是否越狱 有上线 | ||
crackify | 检测App是否被破解 | ||
NSBundle-OBCodeSigningInfo | 检查当前签名、Sandbox状态 MacOSX | ||
UIView-AnimatedProperty | 为UIView添加动画效果的property,有用到swizzle | ||
Block-KVO | Block风格的KVO~ | ||
MTDates | 一些Data的category | ||
CocoaSecurity | 常见的哈希、加密解密算法 | ||
sskeychain | 访问keychain 支持iOS Mac | ||
ABContactHelper | 访问联系人 | ||
UISS | 用JSON的风格设置UIKit样式 | ||
Underscore.m | 仿JS的underscore.js来写的,用于访问和处理数据 | ||
TICoreDataSync | 在不同设备间对CoreData进行同步 (iPhone iPad Mac) | ||
SoloComponents-iOS | 几个轻量的组件,没什么用,2年没更新 | ||
MAObjCRuntime | 将运行时包装成ObjC | ||
Objective-C-Generics | 通过宏定义勉强实现的范型 | ||
TBMacros | 一些常用的宏定义 | ||
NSString-Ruby | 为Ruby程序员带来的字符串相关功能 | ||
ObjectiveRecord | CoreData包装的活动记录 有RoR风格的API | ||
FastImageCache | 滑动时快速显示图片的库,Path开发 |
基础功能
mediaextract | 纯C的一些常用媒体文件的解析读取 | ||
objection | 一个估计是java ee写多了的人搞的。。注解依赖注入xx工厂之类的 | ||
Typhoon | IoC容器啊~~ | ||
HTKit | 一票乱七八糟的东西 | ||
StringScore | 模糊匹配字符串 查找某两个字符串的相似程度 | ||
RegexKitLite | 正则表达式库 (从SF.net mirror过来) | ||
FormatterKit | 一个NSString的格式化工具 | ||
TMCache | 一个内存Cache | ||
EGOCache | EGOImage里面的 Cache功能 | ||
HJCache | 一个缓存网络内容等的Cache | ||
RNCryptor | 加密解密相关 貌似更上流, note:去看一下他博客 | ||
ssziparchive | zip压缩 zip解压~ | ||
ZipKit | 一个ZipKit 从bitbucket Mirror过来 | ||
ZipKit | 如同ZipKit 改为ARC了 | ||
zipzap | Zip文件处理 底层为libz | ||
MTMigration | 版本升时执行一次 | ||
MTControl | jQuery风格touch事件绑定 | ||
storage | 快速、线程安全的I/O存储操作 | ||
CHCSVParser | CVS文件解析 | ||
YLMoment | 日期的解析,格式化等,支持多语言 | ||
CMUnistrokeGestureRecognizer | 各种奇怪的手势检测 | ||
EKAlgorithms.git | 常见算法的ObjC实现,包括排序、查找、数组、字符串、常用数据结构.. |
框架/封装
three20 | 一个曾经用得广泛的庞大的iOS开发框架 已不再维护 | ||
nimbus | three20替代品 又一个庞大的框架 | ||
BeeFramework | 一个基于MVC的框架, 比较大.. | ||
OmniGroup | 一套很庞大的库(OmniGroup) 支持Mac和iOS 更新迅速 | ||
ReactiveCocoa | 一套响应式编程的框架(Functional Reactive Programming) 支持Mac | ||
WebViewJavascriptBridge | WebView和Cocoa之间的事件传递 | ||
OCUDL | 自定义literals 有点意思~~ | ||
Kiwi | 一个Behavior驱动编程框架? (BDD)? | ||
Mantle | 一个Model层, 替代CoreData 可以生成Model对象~ Github官方出品.. | ||
MagicalRecord | CoreData的包装 简化代码 | ||
fmdb | SQLite的封装 | ||
KZPropertyMapper | 一个Model的封装,类JSON | ||
BlockInjection | 为某个方法注入一个Block 类似AOP | ||
NSObject-ObjectMap | JSON和XML包装到Object | ||
Ejecta | 通过OpenGL OpenAL来实现 WebCanvas JS等,很庞大~ | ||
FCModel | 为SQL程序员包装一下CoreData |
功能/封装
iOS-System-Services | 获取各种设备信息 包括硬件、网络、内存、进程等等 | ||
MKStoreKit | iAP用的库 | ||
CargoBay | 一个包装iAP StoreKit的库 | ||
RMStore | 很轻量的iAP包装 | ||
QuincyKit | 处理crach信息的库 只有上架应用才能用 支持Mac | ||
OpenUDID | 系统UDID替代方案 | ||
UIDevice-with-UniqueIdentifier-for-iOS-5 | 另一个UUID解决方案 但iOS7不能用了 | ||
uidevice-extension | 一系列UIDevice的扩展 有PrivateAPI 最新的工程在cookbook-code里 | ||
InAppSettingsKit | 包装了设置、URLScheme、Mail、Icon等东西 | ||
DTWebArchive | 允许访问剪贴板中的WebArchive格式富文本 | ||
routable-ios | inApp的URL定义 在App内打开自定义URL (解耦) | ||
JLRoutes | 复杂的URL Scheme解析和路由 | ||
Emoji | 访问Emoji图片的功能 | ||
PDKeychainBindingsController | 以类似UserDefault的方式访问Keychain | ||
CoreTextWrapper | 一个CoreText库的包装 | ||
Slash | 对AttributeString的封装 | ||
iHasApp | 检测某个App是否安装,集成了常见的URL Scheme |
网络
基础
AFNetworking | 很棒的HTTP网络通信库 | ||
asi-http-request | 一个HTTP库 同样很知名 性能好,稳定 但已不再维护 | ||
MKNetworkKit | 一个HTTP库 支持Mac 同样也不错 | ||
STHTTPRequest | 一个非常简单的http库,包装了NSURLConnection | ||
RestKit | 一个HTTP库 用来与RESTful的服务进行交互 | ||
AFIncrementalStore | 用CoreData和AFNetworking 将HTTP数据持久化 | ||
CocoaAsyncSocket | TCP/UDP包装库 支持Mac 很棒 | ||
Reachability | 判断设备网络情况 和苹果的很像 用ARC、GCD | ||
SDReachability | 判断设备网络情况 和苹果的很像,更友好? | ||
socket.IO-objc | 支持HTTP 长轮询 socket.io | ||
DTBonjour | Bonjour和Wifi | ||
XMPPFramework | XMPP客户端的库~ 支持Mac | ||
CocoaHTTPServer | 一个轻量的HTTP Server 支持Mac | ||
SocketRocket | WebSocket客户端~ | ||
MailCore | IMAP SMTP邮件协议 |
JSON
JSONKit | 性能非常好 (只比Apple原生的差一点) | ||
json-framework | SBJson 曾经用得很广泛的JSON 性能差 | ||
TouchJSON | 又一个JSON库 | ||
yajl-objc | 一个JSON库 可以支持流解析 支持Mac | ||
JSONModel | 一个构建JSON Model的工具和库 |
XML/Html
MWFeedParser | Feed/Atom解析 | ||
RSSKit | RSS Atom解析 | ||
ElementParser | 提供Html和XML的解析 | ||
hpple | 提供Html/XML解析 | ||
Objective-C-HMTL-Parser | 一个很简单的HTML解析 包装了下libxml | ||
RaptureXML | 一个简单的XML解析器 包装了libxml | ||
KissXML | 解析XML的库 包装了libxml | ||
TBXML | 快速解析xml的库 | ||
xmldocument | 又一个解析XML的库 | ||
XMLDictionary | 蛮好用的一个XML转NSDictionary的类~ | ||
XML-to-NSDictionary | XML转NSDictionary | ||
MMMarkdown | 一个渲染Markdown到HTML的小引擎 | ||
Ashton | 在NSAttrbuteString和Html之间转换 | ||