0.前言
本人14年12月份,從網(wǎng)站開發(fā)組轉(zhuǎn)到了移動(dòng)開發(fā)組,自己的java兩年半工作經(jīng)驗(yàn)變成了objective-c零經(jīng)驗(yàn)。2015年1月份新啟動(dòng)了一個(gè)移動(dòng)項(xiàng)目,年后因?yàn)槿耸伦儎?dòng),自己從輔助開發(fā)變成了"核心"開發(fā),目前項(xiàng)目基本接近尾聲,下面進(jìn)行總結(jié),希望對(duì)一些人能有幫助, 另外也希望ios大牛進(jìn)行指導(dǎo)
1.項(xiàng)目介紹
項(xiàng)目屬于一款社區(qū)類軟件,包含小組/帖子,視頻,文章,評(píng)論,推薦搜索,即時(shí)通訊,好友,第三方登錄/分享,推送等,涵蓋常用app的基本功能
2.項(xiàng)目使用的第三方開源庫
http://github.ibireme.com/github/list/ios/整理了比較常用的ios第三方組件,以及github上的統(tǒng)計(jì)
項(xiàng)目使用了cocoapods(類似java中的maven)管理常用的第三方庫,一些特殊的單獨(dú)引用,下面介紹下比較好用的幾個(gè)
1.afnetworking
目前比較推薦的ios網(wǎng)絡(luò)請(qǐng)求組件,默認(rèn)網(wǎng)絡(luò)請(qǐng)求是異步,通過block回調(diào)的方式對(duì)返回?cái)?shù)據(jù)進(jìn)行處理。
需要注意的是afnetworking對(duì)服務(wù)器返回的contenttype要求比較嚴(yán)格,默認(rèn)只支持application/json的返回。所以可能需要添加對(duì)text/html返回的支持,否則可能無法獲得返回?cái)?shù)據(jù)。
另外就是文件上傳,這里推薦使用第二種
[formdataappendpartwithformdata:name:]; [formdataappendpartwithfiledata:name:filename:mimetype:];
第一種只需要傳入表單名和文件流,源碼也是根據(jù)文件流獲得對(duì)應(yīng)的文件名和文件類型,然后調(diào)用第二種方法。但是樓主遇到了使用第一種方法,提交后后臺(tái)判斷為非文件上傳,無法獲得文件流。還有如果后臺(tái)是根據(jù)文件后綴文件類型,那么第一種也無法使用。
afnetworking是異步的,也可以使用同步的網(wǎng)絡(luò)請(qǐng)求方法.
2.fmdb
對(duì)sqlite數(shù)據(jù)庫操作進(jìn)行了封裝,demo也比較簡單
3.mbprogresshud
也是ios項(xiàng)目常用的一個(gè)組件,用于顯示過渡效果的,比如網(wǎng)絡(luò)請(qǐng)求之前顯示loading,網(wǎng)絡(luò)結(jié)束隱藏loading。建議封裝在baseviewcontroller中,所有viewcontroller繼承就能使用
4.mjrefresh
這個(gè)是傳智播客李明杰老師的作品,自己的oc基礎(chǔ)就是看他的視頻半個(gè)周末就基本拿下了。mjrefresh主要用于刷新操作,提供了常用的刷新操作,還有刷新動(dòng)畫,用著很好用。建議把方法封裝在baseviewcontroller中,這樣修改刷新操作時(shí),就只需要改動(dòng)一份。(之前用的舊版mjrefresh,只支持普通的刷新,不支持動(dòng)畫,后來更新后版本變化比較大,舊的方法已經(jīng)不推薦使用了,所以還是封裝基類中使用比較好,方便以后修改)
5.sdwebimage
也是ios最常用的一個(gè)組件,用戶加載網(wǎng)絡(luò)圖片,可以緩存到本地。大概原理時(shí),第一次加載后,會(huì)根據(jù)url加密作為文件名緩存在本地,如果再次加載圖片時(shí),就直接從本地加載。用著也比較簡單。這里也分享遇到的一個(gè)問題,先從網(wǎng)絡(luò)加載一張小圖,然后小圖作為占位圖,再從網(wǎng)絡(luò)加載一張大圖
[imageviewsd_setimagewithurl:[nsurlurlwithstring:imageurlstring]placeholderimage:defaultpostpic]; [imageviewsd_setimagewithurl:[nsurlurlwithstring:_bigimageurlstringarray[i]]placeholderimage:imageview.imageoptions:sdwebimagedelayplaceholdercompleted:^(uiimage*image,nserror*error,sdimagecachetypecachetype,nsurl*imageurl){ }];
6.rdvtabbarcontroller
一個(gè)tabbar組件,可以方便設(shè)置底部菜單的文字圖片,點(diǎn)擊效果,小紅點(diǎn)提示等
7.toast
類似android的toast提示效果,封裝在baseviewcontroller中,需要的地方進(jìn)行提示
8.xmppframework
ios唯一的xmpp類庫,作者在去年8月份添加了xep-0198協(xié)議支持(流管理,用于xmpp斷線重連),但是通過pod進(jìn)行更新時(shí),無法下載到最新版本,可能0198還沒有完善好,無法作為正式版。
9.tpkeyboardavoiding
用戶鍵盤彈出自動(dòng)計(jì)算高度,進(jìn)行屏幕滾動(dòng)操作
10.amr
做即時(shí)通訊的音頻處理,目前我們的即時(shí)通訊使用的錄音文件是m4a,便于web端的音頻播放
11.tqrichtextview
用于做富文本視圖控件顯示,用于即時(shí)通訊的表情顯示,以及資源評(píng)論的富文本顯示
12.csgrowingtextview
用作即時(shí)通訊文本框和評(píng)論文本框使用,可以顯示多行輸入
13.mjextension
也是李明杰老師的作品,用于json轉(zhuǎn)model進(jìn)行使用,有點(diǎn)類似于java中谷歌的gson。轉(zhuǎn)換效率據(jù)說也很高,使用也比較簡單,只要前后臺(tái)約定好,json直接就轉(zhuǎn)成了model。一個(gè)工作多年的ios朋友說,一個(gè)項(xiàng)目主要的是對(duì)model層的管理,他推薦的是mantle。不過mj這個(gè)更輕量級(jí)點(diǎn),用著也更加簡單。
3.工具和插件介紹
xcode
ios開發(fā)的官方工具,也沒別的選擇。有些功能做的確實(shí)挺帥的,比如stroyboard的拖拽事件綁定。不爽的地方就是沒有代碼格式化,另外點(diǎn)擊方法,可能跑到另外一個(gè)類中了!!另外左邊的目錄也不會(huì)自動(dòng)發(fā)生變化,定位到對(duì)應(yīng)文件,需要command shift j
simpholders2
可以快速找到模擬器對(duì)應(yīng)的沙盒目錄,啟動(dòng)后右側(cè)頂部工具欄有個(gè)類似關(guān)閉按鍵的按鈕,顯示最近的幾個(gè)應(yīng)用,點(diǎn)擊就進(jìn)入到了對(duì)應(yīng)的沙盒目錄
vvdocumenter-xcode
xcode工具,///生成注解模板,xcode這功能都不給集成,唉
其他的基本就不用介紹了,有的也不怎么好用。svn可以使用cornerstone,git可以使用sourcetree,sqlite可以使用sqlite professional(不過是收費(fèi)的,免費(fèi)的只能查看),還可以用火狐瀏覽器的sqlite插件。
4.集成友盟
友盟,提供了app和運(yùn)用的一站式解決方案。公司上個(gè)移動(dòng)項(xiàng)目用到了友盟的推送服務(wù),這個(gè)項(xiàng)目中, 還使用了分享,第三方登錄的功能,自己也親自參與到了相關(guān)集成。友盟的開發(fā)者文檔還算是比較全的,遇到問題可以聯(lián)系客服或者到友盟的論壇找解決方案。
1.關(guān)于推送
ios推送分為本地推送和遠(yuǎn)程推送,本地推送是指本地自己彈出信息,另外一個(gè)就是遠(yuǎn)程推送,當(dāng)應(yīng)用未啟動(dòng)時(shí),也能收到相關(guān)推送信息。我們項(xiàng)目沒有使用本地推送,使用的都是友盟的遠(yuǎn)程推送。包括消息(聊天)和通知(用戶信息通知)中。用戶在聊天過程中,手機(jī)除了發(fā)送即時(shí)通訊以外,也調(diào)用后臺(tái)接口,發(fā)送友盟推送。另外用戶的帖子,評(píng)論,關(guān)注,點(diǎn)贊等都會(huì)由后臺(tái)調(diào)用友盟的推送。
友盟推送(另外一個(gè)域名)包括單播,列播,和廣播,其中廣播限定次數(shù)每天3次,可以和友盟申請(qǐng)?zhí)岣叽螖?shù),其他不限定次數(shù),目前來看單播速度還是挺快的。使用友盟推送,需要在蘋果開發(fā)者賬號(hào)中,新建兩個(gè)推送證書,提交給友盟(友盟有詳細(xì)的文檔,可以參考)。可以在友盟后臺(tái),把測(cè)試設(shè)備的devicetoken加到友盟推送的后臺(tái),從友盟后臺(tái)發(fā)起推送。(需要64位token,需要通過方法進(jìn)行計(jì)算,直接在xcode或者ituns中拿到token不行)
推送的大概流程就是,手機(jī)在第一次啟動(dòng)app的時(shí)候開啟推送服務(wù),手機(jī)在啟動(dòng)app的時(shí)候,注冊(cè)友盟服務(wù),同時(shí)把devicetoken提交到自己的后臺(tái),后臺(tái)可以在需要的時(shí)候拿著devicetoken調(diào)用友盟的推送接口,友盟再去發(fā)起蘋果的推送服務(wù),使對(duì)應(yīng)的設(shè)備收到遠(yuǎn)程推送信息。
2.關(guān)于第三方登錄和分享
這塊兒都在友盟的社會(huì)化分享中,里面提供了比較全面的文檔。建議第三方分享模塊不用自己特殊設(shè)計(jì),可以使用友盟的默認(rèn)分享模塊(我們項(xiàng)目的分享模塊自己進(jìn)行了設(shè)計(jì),包括了收藏,所以整塊都需要自定義寫ui和寫分享代碼)。關(guān)于友盟的第三方登錄和分享需要注意的時(shí),qq和微信登錄分享,都需要手機(jī)上安裝應(yīng)用,appstore審核會(huì)卡這點(diǎn),所以需要判斷手機(jī)是否安裝應(yīng)用,隱藏沒有安裝應(yīng)用的圖標(biāo),這塊兒友盟的sdk已經(jīng)有相關(guān)的判斷方法(應(yīng)該是友盟集成了qq和微信sdk,qq和微信sdk提供了判斷方法)。
第三方登錄分享需要到相關(guān)的平臺(tái)注冊(cè)開發(fā)者賬號(hào)。微信開發(fā)者賬號(hào)(注意不是訂閱號(hào))第三方登錄需要交錢才能開通,可以支持微信和朋友圈分享。qq開發(fā)者賬號(hào)可以支持qq和qq空間分享(qq微博好像需要微博開發(fā)者賬號(hào))。新浪微博需要微博開發(fā)者賬號(hào)。qq分享開發(fā)階段需要把測(cè)試賬號(hào)加成開發(fā)者賬號(hào)的好友才能測(cè)試,微博也類似。
第三方登錄自己遇到了qq提示不是最新版的文本,在友盟論壇中找到了解決方案。
第三方登錄,我們項(xiàng)目集成了qq,微信,新浪微博登錄。三個(gè)平臺(tái)都能獲得用戶的scr
云服務(wù)器哪里便宜今日價(jià)格開啟了百度云加速網(wǎng)站就打不開麻煩幫忙看下原因怎么進(jìn)行域名解析 域名解析之后網(wǎng)站才能用嗎阿里云學(xué)生服務(wù)器怎么優(yōu)惠購買阿里云服務(wù)器的價(jià)格表我想買個(gè)便宜云服務(wù)器云虛擬主機(jī)怎么管理看得見才有用!聊聊移動(dòng)APP導(dǎo)航設(shè)計(jì)的改版實(shí)戰(zhàn)