Xcode設(shè)置在編譯前自動運行腳本

根據(jù)項目需求章贞,同一個工程可能需要多個target冰悠,target之間只有細(xì)微的不同节槐,這時候使用target比多個project要方便的多。

最近項目用到了多target锯仪,但是碰到一個奇怪的問題泵督,某一個target的編譯文件經(jīng)常會莫名其妙的重復(fù)變多或者缺少某個文件的引用,例如我項目中有兩個target:app一號庶喜,app二號:


圖一

選擇targets名稱->Build Phases->Compile Source查看小腊,此時app一號的Compile Sources數(shù)量為3:

圖二

此時app二號的Compile Sources數(shù)量為5

圖三

這只是個demo完全可以手動點擊查看一下app一號缺少什么文件救鲤,真實項目中有成百上千Compile Sources手動對比幾乎不可能,并且有時候缺少某個文件編譯還不報錯溢豆,直到運行的時候才會出現(xiàn)crash蜒简,可能是因為xcode有緩存。但是為了項目更加安全并且減少手動工作量漩仙,是不是可以添加編譯前執(zhí)行的腳本搓茬,通過腳本分別讀取每個target的Compile Sources然后對比,打印出某個target特有的Compile Sources,這樣方便檢查添加队他。

打印結(jié)果如圖:


圖四

腳本分析了每個target特有的Compile Sourcesframework

做法:

  • 首先設(shè)置編譯前自動運行腳本入口
    打開項目配置卷仑,選擇Build Phases


    圖五

這樣就可以創(chuàng)建一個新Script Phase,然后在黑色區(qū)域?qū)懭肽愕哪_本


圖六

這樣就可以創(chuàng)建一個新Script Phase麸折,然后在黑色區(qū)域?qū)懭肽愕哪_本


圖七

在腳本中锡凝,你可以使用一些環(huán)境變量,例如${SRCROOT}表示項目的根目錄垢啼,${CONFIGURATION}表示項目的Configuration,窜锯,更多可以使用的環(huán)境變量可以參考蘋果官方文檔

當(dāng)編譯的時候就會自動執(zhí)行Script.sh腳本了芭析,腳本的輸出內(nèi)容可以在Build Log里找到(快捷鍵command + 9)锚扎,輸出如圖四所示。

以上只是添加了編譯前運行腳本馁启,那么腳本該如何獲取Compile Sources信息呢驾孔?下面就要了解一下project.pbxproj文件了。

project.pbxproj 文件被包含于 Xcode 工程文件 *.xcodeproj 之中惯疙,存儲著 Xcode 工程的各項配置參數(shù)翠勉。它本質(zhì)上是一種舊風(fēng)格的 Property List 文件,歷史可追溯到 NeXT 的 OpenStep霉颠。由于有Xcode工具的存在对碌,我們一般不需要與pbxproj直接打交道,通過General蒿偎、Build Settungs或者Info等面板俭缓,就可以完成項目工程配置信息的修改。

閱讀Xcode工程文件project.pbxproj小結(jié)
詳細(xì)了解project.pbxproj 文件酥郭。

Compile Sources信息就存儲在project.pbxproj中华坦,我們可以利用mac提供的property plist文件解析工具 plutil將pbxproj文件轉(zhuǎn)換為json,xml格式等等不从。在Script.sh腳本中我們轉(zhuǎn)換為json格式惜姐。

plutil -convert json -s -r -o ../compile_tools/pbxproj.json pbxprojTest.xcodeproj/project.pbxproj

-convert 選項可以傳入的參數(shù)有: xml1, binary1 和 json。轉(zhuǎn)換后保存在上一級目錄的compile_tools文件夾中。

然后我們就可以利用python讀取解析json文件歹袁,根據(jù)pbxproj規(guī)則逐步解析獲取Compile Sources信息坷衍。然后就可以就是多個target的Compile Sources信息數(shù)組去除交集,找出每個target獨有的条舔,打印出來枫耳。

Script.sh內(nèi)容如下:

echo "將project.pbxproj轉(zhuǎn)換為json格式"
plutil -convert json -s -r -o ../compile_tools/pbxproj.json pbxprojTest.xcodeproj/project.pbxproj

echo "啟動python虛擬環(huán)境"
source ../compile_tools/venv/bin/activate

echo "執(zhí)行python代碼,分析json文件"
python3 ../compile_tools/tools.py

echo "分析完成"

至于python讀取解析json的代碼孟抗,就是了解pbxproj數(shù)組組織管理規(guī)則之后正常解析json的工作迁杨,自己手動擼一遍吧加深對pbxproj了解!

參考:
Xcode如何設(shè)置在編譯前自動運行腳本

Xcode工程文件project.pbxproj小結(jié)

解析Xcode項目文件中的project.pbxproj:Object-C實現(xiàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凄硼,一起剝皮案震驚了整個濱河市铅协,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摊沉,老刑警劉巖狐史,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異说墨,居然都是意外死亡骏全,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門尼斧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吟温,“玉大人,你說我怎么就攤上這事突颊。” “怎么了潘悼?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵律秃,是天一觀的道長。 經(jīng)常有香客問我治唤,道長棒动,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任宾添,我火速辦了婚禮船惨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缕陕。我一直安慰自己粱锐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布扛邑。 她就那樣靜靜地躺著怜浅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恶座,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天搀暑,我揣著相機與錄音,去河邊找鬼跨琳。 笑死自点,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脉让。 我是一名探鬼主播桂敛,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼侠鳄!你這毒婦竟也來了埠啃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤伟恶,失蹤者是張志新(化名)和其女友劉穎碴开,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體博秫,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡潦牛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了挡育。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巴碗。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖即寒,靈堂內(nèi)的尸體忽然破棺而出橡淆,到底是詐尸還是另有隱情,我是刑警寧澤母赵,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布逸爵,位于F島的核電站,受9級特大地震影響凹嘲,放射性物質(zhì)發(fā)生泄漏师倔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一周蹭、第九天 我趴在偏房一處隱蔽的房頂上張望趋艘。 院中可真熱鬧,春花似錦凶朗、人聲如沸瓷胧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抖单。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間矛绘,已是汗流浹背耍休。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留货矮,地道東北人羊精。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像囚玫,于是被迫代替她去往敵國和親喧锦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容