【问题标题】:Loading code from a framework for a custom control in IBDesignable从 IBDesignable 中的自定义控件框架加载代码
【发布时间】:2015-05-02 03:45:30
【问题描述】:

我在一个运行良好的 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 和Application 和 Interface Builder 现在可以正确绘制自定义控件了。

这不是我需要的解决方案,但它指出了问题所在,我仍然需要找出正确的解决方法。

【问题讨论】:

    标签: ios interface-builder osx-yosemite ibdesignable


    【解决方案1】:

    解决方案是将 Xcode 中 Framework 目标的 Installation Directory 构建设置设置为 @rpath。然后在构建应用程序的 Xcode 项目中,将值添加到应用程序目标的“运行路径搜索路径”构建设置中:@loader_path/../Frameworks。

    使用@rpath 代替@executable_path 更加灵活。

    帮助我解决这个问题的两篇博文是:

    Using rpath by Dave Dribin

    Linking and Installing by Mike Ash

    【讨论】:

    • 谢谢。这让我发疯了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2015-07-08
    • 1970-01-01
    • 2021-07-31
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多