我有一个正在我的应用程序中使用的框架,以及包含在应用程序包内的几个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