http://www.zhihu.com/question/22914651
GitHub 上都有哪些值得关注学习的 iOS 开源项目?
64 个回答
1. ReactiveCocoa: ReactiveCocoa/ReactiveCocoa · GitHub:
GitHub自家的函数式响应式编程范式的Objective-C实现,名字听着很高大上,学习曲线确实也比较陡,但是绝对会改变你对iOS编程的认知,首推之。
2. Mantle: Mantle/Mantle · GitHub:
又是GitHub自家的产物,轻量级建模的首选,也可以很好的配合CoreData工作。
3. AFNetworking: AFNetworking/AFNetworking · GitHub:
iOS7之前,苹果自带的网络库有多难用!matt大神的AFNetworking绝对可以解放你。使用苹果的NSURLRequest及iOS7的NSURLSession,清晰的架构,足够的文档,可以认为是第三方开源库的楷模了。
4. BlocksKit: pandamonia/BlocksKit 路 GitHub
本人相当偏爱Functional Programming,Objective-C中的block绝对满足我的口味。但想用好block也不是很容易,如果对block有爱,就请使用这个库吧。
5. Nimbus: jverkoey/nimbus · GitHub
第一次关注nimbus是因为Facebook的Three20开源库。可惜Three20库已死,主要作者跳出来,写了nimbus。
6. pop: facebook/pop · GitHub
facebook出品的paper,动画效果太好了,赶超apple的原生app一大截。pop就是paper的动画库!
7. GPUImage: BradLarson/GPUImage ยท GitHub
iOS7出来时,很多好看的效果,其实都是对图像的各种处理(比如模糊效果)。图像处理看来以后也是iOS开发的必备技能之一了。而GPUImage,就是能快速处理各种图像效果的利器!
==========================================
好吧,我承认第一次知乎的回答有点惊喜,没想到这么多人点赞 ^_^
大部分iOS的第三方库都是在苹果的基础框架之上的产物,所以基础很重要,有时间看看WWDC的历年视频,是不错的选择。
最近还是在深入学习ReactiveCocoa,看ReactiveCocoa的源码。对响应式编程还是有很多期待的,有时间也要重温函数式编程(比如Haskell),或者把响应式编程的公开课( Coursera.org)看完。编程范式的选择可以说是相当重要的。未来是多核+并发的时代,函数式编程无疑是更好的选择。
iOS的UI也很重要,但是如果理解apple的CoreAnimation及CoreGraphics框架,大部分UI基本是没问题的。当前,iOS7的各种炫酷效果,也需要对图像的处理有一定理解。说到图形学,OpenCV是一个不错的选择,而OpenGL也是另一个不错的方向(推荐的公开课: Interactive 3D Graphics Course With Three.js & WebGL)。
当然最重要的,还是计算机的各种基础知识了吧,知其然,知其所以然,才是正道~
以上是个人的经验,欢迎交流讨论~
看了上面的答案,值得关注学习的开源项目其实还真没有几个。
首先,学习这类开源项目的主要目的是为了实现产品汪需求,如果不是这个目的,完全可以看 Explore GitHub,当前最火的开源项目都在这里,当然你需要过滤一下语言。
好了,介绍几个希望能帮助到你。
普通的iOS开发项目基本就是网络、本地存储+一些狂拽炫酷的动画,想想看是不是?
-------------------- 割 ---------------------
网络
(替代 EGOTableViewPullRefresh和 LoadMoreTableFooterView)
网络请求首选AFNetworking,无数个项目证明,只选对的。
解析JSON数据推荐JSONKit,而且优势相当的明显,解析速度拉SBJson好几条长安街。

以前发现过好多次由于SBJson引起的crash,如果还在用SBJson,那请继续。
Reachability也要用起来,时不时检查一下网络状况,然后配合MBProgressHUD告知用户「亲,你丫现在没网啦,别特么戳了。 」
<del> EGOTableViewPullRefresh是用来下拉刷新的啦,同时配合</del>
<del>上LoadMoreTableFooterView(加载更多)就齐活了。</del>
使用 SVPullToRefresh处理刷新。
-------------------- 割 ---------------------
本地存储
第一次开发中引入数据库的时候使用过FMDB,其实蛮强大的,只不过需要写sql语句,select * from user(从user表中筛选出全部数据)。
后来慢慢的抛弃了它,一点也不面向对象。好吧,其实我是想说还是CoreData好用,至少你不会因为不会写sql而没法保存数据。(接手过的项目竟然还有全部存NSUserDefault的,真是没脾气了)
看过一篇对比CoreData和FMDB查询大数据性能的文章,FMDB赢了,不过还是推荐用CoreData。
至于SDWebImage,同样也是早期使用过,和SBJson一样,会有crash,尽管用它来缓存图片很方便,但是我们有更好的解决方案,同样不推荐。
年前的项目中CTO推荐了我们TMCache,tumblr团队使用的一个缓存项目(科普时间:tumblr是国外的轻博客服务,随后国内就出现了点点等同期产品),有时间可以去了解一下,目前应用的不是特别多,当然啦,对我来说。
-------------------- 割 ---------------------
动画效果
上面说到的没网了提示用户的MBProgressHUD,用起来吧,当然还有很多转菊花(loading)的开源项目,同样是我使用最多的。

pop是facebook paper使用的动画效果,开源了出来,很赞啊,不过应用到项目中的可能性很低。。。太特么炫酷了。
-------------------- 割 ---------------------
其他
第三方库管理工具, CocoaPods,有时间可以学习一下。 CocoaPods GitHub
Github repos (iOS) 这是一个收集了很多iOS开源项目的页面,给作者赞一个。
有不完善的地方欢迎指出,我会及时补充上来。
首先告诉你github上搜索所有库的方法(trending只显示25个):在搜索框输入 stars:>1 ,回车,再选择语言,和排序(可以试下most stars)。
以上方法适合没有目标的学习,你可以自己挑感兴趣的看。不过,我推荐的还是,需求为主导,需要用到什么库,就去找什么库。先分析该功能自己会怎么去实现,然后看看开源库是怎么实现的,相互印证,这样子进步很快,关键是印象深刻。
然后下面是我觉得不错的一些开源项目:
- nimbus: 框架,文档很齐全,好像比Three20要火一些了。 jverkoey/nimbus · GitHub
- AFNetworking: HTTP网络通信库,不多说,超棒。 AFNetworking/AFNetworking · GitHub
- RestKit: HTTP库 用来与RESTful的服务进行交互 。 RestKit/RestKit · GitHub
- JSONKit: json库,传说比官方的性能要好,我自己没验证。 johnezang/JSONKit · GitHub
- SDWebImage: 异步加载网络图片的库,使用超级简单,功能超级强大,也没得说,值得看源代码。 rs/SDWebImage · GitHub
- cocos2d-iphone: 2d游戏引擎,想开发游戏可以学学。 cocos2d/cocos2d-iphone · GitHub
- MBProgressHUD: 很实用的HUD,和官方几乎开不出区别。 jdg/MBProgressHUD · GitHub
- TMCache: 缓存数据,可以缓存到memory或者disk,个人觉得挺不错的。 tumblr/TMCache 路 GitHub
ps. 第三方库管理工具,Cocoa Pods非常好用,方便快捷。 http://cocoapods.org/
===============================================
我个人觉得类似UI效果的东西,就不需要自己去整理记录了,推荐几个网站:
1. Code4App,这个网站刚起步的时候我基本不上,习惯于自己使用书签整理,不过后来发现里面的编辑非常用心,而且整理归纳很有序,可以节省我大量的时间,我才开始使用
2. cocoacontrols.com,这个应该是code4app的国外原型,我很早之前就经常上,里面的内容做的也很不错,总体项目水平选的要比code4app高上一些
3. 开源中国,国内很不错的开源社区,上大学的时候就一直在看了
===============================================
iOS值得学习的类库的话,我可以推荐几个我自己认为写的并且读过的一些源码,这些源码都对我自己在进行iOS开发过程中有很多的帮助和提升,希望能给你提供一些有帮助的地方:
一. XMPPFramework: robbiehanson/XMPPFramework · GitHub,这个如果是做过聊天的通信通信可能会用过,本人因为工作原因,两年前第一次接触这个代码,就对这个大牛非常崇拜。代码值得学习的东西非常多。作者在开发这个框架的时候,同时也开发了非常多的基础库,都非常值得学习。
1. 首先是插件是框架设计,设计的非常优雅,功能强大易扩展,而且写的很简洁,易懂。
2. 作者基于GCD设计的一对多的delegate机制--GCDMulticastDelegate,后来在项目中我尝试使用过这个框架,多个模块依赖于某一个核心组件,使用这个类,可以把耦合问题降到很低,值得推荐。
3. CocoaAsyncSocket, robbiehanson/CocoaAsyncSocket GitHub,这个是让本人又无比崇拜的一个类库,作者根据iOS平台的特性,实现了两套异步socket网络库,一个基于GCD与POSIX Socket开发的socket异步网络库,另外一个是使用CFSocket与runloop实现,我曾经尝试去阅读这个类库,不过后来发现自己能力实现有限,只能看个大概的轮廓。
4. CocoaLumberjack, CocoaLumberjack/CocoaLumberjack GitHub,这个是作者写的一个log系统,实现了分级别的日志系统,不过本人没有使用和学习这个,我们项目没有那么复杂,我是自己使用宏和NSLog写了一个分级别显示的日志系统,只能用于打印,不能像这个日志可以写入文件。
5. KissXML robbiehanson/KissXML GitHub,我们平时一般使用json格式的数据,除了组装xmpp聊天消息,对这个没有怎么使用过,不敢评论。
二. AFNetworking: AFNetworking/AFNetworking · GitHub,毫无疑问,最火的网络库,本人11年开始做iOS开发的时候,是使用ASI的,一直没有使用过AFNetworking,直到12年的时候,发现ASI作者基本不更新ASI之后,才开始关注这个项目。ASI是基于CFSocket实现的HTTP网络库,作者功底之强,跟上面的老大一样让人拜服,而AFNetworking是基于NSURLConnection,以及iOS7之后出现的NSURLSession为基础开发的。由于AFNetworking基于Apple的封装,少了很多需要自己维护的地方,而且整个项目也会非常整洁,可能效率上也会高于ASI的封装。建议可以把整个项目过一遍,框架设计思想不用说了,里面也可以学习到非常多的技术点。
1. NSOperation的封装与使用,面试的时候很多人只知道apple有NSOperation这个技术,但是实际上使用的机会并不多,只知道是个队列,但是对于如何使用并不知晓。可惜的是,这个只提供了如何使用进非并发Operation的封装。完整学习的话,可以学习ASI中对operation的使用,会更完整一些。
2. HTTP请求的封装,如何封装POST请求,如何进行URL encode,如何使用NSInputstream,可以对HTTP理解有个突破。同时可以学习一下NSURLSession与NSURLConnection的使用。
3. Runloop的使用,建议与ASI实现同步请求的方法进行对比,有条件的话可以跟android的looper机制进行对比,说不定什么时候会使用到,实际xmppframework中也有用到,只是不是核心机制,而且本人没有研究过。本人从11年做iOS到现在,只是使用到过一次,是需要自己实现一个OpenGL的渲染队列,由于需要在子线程中做渲染,无法使用CADisplaylink。刚开始其实是使用GCD的,但发现即使我创建一个dispatch_queue_t,也无法保证block是在子线程中被执行,而且还有较为复杂的内存管理问题,最后使用NSThread与runloop才解决问题。
三. SDWebImage: rs/SDWebImage · GitHub,不需要多说,这个框架写的非常简洁,也是读这个框架,让我明白什么是缓存机制,以及如何做面向对象的封装设计,我之后有的场景也需要自己去设计一些cache,每次都是借鉴这个框架实现,能力有限,自己实在想不出比这个设计思路好的地方,只能借鉴别人的做法。我觉得这个项目还有一个非常值得推崇的地方,就是对category的使用,这个是我今年之前一直忽略的非常重要的设计模式,太适合团队开发了,<cocoa设计模式>上讲的东西,做到现在我才明白怎么回事,可以对比Android使用网络图片,你会发现OC的category真方便。
四.EGOTableViewPullRefresh: enormego/EGOTableViewPullRefresh GitHub,本来不打算说UI方面类库的,但是这个必须说一下。建议读一下这个的源码,以及如何使用,对iOS UI开发有很大提升,这个类库写的很简洁,可以帮助理解delegate机制以及Protocol的概念,还能加深对UIScrollView的理解,推荐读一下。
五. TheElements: TheElements,这个是apple的官方示例代码,每次我朋友问题如何学习iOS的时候,我总会推荐这个samplecode,这个代码让我对iOS开发的理解有个很大的突破。里面并没有使用大量的storyboard和xib隐藏细节,并不是说只能用纯代码做事情,而是可以让人看到里面很多的实现细节,加深理解。读这个代码,我才明白什么是apple说的MVC,还有一个xcode工程到底是如何从main函数运行起来的,非常强烈推荐阅读学习。
===============================================
一不小心写了这么多,擦,但好像并没有说太多的开源工程项目,如果楼主是需要开源项目资讯的话,可能提供不了多少帮助,见谅。这个更多的是我自己的学习开源项目一部分总结,我也没想到会写这么多,最后希望能楼主带来一些小帮助。
因为知乎的编辑器不支持表格渲染, 所以还是建议到 GitHub 查看.
若有任何好建议欢迎通过微博跟我联系
GitHub 地址: trip-to-iOS

把公司项目的网络模块参考@反革命攻城狮CasaTaloyum 大大的方案重新封装了一遍,用起来特别爽。大家可以看看Casa大大的这篇文章有详细介绍: iOS应用架构谈 网络层设计方案 而且还有源码: casatwy/RTNetworking · GitHub
下面回答问题: (所有库名,均在直接在github或cocoapod直接搜索得到, 就不引用链接了)
AFNetworking:目前最流行的网络请求库了,不解释。
AFDownloadRequestOperation:对AFNetworking的断点续传的补充
MagicalRecord:很牛逼的coredata的封装,支持多纯种,4600多个star足以说明其实用性。3.0版本修复了原来2.0版本多线程的一些问题。
JSONKit:json解析,解析效率比较高。
JSONModel:json转换成model,自从使用这个封装json,妈妈再也不用担心json解析crash了。谁用谁知道。(注:Mantle上面也推荐了,和JSONModel差不多,不过我没用过,不作评论)
SVProgressHUD:简单好用的Loading库,可以有个小icon。
MBProgressHUD:功能很强大,提供了graceTime, minShowTime可以在加载很快时,不显示loading。
GVUserDefaults:如果你使用UserDefaults来存储数据,请使用这个,直接声明property就行了。
iOSBlocks:使用它,使你很好地理解为什么:“block实现了编程之美”
UIView-Positioning:UIView的坐标设置变得那么简单,three20时,就有类似的一个category。
FXNotifications:支持block的NSNotification,iOSBlocks的补充。
KIF:测试库,QA可以了解一下。
CocoaHTTPServer:在客户端搭建轻量级服务器,用于文件传输等功能。
CocoaLumberjack:很好一个日志输出控制库。
一些比较流行的UI。(直接引用原文内容了,没啥好解释的)
iCarousel: A simple, highly customisable, data-driven 3D carousel for iOS and Mac OS
FPPopover:An alternative API for NSNotificationCenter that doesn't suck
RESideMenu:iOS 7 style side menu
值得深读源代码的:
pop: facebook开源动画库,最近很火
Tweaks:facebook开源库,可用于配置UI之类,感觉可以运用在换肤。
ReactiveCocoa:cocoa响应式编程,新的一种代码风格,非常值得学习。
好了,暂时就这些,得去吃饭了。
======================================
补充一个github地址:https://github.com/vsouza/awesome-ios
跟进实时github 趋势:Trending Objective-C repositories on GitHub today · GitHub
2048 iOS版本 ik/2048 · GitHub
2048 [Siwft] austinzheng/swift-2048 · GitHub
2048 [ObjC] austinzheng/iOS-2048 · GitHub
flappy bird[Siwft] fullstackio/FlappySwift · GitHub
==================================================
iOS8特性学习实例集合[ObjC] shu223/iOS8-Sampler · GitHub
iOS8特性学习,目前已经有28Day的[Swift] ShinobiControls/iOS8-day-by-day · GitHub
==================================================
[广告] iOS走马观花-iOS开源代码快速浏览
以下是我整理的iOS开源App的一部分,其中不乏有许多不错的项目,后续更多都会整理在:iOS开源项目 - MobDevGroup上
- iBBS-Swift
一款用Swift写的BBS客户端
- SmallDay
用Swift 实现的高仿小日子
- Swift-Radio-Pro
Professional Radio Station App, created w/ Swift 2.0
- zulip-ios
Dropbox收购公司内部社交服务商Zulip,然后全部开源,这是iOS App
- DesignerNewsApp
Build a Swift App as a designer
- firefox-ios
Firefox for iOS
- iphone-app
开源中国的iPhone客户端源码
- Git@OSC
Git@OSC iPhone 客户端,方便用户查看Git@OSC的项目以及简单的操作issue等
- Coding
Coding官方客户端 GitHub地址
- Coding iPad版
Coding官方客户端
- iOSSF
SegmentFault官方App
- ioctocat
GitHub第三方客户端
- iTunesPicker
类似AppStore的一个应用
- Doppio
寻找最近的星巴克
- swiftmi-app
http://swiftmi.com app版本 采用Swift实现
- Cheddar
一个日程管理的App
- BeeFancy
仿Fancy官方APP的WIREFRAME,基于BeeFramework
- Anypic
类似于Instagram的一款App
- SXNews
模仿网易新闻做的精仿网易新闻
- iReddit
Reddit iPhone客户端
- readdit
Reddit iPad客户端
- 豆瓣相册
Slowslab iOS应用 豆瓣相册 精选集 开源项目
- ChatSecure-iOS
Objective-C写的XMPP聊天应用
- NotificationChat
Objective-C写的完整的聊天应用
- Swift-ZhihuDaily
用Swift实现的仿知乎日报应用
- FakeZhihuDaily
仿知乎日报iOS客户端
- edhita
用Swift实现的iOS平台开源文本编辑器。
- ruby-china-for-ios
RubyChina官方客户端
- Meizi
豆瓣妹子图iOS客户端
- HackerNews
用Swift写的Hacker News 阅读 iOS App
- SwiftHN
另外一个用Swift写的Hacker News 阅读App
- News-YC
Hacker News阅读类iOS App
- twidere
twitter 第三方客户端
- 2048
用SpriteKit实现的2048游戏
- PlainReader
一款 iOS(iPhone + iPad) 新闻类客户端,内容抓取自 http://cnBeta.com
- swift-2048
用Swift实现的2048游戏
- iOS-2048
用Objective-C实现的2048游戏
- FlappySwift
用swift实现的flappy bird游戏
- ECMobile_iOS
基于ECShop的手机商城客户端
- kxmovie
用ffmpeg写的iOS视频播放器
- wikipedia-ios
维基百科官方App, 已上架
- Sol
漂亮的扁平风格的天气App
- Project-RainMan
用Swift写的天气类App
- SwiftWeather
用Swift写的天气类App
- v2ex
v2ex第三方iOS客户端
- V2EXClient
Swift实现的V2EX iOS客户端
- VPNOn
VPN连接管理,支持Apple Watch,已上架
- Monkey
GitHub第三方iOS客户端
- JokeClient-Swift
基于swift,用糗事百科的API简单做了一个糗百客户端,可以浏览各种段子,浏览搞笑图片,查看精彩评论等.
- Watch
Dribbble第三方客户端
- MyOne-iOS
用OC写的《一个》 iOS 客户端
- BaiduFM-Swift
百度FM swift语言实现
- WNXHuntForCity
高仿城觅2.0 by-objective-c
- Tomate
圆盘式计时器
- eigen
The Art World in Your Pocket or Your Trendy Tech Company's Tote, Artsy's iOS app.
- WWDC
WWDC app for OS X
- Voice2Note
懒人笔记iOS客户端
- viewfinder
移动支付公司 Square 将去年收购的照片应用 Viewfinder 开源了,包含服务端、iOS 和 Android 应用代码
- RSSRead
“已阅”(iOS上开源RSS新闻阅读器)
- breadwallet
breadwallet iOS bitcoin wallet
- novel-design
品趣iOS客户端
- Brushes
iPhone和iPad上的画图软件
- Concurrency
货币换算软件
- WhoCall
谁CALL我 - iOS来电信息语音提醒
- Mogo-iOS
Mogo群聊客户端
- WWDC-2014
WWDC客户端
- the-oakland-post
Swift写的Oakland客户端
- GreatReader
GreatReader PDF阅读客户端
- Tropos
天气客户端
- manong-reading
《猿已阅》码农周刊iOS客户端
后期可以持续关注移动开发在线分享站,分类整理移动开发相关资源。
网络
2.pop
动画
3.MJExtension,JSonModel,Mantle
ORM
4.MMDrawerController
侧边栏
5.JSQMessagesViewController
IM聊天界面范例
6.FLEX
界面内debug
7.GPUImage
图像处理
8.AsyncDisplayKit
异步线程更新 UI
9.BlocksKit
block的扩展工具
10.Masonry
Autolayout扩展工具
11.ReactiveCocoa
响应式编程
12.CocoaLumberjack
log扩展
13.chisel
lldb扩展创建于 17:11
大力推荐Code4App
网站标语:让移动开发者不再重复造轮子
由此总结出开源的目的
1、不重复造轮子
2、集思广益,大家一起造好轮子
3、向别人学习如何造轮子
Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com
上面已经推荐得够多,我来说下自己用过的。
1. 0xced/iOS-Artwork-Extractor 提取iOS中的图标资源。
2. rs/SDURLCache 私人订制URL缓存。之前项目要求用UIWebview来实现Native效果,网页中的资源文件会预下载。当WebView请求外部资源时,会根据URL查询并优先使用本地缓存。
3. marcuswestin/WebViewJavascriptBridge UIWebview里的Javascript与Native代码交互。
4. BradLarson/GPUImage 图片的滤镜处理。从中学习opengles的用法,以及shade脚本的写法。
5. robbiehanson/CocoaHTTPServer 手机上的服务器。某视频播放项目,player不接受本地路径的视频文件,需要http服务器作中转
6. TheAmazingAudioEngine/TheAmazingAudioEngine 功能强大,特别是在音效处理,对AudioBus支持很强。使用AudioUnit的底层API。 开始在某语音直播间项目中应用,需要频繁切换录音和播放状态, TAAE不支持,勉强修改,依然Bug不断。后来换成自己写的一套AudioUnit实现。
7. supermarin/ObjectiveRecord 对CoreData进行封装,但不是线程安全的,只用在mini App中。
我想推荐的,大多数都被提到了。说两个没有被提到的:
1. Masonry大大简化AutoLayout的写法。比如
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(superview).with.insets(padding);
}];
2. CocoaLumberjack
日志库。
想到另外的再补充。
GitHub开源地址:coderyi/Monkey · GitHub
App Store地址:iTunes 的 App Store 中的“Monkey for GitHub”
另外如 @雨中泪雪人 所说,facebook的开源项目个个精品,比如最近开源的pop,之前的KVOController、Chisel都很好,可以看一下。
看看别人写的控件 Custom Controls for iOS and OS X
有个HTML的框架也可关注关注 Framework7 - Full Featured HTML Framework For Building iOS7 Apps
RFJModel
https://github.com/refusebt/RFJModel
一个JSON Model装载库,功能类似JSONModel,有一些比JSONModel更好的特性。比如声明时定义json的映射、转换关系,支持与@property混写。
@interface ExampleJModel : RFJModel
JProperty(NSString *name, nameInJson);
@property (nonatomic, assign) int64_t tag;
@end
@implementation ExampleJModel
@end
{
"nameInJson":"hello world",
}
NSDictionary *json = ...;
ExampleJModel *model = [[ExampleJModel alloc] initWithJsonDict:json];
NSLog(@"%@", model.name);
另外对服务端不正常的json返回所导致的崩溃做了防护。
platform :ios, '6.0'
pod 'AFNetworking'
pod 'SDWebImage'
pod 'MBProgressHUD'
pod 'TPKeyboardAvoiding'
pod 'pop', '~> 1.0.6'
pod 'AMScrollingNavbar', '~> 1.0'
pod 'TTTAttributedLabel', '~> 1.9.5'
pod 'GPUImage', '~> 0.1.4'
pod 'DBCamera', '~> 2.3.1'
pod 'RETableViewManager', '~> 1.5.10'
简单复制一个自己的podfile