无法呈现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。

  1. 清除项目的Xcode派生数据。 它们在~/Library/Developer/Xcode/DerivedData
  2. ⌘+ K清理当前版本
  3. build立你的项目
  4. 在故事板中进入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视图。

按照以下步骤操作:

  1. 如果故事板中有任何冲突,请正确解决,检查xml是否被正确validation(这是主要步骤)。
  2. 清理项目。
  3. 删除派生的数据文件夹。
  4. 退出Xcode并重新启动它。 (我必须这样做两次。)