你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> project.pbxproj,最熟悉的”陌生人”

project.pbxproj,最熟悉的”陌生人”

編輯:IOS開發基礎

作為iOS開發人員,pbxproj文件對於我們來說即熟悉又陌生,熟悉到我們每天都得見面。而除了偶爾遇到的合並沖突,其余時候我們甚至忘記了它的存在。當然,並不是說它不重要,相反,pbxproj文件保存了項目的所有配置關聯信息

pbxproj文件主要包含了以下幾項主要信息

  • 工程文件關聯信息,如PBXBuildFile、PBXFileReference

  • 組織結構分類信息,如PBXGroup

  • 項目工程配置信息,如XCBuildConfiguration、XCConfigurationList

pbxproj文件格式既不是json也不是xml,但是網上已經開源了不少解析該文件的工具,如XcodeProjectJavaAPI、pbxplorer等,通過這些工具,我們可以解析pbxproj文件從而獲取工程的一些配置信息等。

由於Xcode工具的存在,我們一般不需要與pbxproj直接打交道,通過General、Build Settungs或者Info等面板,就可以完成項目工程配置信息的修改。但是,當涉及到命令行的時候,Xcode就顯得束手無策。最常見的比如ci的持續集成。通常情況下,大型工程一般由多個開發人員共同開發,而每一個開發人員的開發證書配置文件都有可能不同,特別是當工程中包含Today或者Watch時,配置證書的不同經常會導致ci編譯的失敗。此時,通過Xcode幾乎無法解決問題,而在ci編譯前,通過修改pbxproj文件證書配置信息就能很好的解決該問題

打開pbxproj文件,涉及到證書配置文件的代碼段如下

A05D02521AFFB09600011ADB /* Debug */ = {
    isa = XCBuildConfiguration;
    buildSettings = {
           ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
           CODE_SIGN_IDENTITY = "";
           INFOPLIST_FILE = Simple/Info.plist;
           LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
           PRODUCT_NAME = "$(TARGET_NAME)";
           PROVISIONING_PROFILE = "4656b587-123a-45bc-a030-bd1a2ewqeqeq";
    };
    name = Debug;
};

我們需要做的就是在ci編譯前用服務器上相應mobileprovision替換PROVISIONING_PROFILE後面的mobileprovision(mobileprovision文件通常以字符串命名),不幸的是,你會發現多行PROVISIONING_PROFILE,而Today和Watch與工程的證書文件都不相同,簡單的字符替換已無法區別target。解決方法就是通過A05D02521AFFB09600011ADB這一串編號(姑且叫它編號吧)來區分不同的target

當工程創建的時候,每一個target都有一個相應的編號,並且不會再改變,編號後面/*Debug*/表明這一配置屬於Debug Configuration,而ci集成時一般選擇release或者distribution,因此,選擇對應的編號,其後面的PROVISIONING_PROFILE就是我們需要修改的字符串

filepath=project.pbxproj
functhParam(){
    orgin=$(grep -i -n $1 $filepath | head -n 1 | awk -F ':' '{print $1}')
    count=$(grep -i -A 200 $1 $filepath | grep -i -n 'PROVISIONING_PROFILE' | head -n 1 |awk -F ':' '{print $1}')
    let line=$orgin+count-1
    echo $line
    sed -i '' $line"s/^.*/$2/g" $filepath
}
 
functhParam "^.*7AD502241505A17900652731.*=" 'PROVISIONING_PROFILE = "ace6cb3b-9231-498c-acad-5ea4542f53ff";'

以上腳本的功能就是查找7AD502241505A17900652731編號後面的PROVISIONING_PROFILE,並將該行替換為“ace6cb3b-9231-498c-acad-5ea4542f53ff”表示的mobileprovision配置文件

以上只是修改pbxproj文件的一個應用,如果你想一鍵修改工程Bundle Identifier,或者你想工程文件夾整理,修改pbxproj都是一種不錯的選擇,換一換思路,也許路就有了,祝大家玩的愉快!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved