iOS-開發進階01:多環境配置

文章搬運來源:www.jianshu.com/p/c40b31400…html

做者:differ_iOS面試

對iOS開發感興趣,能夠看一下做者的iOS交流羣:812157648,你們能夠在裏面吹水、交流相關方面的知識,羣裏還有我整理的有關於面試的一些資料,歡迎你們加羣,你們一塊兒開車xcode

本篇文章主要介紹多環境配置 & Mach-O與連接器 & Symbolmarkdown

1、多環境配置

多環境配置主要有如下幾種形式:架構

  • Project: 包含了項目的全部的代碼、資源文件、全部信息...
  • Target: 對指定代碼和資源文件的具體構建方法
  • Scheme:對指定Target的環境配置
  • xconfig:將配置寫到對應的文件中
一、建立多Target

  • 經過多Target可對不一樣的Target設置不一樣的Bundle ID用於區分開發ID生產ID
  • 也能夠針對不一樣的Target配置不一樣的App Icon、App Display Name
  • 還能夠在Build Phases中針對不一樣的Target增減編譯的源文件和資源文件
應用場景:僅在開發Target下測試一個功能

若是是OC代碼中使用DEV預約義宏:app

若是是Swift代碼中使用DEV預約義宏:iphone

其中-D的含義查看以下:(也就是將聲明的變量設置爲TRUE)oop

使用以下代碼便可實現:測試

#if DEV
    NSLog(@"DEV");
#else
    NSLog(@"xxx");
#endif

複製代碼
二、建立Scheme

經過添加不一樣的Scheme對應不一樣開發環境ui

應用場景:不一樣的開發環境配置不一樣的HOST

Info.plist中添加以下字段供外界調用:

使用代碼以下:

NSString *infoPath = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *infoDic = [[NSDictionary alloc] initWithContentsOfFile:infoPath];
NSLog(@"%@",infoDic[@"HOST_URL"]);

複製代碼

經過多Scheme也能夠經過Build Settings配置不一樣的圖標...

三、經過xcconfig文件管理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

2、xcconfig文件衝突解決

若是使用本身建立的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"

複製代碼

3、xconfig文件使用中的問題

一、URL變量中存在//,後面的字符串會被當作註釋
// 經過定義一個變量來解決
SLASH =/
HOST_URL = http:${SLASH}/192.168.1.100

複製代碼
二、使用變量時 {}和 ()包括變量做用相同
三、條件設置
OTHER_LDFLAGS[config=Debug][sdk=iphonesimulator*][arch=x86_64] = $(inherited) -framework "AFNetworking"

通過上述條件設置後AFNetworking庫僅會在Debug、模擬器、X86_64架構下編譯 [sdk=iphoneos*]表示真機

相關文章
相關標籤/搜索