我已经在 OS X 应用程序中实现了一个运行良好的自定义控件。当绘制控件时,它使用来自非系统框架的代码。控件是用swift编写的,框架是用Objective-C编写的。该框架不是与具有自定义控件的应用程序构建在同一项目或工作区中。我已将框架添加到目标并将其添加到复制文件构建阶段。
当我在 swift 中将 IBDesignable 装饰添加到自定义控件类时,尝试在 Interface Builder 中查看控件时出现错误。我得到的错误是:
file:///Users/ktam/github/MovingImagesDemo/Spinner2/SpinnerController.xib: error: IB Designables: Failed to render instance of Spinner:
dlopen(Spinner2.app, 1): Library not loaded: @executable_path/../Frameworks/MovingImages.framework/Versions/A/MovingImages
Referenced from: Spinner2.app
Reason: image not found
当我检查 IBDesignables 子文件夹中创建的应用程序包时,框架位于应用程序包中的正确位置。我假设在这种情况下实际运行的可执行文件不是 IBDesignables 应用程序包中的可执行文件,而可能是某种 Interface Builder 可执行文件,这解释了为什么无法加载框架映像。
我需要做什么来加载 Interface Builder 在使用 IBDesignable 渲染视图时可以找到的代码?
进一步测试后的信息:
我重建了框架,同时将安装目录指定为 ~/Library/Frameworks,然后将构建的框架复制到该位置,然后更新了应用程序目标,以便运行路径搜索路径包括 ~/Library/Frameworks 以及应用程序和接口生成器现在可以正确绘制自定义控件。
这不是我需要的解决方案,但它指出了问题所在,我仍然需要找出正确的解决方案。
解决方案是将 Xcode 中 Framework 目标的安装目录构建设置设置为 @rpath。然后,在构建应用程序的 Xcode 项目中,将值添加到应用程序目标的“运行路径搜索路径”构建设置中:@loader_path/../Frameworks。
使用@rpath代替@executable_path要灵活得多。
帮助我解决这个问题的两篇博客文章是:
使用 Dave Dribin 的 rpath
and
链接和安装,作者:Mike Ash
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)