前言
相信大家在開發(fā)項(xiàng)目中,難免會(huì)遇到一些多項(xiàng)目管理的困擾,如馬甲項(xiàng)目、BC端項(xiàng)目等,功能大有雷同,或者說想用同一個(gè)項(xiàng)目框架,多項(xiàng)目管理就顯得格外重要。
下面提供兩種方法來管理:
一、Target
相信大家也都知道,大部分都選擇會(huì)用這種方法,我簡(jiǎn)單整理出添加步驟和添加時(shí)常出現(xiàn)的問題:
1、添加target

2、拷貝原有的Info.plist替換新的后,進(jìn)行修改BundleID、App名稱、URL Schemes等相關(guān)信息

3、build settings 中設(shè)置prefix.Pch路徑

4、兼容資源,在目錄里添加資源,常有的資源后綴有: .m、.c、.a 、 frameword 、.tdb 、.xib 、.storyboard、.xcassets 、.bundle 、.txt 和 .string,

5、修改Podfile內(nèi)容后,更新Pods

6、代碼中辨別不同Target的處理方法:
build settings 中設(shè)置other C Flags 添加-D****=1


7、如不兼容Bitcode 記得改為 NO

8、有用到JsonKit等一些非ARC資源 需添加 -fno-objc-arc

9、RAC報(bào)錯(cuò):cannot create weak reference in file using:
解決辦法:https://blog.csdn.net/u010545480/article/details/52995908
13、支付寶報(bào)錯(cuò) ’openssl/asn1.h' file not found
解決辦法:https://blog.csdn.net/Mouse_Wang/article/details/50373798
二、xcconfig
xcconfig是用來保存build setting鍵值對(duì)的文件,里面是一些純文本;
//:configuration
= DebugPRODUCT_BUNDLE_IDENTIFIER = com.loyinglin.devDISPLAY_NAME =
測(cè)試標(biāo)題PRODUCT_NAME = LearningGCC_TREAT_WARNINGS_AS_ERRORS =
YES//:configuration = DebugGCC_PREPROCESSOR_DEFINITIONS = $(inherited)
COCOAPODS=1SSDEBUG=1
比如這里配置是一份debug的xcconfig,其中PRODUCT_BUNDLE_IDENTIFIER = com.loyinglin.dev的鍵值會(huì)在編譯的時(shí)候生效。
一個(gè)Xcode工程,一定會(huì)有Debug的開發(fā)環(huán)境和Release的發(fā)布環(huán)境,可能會(huì)有Testflight的灰度環(huán)境、DailyBuild的持續(xù)集成環(huán)境、XXLanguage的多語言環(huán)境、TestCoverage的覆蓋率測(cè)試環(huán)境、IAP的內(nèi)購(gòu)測(cè)試環(huán)境等;每個(gè)環(huán)境所用的證書不同,APP安裝后顯示的名字不同,provision file也不同等等。
此情況是可以使用Target來解決,公用的部分設(shè)置在project,每個(gè)環(huán)境根據(jù)各自特點(diǎn)自定義某些設(shè)置;這樣帶來的后果是target數(shù)量增多明顯,而target增多帶來的后果是當(dāng)需要新增extension的時(shí)候會(huì)工作量巨大,并且多環(huán)境的管理難度加劇。
另外一種方案是使用Configuration來區(qū)分環(huán)境,而xcconfig就是用來管理Configuration的文件。
如何創(chuàng)建和使用xcconfig?
1、在Xcode中新建文件,輸入config,選擇configuration settings file;這一步是創(chuàng)建xcconfig的文件。

2、在Xcode中選中工程,在configurations中選擇需要配置的選項(xiàng),這里以debug為例,點(diǎn)擊后選擇剛剛已經(jīng)創(chuàng)建的xcconfig,則可以把xcconfig和debug的編譯選項(xiàng)綁定在一起。

如果你用了cocoaPod,你會(huì)發(fā)現(xiàn)這一項(xiàng)已經(jīng)有了CocoaPod創(chuàng)建xcconfig,如果選擇了自己新建的xcconfig,則會(huì)編譯失敗;
此時(shí)可以在自己新建的xcconfig頭文件中加入以下代碼:
#include"Pods/Target Support Files/Pods-YourName/Pods-YourName.debug.xcconfig"
注意需要修改成自己的工程名。
3、在build setting選中某個(gè)配置項(xiàng),cmd+c復(fù)制然后到xcconfig的文件中,cmd+v就可以復(fù)制配置項(xiàng)到xcconfig中。
注意如果這個(gè)配置項(xiàng)在build setting已經(jīng)有自定義值,需要將其刪除,原因下面解釋。

image.png
xcconifg的配置和工程默認(rèn)配置、手動(dòng)在build setting配置有什么區(qū)別?
配置的結(jié)果優(yōu)先級(jí)不同,我的理解是:
a、project默認(rèn)配置是最低優(yōu)先級(jí),因?yàn)槭亲罨A(chǔ)的配置;
b、target配置基于project,但target默認(rèn)會(huì)添加一些配置,優(yōu)先級(jí)比上面高;
c、xcconfig的配置是target某個(gè)config的配置,優(yōu)先級(jí)比上面高;
d、target的build setting中直接添加的配置項(xiàng),優(yōu)先級(jí)比上面高;

手動(dòng)配置項(xiàng)
知道上面的關(guān)系后,我們可以解決使用xcconifg時(shí),CI 打包xcconifg配置項(xiàng)不生效的問題:
檢查是否對(duì)應(yīng)配置項(xiàng)是否在target的build setting中直接添加;
如果需要新增某個(gè)configuration,可以直接duplicate已有的configuration,但是如果使用Pods需要重新pod install,以生成對(duì)應(yīng)的pod工程的配置項(xiàng),否則會(huì)出現(xiàn)下圖的報(bào)錯(cuò):

找不到對(duì)應(yīng)庫(kù),因?yàn)樾碌腸onfiguration沒有設(shè)置對(duì)應(yīng)的file