使用Xcode Configuration (.xcconfig)打包不同的bundle identifier

如何管理不同的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 identifierbundle 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.plistentitlement文件中使用您的配置變量。在本例中,我們將在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。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容