mip*_*adi 8 xcode cocoa frameworks objective-c
我正在编写一个框架(称为Lighthouse.framework),反过来,它使用来自另一个框架的代码(准确地说是RegexKit.framework).我已将RegexKit.framework复制到我自己的框架中,因此它具有如下结构:
Lighthouse.framework/
Versions/
A/
Frameworks/
RegexKit.framework
Lighthouse
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试运行使用Lighthouse.framework(我的框架)的应用程序时,我收到以下错误:
dyld:未加载库:@executable_path /../ Frameworks/RegexKit.framework/Versions/A/RegexKit
参考自:/Users/mdippery/Developer/Projects/Current/lighthouse/build/Debug/Lighthouse.framework/Versions/A/Lighthouse
原因:找不到图像
显然,加载器没有找到RegexKit.
以下是加载器期望加载的路径,礼貌otool:
build/Debug/Lighthouse.framework/Versions/A/Lighthouse:
/Users/mdippery/Library/Frameworks/Lighthouse.framework/Versions/A/Lighthouse (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0)
@executable_path/../Frameworks/RegexKit.framework/Versions/A/RegexKit (compatibility version 0.4.0, current version 0.6.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.19.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 677.26.0)
Run Code Online (Sandbox Code Playgroud)
我可以在另一个框架中包含一个框架吗?这是正确的方法吗?我该如何解决我的错误?
最简单的方法是使用@rpath.您的配置应如下所示:
最后,链接到Lighthouse.framework的任何应用程序都应将Runpath搜索路径设置为@loader_path /../ Frameworks
我发现了这个问题的解决方法。我采纳了 sbooth 答案中的一些想法,但修复更简单。我运行了这个脚本:
install_name_tool -change @executable_path/../Frameworks/RegexKit.framework/Versions/A/RegexKit @loader_path/Frameworks/RegexKit.framework/Versions/A/RegexKit "${TARGET_BUILD_DIR}/${PRODUCT_NAME}.framework/Versions/A/${PRODUCT_NAME}"
Run Code Online (Sandbox Code Playgroud)
作为运行构建脚本阶段。
请注意,对于一般情况,您必须更改@executable_path/../为@loader_path/,一切都很好。
| 归档时间: |
|
| 查看次数: |
2241 次 |
| 最近记录: |