本篇文章主要介紹多環(huán)境配置 & xcconfig文件使用
目錄
-
一、多環(huán)境配置
1、創(chuàng)建多Target、2、創(chuàng)建Scheme、3、通過xcconfig文件管理Build Settings中的配置、4、多環(huán)境之間的關(guān)系 - 二、xcconfig文件沖突解決
- 三、xconfig文件使用中的問題
一、多環(huán)境配置
多環(huán)境配置主要有以下幾種形式:
- Project: 包含了項(xiàng)目的所有的代碼、資源文件、所有信息...
- Target: 對(duì)指定代碼和資源文件的具體構(gòu)建方法
- Scheme:對(duì)指定Target的環(huán)境配置
- xconfig:將配置寫到對(duì)應(yīng)的文件中
1、創(chuàng)建多Target
- 通過多
Target
可對(duì)不同的Target
設(shè)置不同的Bundle ID
用于區(qū)分開發(fā)ID
或生產(chǎn)ID
- 也可以針對(duì)不同的
Target
配置不同的App Icon、App Display Name
- 還可以在
Build Phases
中針對(duì)不同的Target
增減編譯的源文件和資源文件
應(yīng)用場(chǎng)景:僅在開發(fā)Target下測(cè)試一個(gè)功能
如果是OC
代碼中使用DEV
預(yù)定義宏:
如果是Swift
代碼中使用DEV
預(yù)定義宏:
其中-D的含義查看如下:(也就是將聲明的變量設(shè)置為TRUE)
使用如下代碼即可實(shí)現(xiàn):
#if DEV
NSLog(@"DEV");
#else
NSLog(@"xxx");
#endif
2、創(chuàng)建Scheme
通過添加不同的Scheme
對(duì)應(yīng)不同開發(fā)環(huán)境
應(yīng)用場(chǎng)景:不同的開發(fā)環(huán)境配置不同的HOST
Info.plist
中添加如下字段供外界調(diào)用:
使用代碼如下:
NSString *infoPath = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *infoDic = [[NSDictionary alloc] initWithContentsOfFile:infoPath];
NSLog(@"%@",infoDic[@"HOST_URL"]);
通過多
Scheme
也可以通過Build Settings
配置不同的圖標(biāo)...
3、通過xcconfig文件管理Build Settings中的配置
Pod 中引入的文件就是通過xcconfig
文件管理Build Settings
中的配置
創(chuàng)建自己的xcconfig
文件,并修改系統(tǒng)xcconfig
文件配置:
注意:
xcconfig
文件的命名需要以所在文件夾的名稱作為前綴然后是項(xiàng)目名、環(huán)境名稱
使用xcconfig
定義不同環(huán)境的HOST_URL
Config-TestCode-debug.xcconfig
文件中添加:HOST_URL = http://192.168.1.100
Info.plist
中添加如下字段供外界調(diào)用:
使用代碼如下:
NSString *infoPath = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *infoDic = [[NSDictionary alloc] initWithContentsOfFile:infoPath];
NSLog(@"%@",infoDic[@"HOST_URL"]);
Config-TestCode-debug.xcconfig
文件中添加動(dòng)態(tài)庫(kù)的配置:OTHER_LDFLAGS = -framework "AFNetworking"
HOST_URL = 192.168.1.100
// ld
OTHER_LDFLAGS = -framework "AFNetworking"
xcconfig
文件本質(zhì)就是Key-Value
,可以配置Build Settings
中的絕大部分字段
xcconfig
文件中對(duì)應(yīng)Build Settings
中字段的縮寫對(duì)應(yīng)關(guān)系參考: Xcode Build Settings
4、多環(huán)境之間的關(guān)系如下:
二、xcconfig文件沖突解決
如果使用自己創(chuàng)建的xcconfig
文件那么執(zhí)行pod install
就會(huì)提示我們pod
生成的xcconfig
文件可能不會(huì)產(chǎn)生效果。要解決這個(gè)問題就需要在我們自己創(chuàng)建的xcconfig
文件中引入pod
生成的xcconfig
文件:
// 絕對(duì)路徑、相對(duì)路徑都可以
#include "Pods/Target Support Files/Pods-TestCode/Pods-TestCode.debug.xcconfig"
自己創(chuàng)建的xcconfig
文件中存在pod
生成的xcconfig
文件中相同的字段,那么就會(huì)覆蓋pod
中的字段,因此要想兩個(gè)文件中的字段都生效需要使用繼承標(biāo)識(shí):
OTHER_LDFLAGS = $(inherited) -framework "AFNetworking"
三、xconfig文件使用中的問題
1、URL變量中存在//,后面的字符串會(huì)被當(dāng)做注釋
// 通過定義一個(gè)變量來(lái)解決
SLASH =/
HOST_URL = http:${SLASH}/192.168.1.100
2、使用變量時(shí)${}和$()包括變量作用相同
3、條件設(shè)置
OTHER_LDFLAGS[config=Debug
][sdk=iphonesimulator*
][arch=x86_64
] = $(inherited) -framework "AFNetworking"
經(jīng)過上述條件設(shè)置后AFNetworking
庫(kù)僅會(huì)在Debug、模擬器、X86_64
架構(gòu)下編譯
[sdk=iphoneos*]表示真機(jī)