project.pbxproj 文件的學習

(這篇文章原來發布在 csdn ,如今 blog 遷移過來,並用 Markdown 從新排版以及修改)xcode

由於項目的需求,最近學習了一下 project.pbxproj ,對於這個文件的介紹,網上有很多資料,但感受都不甚詳細,這裏對我在學習中,學到的一些東西,稍做記錄,一方面方便新學的同窗能有個瞭解,同時也讓本身之後,有個參考。學習

xcode 將咱們對項目的配置信息,統一寫到了 project.pbxproj 文件裏,通常狀況下,咱們是不須要直接和 project.pbxproj 打交道的,咱們經過編輯 xcode 裏面的選項,如 buildsetting,general 來修改 pbxproj 文件,以下圖所示:
圖片描述ui

可是,在一些狀況下,咱們爲了方便、或者爲了不衝突,(尤爲在多人協做的狀況下),可能須要動態的修改 pbxproj 文件裏面的內容,這個時候,咱們就有必要了解一些project.pbxproj 文件的構成了。
pbxproj文件主要包含了如下幾項主要信息
工程文件關聯信息,如 PBXBuildFile、PBXFileReference
組織結構分類信息,如 PBXGroup
項目工程配置信息,如 XCBuildConfiguration、XCConfigurationList 這裏主要介紹項目工程配置信息。
查看工程的 pbxproj 文件的方法:找到工程文件,也就是 yourproject.xcodeproj,右鍵,顯示包內內容便可。spa

  • XCConfigurationList.net

這個部分,主要是 target ,以及 project 的一些基本信息,一般一個 project 會對應一個或者多個 target ,而每一個 target 以及 project 自己的配置都會不一樣的,相應的,在 pbxproj 文件中,須要將這幾個部分區分開來。以下圖:
圖片描述
上圖是一個 demo 工程裏的 XCConfigurationList。這個工程有一個 project PBXProject "NSUrlSession" ,兩個 target, 分別是
PBXNativeTarget "NSUrlSession" PBXNativeTarget "NSUrlSessionTests" 每一個部分,都包含了 debug release 兩部分,且都有相對應的 id。這些 uuid 是每一個target 相應的 CONFIGURATION 配置下的惟一標識。debug

  • XCBuildConfigurationcode

這個部分,記錄了 project 以及每一個 target 具體的配置信息,以上面的例子爲例,你想看知道 target NSUrlSession debug 對應的配置信息,你能夠根據其相應的id(62A4BA691B8228C000568CEF),去找到其相應的配置:
圖片描述
buildsetting 下面保存了咱們在 xcode 的 buildsetting 裏面,對該 target 的 debug 所設置的全部信息。若是你想知道每一個鍵值對具體對於那個選項,你能夠在 buildsetting 對某一項進行更改,而後 diff 一下 pbxproj 文件便可。blog

在大體瞭解了pbxproj文件的結構後,你就能夠開始作一些比較靈活的更改了,好比,咱們在開發過程當中,可能須要構建release、dailybuild等不一樣的ipa,每一個ipa都包含不一樣的provisioning文件。針對某種狀況,在構建過程總,手動選擇不一樣的證書,顯然太麻煩了,如今根據咱們上面的知識,咱們知道,咱們使用xcode對項目進行配置,全部的配置結果最終都會保存到pbxproj文件裏面,一樣的,provisioning選項,也保存在其中。那麼,咱們在build以前,根據不一樣的CONFIGURATION,修改pbxproj文件中相應的provisioning文件,就可以達到修改provisioning配置的目的,自動的實現上述過程。圖片

還以上面的例子來講,假如,我要在build以前,更改debug的provision,只須要把這個鍵值對改爲本身但願的樣子便可。
圖片描述ip

如下爲實現的腳本

#replace
functhParam(){
orgin=$(grep -i -n $1 $filepath | head -n1 | 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
}
#Debug
functhParam "^.*62A4BA691B8228C000568CEF.*="'PROVISIONING_PROFILE = "4173f94a-df88-4756-9f0e-1e40f83cdd21";'

這樣,就在腳本中,將 debug 的provisioning 綁定爲4173f94a-df88-4756-9f0e-1e40f83cdd21 了。

相關文章
相關標籤/搜索