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