Xcode 8-IB Designables-呈现和更新自动布局状态失败,代理崩溃

我最近升级到 Xcode 8,我有故事板的问题。

如果我打开项目,我没有打开故事板,它将编译和运行得很好。一旦我打开情节串连图板,就会得到关于 IB Designables 的多个错误,如下所示。

enter image description here

这些视图是唯一使用我使用 Cocoapods 导入的来自 TextFieldEffectsBEMCheckbox的自定义视图的视图。

108778 次浏览

您可以尝试下列方法之一来找出原因:

  1. 在这个目录中查找 IBDesignablesAgentCocoaTouch日志: 看看原因。

注意: 对于拥有 Catalina 的用户: IBDesignablesAgent-iOS_<DATE>-<MAC_NAME>.crash

  1. 进入编辑器-> 调试选择视图,同时选择您的 @IBDesignable UIView在您的故事板,并看到堆栈跟踪。

  2. 删除派生数据文件夹。

    Xcode Preference -> Location -> Derived Data
    /Users/YourMacName/Library/Developer/Xcode/DerivedData
    
  3. Clean your project Shift + Command + Alt + K.

  4. Build your project Command + B.

在您进行必要的更改之后,请更改故事板,或者在我的情况下更改。在“ XCode7”中打开 xib,保存并关闭。这只是处理错误的权宜之计,但最终您将需要修复它们或者这样做,直到您不再能够这样做。

当我调试这个时,我发现有一些类正在修改 UI。典型的 marquelabel 是 UILabel 的子类或任何其他类的子类 UIView 和绘制 UI 在运行时和自动布局引擎冲突。尝试为这些自定义视图提供固定的宽度或高度。如果它不能解决你的问题,试试下面的方法:

解决方案1: 取消注释 # 在 pod 文件中使用框架。

解决方案2: 尝试删除派生数据

  1. 关闭 Xcode 的 Editor 窗口并退出模拟器
  2. 转到 Xcode 偏好地点
  3. 单击显示派生数据路径的灰色小箭头
  4. 选择您的项目
  5. 删除里面所有的文件夹
  6. 退出 Xcode 并重新打开

尝试禁用“使用特性变化”(身份和类型面板)的任何 西布文件,你可能有自定义的意见,是用在你的故事板。

我的问题通过从派生数据文件夹中删除文件夹(与此项目相关)得到解决。

你可以这样做:

  1. 单击菜单 档案→ < em > 项目设置

  2. 点击 /用户/.../Xcode/衍生数据旁边的箭头标志。

  3. 单击 衍生数据文件夹。您将看到名为文件夹的项目。删除这些文件夹。

  4. 退出 Xcode,然后打开项目。

  5. 使用以下步骤清理项目: 产品干净

  6. 然后构建项目: 产品→ < em > Build

这些将解决这些问题。

我通过以下方法解决了这个问题:

  1. 转到 File > Workspace settings
  2. 单击“派生数据”旁边的小右箭头。这将打开位于 DerivedData文件夹的 Finder 应用程序。
  3. 进入 DerivedData文件夹,删除与项目对应的文件夹。
  4. 退出 Xcode,然后重新打开它。
  5. 清理项目 换班指挥官K
  6. 构建您的项目 指挥官B
  7. 打开你的故事板。
  8. 转到 Editor > Refresh all views

更新

有时只是直接转到 Editor > Refresh all views工作。如果 Refresh all views是禁用的,退出 Xcode 并再试一次。

在我的例子中,我使用了一个子类化 UIView的库。它正在使用 IB_DESIGNABLE,并且丢失了对 [super awakeFromNib]的呼叫。一旦我向这个方法添加了调用,bug 就消失了。

我不确定它实现 IB_DESIGNABLE的事实是否对此有影响。

打开你的故事板-> 编辑器-> 刷新所有视图。 这对我有用。

我在 CocoaPod 1.5.0中遇到过这个问题。解决方案是在出现这个错误后再次重新安装 pod (pod install again) ,或者可以使用 CocoaPod 1.4.0代替。它在1.4.0中工作得很好(至少对我来说是这样)

更新:

在 Podfile 添加以下脚本,帮助我在1.5.0中解决这个问题

post_install do |installer|
installer.pods_project.build_configurations.each do |config|
config.build_settings.delete('CODE_SIGNING_ALLOWED')
config.build_settings.delete('CODE_SIGNING_REQUIRED')
end
end

参考资料: https://github.com/Skyscanner/SkyFloatingLabelTextField/issues/201#issuecomment-381915911

我只需删除失败的视图,然后按 command + Z 取消删除操作。

如果稍后编辑失败的视图,错误可能再次发生,请重复上述操作。

将以下代码添加到我的 @IBDesignable类中起到了作用。

override init(frame: CGRect) {
super.init(frame: frame)
}

我也有同样的问题,所以来这里想弄清楚到底发生了什么。我注意到了排名最高的答案,但是答案本身并没有帮助到我,因为 IBDesignable 并不存在于日志文件夹中,而且我已经尝试了所有其他的选项,但是在评论中我注意到有人在谈论一个 frame init。

我决定尝试为 UIView 注释我的 IBDesignable 扩展,它立即修复了这个问题。因此,要解决这个问题,找到引起问题的扩展,并确保通过创建 IBDesignable 类和提供所需的初始化器来设置所需的 inits,如下所示:

@IBDesignable class RoundedView: UIView {


override init(frame: CGRect) {
super.init(frame: frame)
sharedInit()
}


required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
sharedInit()
}


override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
sharedInit()
}


func sharedInit() {
}
}

重要提示: 请记住将新类添加到正在使用可设计项的项中。

我尝试清洁和运行的项目不会解决这个问题。

但是 关门重开项目做到了。

对于任何人-像我-谁不能找到该 IBDesignablesAgentCocoaTouch文件或当尝试’调试选定的视图’从编辑器得到一个错误,这里有另一种方法来调试这些“失败的呈现”错误。

打开“ Console”应用程序,从侧边栏选择当前的 Mac (默认情况下它可能是自动选择的) ,然后在搜索栏搜索“ IBSceneUpdate”并点击回车。

通过这种方式,每当您得到一个因 IBDesignable无法呈现而导致的 Xcode 错误时,您还将得到一个新的“ IBSceneUpdate”条目,其中包含有关该错误的更多细节。

这至少是我如何能够调试我的 IBDesignable错误!

Console app showing IBSceneUpdate errors

如果您使用 xib 文件定制 uiview,请尝试以下操作:

Bundle.main.loadNibNamed("UserView", owner: self, options: nil)

致:

let bundle = Bundle(for: UserView.self)
bundle.loadNibNamed("UserView", owner: self, options: nil)

面对同样的错误: 如果定制了 UitextField 并使用了 Interface Builder,那么控制台中的错误是 - 对类“ CustomField”使用未实现的初始化程序“ init (frame:)”

添加了初始化程序以修复错误

升级到最新的 XCode 版本后,我遇到了这个问题。在尝试了上面描述的多种解决方案之后,我只用了相当多的 Xcode,然后关闭系统并打开它,这对我来说很有效。

@ Maria 提供的正确答案:

检查 ~/Library/Logs/DiagnosticReports的事故报告

替代方法 :

  1. 打开 < em > 聚光灯

    Enter image description here

  2. 键入 < em > console.app

    enter image description here

  3. 选择 < em > 崩溃报告

    Enter image description here

  4. 检查一个 IBDesignablesAgent-iOS并查看崩溃日志

这对我来说是最简单的方法: 将这个脚本添加到您的 Podfile

播客:

post_install do |installer|
installer.pods_project.targets.each do |target|
next if target.product_type == "com.apple.product-type.bundle"
target.build_configurations.each do |config|
config.build_settings['CONFIGURATION_BUILD_DIR'] = '$PODS_CONFIGURATION_BUILD_DIR'
end
end
end

来源:

可以在这里找到@IBDesignable 的解决方案: https://github.com/CocoaPods/CocoaPods/issues/5334

在我的@IBDesignable 类崩溃,因为我使用自定义类的颜色,并强制拆封属性的颜色,这是@IBDesignable 类发现零,而拆封

因此,您需要找到 ~/Library/Logs/DiagnosticReports上的 IBDesignablesAgent-iOS_[Date]_[YourMac].crash这个位置,您将得到与尊重的文件路径崩溃的原因。

现在你必须检查受人尊敬的文件。

在我的例子中,我面临这个问题是因为我使用的类生成了这个错误。只要停止使用,问题就会得到解决!

这就是我正在使用的类。我更改为 UIView,然后错误消失了:

Enter image description here

对我来说,这是由于 故事板中不正确的字体名称。更正字体名称固定的问题。

丢弃下面的更改修复了这个问题。

InCorrectFont

我的第一次退出 Xcode 和重新启动的尝试很有帮助。

所以这是一些简单的快速解决方案,而不是一些工作,-)