不幸的是,它不能IBDesignables
与静态库(或静态框架)一起使用。
这不是一个很好的答案,但我想给出一些原因。
似乎 Interface Builder 加载要显示为可设计的类的方式是通过实际动态加载您创建的动态框架(而不是您的应用程序的二进制文件),并直接使用这些类(在使用 Objective-C 运行时更改它们之后少量)。
您可以看到 Interface Builder 没有加载您的应用程序,而只是通过以下步骤加载了各个框架:
- 创建一个新的 Xcode 项目
- 在项目中创建一个新的框架目标
- 添加一个类是
IBDesignable
- 在应用程序的情节提要中创建一个视图并将其类设置为框架的
IBDesignable
类
- 单击“编辑器”菜单中的“刷新所有视图”
- 在项目的 DerivedData 文件夹中,在该
IBDesignables
目录中,您可以看到仅构建了您的框架目标。
界面生成器实际上是dlopen
手动加载您的框架。您还可以看到,为了在构建框架时促进这一点,Interface Builder 实际上RPATH
在您的二进制文件中添加了 2 ,因此可以在自定义路径中找到依赖项(您可以使用 来查看otool -L frameworkbinary
)。静态库无法使用这种加载二进制文件的方法。
对于它的价值,我认为最好的解决方法是构建动态框架,而不是静态库,但仅用于IBDesignable
构建。你必须做一些配置工作才能做到这一点,而且要绕过 Xcode 来完成这项工作并不容易,但如果你尝试一下,你可以使用构建路径或环境来区分IBDesignable
构建与“正常”构建。