3

許多人,包括我試圖爲iOS創建一種靜態庫框架來歸檔某種模塊性。框架是實現這一目標的最佳方式,但它不是由Apple提供的,且解決方法無法正常工作。將靜態庫項目作爲Xcode4中的iOS項目上的框架模塊管理

https://github.com/kstenerud/iOS-Universal-Framework/tree/master/Fake%20Framework/Templates

  1. 假框架不能從構建階段鏈接標籤引用。
  2. 真正的框架需要修改系統設置。並且仍然不能在每個部件上順利運行。

問題是靜態庫需要頭文件,並且不可能在沒有腳本的情況下在不同項目的另一個位置上的項目上引用頭文件。而腳本打破了IDE的文件管理抽象。

如何以便捷的模塊方式使用靜態庫項目? (只需將項目拖入另一個項目即可完成嵌入)

回答

2

解決方案。

  1. 轉到項目目標構建設置
  2. 查找公共標題文件夾路徑。 (定義名稱= PUBLIC_HEADERS_FOLDER_PATH
  3. 將其設置爲YourLibrary.framework/Headers。我已使用${PRODUCT_NAME}.framework/Headers與項目名稱自動同步。
  4. 轉到建立階段並找到複製標題一步。
  5. 將所有需要的標題移動到Public窗格。

現在所有的頭文件將形成像框架並與產品二進制複製。 IDE將把它們全部作爲一個單元複製到應用程序的構建文件夾等臨時文件夾中。因此,引用應用程序項目可以自動使用標題。

這是一個竅門。創建的目錄結構不是真正的框架。因爲它不包含任何二進制文件。但是,我們並不需要真正的框架來存檔這個功能。 IDE與沒有任何二進制文件的框架一起工作我不想在沒有關於內部結構的文檔的情況下攻破IDE。


這工作得很好,但是你會遇到一些問題,當你存檔。發生這種情況是因爲Xcode4在存檔時特別表現出來。這是解決方法。

  1. 對於每個嵌入式庫項目,SKIP_INSTALL = YES都在目標構建設置中。對於最終產品項目,FRAMEWORK_SEARCH_PATHS = "${OBJROOT}/UninstalledProducts"。請注意,此設置僅適用於Release構建模式。

現在它會被存檔。


在跨平臺庫的情況下,可以有很多平臺的項目。但有時Xcode會將某些產品顯示爲紅色,即使編譯成功。

這是Xcode的一個bug。 IDE顯示取決於SDKROOT項目構建設置。因此,如果您在目標上設置SDKROOT,它將不起作用。在更改項目構建設置的SDKROOT之後,您可以檢查該產品是否變爲黑色。有關詳細信息,請參閱此Open Radar條目。

http://openradar.appspot.com/9636211

如果要修復這個bug,請將此情況報告給Apple's Radar。重複的錯誤會引起Apple的注意。只是複製粘貼&我的報告:)

+0

這是非常出色的偵查手段,也是我發現處理Xcode無法正確鏈接非對等目錄子模塊的唯一辦法。謝謝。 – tooluser

5

我已經更新了模板以取消腳本目標。它現在從常規目標構建通用框架,因此可以將其包含在工作空間中或作爲項目依賴項。

有了一個真正的框架目標,你可以將其添加到「與庫鏈接二進制文件」,它會顯示正常。

對於假框架,Xcode無法識別目標類型,所以您需要手動添加鏈接命令。例如,假設你的框架被稱爲富:

  1. 展開「產品」組的框架項目中,然後將「Foo.framework」到你的應用目標的「鏈接二進制與圖書館」建設階段。

  2. 在你的應用程序的目標,在構建設置編輯「其它鏈接器標記」,並補充說:「-framework富」

框架模板鏈接,任何人不知道我們在談論:https://github.com/kstenerud/iOS-Universal-Framework

相關問題