背景說明
在iOS開發(fā)過程中,常常會朋友一個(gè)應(yīng)用對應(yīng)多套環(huán)境的情況,一般分為測試環(huán)境、預(yù)發(fā)環(huán)境、生產(chǎn)地址,每套地址的域名不一樣。每次打包或者安裝的時(shí)候都要手動(dòng)去修改一下地址相當(dāng)麻煩,而Xcode正好提供了一個(gè)可以輕松解決這種情況的機(jī)制—Configuration。
跟Schema相關(guān)的配置
- Build Archive Architecture Only:只編譯當(dāng)前架構(gòu)
- Code Signing Identity: 打包證書
- PreProcessor Macros: 預(yù)編譯環(huán)境常量
- Asset Catalog Compiler - Options: 圖片資源編譯選項(xiàng)
- User-Defined:用戶定義的常量
新增Scheme配置
添加測試環(huán)境配置

注意:添加測試環(huán)境時(shí)復(fù)制測試環(huán)境的配置,添加線上環(huán)境時(shí)復(fù)制線上環(huán)境的配置。
新建 Scheme

新建完成后,Build Configuration 選剛才新建的配置FKTestDebug

下面依次來說幾個(gè)配置項(xiàng):
1.Build Active Architecture Only

在Build Settings中:
Architectures 想支持的指令集
Valid Architectures 有效的指令集
Build Active Architecture Only 是否只編譯當(dāng)前設(shè)備適用的指令集(如果這個(gè)參數(shù)設(shè)為YES,那么如果你用iPhone 6調(diào)試,最終生成的一個(gè)只支持arm64指令集的Binary,不過指令集是向下兼容的,比如用iPhone4(armv7)編譯出來的APP,可以在iPhone5(armv7s)上運(yùn)行,因?yàn)閍rmv7s向下兼容armv7,但是不可以在iPhone3G(armv6)上運(yùn)行;如果這個(gè)參數(shù)設(shè)為NO,最終生成一個(gè)支持 Architectures 中所有指令集的Binary,所以一般在DEBUG模式下設(shè)為YES,RELEASE設(shè)為NO,這樣可以加快打包的速度)
iOS設(shè)備的指令集常見的有以下幾種:
- ARMv8/ARM64: iPhone 6(Plus), iPhone 5s, iPad Air(2), Retina iPad Mini(2,3)
- ARMv7s: iPhone 5, iPhone 5c, iPad 4
- ARMv7: iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3, iPad Mini
- ARMv6: iPhone, iPhone 3G, iPod 1G/2G
因?yàn)镃onfiguration在原來的基礎(chǔ)上添加了一條測試配置,所以Build Active Architecture Only 中也出現(xiàn)了1個(gè)條目,可供配置。
2.Code Signing

可根據(jù)scheme配置對應(yīng)的證書
3.Preprocessor Macros 預(yù)編譯宏
這條就重要了,環(huán)境常量可以用來配置App的環(huán)境
1、新增一條環(huán)境常量:

2、測試環(huán)境變量是否可用

3、經(jīng)測試,環(huán)境變量可用!
4.Asset Catalog Compiler - Options
1.添加Icon的圖片集

2.在配置中修改配置對應(yīng)的Icon圖集

5.User-Defined

新增一條AppName

2.自定義好用戶自定義宏后,打開info.plist,讀取自定義的宏,語法為${XXXX},本例中在Bundle name 、 Bundle identifier中輸入${APP_NAME}、${APP_IDENTIFIER},在運(yùn)行程序的時(shí)候,app對應(yīng)的設(shè)置就會讀取大括號中的值自動(dòng)變更了。

Cocoapods項(xiàng)目
當(dāng)項(xiàng)目是Cocoapods項(xiàng)目時(shí),
如果發(fā)現(xiàn)除了自帶的Release和Debug可以運(yùn)行外其他的都不能運(yùn)行,
可以嘗試選中pod的project,在它的配置中也添加對應(yīng)的Configuration就可以了。