在實(shí)際開發(fā)過程中戒努,會(huì)有很多相似版本的app開發(fā)煞烫,相似的app和主app絕大多數(shù)功能相同, 這個(gè)時(shí)候如何最有效的處理多版本app的開發(fā)西乖?
1:評(píng)估具體差異后確定是否拆分project還是通過拆分target
2:對(duì)于絕大多數(shù)功能相似的情況松靡,采用多Target編譯方案來實(shí)現(xiàn)更有效率简僧。
3:如果使用拆分project,需要選擇大小合適的粒度去抽取app的公共的功能模塊雕欺。
多target在不修改代碼的情況下如何解決版本差異
思路主要是修改target的編譯文件岛马,同一個(gè)文件名去對(duì)應(yīng)不同路徑下的文件進(jìn)行編譯棉姐,這樣做的好處就是無需改一行代碼,通過設(shè)置target就可以做的不同target對(duì)應(yīng)不同的代碼和資源文件
修改資源文件引用
選擇對(duì)應(yīng)的target -> build phases -> copy bundle resouces 修改指定版本對(duì)應(yīng)的圖片路徑啦逆。
通過這種方式能解決不同版本編譯出來的appui界面對(duì)應(yīng)的差異伞矩。
此外,修改還可以修改不同targets對(duì)應(yīng)不同的圖標(biāo)icon和啟動(dòng)畫面
1:Asset xcassets -> App Icons & launch Images -> New Ios App Icon
2:general -> App Icons & launch Images -> 選擇對(duì)應(yīng)的icons和啟動(dòng)images
修改源代碼引用
選擇對(duì)應(yīng)的target -> build phases -> compile source 修改指定版本對(duì)應(yīng)編譯文件路徑夏志。
通過這種方式能解決不同版本編譯出來的app代碼的差異
也可以通過xcode屬性菜單中選擇文件所屬的target乃坤,這種方式更快捷一些。
修改pch文件的引用
可以定義多個(gè)pch文件盲镶,并在target -> build setting -> prefix header,修改不同target對(duì)應(yīng)的pch文件路徑
其他
此外還可以設(shè)置target對(duì)應(yīng)不同的項(xiàng)目和庫文件侥袜,啟動(dòng)前腳本等方式蝌诡,實(shí)現(xiàn)版本差異
修改代碼解決版本差異
這種方式解決不同target更直接,不用改動(dòng)整個(gè)文件溉贿,只需要對(duì)應(yīng)改動(dòng)部分代碼段就好了,我們利用xcode target中的preprocessor macros來實(shí)現(xiàn).
選擇對(duì)應(yīng)的target -> build setting -> preprocessor macros浦旱,定義對(duì)應(yīng)版本的宏宇色,然后再代碼中判斷宏,處理不同代碼邏輯颁湖。這種方式并不是常規(guī)做法宣蠕,簡單,最適合做開關(guān)控制甥捺。
例子
1:在preprocessor macros中添加一個(gè)鍵抢蚀,IS_XG=1
2:在代碼中判斷是否有這個(gè)開關(guān)
//打印ccsc版本信息
#ifdef IS_XG
NSLog(@"ccsc星光版本");
#else
NSLog(@"不是ccsc星光版本");
#endif
注意點(diǎn)
- 1.當(dāng)你將新文件添加到項(xiàng)目時(shí),別忘了同時(shí)選擇多個(gè)Targets镰禾,保持代碼在兩個(gè)版本中同步皿曲。
- 2.如果你使用Cocoapods,別忘了將新的target添加到podfile吴侦。你可以使用 link_with來指定多個(gè)targets屋休。你可以進(jìn)一步查詢Cocoapods documentation了解更多細(xì)節(jié)。你的podfile看起來應(yīng)該像這樣
platform :ios, '7.0'
workspace 'xxx'
link_with 'target1', 'target2'
pod 'xxx'