2013-10-10 50 views
6

我有一個工作空間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的路徑。
  • 所有的紅色項目應該解決,一切都應該建立。

這個過程很乏味,我很幸運可以編輯項目文件。對於那些不瞭解我對項目文件知之甚少的同事來說,更糟糕的是,他們只想檢查代碼並讓它生成。

有什麼我需要做的框架的生成輸出目錄?自從建議醜陋的道路以來,我一直在改變它。是否有複製文件選項可用於將這些框架放置在與工作區相關的某個可預測位置?

任何幫助,將不勝感激。我確信我錯過了一些簡單的東西 - 從源代碼管理中檢出代碼或複製到另一個目錄的代碼不會構建就沒有任何意義。

+0

這是不尋常的,因爲我有一個帶'.dylib'和'.app'的工作區,它們都放在同一個文件夾('.../DerivedData /.../ Build/Products/Debug')中。然後,我有一個腳本作爲'.app'構建的一部分,以將'.dylib'複製到'.app/Resources/Frameworks'目錄中。 – trojanfoe

+0

應用程序輸出沒有問題 - 所有必需的框架都放在app/Frameworks目錄中。這是一個構建時間問題。在「鏈接二進制庫」構建階段中使用的包含框架二進制文件位於應用程序的DerivedData目錄中。當從不同的目錄構建項目時,該目錄會更改。所有項目文件/源都位於根目錄下的一個目錄下。如果我將它們複製到另一個目錄,項目將不會生成,因爲鏈接的庫路徑將不同。 – GTAE86

+0

如果舊目錄和新目錄是對等的,那麼問題將被掩蓋,因爲舊的二進制文件的相對路徑仍然有效。這可能會導致對引用的框架進行更改,而不會在應用程序中「顯示」,因爲它仍與舊版本鏈接。查看問題的最簡單方法是將源複製到與工作空間/項目相關的乾淨的機器上。儘管一切都已到位,但在鏈接到框架的路徑得到糾正之前,它不會建立。 – GTAE86

回答

2

看起來有一種方法來設定在每個工作區的基礎上DerivedData目錄 - Xcode 4 - build output directory

我只設置DerivedData是相對於我的工作區,然後編輯該項目相應的文件。唯一不利的是,如果我在另一個使用默認DerivedData路徑的工作區中使用其中一個項目,則必須將其更改回來。

非常感謝用戶DaGaMs - 他得到了讚賞。

我仍然看到來自XCode 5的不良行爲:我的項目在我的機器上運行。複製到另一個較低的目錄並驗證它仍然有效。退出XCode並將包含的目錄複製到網絡驅動器,然後從那裏到另一臺Mac。當我在另一臺Mac上打開它時,就像我從未做過一些更改。更糟的是,當我修復它時,XCode發了瘋,並在我的FRAMEWORK_SEARCH_PATHS路徑的每一端添加了6個額外的'\'字符!

問題的部分原因是我的應用程序中的子項目目錄是絕對的而不是相對的。工作區頂部的項目是「相對於組」,所以我將子項目更改爲具有相同的屬性。這似乎解決了這個問題,但由於某種原因,當我將所有文件複製到另一臺機器時,派生數據重定向不會與它一起使用。