我有一个在我的应用程序中使用的框架,以及包含在应用程序包中的一些 XPC 服务。如何将所有捆绑包链接到应用程序的 Frameworks 文件夹中包含的框架的单个副本(而不是将框架复制到每个捆绑包)?所有的服务和应用程序都是沙盒的,所以我不确定 XPC 服务是否能够访问主应用程序包中的框架,因为它会在沙盒之外。
问问题
1013 次
2 回答
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
请参阅 Dave Dribin 的帖子“<a href="http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/" rel="nofollow noreferrer">使用@rpath:为什么以及如何”和 Mike Ash 的周五问答“<a href="http://www.mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html" rel="nofollow noreferrer">链接和安装名称”。
编辑:我自己在几个项目中使用过它并且它有效。
于 2013-01-14T21:03:29.980 回答
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"
更多信息在这里。
于 2013-01-14T01:34:29.553 回答