2013-01-13 35 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

相关问题