2013-01-13 41 views
3

我有一個正在我的應用程序中使用的框架,以及包含在應用程序包內的幾個XPC服務。我如何將所有包綁定到應用程序的Frameworks文件夾中包含的框架的單個副本(vs將框架複製到每個包)?所有的服務和應用程序都是沙盒,所以我不確定XPC服務是否能夠訪問主應用程序包中的框架,因爲它位於沙盒之外。使用多個包共享一個框架的單個副本

回答

2

這可以使用install_name_tool。例如:

install_name_tool -change @executable_path/../Frameworks/MyFramework.framework/Versions/A/MyFramework @executable_path/../../../../Frameworks/MyFramework.framework/Versions/A/MyFramework "$BUILT_PRODUCTS_DIR/MyApp.app/Contents/XPCServices/com.me.MyApp.SomeXPC.xpc/Contents/MacOS/com.me.MyApp.SomeXPC" 

更多信息here

4

你看過@rpath嗎?這一切都假定您可以更改框架的構建設置(需要定位OS X 10.5或更高版本)。

  1. 設置框架的安裝路徑和名稱。
    • INSTALL_PATH = @rpath
    • LD_DYLIB_INSTALL_NAME = @rpath/$(PRODUCT_NAME).$(WRAPPER_EXTENSION)/$(PRODUCT_NAME)
  2. 設置的應用程序和XPC的運行路徑搜索路徑,這樣的框架是包括在內。
    • 對於應用程式:LD_RUNPATH_SEARCH_PATHS = @loader_path/../Frameworks/
    • 對於XPC服務:如果需要的話LD_RUNPATH_SEARCH_PATHS = @loader_path/../../../../Frameworks
    • 的運行路徑搜索路徑可被設置爲多個值。

更多關於@rpath看到戴夫Dribin的帖子「Using @rpath: Why and How」和邁克·阿什的週五Q & A「Linking and Install Names」。

編輯:我用這個我自己的幾個項目,它的工作原理。

+0

設置運行路徑搜索路徑是我最初嘗試過的,但在XPC服務上設置時似乎不起作用(服務啓動時出現dyld鏈接錯誤)。但是,使用'install_name_tool'手動修復庫路徑的技巧(見我的上面的答案)。謝謝 :) – indragie

相關問題