? ? ? ?在實現(xiàn)iOS項目的自動打包工程中,我們需要配置好工程的證書文件信息,為了能夠自動的根據(jù)bundle id來設(shè)置不同的profile文件,我們可以通過腳本文件來修改工程的projext.pbxproj文件幫助我們進行自動設(shè)置。
? ? ? ?測試環(huán)境:xcode8 多target
1. Project.pbxproj
Xcode項目中的xxx.xcodeproj其實是一個文件夾,右鍵單擊xxx.xcodeproj,顯示包內(nèi)容:

Project.pbxproj的解析
關(guān)于這個配置文件的結(jié)構(gòu),請參考project.pbxproj,最熟悉的”陌生人(http://www.olinone.com/?p=215),解析該文件可以使用現(xiàn)有的解析工具mod-pbxproj,該工具是一個python的腳本。其github地址為:https://github.com/kronenthaler/mod-pbxproj。
為了修改不同taget的profile,我們需要知道這些配置在文件中的具體位置,不難發(fā)現(xiàn):

我們的目標(biāo)是為不同的bundle id設(shè)置不同的profile,所以只需要找到不同target的XCBuildConfiguration,修改其中PROVISIONING_PROFILE的值即可。通過分析project.pbxproj文件結(jié)構(gòu),你會發(fā)現(xiàn)其找到這些target的buildSettings的路徑如下:
rootObject=> PBXNativeTarget=> XCConfigurationList=> XCBuildConfiguration。
XCBuildConfiguration會有Debug和Release兩個版本,這里我們以修改Release版本的為例進行說明。
2. Python腳本修改profile
需要在工程目錄下配置如下腳本文件,通過從json文件中讀取配置信息,然后根據(jù)不同的bundle id來設(shè)置不同的profile文件和其他字段信息。其中xcode_configurator_profile.py為修改profile的腳本文件,profile.json為配置的證書信息。demo如下圖所示:

首先在profile.json文件中配置好bundle id和對應(yīng)的profile文件,如下如所示:

然后在工程目錄下執(zhí)行xcode_configurator_profile.py:

檢查profile修改結(jié)果:

如果設(shè)置了以后有任何問題, 你可以在對應(yīng)的xxx.xcodeproject下找到對應(yīng)的備份。
文章中源碼及demo可見github:https://github.com/cornyu/xcode_auto_configurator_profile