多環(huán)境配置方案
常見名詞解析:
Project:包含項目所有的代碼,資源文件,所有信息;
Target:對指定代碼和資源文件的具體構(gòu)建方式;
Scheme:對指定Target的環(huán)境配置。
多target 配置方案
-
創(chuàng)建一個新的Target
在原來Target的基礎(chǔ)上copy一份,伴隨著會copy一份info.plist文件,然后修改名稱,把copy的info.plist指向新的target:
copy新的Target.png
修改Target名稱.png
優(yōu)點:Target方式適合在同一份代碼中生成不同的app的情況下使用,因為可以配置不同的bundleID和證書;
缺點:如果只是用作多環(huán)境的話操作繁瑣,要設(shè)置多個build setting。
多個配置變量(scheme)
創(chuàng)建scheme:

在build setting的User-Defined中添加自定義變量,比如HOST_URL:

配置Info.plist文件:

代碼讀取Info.plist中的HOST_URL:
NSString *path = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"];
NSDictionary *info = [[NSDictionary alloc] initWithContentsOfFile:path];
NSString *hostUrl = info[@"HOST_URL"];
HOST_URL會根據(jù)不同scheme的配置讀取相應(yīng)的值,實現(xiàn)多環(huán)境配置。
相對于多個target方式不需要設(shè)置多個build setting。
多個xcconfig文件
為多個環(huán)境分別創(chuàng)建xcconfig,并指定Scheme對應(yīng)的xcconfig:

使用示例:

每個xcconfig都寫上對應(yīng)環(huán)境的變量,比如這里的HOST_URL。
與多個Scheme一樣,配置Info.plist,然后在代碼里面讀取出來。
xcconfig比上面兩種方式更加方便,而且避免直接修改build setting文件,而是可以直接通過xcconfig文件來修改build setting的內(nèi)容。比如說CocoaPods就是利用xcconfig實現(xiàn)Other Linker Flags、paths等的自動配置。另外xcconfig文件還能引用(include)其他的xcconfig文件,并且會復(fù)用被引用的xcconfig文件的配置。
備注:在xcconfig文件配置build setting 文件需要使用build setting字段的縮寫,縮寫可以參考官方文檔。
使用xcconfig要注意沖突
比如說對于Other Linker Flags的配置, 你自己xcconfig配置如下:
OTHER_LDFLAGS = -framework "AFNetworking"
如果別的xcconfig文件也有OTHER_LDFLAGS的配置,那么就會出現(xiàn)沖突,這時候要需要加上inherited關(guān)鍵字,比如可以改成:
OTHER_LDFLAGS = $(inherited) -framework "AFNetworking"
inherited表示繼承的意思。

