共享具有多个包的框架的单个副本

时间:2013-01-13 22:48:40

标签: xcode cocoa frameworks xpc

我有一个在我的应用程序中使用的框架,以及应用程序包中包含的一些XPC服务。如何将所有捆绑包链接到应用程序框架文件夹中包含的框架的单个副本(将框架复制到每个捆绑包)?所有服务和应用程序都是沙箱,因此我不确定XPC服务是否能够访问主应用程序包中的框架,因为它将位于沙箱之外。

2 个答案:

答案 0 :(得分: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
    • 如果需要,可以将运行路径搜索路径设置为多个值。
  3. 有关@rpath的更多信息,请参阅Dave Dribin的帖子“Using @rpath: Why and How”和Mike Ash的周五Q& A“Linking and Install Names”。

    编辑:我已经将自己用于一些项目并且有效。

答案 1 :(得分: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