IOS 开源项目汇总

一、开源项目(因本篇是转载总结,所以标志就很乱了)

学习计算机技术,最有帮助的就是各个知名公司的开源项目了;而这个行业的活力以及活跃,也得益于开源项目为普通程序员所提供的学习资料。本人最近因为学校的一个小比赛接触到了IOS技术,刚摸上几天,除了官方提供的各个开源例子,还有许许多多的demo可供学习,兴奋不已。现在总结一下常用的开源项目。

参考:知乎上面的一个总结

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 · GitHubfacebook出品的paper,动画效果太好了,赶超apple的原生app一大截。pop就是paper的动画库!

7. GPUImage: BradLarson/GPUImage  GitHub

iOS7出来时,很多好看的效果,其实都是对图像的各种处理(比如模糊效果)。图像处理看来以后也是iOS开发的必备技能之一了。而GPUImage,就是能快速处理各种图像效果的利器!

8、其他

对响应式编程还是有很多期待的,有时间也要重温函数式编程(比如Haskell),或者把响应式编程的公开课(Coursera.org)看完。编程范式的选择可以说是相当重要的。未来是多核+并发的时代,函数式编程无疑是更好的选择。iOS的UI也很重要,但是如果理解apple的CoreAnimation及CoreGraphics框架,大部分UI基本是没问题的。当前,iOS7的各种炫酷效果,也需要对图像的处理有一定理解。说到图形学,OpenCV是一个不错的选择,而OpenGL也是另一个不错的方向(推荐的公开课:Interactive 3D Graphics Course With Three.js & WebGL)。当然最重要的,还是计算机的各种基础知识了吧,知其然,知其所以然,才是正道~以上是个人的经验,欢迎交流讨论~

网络
AFNetworking
JSONKit
Reachability
EGOTableViewPullRefresh
LoadMoreTableFooterView

网络请求首选AFNetworking,无数个项目证明,只选对的。解析JSON数据推荐JSONKit,而且优势相当的明显,解析速度拉SBJson好几条长安街。以前发现过好多次由于SBJson引起的crash,如果还在用SBJson,那请继续。Reachability也要用起来,时不时检查一下网络状况,然后配合MBProgressHUD告知用户「亲,你丫现在没网啦,别特么戳了。EGOTableViewPullRefresh是用来下拉刷新的啦,同时配合上LoadMoreTableFooterView(加载更多)就齐活了。

本地存储
FMDB
Core Data
SDWebImage
TMCache
第一次开发中引入数据库的时候使用过FMDB,其实蛮强大的,只不过需要写sql语句,select * from user(从user表中筛选出全部数据)。后来慢慢的抛弃了它,一点也不面向对象。好吧,其实我是想说还是CoreData好用,至少你不会因为不会写sql而没法保存数据。(接手过的项目竟然还有全部存NSUserDefault的,真是没脾气了)看过一篇对比CoreData和FMDB查询大数据性能的文章,FMDB赢了,不过还是推荐用CoreData。至于SDWebImage,同样也是早期使用过,和SBJson一样,会有crash,尽管用它来缓存图片很方便,但是我们有更好的解决方案,同样不推荐。年前的项目中CTO推荐了我们TMCache,tumblr团队使用的一个缓存项目(科普时间:tumblr是国外的轻博客服务,随后国内就出现了点点等同期产品),有时间可以去了解一下,目前应用的不是特别多,当然啦,对我来说。

动画效果
MBProgressHUD
pop
上面说到的没网了提示用户的MBProgressHUD,用起来吧,当然还有很多转菊花(loading)的开源项目,同样是我使用最多的。pop是facebook paper使用的动画效果,开源了出来,很赞啊,不过应用到项目中的可能性很低。。。太特么炫酷了。

其他第三方库管理工具

CocoaPods,有时间可以学习一下。

 CocoaPods GitHubGithub repos (iOS) 这是一个收集了很多iOS开源项目的页面,给作者赞一个。有不完善的地方欢迎指出,我会及时补充上来。


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



我个人觉得类似UI效果的东西,就不需要自己去整理记录了,推荐几个网站:

1. Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

这个网站刚起步的时候我基本不上,习惯于自己使用书签整理,不过后来发现里面的编辑非常用心,而且整理归纳很有序,可以节省我大量的时间,我才开始使用2. http://www.cocoacontrols.com,这个应该是code4app的国外原型,我很早之前就经常上,里面的内容做的也很不错,总体项目水平选的要比code4app高上一些3. 开源中国 - 找到您想要的开源项目,分享和交流,国内很不错的开源社区,上大学的时候就一直在看了

一. 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函数运行起来的,非常强烈推荐阅读学习。


二、设计方面

pttrns - 一个很棒的按任务分类的iOS屏幕设计图库。举例来说,如果你想看其他应用如何处理活动feed,在这儿你可以找到一堆的例子。
TappGala - 另一个很棒的优美应用设计的集合站。它不是按任务来分类的,只是一个优秀应用的列表,你可以在此获取灵感。
Cocoa Controls - 一些很棒的你可以用在你的iOS应用中的组件(代码)的列表。有时你可以找到一段优秀代码来节省时间,有时你也可以学习其他开发者是如何完成某个功能的。订阅他们的每周一报吧,都是精华,极少糟粕。
IICNS - 真正优秀图标的集合。获取灵感吧,但不要抄袭。
Dribbble - 最优秀的设计师们在上面展示他们的作品。真正的精品。
Capptivate - 给人灵感的设计作品图库。有些带有动画。感谢你,@joaopmaia!

Mocks ($) – 一个简单应用的快速创建iOS应用原型的工具。自带一些默认控件,你可以快速搭建原型。
Briefs ($) – 一个很有用的应用,可以让你创建应用原型,将原型连起来形成交互。你可以部署到真实设备上,看看在你手上是什么样的感觉。
Acorn ($) – Photoshop的有力竞争者,比ps便宜多了。我发现自己最近用Photoshop越来越少了。该项目在积极的开发维护中。
Sketch ($) - 一个基于矢量的画图工具,随着屏幕尺寸和像素密度的改变,这个工具越来越有用。只需要设计一次,然后可以根据需要进行缩放。同时还带有一个很强大的导出系统。对于Sketch示例项目,请看 Sketchmine。我的 screencast on Sketch上有视频演示。
iOS 7 PSD by Teehan+Lax - 如果你(或者你的设计师)用Photoshop的话,这是个超有用的资源。也有 iOS 6 版本的。
Bjango’s Photoshop Actions - 如果你用Photoshop来设计iOS应用的话绝对能帮你省时间。一次点击即可重设画布大小,缩放200%(或50%),设置全局亮度为90等等。他们的 博客中也有许多Photoshop的工作技巧。
xScope ($) – 一把不可或缺的瑞士军刀,指导,像素放大镜,屏幕度量等等。想知道某个像素点的颜色值?想知道某个Mac应用的一个按钮和窗口之间有多少像素?xScope都能帮你。可以看下他们为 镜像设计所开发的 iPhone应用,看镜像设计在你的苹果设备上是多么的像素完美。
Glyphish ($) – 一个很赞的有很多你的iOS应用可以使用的高质量图标的集合。苹果提供的内置图标并不多,所有拥有这么一个囊括各种概念的图标集合很有用。我还在寻找关于婴儿的一些图标。Glyphish是以包的形式发布的,最新的包里有iOS7的“细线条”图标,当设计iOS7应用的时候很有用。
Fontastic Icons for iOS - 一个使用图标字体的开源类集合,例如iOS应用中的 Font Awesome。可以在任何像素维度上快速简便的得到一个图标。由于字体在本质上可以轻松缩放,用这种办法可以很方便的在不同平台使用的图标,而无需根据不同尺寸导出不同的版本。
PaintCode ($) -一个基于向量的画图工具,可以将你的作品导出为Core Graphics源代码。用来学习Core Graphics绘图是非常棒的,同时如果你想要动态绘图也是非常方便。我的 screencast on PaintCode上有视屏演示。
Edge Insets ($) – 一个帮助你定义可重用图片边距的简单工具。在Mac App Store上有售。
LiveView - 一个iOS上的远程屏幕查看器,在你的设备上可以立马轻松地看到你的设计图。谢谢你,@_funkyboy!
Skala Preview ($) – 另一个很棒的可以在真实设备上快速看到你的设计图的工具。Bjango的朋友们很给力,这个应用物有所值。谢谢你,jn40!

你可能感兴趣的:(IOS 开源项目汇总)