文章搬運來源:www.jianshu.com/p/c40b31400…html
做者:differ_iOS面試
對iOS開發感興趣,能夠看一下做者的iOS交流羣:812157648,你們能夠在裏面吹水、交流相關方面的知識,羣裏還有我整理的有關於面試的一些資料,歡迎你們加羣,你們一塊兒開車xcode
本篇文章主要介紹多環境配置 & Mach-O與連接器 & Symbolmarkdown
多環境配置主要有如下幾種形式:架構
- 經過多
Target
可對不一樣的Target
設置不一樣的Bundle ID
用於區分開發ID
或生產ID
- 也能夠針對不一樣的
Target
配置不一樣的App Icon、App Display Name
- 還能夠在
Build Phases
中針對不一樣的Target
增減編譯的源文件和資源文件
若是是OC
代碼中使用DEV
預約義宏:app
若是是Swift
代碼中使用DEV
預約義宏:iphone
其中-D的含義查看以下:(也就是將聲明的變量設置爲TRUE)oop
使用以下代碼便可實現:測試
#if DEV
NSLog(@"DEV");
#else
NSLog(@"xxx");
#endif
複製代碼
經過添加不一樣的Scheme
對應不一樣開發環境ui
Info.plist
中添加以下字段供外界調用:
使用代碼以下:
NSString *infoPath = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *infoDic = [[NSDictionary alloc] initWithContentsOfFile:infoPath];
NSLog(@"%@",infoDic[@"HOST_URL"]);
複製代碼
經過多
Scheme
也能夠經過Build Settings
配置不一樣的圖標...
Pod 中引入的文件就是經過xcconfig
文件管理Build Settings
中的配置
建立本身的xcconfig
文件,並修改系統xcconfig
文件配置:
注意:
xcconfig
文件的命名須要以所在文件夾的名稱做爲前綴而後是項目名、環境名稱
xcconfig
定義不一樣環境的HOST_URL
Config-TestCode-debug.xcconfig
文件中添加:HOST_URL = http://192.168.1.100
Info.plist
中添加以下字段供外界調用:
使用代碼以下:
NSString *infoPath = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *infoDic = [[NSDictionary alloc] initWithContentsOfFile:infoPath];
NSLog(@"%@",infoDic[@"HOST_URL"]);
複製代碼
Config-TestCode-debug.xcconfig
文件中添加動態庫的配置:OTHER_LDFLAGS = -framework "AFNetworking"
HOST_URL = 192.168.1.100
// ld
OTHER_LDFLAGS = -framework "AFNetworking"
複製代碼
xcconfig
文件本質就是Key-Value
,能夠配置Build Settings
中的絕大部分字段xcconfig
文件中對應Build Settings
中字段的縮寫對應關係參考: Xcode Build Settings
若是使用本身建立的xcconfig
文件那麼執行pod install
就會提示咱們pod
生成的xcconfig
文件可能不會產生效果。要解決這個問題就須要在咱們本身建立的xcconfig
文件中引入pod
生成的xcconfig
文件:
// 絕對路徑、相對路徑均可以
#include "Pods/Target Support Files/Pods-TestCode/Pods-TestCode.debug.xcconfig"
複製代碼
本身建立的xcconfig
文件中存在pod
生成的xcconfig
文件中相同的字段,那麼就會覆蓋pod
中的字段,所以要想兩個文件中的字段都生效須要使用繼承標識:
OTHER_LDFLAGS = $(inherited) -framework "AFNetworking"
複製代碼
// 經過定義一個變量來解決
SLASH =/
HOST_URL = http:${SLASH}/192.168.1.100
複製代碼
config=Debug
][sdk=iphonesimulator*
][arch=x86_64
] = $(inherited) -framework "AFNetworking"通過上述條件設置後AFNetworking
庫僅會在Debug、模擬器、X86_64
架構下編譯 [sdk=iphoneos*]表示真機