iOS-開發(fā)進(jìn)階01:多環(huán)境配置

iOS 開發(fā)進(jìn)階 文章匯總

本篇文章主要介紹多環(huán)境配置 & xcconfig文件使用

目錄


一、多環(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ī)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容