我有一个在我的应用程序中使用的框架,以及应用程序包中包含的一些XPC服务。如何将所有捆绑包链接到应用程序框架文件夹中包含的框架的单个副本(将框架复制到每个捆绑包)?所有服务和应用程序都是沙箱,因此我不确定XPC服务是否能够访问主应用程序包中的框架,因为它将位于沙箱之外。
答案 0 :(得分:4)
你看过@rpath
了吗?这一切都假设您可以更改框架的构建设置(需要针对OS X 10.5或更新版本)。
INSTALL_PATH = @rpath
LD_DYLIB_INSTALL_NAME = @rpath/$(PRODUCT_NAME).$(WRAPPER_EXTENSION)/$(PRODUCT_NAME)
LD_RUNPATH_SEARCH_PATHS = @loader_path/../Frameworks/
LD_RUNPATH_SEARCH_PATHS = @loader_path/../../../../Frameworks
有关@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。