如何管理不同的Bundle Identifiers
- 創(chuàng)建不同的Target,每個(gè)Target使用不同的Bundle Identifiers。(缺點(diǎn):當(dāng)有多個(gè)不同的bundle identifiers時(shí)創(chuàng)建的Target過多,后期維護(hù)復(fù)雜,添加資源是要注意選擇添加到多個(gè)Target中)
- 通過.xcconfig配置多個(gè)選項(xiàng),根據(jù)需求切換,本文介紹這種方案。
創(chuàng)建 Build Configuration
選擇項(xiàng)目導(dǎo)航欄中頂部的元素,并確保Project部分中的“你的項(xiàng)目名稱”欄目被選中。完成后,您應(yīng)該看到Xcode已經(jīng)為您提供了兩個(gè)不同的configuration級別: Debug和Release。

現(xiàn)在我們要創(chuàng)建一個(gè)新的configuration。我們就叫它“ Staging”吧。在configuration列表下面單擊+號,選擇“Duplicate Debug configuration”,因?yàn)閺腄ebug configuration中刪除我們不想要的東西,要比在Release configuration中放回我們需要的東西容易的多。

創(chuàng)建.xcconfig文件
創(chuàng)建一個(gè).xcconfig文件。在項(xiàng)目導(dǎo)航欄中,右鍵單擊項(xiàng)目文件夾并選擇New file….在彈出的對話框中,選擇Configurations Settings File。點(diǎn)擊Next,給它命名為“Staging”,并確保Targets復(fù)選框全部沒有選中,因?yàn)槟幌雽⑺趹?yīng)用程序的包中。

現(xiàn)在轉(zhuǎn)到您項(xiàng)目的info窗口,在Configurations部分中,展開列表并從下拉框中選擇
Staging。
完成之后,您可以為主target重復(fù)這個(gè)過程,并選擇Debug文件。同樣,為Release Target重復(fù)這個(gè)過程。

修改編譯信息
一旦你有了Xcode configuration文件的設(shè)置,它就非常直接地改變了版本。例如,您想要更改編譯信息,比如應(yīng)用程序名稱、應(yīng)用程序版本、bundle identifier和bundle version,您可以對每個(gè).xcconfig文件進(jìn)行編輯,如下:
Debug.xcconfig:
IS_APP_NAME = Donate Debug
IS_APP_VERSION = 0.3
IS_APP_BUNDLE_ID = com.intensifystudio.DonateDebug
Staging.xcconfig:
IS_APP_NAME = Donate Staging
IS_APP_VERSION = 0.2
IS_APP_BUNDLE_ID = com.intensifystudio.DonateStaging
Release.xcconfig:
IS_APP_NAME = Donate
IS_APP_VERSION = 0.1
IS_APP_BUNDLE_ID = com.intensifystudio.DonateRelease
您可以在項(xiàng)目設(shè)置,info.plist和entitlement文件中使用您的配置變量。在本例中,我們將在info.plist中使用它更改應(yīng)用名稱、應(yīng)用程序版本和bundle identifier,如下所示:

參數(shù)和 正常在 xcode -> build setting 里面會有點(diǎn)不一樣,可以把工程用文本編輯器打開,查找對應(yīng)的名稱:

注意:更改 bundle identifier 將需要創(chuàng)建更多的provisioning profiles。
修改App Icon
使用Xcode配置文件,您現(xiàn)在可以輕松地為不同的build配置app圖標(biāo)。為不同的build定制應(yīng)用圖標(biāo)的過程與我們在前一節(jié)中討論的一樣,除了會在Build settings中使用變量。像這樣編輯每一個(gè).xcconfig文件:
Debug.xcconfig:
IS_APP_ICON = AppIconDebug
Staging.xcconfig:
IS_APP_ICON = AppIconStaging
Release.xcconfig:
IS_APP_ICON = AppIconRelease
完成后,切換到Build Settings,并使用變量${IS_APP_ICON}替換AppIcon:
然后在
Assets.xcassets創(chuàng)建幾個(gè)新的App Icon集合,然后按照上面的名字重命名。在代碼中訪問變量
Xcode的配置文件非常強(qiáng)大,也可以用于其他設(shè)置。例如,如果您有不同版本的API鍵和后端URL,您可以在每個(gè).xcconfig文件中指定它們。然后在你的代碼中,你可以取回它們。這是一個(gè)例子:
Debug.xcconfig:
BACKEND_URL = http:\/\/api.intensifystudio.com/development
CONSUMER_KEY = ck_a57e4fa2e14c12ae3f400371cf2951ec3dea5_dev
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f13f63bb22b_dev
Staging.xcconfig:
BACKEND_URL = http:\/\/api.intensifystudio.com/staging
CONSUMER_KEY = ck_a57e4fa2e14c12f400371cf2951ec3dea5_staging
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f13f63bb22b_staging
Release.xcconfig:
BACKEND_URL = http:\/\/api.intensifystudio.com/
CONSUMER_KEY = ck_a57e4fa2e14c12f400371cf2951ec3dea5
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f1f63bb22b
接下來,通過新建keyValue將這些變量添加到Info.pist:

您可以在運(yùn)行時(shí)使用下面的示例代碼從plist文件中讀取值:
func infoForKey(_ key: String) -> String? {
return (Bundle.main.infoDictionary?[key] as? String)?
.replacingOccurrences(of: "\\", with: "")
}
代碼非常簡單。我們正在訪問Main Bundle,以檢索我們想要使用的信息。然后,如果返回的值是一個(gè)URL,則從字符串中刪除所有的反斜杠。
切換 Build Configurations
要在Build Configurations 之間切換,只需按住option鍵,然后單擊頂部的scheme,就可以更改這個(gè)scheme。然后您可以選擇您喜歡的build configuration。
