33 个 2017 年必须了解的 iOS 开源库

本文翻译自Medium,原作者为 Paweł Białecki


照片版权:(Unsplash/Markus Pe)

你好,iOS 开发者们!我的名字叫 Paweł,我是一个独立 iOS 开发者,并且是 Enter Universe 的作者。

接近两年前我发布了 27 个iOS开源库,让你的开发坐上火箭吧。这是我在这里最棒的文章了(根据 Medium 用户的反馈来看):

如果有 15.5 万人 很担心能否跨越网络上连山排海般的文字找到最棒的 iOS 开源库,那我来传递。

可以看一下我的 GitHub 主页,在这篇文章之后又星了超过 180 个 repositories,所以是时候更新我的 Medium 了。

跟 33 个 pod 打个招呼,它们会让你 2017 年的开发坐上火箭。点火发射啦。照片版权:(NASA/Joel Kowsky)

在文章的底部你会找到 TL;DR 即总结列表,列出了所有这些库,并且有相应的链接以及 CocoaPods 名字(如果有的话)。阅读过程中不需要记笔记。现在开始谈正事。

Instagram 程序员做的,IGListKit 是数据驱动的 UICollectionView 框架,为了构建快速和可扩展的列表。另外,它有助于你在 app 结束对于大量视图控制器的使用。看看这篇来自 Ray Wenderlich 的教程,关于如何在项目中实现这个库,或者读读这篇 Rodrigo Cavalcante 的文章,关于迁移现有的 UITableView 到 IGListCollectionView。

Realm 是一个直接运行在手机、平板和可穿戴设备内部的移动端数据库,不只是 iOS。如果你想试一点和 Core Data 不一样的,就用 Realm。许多人说它是一个现代化的、产品已经可以替代苹果原生的解决方案。

Moya 是你的 app 中缺失的网络层。不用再去想在哪儿(或者如何)安放网络请求,Moya 替你管理。

Swift 界 JSON 解析之王。

把这段代码:

if let statusesArray = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [[String: Any]],
let user = statusesArray[0]["user"] as? [String: Any],
let username = user["name"] as? String {
// Finally we got the username
}

变成了这段:

let json = JSON(data: dataFromNetworking)
if let userName = json[0]["user"]["name"].string {
// Now you got your value
}

自动替你完成了可选值的拆包。

Valet 允许你安全的在 iOS 或 OS X 钥匙链中存储数据,而不需要掌握任何钥匙链如何工作的知识。它支持在一台设备的多个应用(同一个开发者)间分享数据,以及在一个应用中在多个设备间利用 iCloud 进行分享。支持 Touch ID?没问题。

由谷歌制作(好吧,收购),应该是 iOS 最好的免费分析解决方案。追踪 app 使用量、用户活跃度、以及事件;设置用户属性;创建自定义受众;还有更多。

Facebook 为他们的 app Paper 创造了这个异步 UI SDK。如果你想让你的 app 总是每秒用 60 帧的速度来渲染,一定要看看这个库。这儿有一篇来自 Buffer 团队的故事:

用户安装了你的 app 之后,就会看见一个空白的 UITableView。

DZNEmptyDataSet 帮助你避免这个情况,它提供了 Empty Data Set Pattern 的默认实现。

Chameleon 是一个轻量、又强大的 iOS 颜色框架。它基于“软件应用程序应该轻松地实现功能,同时保持漂亮的界面”这个想法而创建。

有了 Chameleon,你就不再需要捣鼓 RGB 值、浪费时间搞明白 app 里正确的颜色组合、以及为文本能否在 app 里不同的背景下可以被看见而烦恼。

PermissionScope 是一个 Swift 框架,为了向用户巧妙地请求权限。它不只包含简单的权限请求 UI,还有统一的权限 API 可以告诉你任意给定的系统权限的状态,当然也可以轻松地请求它们。

FileKit 是一个 Swift 框架,提供了简单和富有表现力的文件管理。看看使用示例。

SwiftyUserDefaults 让 user defaults 用起来很愉悦,通过结合意味深长的 Swifty API 和静态输入的益处。在一个地方定义键,轻松地使用值类型,获得额外的安全性和方便的编译时检查,这些都是免费的。

Kingfisher 是一个轻量、纯 Swift 的库,可以从网络中异步下载和缓存图片。

Hero 是为了构建 iOS 试图控制器过渡动画的库。它在 UIKit 繁琐的过渡动画 API 之上提供了一个层,使得自定义过渡动画对于开发人员来说是一个轻松的任务。

Hedwig 是一个 Swift 包,提供了一组高级 API,可以让你轻松地发送电子邮件到SMTP服务器。如果你打算在下一个神奇的 Swift 服务器 app里发送 email,Hedwig 可能是一个好的选择。

DeviceKit 是 UIDevice 的值类型替换。轻松获取设备信息和电池电量。

漂亮的线图、饼图、条形图、分布图、气泡图、雷达图还有更多种类,这是一个图表库。

一个易于使用的UITableViewCell子类,允许显示带有多种转换的可滑动按钮。

只需几行代码,即可轻松创建漂亮,引人入胜的用户指导页体验。

Quick是 Swift 和 Objective-C 的BDD测试框架,和匹配器框架 Nimble 配合使用。

Natalie 生成基于 storyboard 文件的 Swift 代码,使 storyboard 和 segue 更容易使用。生成的文件减少了用字符串作为 Segue 或 Storyboard 的标识符的情况。

对Swift中的 reactive 编程感兴趣?这里是RxSwift。


GDPerformanceView在状态栏上方显示 FPS,CPU 使用情况,app 和 iOS 版本,并通过 delegate 报告 FPS 和 CPU 使用情况。

Alamofire 是用 Swift 写的 HTTP 网络库。

SwiftyStoreKit 是一个轻量的 app 内购框架,支持 iOS 8.0+,tvOS 9.0+和macOS 10.10+。

Swift 里直观的日期处理。

Swift 里加密相关的帮助函数实现。

完全自定义的 iOS 日历库,兼容 Objective-C 和 Swift。


模仿 Twitter 的图片浏览器。

PromiseKit 是对于任意有 swiftc 的平台的周到和完整的 promises 实现,它有优秀的 Objective-C 桥接和赏心悦目的 iOS、macOS、tvOS 和 watchOS 专业化。

Ensembles 是一个 Objective-C 框架——也支持 Swift —— 它扩展了Apple的Core Data框架,为Mac OS和iOS添加了点对点同步。多个 SQLite persistent store 可以通过文件同步平台(如iCloud或Dropbox)耦合在一起。该框架可以容易地扩展以支持能够在设备之间移动文件的任何服务,包括自定义服务器。

这些库的 TL;DR 列表,供快速查询:IGListKit [UICollectionView 框架] -> pod 'IGListKit', '~> 2.0.0

Realm [移动端数据库] -> pod 'RealmSwift’

Moya [抽象网络层] -> pod 'Moya', ‘8.0.0’

SwiftyJSON [JSON 解析] -> pod 'SwiftyJSON’

Valet [钥匙串帮手] -> pod 'Valet’

Firebase Analytics [分析] -> pod 'Firebase/Core’

AsyncDisplayKit [异步 UI SDK] -> pod 'AsyncDisplayKit’

DZNEmptyDataSet [空状态模式] -> pod 'DZNEmptyDataSet’

Chameleon [扁平化颜色框架] -> pod 'ChameleonFramework/Swift', :git => 'ViccAlexander/Chameleon'

PermissionScope [iOS 权限框架] -> pod 'PermissionScope’

FileKit [文件管理] -> pod 'FileKit', '~> 4.0.0’

SwiftyUserDefaults [user defaults 帮手] -> pod 'SwiftyUserDefaults’

Kingfisher [下载图片] -> pod 'Kingfisher', '~> 3.0’

Hero [自定义试图控制器过渡动画] -> pod 'Hero’

Hedwig [发送 email]

DeviceKit [设备信息] -> pod 'DeviceKit', '~> 1.0’

Charts [图表] -> pod 'Charts’

MGSwipeTableCell [可以滑动的 table cells] -> pod 'MGSwipeTableCell’

RandomKit [随机生成数字] -> pod 'RandomKit', '~> 3.0.0’

ResponseDetective [调适网络请求] -> pod 'ResponseDetective’

Onboard [用户指导页] -> pod 'Onboard’

Quick + Nimble [BDD 测试] -> pod 'Quick’

pod 'Nimble’

Natalie [从 storyboard 生成代码]

RxSwift [reactive 编程] -> pod 'RxSwift', '~> 3.0’

GDPerformanceView [实时 FPS and CPU 用量] -> pod 'GDPerformanceView-Swift', '~> 1.1.0’

Alamofire [网络] -> pod 'Alamofire', '~> 4.3’

SwiftyStoreKit [app 内购] -> pod 'SwiftyStoreKit’

Timepiece [date 帮手] -> pod 'Timepiece’

CryptoSwift [加密] -> pod 'CryptoSwift’

FSCalendar [日历] -> pod 'FSCalendar’

ImageViewer [模仿 Twitter 的图片查看器] -> pod 'ImageViewer’

PromiseKit [promises] -> pod 'PromiseKit', '~> 4.0’

Ensembles [Core Data 同步] -> pod 'Ensembles’

感谢阅读,这不是你在 Medium 上可以读到的最短的文章!如果你喜欢这篇文章,点击下面的 ❤️ 来把它分享给你的朋友,这样更多的人会发现这些非常棒的库。你也可以 在 Twitter 上 follow 我,,那儿我发的基本都是 iOS 开发。谢谢!hey,还有一件事,如果你已经注意到我了,可以看看我现在的一个并不属于 iOS 编程世界的主要项目:

对科普,业余天文学和太空探索感兴趣?认识一下 Enter Universe(是的,它是直接可以点击的!)。

感谢阅读!点赞,分享,关注,然后下次再见!

-------------以下为原答案-------------

本文翻译自Medium,原作者是Paweł Białecki,原文27个iOS开源库,让你的开发坐上火箭吧

你不会想错过他们,真的。

我爱开源。

并且我喜欢开发者们,把他们宝贵的私人时间用来创造神奇的东西,然后他们会和其他人分享并且不求回报。开源作者和贡献者,你们是最帅的。感谢你们一直以来的工作。

所以,因为我是一个分类整理狂,这是我从iOS开源库中选出的最喜欢的。这些项目的顺序都是随机的,全部都很酷。

绝大部分库是支持CocoaPods的,所以把它们添加到你的Xcode项目中轻而易举。

文章的尾部你会看到一个太长不看的版本——一个简单的列表,只有标题和到项目的链接。如果你发现这篇文章是有用的,把它和你的iOS开发者兄弟们分享。好东西需要被传播。DZNEmptyDataSet

这本应该是iOS中一个标准、内置的解决空table和collection view的方式。默认的如果你的table view是空的,屏幕就是空的。但这不是你能提供的最好的用户体验。

用了这个库,你只需要遵循一系列协议,iOS会优雅地接管你的collection view并且会正确、好看地显示给用户信息。很明显,每个iOS项目都应该采用。


这是完全可自定义的。

CocoaPods:

pod ‘DZNEmptyDataSet’GitHub

2. PDTSimpleCalendar

你的app是否需要一个简单、好看并且有效的日历组件呢?

现在你有了——PDTSimpleCalendar很有可能是最棒的iOS日历组件。有很多方式来自定义它,逻辑有效而且好看。

CocoaPods:

pod 'PDTSimpleCalendar'GitHub

3. MagicalRecord

他们说,Core Data很简单。他们说,它很好很简单。哈哈,你是认真的吗,苹果?一顿陈词滥调的代码被添加到每个项目里,这真的不够优雅和简单。更不用说添加、移除和更新很多实体,保存上下文,为不同的环境创建不同的Core Data栈,等等等等。我当然很喜欢Core Data,但是苹果真的可以通过一个简单的好方法来简化它——MagicalRecord方法。

MagicalRecord的工作就像一个Core Data的包装,并且向开发者隐藏了所有无关的东西。如果你曾经用过活跃纪录模式(例如Ruby on Rails),那你已经掌握它了。如果你在app里用Core Data的话真的真心推荐这个库。CocoaPods:

pod 'MagicalRecord'GitHub

4. Chameleon

如果你读到了这一点,你是一个很好的程序员,而不是一个设计师。这就是为你准备的。


Chameleon是iOS的一个颜色框架。它用好看、摩登的扁平化颜色扩展了UIColor。它也给了我们能力来创建调色板,里面是我们自己定义的颜色。它可以做很多其他事,探索readme文件。如果你想要好看的应用程序,快把这个库加到你的项目里吧。

Chameleon基础扁平化颜色

CocoaPods:

pod 'ChameleonFramework'GitHub

5. Alamofire

Alamofire是一个用Swift写的优雅的网络库。你曾经用过AFNetworking吗?ALamofire是它的弟弟。年轻也更有才华,当然啦(AFNetworking是用Objective-C写的)。


需要做网络相关比如下载、上传、获取JSON等等?Alamofire是为你准备的。GitHub上8000人的选择不会错。CocoaPods:

pod 'MagicalRecord'GitHub

6. TextFieldEffects

你不觉得标准的UITextField有一点无聊吗?我也是——所以对TextFieldEffects说hello吧!我不会写太多,我只会展示你一些这个库可以做的例子:

是的,这些就是简单的易用的控制器。你甚至可以用storyboard里的IBDesignable!

不幸的是这个库不支持CocoaPods(如果你来自未来,而这在一些时间之前改变了的话,请在Twitter上让我知道),但它支持Carthage。你也可以简单的从GitHub下载项目,并且把它添加到你的workspace里。Carthage:

github "raulriera/TextFieldEffects"GitHub

7. GPUImage

你曾经创建过一个摄像机app吗?如果没有,看完这个库你就肯定会的。


GPUImage可能性

GPUImage提供我们一个GPU-accelerated摄像头效果(图像和视频都可以),熊熊燃烧般的速度。App Store里有几百个app使用这个库——其中就有我的一个:


我的一个app中用的GPUImage

GitHub上8869个收藏并且还在持续增加。CocoaPods:

pod 'GPUImage'GitHub

8. iRate

在App Store获得更多评价最好的方式是什么?我没有明确的数据来回答这个问题,但如果要我来猜测的话,我会说只要简单的询问用户就可以了。也许这是一个老套的方式——大部分开发者现在创建自定义的app内置提醒——但如果你没有时间或者不想所有事都从头做起,用iRate比不用要好。并且这就是iRate——一个小库,你包含在你的项目里并且忘记询问用户去评价了——iRate会自动替你完成,在合适的时间里。CocoaPods:

pod 'iRate'GitHub

9. GameCenterManager

喜欢或讨厌一个人,在这种情况下管理Game Center非常简单,只需要一点我们最著名的反模式的帮助(你的游戏里只有Game Center,对吧?)


诚实地说,在iOS里香草管理Game Center并不是那么困难,但用这个库就是简单和快速。更好的是好的敌人。


我的一个游戏里就用了它,真是一个愉悦的体验。CocoaPods:

pod 'GameCenterManager'GitHub

10. PKRevealController 2

这是一个真正的宝石,我最喜欢的iOS控件之一。PKRevealController是一个可滑动的侧边栏(向左、向右或者都可以),用你的手指来滑动(或者只通过点击按钮,但这样就没有滑动酷了)。


我使用过一些其它库,提供这种空间,PKRevealController是最好的。设置起来很简单,高度可自定义,手势识别非常非常好。它可以在iOS SDK中包含作为一个标准空间,真的。CocoaPods:

pod 'PKRevealController'GitHub

11. SlackTextViewController

你曾经用过Slack iOS app吗?如果你在一个更大的软件公司工作的话,很有可能回答是。对于没有这么回答的人——Slack很坚硬。Slack的iOS app也是,特别是对于很好的、自定义的文本输入控件…就是你现在有的——你的app里可以用的代码!

自增长文本域?对的。手势识别,自动填充,多媒体粘贴?对的。简单的易用的?对的。你还可能需要什么?CocoaPods:

pod 'SlackTextViewController'

RETableViewManager会帮助你动态创建和管理你的table view,都用代码。它提供我们预先定义好的cell(布尔型、文本、日期等等。——看下面的截图),你也可以创建你的自定义视图,和默认的一起使用。


左侧截图好老套!

这些你都可以在storybard里做而不需要这个库的帮忙,但有的时候代码比可视化编辑器更简单。CocoaPods:

pod 'RETableViewManager'GitHub

13. PermissionScope

有用的库,通过在询问用户之前提示用户需要系统许可带来更好的用户体验。高度可接受程度->更多用户活动使用app->更好的留存->更好的数据->更多的下载。被高度推荐的pod。


CocoaPods:

pod 'PermissionScope'GitHub

14. SVProgressHUD

这个图片正在被正确的加载,不会等很久也不需要刷新页面。这就是SVProgressHUD在你的app里看起来的样子。如果你需要自定义等待指示,这里就有一个(很有可能就是最好的)。

CocoaPods:

pod 'SVProgressHUD'GitHub

15. FontAwesomeKit

Font Awesome很酷,用这个库你可以轻松地添加字体到你的项目里,并且在多种方式里使用它。


CocoaPods:

pod 'FontAwesomeKit'GitHub

16. SnapKit

喜欢auto layout?你应该!

至少在storyboard里创建的时候。

用代码创建constraints是痛苦的,如果没有帮助的话,但幸运的是SnapKit在这里,使用它你可以轻松写你的constraints,声明方式。看看吧。


CocoaPods:

pod 'SnapKit'GitHub

17. MGSwipeTableCell

另一个UI组件,在很多app里都常见,苹果应该考虑在iOS标准库里加入类似的东西。可滑动的table cell,这是这个pod最好的描述。最好的一个。

这些只是3个动画种类,还有很多。探索readme文件。CocoaPods:

pod 'MGSwipeTableCell'GitHub

18. Quick

Swift里的单元测试,给Swift(好吧,要给Objective-C),和Xcode融为一体。如果你是一个Objective-C粉,我会推荐你Specta而不是这个,但对于Swift Quick很有可能是最好的。


CocoaPods:

pod 'Quick'GitHub

19. IAPHelper

app内购带给我们很多陈词滥调的代码,用这个库就不需要了,把最有关交易金钱的普遍的任务从iOS用户到你的(或者你的公司的)钱包简单包装起来。CocoaPods:

pod 'IAPHelper'GitHub

20. ReactiveCocoa

好吧,这里我们有一个小怪兽。


ReactiveCocoa并不是很小、易用的项目,就像这个列表里其它项目一样。ReactiveCocoa带给我们一种完全不同的编程方式/结构,基于值的信号和流。这是完全的头脑风暴,首先你需要忘记你曾经学习的来理解它是如何工作的。这不是一个简单的任务,但是是有回报的。

这不是一个合适的地方来教你使用ReactiveCocoa,但我会给你一些好的资源,如果你感兴趣的话。Getting Started with ReactiveCocoaReactiveCocoaReactiveCocoa Tutorial - The Definitive Introduction: Part 1/2CocoaPods:

pod 'ReactiveCocoa'GitHub

21. SwiftyJSON

让Swift里的JSON解析更简单。CocoaPods:

pod 'SwiftyJSON'GitHub

22. Spring

做动画更简单、可链和声明。


CocoaPods:

pod 'SwiftyJSON'GitHub

23. FontBlaster

在app里加载自定义字体更简单。CocoaPods:

pod 'FontBlaster'GitHub

24. TAPromotee

交叉推销你的app是最棒的销售策略之一,你可以在它们中免费实现。用这个库非常简单,你不再能为自己辩解为什么不用它——增加TAPromotee到你的podfile,配置、然后免费享受更多下载。


CocoaPods:

pod 'TAPromotee'GitHub

25. Concorde

在你的app加载很多JPEG吗?用Concorde你可以加载地更好看。有进度的方式。

CocoaPods:

pod 'Concorde'GitHub

26. KeychainAccess

管理钥匙串权限的小帮手库。



CocoaPods:

pod 'KeychainAccess'GitHub

27. iOS-charts

最后但重要的——iOS图表库!很简单和有效,我不会在这儿写太多——滑动到下面去看在你的app用它可以干嘛。

是的,所有东西都是可用的,作为一个可放进去(好吧,也许是“可写进去”)的组件。

不幸的是目前还没有CocoaPods支持,所以你需要手动拖动项目到你的Xcode workspace中。所有库的太长不看列表,快速访问:

1. DZNEmptyDataSet [UI, 空table view解决方案]

3. MagicalRecord [Core Data帮手实现活动记录模式]

4. Chameleon [UI, 颜色框架]

5. Alamofire [Swift网络]

6. TextFieldEffects [UI, 自定义外观text fields]

7. GPUImage [快速图像处理]

8. iRate [获得用户评价]

9. GameCenterManager [轻松管理Game Center]

11. SlackTextViewController [UI, 高度自定义text field]

12. RETableViewManager [用代码动态创建table view]

13. PermissionScope [UI, 巧妙的提前问用户要系统许可]

14. SVProgressHUD [UI, 自定义等待菊花]

15. FontAwesomeKit [轻松地添加酷字体到你的app中]

16. SnapKit [用代码轻松auto layout]

17. MGSwipeTableCell [UI, 可滑动的table view cells]

18. Quick [Swift 单元测试框架]

19. IAPHelper [app内购封装帮手]

21. SwiftyJSON [Swift JSON库]

22. Spring [动画框架]

23. FontBlaster [轻松在app中加载自定义字体]

24. TAPromotee [在你的app中交叉提示,置入界面]

25. Concorde [下载和解码进度化JPEGs]

27. iOS-charts [漂亮的图表库]

感谢阅读,真是一个长列表!如果你认为创建是有价值的,请分享它,通过点击文章下方的分享按钮——更多人会从中受益。并且如果你是一个Meduim用户,请点击推荐按钮——它会鼓舞我创建更多iOS开发文章!

One more thing——如果你在读这篇文章,你很有可能是个iOS开发者。很多iOS开发者也是iPhone用户——所以我有一些你可能感兴趣的东西。

你也可以在推特上follow我,我最经常讨论iOS开发的地方。