我有一個工作空間Application.xcworkspace,它構建兩個框架和一個使用這些框架的可執行文件。這裏大概是他們如何佈局:XCode Framework參考路徑和生成輸出目錄
Framework_1 - 建立並輸出到醜陋的DerivedData路徑。
Framework_2 - 取決於Framework_1,它包含在項目的Frameworks區域中,並在「Link Binary with Libraries」構建階段中指定,並輸出到難看的DerivedData路徑。
應用程序 - 取決於Framework_1和Framework_2,它們包含在項目的Frameworks區域中,並且在「Link Binary with Libraries」構建階段中指定。輸出目錄又是那個醜陋的DerivedData路徑。
我的問題是,在被引用框架項目文件的路徑是DerivedData醜陋的路徑 - 它們就像../../Library/Developer/XCode/DerivedData/Application-longuglyuniquestring/構建/產品/發行/ Framework_1.framework。
如果我將源複製到另一個目錄,或者將其檢入到版本控制中並將其簽出到另一臺機器,那麼這些框架路徑不再有效。他們得到重新生成。被引用的框架在項目中顯示爲紅色。
到目前爲止,當我想建立在另一個文件夾的工作區,我有固定的問題的辦法是:
- 建立工作區 - Framework_1建立。
- 轉到該框架的「產品」節點並在Finder中顯示它。
- 複製新的醜陋路徑。
- 打開Framework_2和Application的項目文件,並更正Framework_1和Framework_2的路徑。
- 所有的紅色項目應該解決,一切都應該建立。
這個過程很乏味,我很幸運可以編輯項目文件。對於那些不瞭解我對項目文件知之甚少的同事來說,更糟糕的是,他們只想檢查代碼並讓它生成。
有什麼我需要做的框架的生成輸出目錄?自從建議醜陋的道路以來,我一直在改變它。是否有複製文件選項可用於將這些框架放置在與工作區相關的某個可預測位置?
任何幫助,將不勝感激。我確信我錯過了一些簡單的東西 - 從源代碼管理中檢出代碼或複製到另一個目錄的代碼不會構建就沒有任何意義。
這是不尋常的,因爲我有一個帶'.dylib'和'.app'的工作區,它們都放在同一個文件夾('.../DerivedData /.../ Build/Products/Debug')中。然後,我有一個腳本作爲'.app'構建的一部分,以將'.dylib'複製到'.app/Resources/Frameworks'目錄中。 – trojanfoe
應用程序輸出沒有問題 - 所有必需的框架都放在app/Frameworks目錄中。這是一個構建時間問題。在「鏈接二進制庫」構建階段中使用的包含框架二進制文件位於應用程序的DerivedData目錄中。當從不同的目錄構建項目時,該目錄會更改。所有項目文件/源都位於根目錄下的一個目錄下。如果我將它們複製到另一個目錄,項目將不會生成,因爲鏈接的庫路徑將不同。 – GTAE86
如果舊目錄和新目錄是對等的,那麼問題將被掩蓋,因爲舊的二進制文件的相對路徑仍然有效。這可能會導致對引用的框架進行更改,而不會在應用程序中「顯示」,因爲它仍與舊版本鏈接。查看問題的最簡單方法是將源複製到與工作空間/項目相關的乾淨的機器上。儘管一切都已到位,但在鏈接到框架的路徑得到糾正之前,它不會建立。 – GTAE86