无法呈现IB Designables的实例
我有一个Objective-C和Swift混合dynamic框架。 混合框架与两个纯粹的Objective-Cdynamic框架相连。
当我试图在IB Designable的混合框架中标记任何类,并在storyboard或nib中使用该类时,Xcode始终表示它的实例未能呈现。
并有错误消息:
IB Designables:无法呈现WZUITokenField的实例:dlopen(WZUIKit.framework,1):未加载库:/Library/Frameworks/WZFoundation.framework/WZFoundation引用自:WZUIKit.framework原因:未find图像
IB Designables:无法更新自动布局状态:dlopen(WZUIKit.framework,1):未加载库:@ rpath / WZFoundation.framework / WZFoundation引用自:WZUIKit.framework原因:未find图像
框架WZUIKit是Objective-C和Swift混合框架,WZFoundation是纯粹的Objective-C。
另外,所有这些配对都可以在设备或模拟器上使用。
最后,我通过在目标的构build设置“ Runpath Search Paths
字段中添加$(CONFIGURATION_BUILD_DIR)
来解决此问题。
另外,还有一些额外的步骤可能需要你的Xcode。
- 清除项目的Xcode派生数据。 它们在
~/Library/Developer/Xcode/DerivedData
- 按⌘+ K清理当前版本
- build立你的项目
- 在故事板中进入
Editor
菜单,并执行Refresh All Views
; 等待构build完成,错误应该消失
感谢@Mojtaba
如果您在构buildMac App时@loader_path/../Frameworks
同样的问题, @loader_path/../Frameworks
添加到Runpath Search Paths
解决此问题。
对我来说,它closuresxcode并重新打开它。 没有错误之后。 谢谢。
有趣。
首先,WeZZard的回答让我朝着正确的方向前进,但并不完全是我的解决scheme。
在我的iOS项目中,有些东西已经覆盖了我的目标中的Runpath Search Paths
字段。 它看起来像这样:
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
我尝试了他添加$(CONFIGURATION_BUILD_DIR)
解决scheme,但它没有为我工作。 由于它不工作,出于习惯,我刚刚删除configuration条目(回到项目默认值)。 当我这样做,它重置为这样的:
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
如果我挖掘到我的xcconfig文件,似乎来自Cocoapods。
与Alex @loader_path
, @loader_path
是关键,但在iOS上比Mac OS X稍微不同。
我有同样的问题在Xcode 6.4中,添加testing目标成员到故事板为我修复这些错误。
另外,我的testing目标在testing目标的运行Runpath Search Paths
设置了@loader_path/Frameworks
,而不是原始目标。
我只是想出了另外一个理由:
当我使用“编辑器 – >debugging选定的视图”,我看到它崩溃,因为我使用CoreGraphics创build一个图像,并将其用作一个button的背景图像:
class func imageWithColor(color: UIColor, size: CGSize) -> UIImage { let rect = CGRectMake(0.0, 0.0, size.width, size.height); UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0); let context = UIGraphicsGetCurrentContext(); // It's alraedy nil here :( CGContextSetFillColorWithColor(context, color.CGColor); CGContextFillRect(context, rect); let image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }
原因很简单,就是(0.0,0.0)。 这是为什么? 我在打电话
super.setBackgroundImage(UIImage.imageWithColor(bgColor, size: self.bounds.size), forState: .Normal)
但在IB中self.bounds.size在这一点上仍然是0! 所以我换了一行:
let rect = CGRectMake(0.0, 0.0, max(size.width, 1.0), max(size.height, 1.0));
现在它工作:)
苹果应该提供关于国际文凭组织的注意事项的清单…
在我的情况下,我正在做的下一步在initWithFrame / initWithCoder方法创build视图:
className = NSStringFromClass([self class]); self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];
但看起来我不应该使用主捆绑包,而是捆绑在一起的类。 所以我replace下面的代码,它工作:
bundle = [NSBundle bundleForClass:[self class]]; className = NSStringFromClass([self class]); self.view = [[bundle loadNibNamed:className owner:self options:nil] firstObject];
我想也许这可能有助于某人。
我也在Mac项目和Xcode 7.3.1上遇到过这个问题。 在我的情况下,“Failed to Render”错误消息中引用的框架根本与绘图无关。
只需进入目标的“常规/链接框架”和“库”选项卡,并将违规框架的“状态”从“必需”更改为“可选”,便可使IBDesignables在IB中正确更新和绘制。
可选状态
我在OS X项目中遇到了这个问题。
在我的情况下,问题是一个旧的项目( NMSSH )包含一个框架目标与糟糕的构build设置。 特别:
-
INSTALL_PATH
被设置为@executable_path/../Frameworks
,但正确的设置是/Library/Frameworks
-
SKIP_INSTALL
未设置,默认为NO
,但正确的设置为YES
-
DYLIB_INSTALL_NAME_BASE
未设置,但正确的设置是@rpath
请注意,所有正确的设置是您为新创build的框架目标自动获取的设置。
将设置更改为正确的值后,Xcode能够在故事板中加载我的@IBDesignable
视图。
按照以下步骤操作:
- 如果故事板中有任何冲突,请正确解决,检查xml是否被正确validation(这是主要步骤)。
- 清理项目。
- 删除派生的数据文件夹。
- 退出Xcode并重新启动它。 (我必须这样做两次。)