我的工作很複雜,但對我來說效果很好。
在靜態庫項目的設置中,在「打包」部分中,我將「包裝擴展」設置爲「框架」。然後我改變:
"Public Headers Folder Path" to "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)/Headers"
和
"Private Headers Folder Path" to $(PRODUCT_NAME).$(WRAPPER_EXTENSION)/PrivateHeaders
最終結果在構建產品是一個名爲「MyLibraryName.framework」膽量文件夾,其中活脫脫...好..一個框架。有一件事我喜歡,這是我可以使用框架式包括在我的代碼:
#include <MyLibraryName/blah.h>
的缺點是,(如發現在從「zoul」的答案)「歸檔」命令不能正常工作。它不起作用的原因是因爲Archive命令將最終構建產品和目標構建產品分離到單獨的目錄中。一個正常的「構建」不會這樣做。歸檔時,系統會嘗試在最終構建產品目錄中找到靜態庫標題,並且無法找到它們,因爲系統會將它們放入靜態庫的目標構建目錄中。
如果你考慮一下,Xcode認爲你的靜態庫的目標有一個「產品」。該產品是「libMyLibraryName.a」。但是,目標確實有兩個產品:一個是圖書館,另一個是圖書館的標題集。存檔命令的問題是該庫作爲構建產品複製,但標題不是。當您嘗試運行歸檔文件時,最終會出現「找不到頭文件」。
要解決這個問題,我所做的就是使用運行腳本構建階段。該腳本看起來像這樣(用Ruby編寫):
if ENV["TARGET_BUILD_DIR"] != ENV["BUILT_PRODUCTS_DIR"] then
$product_name = ENV['PRODUCT_NAME']
$wrapper_extension = ENV['WRAPPER_EXTENSION']
$target_build_dir = ENV['TARGET_BUILD_DIR']
$built_products_dir = ENV['BUILT_PRODUCTS_DIR']
$source_file = File.join($target_build_dir, $product_name + "." + $wrapper_extension)
$dest_file = File.join($built_products_dir, $product_name + "." + $wrapper_extension)
system "ln -s #{$source_file} #{$dest_file}" if File.exist?($source_file)
end
因此,如果目標build目錄和內置的產品目錄不匹配......創建符號鏈接到假冒的「框架」我已經創建在建成的產品目錄。
正如我所說,這是一個複雜的計劃,但它的工作原理和讓我使用我喜歡的框架式包括。如果Xcode允許iOS開發人員創建Frameworks(這也意味着iOS會讓開發人員創建動態庫,Apple不願意這麼做),或者Apple會創建一個框架變體,那麼整個混亂將會大大簡化......一個包它包含一個靜態庫和與之一起使用的頭文件(一個static_framework?),以便您擁有一個包含頭文件和靜態庫的構建產品。
我一直在試圖找到一個優雅的解決方案,這幾天了。你的是我迄今發現的最好的。 – Bastek 2012-06-07 19:21:58
@zoul你可以請擴展嗎?我見過的教程都沒有解釋過程。我所做的是1)創建一個靜態可可觸摸庫,2)將xcodeproj文件拖放到客戶端項目中的'Dependencies'組中,3)將它添加到Target Dependencies和Link Binary中,4)嘗試設置標題搜索路徑...並且沒有辦法使這個最後一步工作:( – entonio 2013-08-14 23:06:03
@entonio,[這是一個很好的教程](http://blog.carbonfive.com/2011/04/04/using-開源靜態庫-Xcode-4 /#adding_the_static_librarys_headers),它還包括設置標題路徑,希望它在發佈兩年後仍然是最新的。 – zoul 2013-08-15 06:27:28