前言
這篇文章和我的上一篇隔的時間是很長的簿晓,為什么呢?主要是因為我發(fā)現(xiàn)前面幾篇文章雖然都是我們iOS開發(fā)過程中非晨疬郑基礎(chǔ)的知識,但是我實在是表達的很不好噪矛,可能是因為我剛開始寫文章的原因吧量蕊。這段很長的時間,除了工作上的事情外摩疑,我花了很多時間去學習危融、閱讀很多大V的博客、文章雷袋,受益良多,也更發(fā)現(xiàn)自己的文章是多么的不忍直視辞居。也希望從這篇文章開始楷怒,成為一個分水嶺,思路結(jié)構(gòu)清晰的問章瓦灶,方便他人鸠删,也方便自己。這段時間贼陶,其實無論是感悟還是接觸的知識刃泡,都很多,但是很亂碉怔,寫下來其實就是為了梳理梳理烘贴,也為以后積累下來,讓自己有更快的進步撮胧。
本文寫的是:
1.如何用一個工程開發(fā)幾個類似的app
2.如何在工程中區(qū)別對待各個APP
3.自己的經(jīng)驗總結(jié)
需求
很多時候桨踪,當我們開發(fā)的一個大中型APP成熟以后,為適應(yīng)業(yè)務(wù)的發(fā)展和市場的開拓芹啥,會有從APP中派生出不同的子APP锻离,其功能可能也和本來的應(yīng)用八九不離十,但是如果每個APP都是一個項目墓怀,后期維護成本將會成倍增長汽纠,不過幸運的是,我們已有一套方案可以省去絕大部分復(fù)制粘貼的時間傀履,達到許多代碼都能復(fù)用的效果虱朵。
解決方法
解決方案就是采用多個target這一可行有易于理解操作的方法,這個方案簡單易懂,可能有缺點但是很實用卧秘。
首先復(fù)制出target(我隨便拿了個demo作為例子):
修改復(fù)制出來的target的名字以區(qū)分呢袱,但是,scheme的編輯是必要的翅敌,只需要在Manage schemes中修改即可羞福,如圖:
接下來給demo2創(chuàng)建一個文件夾,并給新的target配備配置文件放入其中蚯涮,首先是這三個:
通過右邊的Target Membership 來指定這些配置的歸屬治专。然后修改bunle id 和這些配置文件的配置(比如APP的icon、luanchimage等等)即可遭顶。
這時张峰,工程中就有兩個target了,而一個target棒旗,會生成一個APP喘批,我只需要用Target Membership勾選的方法,把兩個APP共用的模塊選中(當然铣揉,.h文件不需要如此):
其實這部分是比較繁瑣的饶深,可以把工程復(fù)制,然后采用拖拽copy的辦法逛拱,只是記得勾選敌厘。但是這些共用的添加完了之后,兩個APP差異的地方怎么體現(xiàn)呢朽合?下面我講講我自己思考實踐出來的處理辦法俱两,希望有更好辦法的同學提出指正:
1.修改Build Settings? -->? Preprocessing -->? Preprocessor Macro? 此例子中我修改為DEMO1、DEMO2曹步,用這個宏來區(qū)別兩個target宪彩。
2.分別在原APP的文件夾和demo2文件夾中創(chuàng)建配置頭文件,如demo1Config.h箭窜、demo2Config.h毯焕,這兩個頭文件中可以寫兩個APP都用的上但內(nèi)容有差異的的宏(如根導(dǎo)航欄顏色等),也可以放入各自需要的類的頭文件以區(qū)分磺樱。
3.在項目的公共配置文件(如.pch文件)中定義:
#ifdef DEMO1
#import "demo1Config.h"
#endif
//==========================================
#ifdef DEMO2
#import "demo2Config.h"
#endif
4.在有差異的地方用#ifdef XXX? ..... #else? ...... #endif? 區(qū)別兩個APP的差異代碼纳猫,原理是當編譯target demo2到#ifdef DEMO2 時,只會編譯前面的代碼 #else后面的代碼會被跳過竹捉,這樣就可以實現(xiàn)代碼中的區(qū)分了芜辕。
這種方案需要注意頭文件的import,如果你在target1的代碼中使用了某個類但未導(dǎo)入它的頭文件块差,在編譯target2的時候是看不出來的侵续,需要特別注意倔丈。
總結(jié)
在實際的開發(fā)中,這種方案確實能夠省去我們很多時間状蜗,特別是當同時新增同樣需求的時候需五,但是也相應(yīng)帶來了項目的pbxproj臃腫龐大,也讓配置文件多了起來轧坎,如果差異處多的話宏邮,代碼量、代碼的工整性以及代碼可讀性都會有一定的影響缸血,對于是不是用就需要見仁見智了蜜氨,如果想思考替代方案的話,可以閱讀參考另一種方案 捎泻,本文結(jié)束飒炎。