iOS 從0到1搭建高可用App框架

最近在搭建新項(xiàng)目的iOS框架,一直在思考如何才能搭建出高可用App框架酿傍,能否避免后期因?yàn)榇a質(zhì)量問題的重構(gòu)烙懦。以前接手過許多“爛代碼”,架構(gòu)松散赤炒,底層混亂氯析,缺少規(guī)范,導(dǎo)致團(tuán)隊(duì)開發(fā)時代碼風(fēng)格迥異莺褒,清晰的項(xiàng)目結(jié)構(gòu)和良好的代碼規(guī)范是保證產(chǎn)品質(zhì)量的關(guān)鍵掩缓,下面分享一下我的架構(gòu)思路。

架構(gòu)圖:

架構(gòu)圖

架構(gòu)原則:易讀性遵岩、易維護(hù)性你辣、易擴(kuò)展性。

一尘执、思考

做好一件事舍哄,花在思考上的時間應(yīng)該多于執(zhí)行。

首先根據(jù)產(chǎn)品需求和設(shè)計圖誊锭,腦中先建立一個產(chǎn)品架構(gòu):

1. 產(chǎn)品的定位是什么表悬。

社交?媒體丧靡?游戲蟆沫?運(yùn)動?音視頻温治?電商……要搞清楚你要做一個什么類型的App饭庞,不同類型的產(chǎn)品,技術(shù)選型也有所不同熬荆,在這我是搭建一個基礎(chǔ)App架構(gòu)舟山,可以在此基礎(chǔ)上拓展社交、電商、音視頻等捏顺!

2. 技術(shù)選型

根據(jù)當(dāng)前產(chǎn)品的需求以及未來可能有的需求(我怎么知道未來會有什么需求六孵?可以參照競品,可以發(fā)揮想象幅骄,如果產(chǎn)品說:“我們要做IM文字聊天,只做文字本今!不做音視頻拆座,以后都不做!” 類似這樣的承諾冠息,你如果信了他的邪……后面的故事就精彩了挪凑。。哈哈哈哈哈哈逛艰。躏碳。。散怖。所以說這時候你就要考慮到后面會有語音+視頻聊天菇绵,在設(shè)計的時候不要偷懶,預(yù)留一定空間镇眷,當(dāng)某天產(chǎn)品反悔的時候咬最,你可以微微一笑,從容應(yīng)對欠动。

一把拉回話題永乌,接著說技術(shù)選型,通常我會選擇一些當(dāng)下比較熱門具伍、好用的第三方框架翅雏,例如:YYKit?,YYKit 是一組龐大人芽、功能豐富的 iOS 組件望几,包含Model解析、圖片加載啼肩、緩存等基礎(chǔ)服務(wù)橄妆,都是基于Category設(shè)計的,使用方便且性能高于一些老的框架祈坠,用過的都說好害碾。

其他框架的選擇可以根據(jù)項(xiàng)目需求,去GitHub上搜索赦拘,星星多的每個都看一下慌随,會給你增加一些思路。

程序猿長得可以保守,思想一定不能太保守阁猜。

二丸逸、搭建目錄結(jié)構(gòu)

目錄圖解

如上圖,我是這樣搭建App目錄結(jié)構(gòu)的剃袍,從下到上黄刚,使用Pods管理第三方框架,將第三方框架進(jìn)行二次封裝民效,供給頂層使用憔维,盡可能減少各模塊之間的耦合度,只為更清晰畏邢。

三业扒、封裝基礎(chǔ)類

1.應(yīng)用入口

1. AppDelegate是應(yīng)用的代理,應(yīng)用級的事件都委托它處理舒萎,包含啟動退出程储、推送等事件,以及IM臂寝、支付等第三方的回調(diào)章鲤,這使得AppDelegate內(nèi)代碼龐大,錯綜復(fù)雜交煞,十分不利于閱讀和維護(hù)咏窿,因此我新增了一個AppDelegate+AppService類別,用來處理生命周期之外的業(yè)務(wù)素征,AppDelegate作為事件入口集嵌,具體實(shí)現(xiàn)直接調(diào)用類別里的方法,只為更清晰御毅。

2. 功能模塊

2. Modules包含了應(yīng)用內(nèi)的功能模塊根欧,根據(jù)底部Tab欄劃分并關(guān)聯(lián)實(shí)體文件夾(默認(rèn)是虛擬的要手動建立實(shí)體文件夾拖進(jìn)來),每個模塊內(nèi)使用的是MVC模式端蛆,有人會問為什么多了Resource和Service文件夾凤粗,MVC是一種設(shè)計思想,并非死套路就仨文件夾今豆,根據(jù)實(shí)際需求適當(dāng)增加嫌拣,在這我選擇在Service封裝數(shù)據(jù)請求,VC里調(diào)用拿數(shù)據(jù)即可呆躲,至于Resource為什么在這异逐,我認(rèn)為當(dāng)功能模塊層級較多時,每個大功能模塊都對應(yīng)許多資源插掂,對應(yīng)到模塊內(nèi)用起來方便灰瞻,當(dāng)然也可以放到最外層的Resource文件夾里腥例,建立對應(yīng)的模塊名稱,在這兒我是選擇把公共的放到最外層Resource里酝润,功能相關(guān)的放到模塊里的Resource文件夾內(nèi)燎竖,只為更清晰。

3. 管理模塊

3. Manager的定義是全局基礎(chǔ)服務(wù)要销,通常使用類方法或者單例來實(shí)現(xiàn)构回,主要包含對應(yīng)用、用戶的管理和服務(wù)疏咐,例如網(wǎng)絡(luò)狀態(tài)監(jiān)聽捐凭,廣告頁應(yīng)用介紹頁等;用戶快速登錄退出操作以及登錄狀態(tài)的獲取等凳鬓。只為更清晰。

4.工具類

4. Utils文件夾內(nèi)主要包含全局通用工具患民,來源于對三方框架的二次封裝缩举,或是自己寫的工具類。在這個項(xiàng)目里匹颤,我封裝了帶AES加密網(wǎng)絡(luò)請求工具仅孩,全局Toast提示,廣告頁等印蓖。只為更清晰辽慕。

5. 基類

5. Base文件夾用來存放項(xiàng)目的基類,基類作用包含一些定制化的內(nèi)容赦肃,例如頁面樣式溅蛉,空數(shù)據(jù)頁面等,使用基類來實(shí)現(xiàn)他宛,可以統(tǒng)一控制船侧,利于維護(hù),減少冗余厅各,也為更清晰镜撩。

6.第三方 & 7.全局宏定義

6. 第三方文件夾放一些第三方的類庫和對第三方封裝,比如第三方登錄队塘、支付袁梗、IM等,現(xiàn)在項(xiàng)目我還沒有添加第三方框架憔古。

7.全局宏顧名思義是定義了一些全局通用宏遮怜。我這里定義了四個:

UtilsMacros定義的是一些工具宏,比如獲取屏幕寬高投放,系統(tǒng)版本奈泪,數(shù)據(jù)類型驗(yàn)證等;

URLMacros定義服務(wù)器接口地址以及環(huán)境開關(guān);

FontAndColorMacros定義全局用的色值涝桅、字體大小拜姿,這里建議跟設(shè)計師共同維護(hù)一個設(shè)計規(guī)范,例如:定義一個主色調(diào)宏 MainColor冯遂,色值是 0x333333蕊肥,我們?nèi)质褂肕ainColor宏作為背景顏色,當(dāng)某天App改版蛤肌,色值改變壁却,我們只需要去更改 0x333333即可,其他代碼不需要動裸准,同時也能一定程度約束設(shè)計師展东,不要隨便增加一種顏色,非常接近的顏色應(yīng)當(dāng)使用一個炒俱。如果設(shè)計師不愿意維護(hù)這個規(guī)范盐肃,你可以嘗試打一架,打不過的話权悟,就只能自己維護(hù)了砸王,只為更清晰。

ThirdMacros 包含第三方框架相關(guān)的定義峦阁,例如keySecret等谦铃。只為更清晰。

8. 資源文件

8. 資源文件榔昔,上面說到過驹闰,這里我是存放了全局的一些資源文件,功能模塊的我放到了模塊內(nèi)的Resource文件夾內(nèi)件豌,個人喜好疮方,只為更清晰。

9. Pods三方管理

9. CocoaPods是iOS項(xiàng)目的依賴管理工具茧彤,開發(fā)iOS項(xiàng)目不可避免地要使用第三方開源庫骡显,CocoaPods的出現(xiàn)使得我們可以節(jié)省設(shè)置和第三方開源庫的時間曾掂。

GitHub源碼下載 認(rèn)同請點(diǎn)星

下面對你也許有幫助:

iOS 團(tuán)隊(duì)編碼規(guī)范—— 團(tuán)隊(duì)開發(fā)需要共同遵守的代碼規(guī)范

代碼注釋,教你用快捷鍵+代碼塊實(shí)現(xiàn)快速注釋—— 讓注釋不再是負(fù)擔(dān)珠洗,快捷鍵幫你解決

通用工具類宏定義—— 進(jìn)一步提升編碼效率

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市许蓖,隨后出現(xiàn)的幾起案子蝴猪,更是在濱河造成了極大的恐慌,老刑警劉巖自阱,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沛豌,居然都是意外死亡趋箩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門加派,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叫确,“玉大人,你說我怎么就攤上這事芍锦≈衩悖” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵娄琉,是天一觀的道長饶米。 經(jīng)常有香客問我,道長车胡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任照瘾,我火速辦了婚禮匈棘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘析命。我一直安慰自己主卫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布鹃愤。 她就那樣靜靜地躺著簇搅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪软吐。 梳的紋絲不亂的頭發(fā)上瘩将,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機(jī)與錄音凹耙,去河邊找鬼姿现。 笑死,一個胖子當(dāng)著我的面吹牛肖抱,可吹牛的內(nèi)容都是我干的备典。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼意述,長吁一口氣:“原來是場噩夢啊……” “哼提佣!你這毒婦竟也來了吮蛹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拌屏,失蹤者是張志新(化名)和其女友劉穎潮针,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體槐壳,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡然低,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了务唐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雳攘。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吨灭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出喧兄,到底是詐尸還是另有隱情啊楚,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布拯辙,位于F島的核電站涯保,受9級特大地震影響周伦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜及志,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一寨腔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锌畸,春花似錦靖避、人聲如沸比默。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伊佃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間塞祈,已是汗流浹背帅涂。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留媳友,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓捅位,卻偏偏與公主長得像,于是被迫代替她去往敵國和親尿扯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容