OSX: changing path of .framework
我的Mac OS应用程序与非系统提供的框架Foo.framework链接。 我在XCode中添加了对该框架的引用,并且该应用程序构建良好。 我也有一条将框架复制到输出Frameworks文件夹(MyApp.app/Contents/Frameworks)的规则。 但是,在运行时,二进制文件正在?/ Library / Frameworks中寻找框架,并且该应用程序无法加载。
otool -l MyApp.app也告诉我,它正在/ Users // Library / Frameworks中寻找框架。
有人可以解释为什么会这样吗,以及使应用程序在应用程序包的Frameworks文件夹中显示的正确方法是什么?
我棘手的解决方法是包括一个自定义脚本,以使用install_name_tool更改mach-o二进制文件中的路径,但是我敢肯定有一种干净的方法。
您走在正确的轨道上。
这是因为在OS X上创建
解决问题的"最佳"方法是修改框架的源代码,以便在构建框架时设置-
但是,这通常是不可能的,要么是因为您没有源,要么是框架中有大量的autoconf东西,几乎使它不可能。在这种情况下,请使用带有-id标志的install_name_tool来更改库中记录的
那么,话虽这么说,您将其更改为什么?
@executable_path /../ Frameworks / Foo.framework / Foo(或其他名称)
因此,从包含Foo.framework的目录中:
1 | install_name_tool -id @executable_path/../Frameworks/Foo.framework/Foo Foo.framework/Foo |
在运行时,加载程序会将@executable_path解析为应用程序可执行文件的路径。显然,您还需要设置一个"复制文件"构建阶段,以将框架复制到应用程序捆绑包的Framework文件夹中。
您还可以将