我有一個正在我的應用程序中使用的框架,以及包含在應用程序包內的幾個XPC服務。我如何將所有包綁定到應用程序的Frameworks文件夾中包含的框架的單個副本(vs將框架複製到每個包)?所有的服務和應用程序都是沙盒,所以我不確定XPC服務是否能夠訪問主應用程序包中的框架,因爲它位於沙盒之外。使用多個包共享一個框架的單個副本
3
A
回答
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或更高版本)。
- 設置框架的安裝路徑和名稱。
INSTALL_PATH = @rpath
LD_DYLIB_INSTALL_NAME = @rpath/$(PRODUCT_NAME).$(WRAPPER_EXTENSION)/$(PRODUCT_NAME)
- 設置的應用程序和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」。
編輯:我用這個我自己的幾個項目,它的工作原理。
相關問題
- 1. 跨插件共享一個可可框架副本
- 2. 加載共享庫的多個副本
- 3. 多個表共享播放框架中的一個模型類
- 4. Eclipse:與多個項目共享一個大框架?
- 5. 框架共享一個JavaScript庫
- 6. 共享一個包含多個項目的單元測試
- 7. 從單個實體框架創建同一數據庫的多個副本
- 8. 正在使用框架的一個副本壞主意?
- 9. Linux共享庫中全局變量的單個副本
- 10. Laravel:跨多個應用程序共享相同的框架
- 11. 單個-swift.h由多個目標共享
- 12. 玩!框架,單個Jetty實例,部署多個項目,共享庫
- 13. 使用單個GitHub源更新多個本地工作副本?
- 14. 多個副本
- 15. 跨多個項目共享一個fabfile
- 16. Jenkins:使用一個共享資源的多個作業
- 17. 共享字段的多個表單
- 18. 共享字段的多個表單
- 19. 實體框架代碼第一個 - 共享的一對多實體
- 20. 實體框架 - 代碼第一 - 一個與共享主鍵
- 21. 多個副本:如何確保只有一個副本運行
- 22. C++:使用std :: cin的多個副本?
- 23. autotools:一個項目包含一個可執行文件,一個共享obj和一個「共享」內部庫
- 24. 如何在多個表單上共享一個validation.Constraint?
- 25. opencart共享訂單,一個購物車 - 多個客戶
- 26. 共享一個公共源文件夾的多個MAVEN模塊
- 27. 保存表單的多個副本 - Orbeon
- 28. iOS的多個應用程序共享一個LinkedIn應用
- 29. 多個服務共享一個進程,多少個「主」線程?
- 30. 創建一個簡單的共享庫
設置運行路徑搜索路徑是我最初嘗試過的,但在XPC服務上設置時似乎不起作用(服務啓動時出現dyld鏈接錯誤)。但是,使用'install_name_tool'手動修復庫路徑的技巧(見我的上面的答案)。謝謝 :) – indragie