2012-07-17 96 views
7

我公司的iPhone/iPad產品已經遷移了幾代iOS和Xcode(現在在5.1和4.3),並且有很多目標。也許正因爲這些因素,也有許多相同的線在PBX​​BuildFile部分每個源文件,如:可以安全地刪除XCode的project.pbxproj文件中的文件引用嗎?

 
14EE4CD315A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD415A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD515A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD615A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD715A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 

注意,對於一個給定的源文件中的行都是絕對的(我錯了,他們是不是很...)相同,並且重複行的數量從無到半打或更多。由於這種重複,project.pbxproj的PBXBuildFile部分長度差不多有5000行,但我們真的只有大約1200個獨特文件。

在我拼湊出一個腳本去除所有這些重複行,並要求測試對所有構建和目標進行完全迴歸之前,我想確保Xcode不需要這些重複行出於某種奧術原因。

我相當肯定,這不是由flubbed版本控制所致;重複行只出現在PBXBuildFile部分,雖然我不喜歡P4,但合併project.pbxproj文件更改時沒有什麼問題,儘管在將近2萬行時,它有點笨拙。我認爲Xcode的一些版本可以做到這一點,也許在添加新的目標時,但我沒有發現有人抱怨這個問題。

次要的問題: 這是怎麼回事?是否有其他人發現這些重複的行?

回答

2

過帳後人,萬一別人運行到這一點。

發生這種情況時,開發者在不同的分支,例如工作的所有的時間將文件移動到不同的文件夾,在另一個子文件夾中添加新組,以便另一個開發人員在單獨的分支上進行更改等,然後需要將其項目更改合併回公共基本分支。合併Xcode項目文件是它自己的一種特殊的方式,沒有什麼好的方法可以確定哪些是你想要保留的參考文件;因爲@Maistor Kokir指出,對於每個引用,id將是唯一的,並且選擇正確的ID至關重要,因爲組通過ID引用文件,更重要的是,構建規則和目標也會引用該ID。

我發現可靠地解決這個問題的唯一方法是刪除所有對該文件的引用(在構建目標的「構建階段」|「編譯源代碼」中),然後再次將其添加回來。

而且,爲了真正解決它的問題,我建議開發者在公共分支(例如git「master」分支)上做任何項目更改,然後將該更改合併到他們的開發分支。項目增加通常不需要相同的處理;只會在「合理範圍內」進行更改(其中包括但不限於而不是)將文件移至其他組,甚至移至同一組中的其他位置,重命名或移除組,刪除或修改子模塊參考等經驗將是你真正的指導。

5

正如你所看到的文件ref是重複的,但是每個目標內的文件id有一點點區別14EE4CD * * 15A5E69000DCA763,第8位數字相當不同。

+0

老鼠,我不能相信我錯過了在幾乎相同的ID海。我放棄了在這個問題上得到答案,我不得不回頭看看ID如何映射到項目變體。 – Taryn 2012-11-18 22:21:00

+1

是的,看起來好像你有多個構建目標,本節將針對每個目標唯一地引用它們。有道理。 – 2014-05-13 22:14:34

0

我終於編寫並運行剝離了許多重複文件引用的腳本。這樣做似乎完全無害,我的本地構建繼續正常工作。 我從來沒有檢查過那些問題,因爲那時我改變了僱主,而且拋棄一個有可能在離開前打破十幾個團隊的潛力的炸彈似乎很無禮。

0

通常Xcode中生成多個目標的引用文件唯一的參考(ID的)。我想你有兩個以上引用的構建目標和LoginViewController,它們都以不同的fileRef ID結尾。雖然它看起來相同,但假設它可能是無害的,可能會導致崩潰。

您可以從http://www.monobjc.net/xcode-project-file-format.html閱讀更多關於pbxproj文件。

相關問題