本人兩年半Java後臺事業履歷,因公司名目需求,轉為IOS開發,”零基本”自學objective-c,第一個名目開發終了,做下總結分送朋友。名目包括常用app的基礎效能,實時通信,第三方集成等。
0.媒介
本人14年12月份,從網站開發組轉到瞭變動位置開發組,本身的java兩年半事業履歷釀成瞭objec商業登記地址tive-c零履歷。2015年1月份新啟動瞭一個變動位置名目,年後由於人事情動,本身從輔助開發釀成瞭”焦點”開發,今朝名目基礎靠近序幕,上面入行總結,但願對一些人能有匡助, 別的也但願iOS年夜牛入行指點
1.名目先容
名目屬於一款社區類軟件,包括小組/帖子,錄像,文章,評論,推舉搜刮,即時通信,摯友,第三方登錄/分送朋友,推送等,涵蓋常用app的基礎效能
2.名目運用的第三方開源庫
http://github.ibireme.com/github/list/ios/收拾整頓瞭比力常用的iOS第三方組件,以及github上的統計
名目運用瞭CocoaPods(相商業登記似java中的maven)治理常用的第設立公司三方庫,一些特殊的零丁援用,上面先容下比力好用的幾個
2.1.AFNetworking
今朝比力推舉的iOS收集哀求組件,默許收集哀求是異步,經由過程block歸調的方法對返歸數據入行處置。
設立登記 需求註意的是AFNetworking對辦事器返歸的ContentType要求比力嚴酷,默許隻支撐application/json的返歸。以是可能需求添加對公司登記text/html返歸的支撐,不然可能無奈得到返歸數據。
別的便是文件上傳,這裡推舉運用第二種
[formData appendPar租地址tWithFormData: name:];
[formData appendPartWithFileData: name: fileName: mimeType:];
AFNetworking是異步的,也可以運用同步的收集哀求方式.第一種隻需求傳進表單名和文件流,源碼也是依據文件流得到對應的文件名和文件類型,然後挪用第二種方式。可是樓主碰到瞭運用第一種方式,提交後後臺判定為非文件上傳,無奈得到文件流。另有假如後臺是依據文件後綴文件類型,那麼第一種註冊公司也無奈運用。
2.2.FMDB
對sqlite數據庫操縱入行瞭封裝,demo也比力簡樸
2.3.MBProgressHUD
也是iOS名目常用的一個組件,用於顯示過渡後果的,好比收集哀求之前顯示loading,收集收場暗藏loading。提出封裝在BaseViewController中,一切ViewController繼續就能運用
營業註冊地址 2.4.MJRefresh
這個是傳智播客李明傑教員“丈夫?”的作品,本身的oc基本便是望他的錄像半個周末就基礎拿下瞭。MJRefresh重要用於革新操縱,提供瞭常用的革新操縱,另有革新動畫,用著很好用。提出把方式封裝在BaseViewController中,如許修正革新操縱時,就隻需求篡改一份。(之前用的舊版MJRefresh,隻支撐平凡的革新,不支撐動畫,之後更換新的資料後版本變化比力年夜,舊的方式曾經不推舉運用瞭,以是仍是封裝基類中運用比力好,利便當前修正)
2.5.SDWebImage
也是iOS最常用的一個組件,用戶加載收集圖片,可以緩存到當地。梗概道理時,第一次加載後,會依據url加密作為文件名緩存在當地,假如再次加載圖片時,就間接從當地加載。用著也比力簡樸。這裡也分送朋友碰到的一個問題,先從收集加載一張小圖,然後小圖作為占位圖,再從收集加載一張年夜註冊公司圖
[公司註冊imageView sd_setImageWith商業登記地址URL:[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) {
}];
2.6.RDVTabBarController
一個TabBar組件,可以利便設置底部菜單的文字圖片,點擊後果,小紅點提醒等
2.7.Toast
相似android的toast提醒後果,封裝在BaseViewController中,需求的處所入行提醒
2.8.XMPPFramework
iOS獨一的xmpp類庫,作者在往年8月份添加瞭xep-0198協定支撐(流治理,用於xmpp斷線重連),可是經由過程pod入行更換新的資料時,無奈下載到最新版本,可能0198還沒有完美好,無奈作為正式版。設立登記
2.9.TPKeyboardAvoiding
用戶鍵盤彈出主動盤算高度,入行屏幕轉動操縱
2.10.AMR
做即時通信的音頻處置,今朝咱們的即時通信運用的灌音文件是m4a,便於web真個音頻播放
2.11.TQRichTextView
用於做富文本視圖控件顯示,用於即時通信的表情顯示,以及資本評論的富文本顯示
2.12.CSGrowingTextView
用作即時通信文本框和評論文本框運用,可以顯示多行輸出
2.13.MJExtension
也是李明傑教員的作品,用於json轉model入行運用,有點相似於java中谷歌的Gson。轉換效力聽說也很高,運用也比力簡樸,隻要前後臺商定好商業登記,json間接就轉成瞭model。一個事業多年的iOS伴侶說,一個名目重要的是對model層的治理,他推舉的是Mantle。不外MJ這個更輕量級點,用著也越發簡樸。
3.東西和插件先容
Xcode
iOS開發的民間東西,也沒另外抉擇。有些效能做簡直實挺帥的,好比StroyBoard的拖拽事務綁定。不爽的處所便是沒有代碼格局化,別的點擊方式,可能跑到別的一個類中瞭!!別的右邊的目次也不會主動產生變化,定位到對應文件,需求command+shift+j
SimPholders2
可以疾速找到模仿器對應的沙盒目次,啟動後右側頂部東西欄有個相似關閉按鍵的按鈕,顯示比來的幾個利用,點擊就入進到瞭對應的沙盒目次
VVDocumenter-Xcode
xcode東西,///天生註解模板,xcode這效能都不給集成,唉
其餘的基礎就不消先容瞭,有的也不怎麼好用。SVN可以運用Cornerstone,登記地址Git可以運用So商業地址出租urceTree,sqlite可以運用SQLite Professional(不外是收費的,不花錢的隻能查望),還可以用火狐閱讀器的sqlite插件。
4.集成友盟
友盟,提供瞭App和使用的一站式解決方案。公司上個變動位置名目用到瞭友盟的推送辦事,這個名目中, 還運用瞭分送朋友,第三方登錄的效能,本身也親身介入到瞭相干集成。友盟的開發者文檔還算是比力全的,碰到問題可以聯絡接觸客服或許到友盟的論壇找解決方案。
4.1.關於推送
iOS推送分為當地推送和遙程推送,當地推送是指當地本身彈出信息,別的一個便是遙程推送,當利用未啟動時,也能收到相干推送信息。咱們名目沒有運用當地推送,運用的都是友盟的遙程推送。包含動靜(談天)和通知(用戶信息通知)中。用戶在談天經過歷程中,手機除瞭發送即時通信以外,也挪用後臺接口,發送友盟推送。別的用戶的帖子,評論,關註,營業登記地址點贊等城市由後臺挪用友盟的推送。
友盟推送(別的一個域名)包含單播,列播,和播送,此中播送限制次數天天3次,可以和友盟申請進步次數,其餘不限制次數,今朝來望單播速率仍是挺快的。運用友盟推送,需求在蘋果開公司登記地址發者賬號中,新建兩個推送證書,提交給友盟(友盟有具體的文檔,可以參考)。可以在友盟後臺,把考試裝備的deviceToken加到友盟推送的後臺,從友盟後臺倡議推送。(需求64位token,需求經由過程方式入行盤算,間接在xcode或許ituns中拿到token不行)
推送的梗概流程便是,手機在第一次啟動app的時辰開啟推送辦事,手機在啟動app的時辰,註冊友盟辦事,同時把deviceToken提交到本身的後臺,後臺可以在需藍雨華看著躺在地上的兩人一言不發,只見彩修三人的心已經沉入谷底,滿腦子都是死亡。主意。求的時辰拿著deviceToken挪用友盟的推送接口,友盟再往倡議蘋果的推送辦事,使對應的裝備收到遙程推送信息。
4.2.關於第三方登錄和分送朋友
這塊兒都在友盟的社會化分送朋友中,內裡提供瞭比力周全的文檔。提出第三方分送朋友模塊不消本身特殊design,可以運用友盟的默許分送朋友模塊(咱們名目的分送朋友模塊本身入行瞭design,包含瞭加入我的最愛,以是整塊都需求自界說寫UI和寫分送朋友代碼)。關於友盟的第三方登錄和分送朋友需求註意的時,QQ和微信登錄分送朋友,都需求手機上安裝利用,appstore審核會卡這點,以是需求判定手機是否安裝利用,暗藏沒有安裝利用的圖標,這塊兒友盟的sdk曾經有相干的判定方式(應當是友盟集成瞭QQ和微信sdk,QQ和微信sdk提供瞭判定方式)。
第三方登錄分送朋友需求到相干的平臺註冊開發者賬號。微信開發者賬號(註意不是訂閱號)第三方登錄需求交錢能力開明,可以支設立登記撐微信和伴侶圈分送朋友。QQ開發者賬號可以支撐QQ和QQ空間分送朋友(QQweibo似乎需求weibo開發者賬號)。新浪weibo需求weibo開發者賬號。QQ分送朋友開發階段租地址需求把考試賬號加成開發者賬號的摯友能力考試,weibo也相似。
第三方登錄本身碰到瞭QQ提醒不是最新版的文本,在友盟論壇中找到相識決方案。
第三方登錄,咱們名目集成瞭QQ,微信,新浪weibo登錄。三個平臺都能得到用戶的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空間,必需指定一張圖片,不然不克不及分送朋友勝利。
第三方分送朋友提出封工商登記裝到一個類中,咱們名目是幾個概況頁都有分送朋友,評論,舉報,加入我的最愛,點贊等效能。封裝在一個BaseDetailViewContr設立公司oller中的,相干頁面繼續,同時傳進對應的資本類型,隻用保護一份代碼。
5.即時通信
即時通信網上有第三方的解決方案,好比環信,融雲等。咱們是本身搭的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,第一時光兩邊更換新的資料狀況。
6.名目總結
今朝名目曾經靠近序幕瞭,再過不到半月就要上線藍玉華越聽,心裡越是認真。這一刻,她從未感到如此內疚。瞭。本身算是名目的重要賣力人瞭。名目後期iOS和android有一周多後期預備和框架搭建,別的便是我依據頁面原型,界說接口文檔開發規劃,和諧開發。可能年夜傢名目履歷也都不多把,框架和接口或多或少城市有點問題,跟著履歷逐步堆集肯建都會越來越好的。關於iOS的總結下:
1.框架搭建的時辰,要斟酌好App中各效能點的完成方案。design好相干文件目次,封裝相干類文件。
2.封裝收拾整頓相干方式,好比BaseViewController中包含,基礎ui,頂部導航條,左按鈕,右按鈕,標題,相干點擊事務,顯示/暗藏loading,收集哀求掉敗同一處置方式,上拉/下拉革新綁定,革新顯示/暗藏。剖析名目中的效能雷同模塊,封裝對應操縱,雷同效能代碼保護一份。
3.斟酌好革新機制,好比A頁面入進B頁面,B更換新的資料後,返歸後A頁面的革新,假如采用block/delegate的方式,可以同一入行design。或許多個頁面之間的數據革新,采用通知的方法(KVO),入行更換新的資料操縱。絕量開發階段,就把可能泛起的問題提前解決。
4.斷定是否入行相干頁面統計,好比加友盟的頁面統計,需求設置相干view的viewWillAppear和viewWillDisappear()
5.ViewController中初始化view和數據哀求後革新view代碼分別,封裝收拾整頓好收集哀求前和哀求後的操縱,斟酌好下拉革新頁面和上拉加載更多的相干數據哀求和處置。斟酌有網狀況下的數據緩存以及無網狀況下的緩存數據加載
6.提前做好相干頁面的跳轉,代碼解耦,不停優化和重構代碼。發明問題或許有更好的解決方案,絕量晚期就入行修正,防止修修補補,利便前期保護和擴大。在可以接收的情形下,可以犧牲一些系能,堅持邏輯簡樸,便於保護。
7.經由過程代碼寫view盤算坐標時,絕量參考上一個元素的坐標和寬高,如許當一個元素地位或寬高產生變化時,其餘元素基礎都能跟著產生變化。
8.數據處置能放在辦事器端處置就由辦事器端處置,前臺就入行無腦顯示
9.斟酌步伐的兼容性,32位和64位一些變量的值不同,註意值的越界問題。註意步伐的內存問題,和運用經過歷程中的內存變化
10.斟酌信息的安全性,沙盒存儲公司地址的信息可以被查望修正,主要信息請加密
設立登記人打賞
0
人 點贊
主帖得到的海角分:0
營業登記
舉報 |
樓主
| 埋紅包
發佈留言