iOS项目中经常使用的第三方开源库

1.项目使用的第三方开源库

项目使用了CocoaPods(相似java中的maven)管理经常使用的第三方库,一些特殊的单独引用,下面介绍下比较好用的几个。html

(1)AFNetworkingjava

目前比较推荐的iOS网络请求组件,默认网络请求是异步,经过block回调的方式对返回数据进行处理。android

须要注意的是AFNetworking对服务器返回的ContentType要求比较严格,默认只支持application/json的返回。因此可能须要添加对text/html返回的支持,不然可能没法得到返回数据。ios

另外就是文件上传,这里推荐使用第二种:git

 
[formData appendPartWithFormData: name:];
[formData appendPartWithFileData: name: fileName: mimeType:];
第一种只须要传入表单名和文件流,源码也是根据文件流得到对应的文件名和文件类型,而后调用第二种方法。可是楼主遇到了使用第一种方法,提交后后台判断为非文件上传,没法得到文件流。还有若是后台是根据文件后缀文件类型,那么第一种也没法使用。github

AFNetworking是异步的,也可使用同步的网络请求方法.web

(2).FMDB正则表达式

对sqlite数据库操做进行了封装,demo也比较简单。sql

(3).MBProgressHUD数据库

也是iOS项目经常使用的一个组件,用于显示过渡效果的,好比网络请求以前显示loading,网络结束隐藏loading。建议封装在BaseViewController中,全部ViewController继承就能使用

(4).MJRefresh

这个是传智播客李明杰老师的做品,本身的oc基础就是看他的视频半个周末就基本拿下了。MJRefresh主要用于刷新操做,提供了经常使用的刷新操做,还有刷新动画,用着很好用。建议把方法封装在BaseViewController中,这样修改刷新操做时,就只须要改动一份。(以前用的旧版MJRefresh,只支持普通的刷新,不支持动画,后来更新后版本变化比较大,旧的方法已经不推荐使用了,因此仍是封装基类中使用比较好,方便之后修改)

(5).SDWebImage

也是iOS最经常使用的一个组件,用户加载网络图片,能够缓存到本地。大概原理时,第一次加载后,会根据url加密做为文件名缓存在本地,若是再次加载图片时,就直接从本地加载。用着也比较简单。这里也分享遇到的一个问题,先从网络加载一张小图,而后小图做为占位图,再从网络加载一张大图。

 
[imageView sd_setImageWithURL:[NSURL URLWithString:imageURLString] placeholderImage:DefaultPostPic];
[imageView sd_setImageWithURL:[NSURL URLWithString:_bigImageURLStringArray[i]] placeholderImage:imageView.image options:SDWebImageDelayPlaceholder completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
}];
(6).RDVTabBarController

一个TabBar组件,能够方便设置底部菜单的文字图片,点击效果,小红点提示等。

(7).Toast

相似android的toast提示效果,封装在BaseViewController中,须要的地方进行提示。

(8).XMPPFramework

iOS惟一的xmpp类库,做者在去年8月份添加了xep-0198协议支持(流管理,用于xmpp断线重连),可是经过pod进行更新时,没法下载到最新版本,可能0198尚未完善好,没法做为正式版。

(9).TPKeyboardAvoiding

用户键盘弹出自动计算高度,进行屏幕滚动操做。

(10).AMR

作即时通信的音频处理,目前咱们的即时通信使用的录音文件是m4a,便于web端的音频播放。

(11).TQRichTextView

用于作富文本视图控件显示,用于即时通信的表情显示,以及资源评论的富文本显示。

(12).CSGrowingTextView

用做即时通信文本框和评论文本框使用,能够显示多行输入。

(13).MJExtension

也是李明杰老师的做品,用于json转model进行使用,有点相似于java中谷歌的Gson。转换效率听说也很高,使用也比较简单,只要先后台约定好,json直接就转成了model。一个工做多年的iOS朋友说,一个项目主要的是对model层的管理,他推荐的是Mantle。不过MJ这个更轻量级点,用着也更加简单。

(14).appirater
appirater是一个能够直接使用到任何iPhone应用中的开源类,用于提醒用户在打开App时,对应用进行评论或打分。
下载地址:https://github.com/arashpayan/appirater
 
(15).FDStatusBarNotifierView
FDStatusBarNotifierView 实现了在状态栏中显示自定义提醒信息的功能。
下载地址:https://github.com/frankdilo/FDStatusBarNotifierView
 
(16).MTStatusBarOverlay
MTStatusBarOverlay 是一个定制的 iOS 状态栏,用于覆盖系统默认的状态栏。
下载地址:https://github.com/myell0w/MTStatusBarOverlay
 
(17).iCarousel
iCarousel 是一个用来简化在 iOS 上实现旋转木马时的视图切换效果,支持 iPad,提供多种切换效果。
下载地址:https://github.com/nicklockwood/iCarousel
 
(18).MWPhotoBrowser
MWPhotoBrowser 实现了一个照片浏览器相似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存。可对图片进行缩放等操做。
下载地址:https://github.com/mwaterfall/MWPhotoBrowser
 
(19).ShareSDK
ShareSDK支持分享到新浪微博、微信好友、微信朋友圈、QQ好友、腾迅微博、QQ空间、人人网、开心网、豆瓣、搜狐微博、网易微博、短信、邮件、打印、拷贝等。可是因为这个SDK包很大,因此用的时候必定要精简一下。下载地址: http://sharesdk.cn/Download
 
(20).ssziparchive
ssziparchive与sstoolkit是同一个做者,这哥们儿简直是个天才。
https://github.com/soffes/ssziparchive
 
(21).ObjQREncoder 
ObjQREncoder 是 Objective-C 的二维码的编码器,用于生成二维码图像。
https://github.com/jverkoey/ObjQREncoder
 
(22).OpenUDID
OpenUDID是iOS禁止使用系统UDID以后的新解决方法。
https://github.com/ylechelle/OpenUDID
 
(23).RegexKitLite
RegexKitLite 是一个轻量级的 Objective-C 的正则表达式库,支持 Mac OS X 和 iOS,使用 ICU 库开发。
https://github.com/wezm/RegexKitLite
 
(24).STUtils
STUtils是一系列的工具集,包含了不少对于iOS原生类的扩展,固然也包含一个用于安全保存用户密码STKeyChain。
https://github.com/ldandersen/STUtils
 
(25).scifihifi-iphone
scifihifi-iphone用于安全保存用户密码到keychain中。
https://github.com/ldandersen/scifihifi-iphone
 
(26).sskeychain
sskeychain同scifihifi-iphone同样,不过属于轻量级。
https://github.com/soffes/sskeychain
 
(27).SDWebImage
SDWebImage调用网站上的图片,跟本地调用内置在应用包里的图片同样简单。操做也很简单。
https://github.com/rs/SDWebImage
 
(28).umeng
umeng既有统计分析,也有社会化组件。可是统计分析的用户数彷佛明显多于其社会化组件的用户。
http://dev.umeng.com/analytics/ios/sdk-download

2.工具和插件介绍

Xcode

iOS开发的官方工具,也没别的选择。有些功能作的确实挺帅的,好比StroyBoard的拖拽事件绑定。不爽的地方就是没有代码格式化,另外点击方法,可能跑到另一个类中了!!另外左边的目录也不会自动发生变化,定位到对应文件,须要command+shift+j

SimPholders2

能够快速找到模拟器对应的沙盒目录,启动后右侧顶部工具栏有个相似关闭按键的按钮,显示最近的几个应用,点击就进入到了对应的沙盒目录。

VVDocumenter-Xcode

xcode工具,///生成注解模板,xcode这功能都不给集成,唉。

其余的基本就不用介绍了,有的也不怎么好用。SVN可使用Cornerstone,Git可使用SourceTree,sqlite可使用SQLite Professional(不过是收费的,免费的只能查看),还能够用火狐浏览器的sqlite插件。

3.集成友盟

友盟,提供了App和运用的一站式解决方案。公司上个移动项目用到了友盟的推送服务,这个项目中, 还使用了分享,第三方登陆的功能,本身也亲自参与到了相关集成。友盟的开发者文档还算是比较全的,遇到问题能够联系客服或者到友盟的论坛找解决方案。

(1).关于推送

iOS推送分为本地推送和远程推送,本地推送是指本地本身弹出信息,另一个就是远程推送,当应用未启动时,也能收到相关推送信息。咱们项目没有使用本地推送,使用的都是友盟的远程推送。包括消息(聊天)和通知(用户信息通知)中。用户在聊天过程当中,手机除了发送即时通信之外,也调用后台接口,发送友盟推送。另外用户的帖子,评论,关注,点赞等都会由后台调用友盟的推送。

友盟推送(另一个域名)包括单播,列播,和广播,其中广播限定次数天天3次,能够和友盟申请提升次数,其余不限定次数,目前来看单播速度仍是挺快的。使用友盟推送,须要在苹果开发者帐号中,新建两个推送证书,提交给友盟(友盟有详细的文档,能够参考)。能够在友盟后台,把测试设备的deviceToken加到友盟推送的后台,从友盟后台发起推送。(须要64位token,须要经过方法进行计算,直接在xcode或者ituns中拿到token不行)

推送的大概流程就是,手机在第一次启动app的时候开启推送服务,手机在启动app的时候,注册友盟服务,同时把deviceToken提交到本身的后台,后台能够在须要的时候拿着deviceToken调用友盟的推送接口,友盟再去发起苹果的推送服务,使对应的设备收到远程推送信息。

(2).关于第三方登陆和分享

这块儿都在友盟的社会化分享中,里面提供了比较全面的文档。建议第三方分享模块不用本身特殊设计,可使用友盟的默认分享模块(咱们项目的分享模块本身进行了设计,包括了收藏,因此整块都须要自定义写UI和写分享代码)。关于友盟的第三方登陆和分享须要注意的时,QQ和微信登陆分享,都须要手机上安装应用,appstore审核会卡这点,因此须要判断手机是否安装应用,隐藏没有安装应用的图标,这块儿友盟的sdk已经有相关的判断方法(应该是友盟集成了QQ和微信sdk,QQ和微信sdk提供了判断方法)。

第三方登陆分享须要到相关的平台注册开发者帐号。微信开发者帐号(注意不是订阅号)第三方登陆须要交钱才能开通,能够支持微信和朋友圈分享。QQ开发者帐号能够支持QQ和QQ空间分享(QQ微博好像须要微博开发者帐号)。新浪微博须要微博开发者帐号。QQ分享开发阶段须要把测试帐号加成开发者帐号的好友才能测试,微博也相似。

第三方登陆本身遇到了QQ提示不是最新版的文本,在友盟论坛中找到了解决方案。

第三方登陆,咱们项目集成了QQ,微信,新浪微博登陆。三个平台都能得到用户的screen_name(用户名称),以及对应的平台惟一的id,其中QQ和微信都是openid,新浪是userid。

第三方分享,文档提供了分享图片,视频,语音。若是是分享url,须要设置对应平台的分享地址,参考解决方案,好比

 
[UMSocialData defaultData].extConfig.qqData.url = shareUrl;
[UMSocialData defaultData].extConfig.qzoneData.url = shareUrl;
[UMSocialData defaultData].extConfig.wechatSessionData.url = shareUrl;
[UMSocialData defaultData].extConfig.wechatTimelineData.url = shareUrl;
另外分享到QQ空间,必须指定一张图片,不然不能分享成功。

第三方分享建议封装到一个类中,咱们项目是几个详情页都有分享,评论,举报,收藏,点赞等功能。封装在一个BaseDetailViewController中的,相关页面继承,同时传入对应的资源类型,只用维护一份代码。

4.即时通信

即时通信网上有第三方的解决方案,好比环信,融云等。咱们是本身搭的xmpp服务器,服务器使用的tigase,以前写过相关的博客,本身去年也作了对应的webim。前段时间看了环信webim的sdk,使用的也是strophe的js类库,相关实现跟咱们的差很少,可是本身搭建xmpp会遇到了很多问题,好比丢消息!因此若是想比较快速的实现im,推荐使用第三方的解决方案。

移动端的丢消息大概是这个样子。A和B通信,A发了一条消息给服务器,服务器发给B,可是B网络很差掉线了,而服务器殊不知道B退出了(B正常退出会给服务器发下线通知),因此消息丢失了。XMPP中有xep-0184协议(消息回执),A给B发消息,消息体中带一行代码(要求消息回执),当B收到消息后发送一条回执,证实我收到了。后来XMPP又有了xep-0198协议(流管理),断线后快速重链,同时判断必定时间收不到消息,就把消息写离线消息,减小丢消息状况。可是可能网络状况复杂,加上各类不肯定因素,还会出现丢消息的问题。目前比较靠谱的方法就是存全部的聊天记录,由手机端根据时间点去数据库拉消息,只要别人发出的消息就不会丢。

此次即时通信模块进行了相关改动,也是参考了以前开发人员的一些建议。好比用户返回home的时候,断开xmpp链接(iOS进入后台后,只有5秒的处理时间,特殊方法可延长到10分钟,若是内存不够,应用随时就被杀死了)。因此返回home时就断开,进入应用再链接。同时应用使用状态下,有心跳检测,判断是否保持链接。

考虑到iOS的特殊性,咱们采起了xmpp和远程推送都走的方法,推送的自定义消息体和xmpp消息体同样,消息的处理方法同样。用户聊天发送xmpp消息的同时也调用咱们的消息推送接口调用友盟push(push能够设置过时时间,避免特殊状况,推送延时,聊天结束了才收到推送)。一是解决iOS应用未启动时的推送接收,二是解决xmpp丢消息的问题。

关于推送,AppDelage中有两个方法,一个是使用中收到推送,不会提示,会直接处理推送信息。另外是程序非使用状态,收到推送,会进行提示,能够点击推送消息进入应用,获取这一条推送消息的推送消息(须要注意,点击推送启动应用拿到信息时view尚未加载,消息不能马上处理)。

android端由于是真后台,能够后台一直保持运行,不管收到xmpp消息仍是友盟推送,均可以本身进行处理,而后本身弹一个本地推送(也有弊端,若是android程序杀死,就没法接受消息和推送)。iOS端由于后台不可控,因此推送使用远程推送,进入应用链接xmpp再收所有离线消息(不保证友盟推送可否保证及时)。固然大部分都仍是正常状况,网络状况比较好的条件下,就实时收到了xmpp的消息或者远程推送。咱们又不是QQ和微信,只要保证用户看到的数据能保持一致性就好了(因此QQ和微信就是diao啊)。

根据测试反馈的状况,iOS这个应用的丢消息状况比上个应用有必定改善。具体状况再进一步观察把。

咱们的即时通信也包括语音和图片,采用的是http的解决方案(xmpp也支持二进制的传输,可是估计没人那样用)。具体流程就是先把附件传到附件服务器拿到附件服务器的地址,再封装到消息体。接收方收到消息解析的时候,再从附件服务器拿到对应的资源,加载到本地。 同时屏蔽,取消屏蔽等一些实时操做也都会发xmpp,第一时间双方更新状态。

相关文章
相关标签/搜索