【问题标题】:Xcode 8 - IB Designables - Failed to render and update auto layout status, The agent crashedXcode 8 - IB Designables - 无法渲染和更新自动布局状态,代理崩溃
【发布时间】:2017-02-05 12:53:19
【问题描述】:

我最近升级到 Xcode 8,但我遇到了 Storyboard 问题。

如果我打开项目但没有打开 Storyboard,它会编译并运行得很好。打开 Storyboard 后,我收到多个关于 IB Designables 的错误,如下所示。

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

【问题讨论】:

  • 也许检查一下您正在使用的 Pod 的存储库,看看这个问题在其他用户中是否普遍存在?
  • 对此有任何相关答案吗?
  • 你们找到解决方法了吗?
  • 当心,问题可能是您需要为嵌入式库构建 FAT。在我的示例中,我嵌入了 Swifter。自然地,你手头有一个胖版本(用于开发 - 模拟器/手机)和一个仅限手机的版本(用于应用商店,仅限手机),你只需在需要提交给 TestFlight 等时切换到仅限手机的版本。我仍然项目中有手机专用库!!!!!!嗬!换成“正确”的脂肪就解决了问题。

标签: ios xcode8 xcode-storyboard


【解决方案1】:

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

  1. 在此目录中查找IBDesignablesAgentCocoaTouch 日志: ~/Library/Logs/DiagnosticReports 看看原因。

注意:对于使用 Catalina 的用户:寻找 IBDesignablesAgent-iOS_<DATE>-<MAC_NAME>.crash

  1. 转到编辑器 -> 调试选定视图,同时在情节提要中选择 @IBDesignable UIView,然后查看堆栈跟踪。

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

    Xcode Preference -> Location -> Derived Data
    /Users/YourMacName/Library/Developer/Xcode/DerivedData
    
  3. 清理你的项目Shift + Command + Alt + K

  4. 构建您的项目Command + B

【讨论】:

  • 使用这种方法我发现原因是Fatal error: Use of unimplemented initializer 'init(frame:)' for class 'TestIBKit.Button'。我不知道IBDesignablesAgentCocoaTouch 进程调用init(frame:),而不是init?(coder aDecoder:)
  • @YevhenDubinin 谢谢,这对我有帮助。在我的 UIButton 子类中实现 init(frame:) 后一切都很好
  • 这解决了我的问题,但我必须在删除派生数据之前退出 xCode
  • 最佳答案 init(frame:) 是常见问题
  • 退出 xcode 并清除 DerivedData。它解决了这个问题。
【解决方案2】:

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

  1. 转到File > Workspace settings
  2. 单击“派生数据”旁边的小右箭头。这将在 DerivedData 文件夹的位置打开 Finder 应用。
  3. 进入DerivedData文件夹,删除项目对应的文件夹。
  4. 退出 Xcode,然后重新打开它。
  5. 清理您的项目shiftcommandk
  6. 构建您的项目命令b
  7. 打开故事板。
  8. 转到Editor > Refresh all views

更新

有时只是直接转到Editor > Refresh all views 工作。如果Refresh all views 被禁用,请退出 Xcode 并重试。

【讨论】:

  • 感谢您发布此信息。我对派生数据进行了“老派”命令行删除,但问题仍然存在。使用您的方法为我解决了问题。
  • 刷新所有视图,为我赢得胜利。谢谢!
  • 你的回答第二次救了我
  • 我尝试了所有方法,甚至多次删除了完整的DerivedData 文件夹,但直到我在第 4 步之后重新启动 Mac(退出 Xcode,重新启动,然后打开它)之前,它并没有消除错误消息再次)。
【解决方案3】:

我只是删除失败的视图,然后按 command+Z 撤消删除。它对我有用。

如果稍后编辑失败的视图,错误可能会再次出现,请重新执行上述操作。

【讨论】:

  • 这很荒谬,但确实有效。
  • 谁知道这可能是答案。它奏效了,我还是不敢相信
【解决方案4】:

我在 CocoaPod 1.5.0 中遇到了这个问题。解决方案是在出现此错误后再次重新安装 pod(再次安装 pod),或者您可以改用 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

【讨论】:

  • 100% 正确。降级到 1.4.0 为我解决了这个问题。
  • 工作,1.5.0 豆荚。
  • its work for me, you should add end` 到最后的代码。
  • 也为我工作。尝试了所有其他建议,但均未成功。使用 Pod 1.3.1 测试
【解决方案5】:

将以下代码添加到我的 @IBDesignable 类中就可以了。

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

【讨论】:

  • 这对我有用。事实上,我添加了两个覆盖来扩展UITextView。 (1)init(frame: CGRect, textContainer: NSTextContainer?),(2)init?(coder aDecoder: NSCoder)。然后重建和警告(错误)消失了。甚至不需要清理构建文件夹。
  • 谢谢!好答案)
【解决方案6】:

如果您将 xib 文件用于自定义 uiview。试试这个:

改变

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

收件人:

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

【讨论】:

    【解决方案7】:

    对于像我这样找不到IBDesignablesAgentCocoaTouch 文件或尝试从编辑器中“调试选定视图”时出错的任何人,这里有另一种调试“渲染失败”错误的方法。

    打开“控制台”应用程序,从边栏中选择您当前的 Mac(默认情况下可能会自动选择它),然后在搜索栏上搜索“IBSceneUpdate”并按 Enter。

    这样,每次您收到因IBDesignable 无法渲染而导致的 Xcode 错误时,您还将获得一个新的“IBSceneUpdate”条目,其中包含有关该错误的更多详细信息。

    这至少是我能够调试IBDesignable 错误的方式!

    【讨论】:

    • 该应用程序是实际的控制台,而不是作为仅供参考的终端。
    • 好收获!编辑了我的答案。
    • 在 Catalina 的控制台中,在所有消息下,我得到一个崩溃报告项,单击它会显示所有 IBDesignablesAGen-iOS 错误。其他答案只给出了临时修复,但控制台中的错误描述向我展示了如何永久修复错误。
    【解决方案8】:

    尝试为故事板中使用的自定义视图可能拥有的任何 xib 文件禁用“使用特征变化”(身份和类型面板)。

    【讨论】:

      【解决方案9】:

      我的问题已通过从派生数据文件夹中删除文件夹(与此项目相关)来解决。 您可以通过单击文件 -> 项目设置 -> 来执行此操作 然后单击 /Users/.../Xcode/DerivedData 旁边的箭头符号 单击 DerivedData 文件夹,您将看到名为文件夹的项目删除那些 .退出 xcode 打开您的项目,使用此步骤 Product->clean 清理项目 然后构建项目:产品->构建 这些将解决这个问题。

      【讨论】:

        【解决方案10】:

        Correct answer provided by @Maria:

        ~/Library/Logs/DiagnosticReports查看崩溃报告

        替代方式

        1. 打开Spotlight

        1. 输入console.app

        1. 选择Crash reports

        1. 查看IBDesignablesAgent-iOS 并查看崩溃日志

        【讨论】:

        • 使用控制台帮助我解决了我的问题。比 Xcode 中更详细的消息。
        • Spotlight 解决方案很简单,需要零个神经元被烧毁。如果您的大脑已经有点过度劳累并且无法按照指示进行操作,就是这样! :D
        【解决方案11】:

        我尝试清理并运行该项目并不能解决此问题。

        但是关闭并重新打开项目确实如此。

        【讨论】:

          【解决方案12】:

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

          【讨论】:

            【解决方案13】:

            当我调试这个时,我发现有一些类正在修改 UI。通常 marquelabel 是 UILabel 的子类或任何其他类的子类 UIView 和在运行时绘制 ui 并与 Autolayout 引擎发生冲突。尝试为这些自定义视图提供固定的宽度或高度。如果它不能解决您的问题,请尝试以下解决方案:-

            解决方案 1: - 在 pod 文件中取消注释 #use_frameworks。

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

            1. 关闭 Xcode 的编辑器窗口并退出模拟器 ->
            2. 转到 Xcode 首选项 -> 位置 ->
            3. 单击显示派生数据路径的灰色小箭头 ->
            4. 选择你的项目 ->
            5. 删除里面的所有文件夹->
            6. 退出 Xcode 并重新打开

            【讨论】:

            • 您能否详细说明这实际上是如何解决问题的?
            • 这解决了问题,但仍然不知道为什么取消注释 use_frameworks 因为那是为了快速项目的权利
            • 我的 Podfile 已经在使用框架,有什么建议可以取消注释吗?
            • @moni15 我添加了另一种可能的解决方案。请检查。
            • 在 pod 文件中取消注释 #use_frameworks 并清除 DerivedData 对我有用。
            【解决方案14】:

            我遇到了同样的问题,来到这里试图弄清楚发生了什么。我注意到评分最高的答案并且答案本身对我没有帮助,因为日志文件夹中不存在 IBDesignable 并且我已经尝试了那里的所有其他选项,但是在 cmets 中我注意到有人在谈论帧初始化。

            我决定尝试为 UIView 注释掉我的 IBDesignable 扩展,它立即解决了问题。因此,要解决此问题,请找到导致问题的扩展,并确保通过创建 IBDesignable 类并提供所需的初始化程序来设置所需的初始化,如下所示:

            @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() {
            }
            }
            

            重要提示:记得将新类添加到您正在使用可设计的项目。

            【讨论】:

            • 正如其文档所述,不要忘记在您的 prepareForInterfaceBuilder() 实现中调用 super.prepareForInterfaceBuilder()。
            【解决方案15】:

            在我的@IBDesignable 类中崩溃了,因为我使用自定义类作为颜色并强制展开颜色属性,即@IBDesignable 类在展开时发现为零

            所以你需要在~/Library/Logs/DiagnosticReports这个位置上找到IBDesignablesAgent-iOS_[Date]_[YourMac].crash,你会得到崩溃的原因和尊重的文件路径。

            现在您必须检查受尊重的文件。

            【讨论】:

              【解决方案16】:

              面临同样的错误: 自定义 UITextField 并使用界面生成器,控制台中的错误是 - 对“CustomField”类使用未实现的初始化程序“init(frame:)”

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

              【讨论】:

                【解决方案17】:

                我在更新到最新的 XCode 版本后遇到了这个问题。在尝试了上述多种解决方案后,我只使用了 Xcode,然后关闭系统并打开它,这对我有用。

                【讨论】:

                  【解决方案18】:

                  进行必要的更改后,更改情节提要或在我的情况下为 .xib 以在“XCode 7”中打开,保存并关闭。这只是解决错误的权宜之计,但最终您将需要修复它们或执行此操作,直到您不再能够为止。

                  【讨论】:

                    【解决方案19】:

                    就我而言,我使用的库是 UIView 的子类。它正在使用IB_DESIGNABLE,并且缺少对[super awakeFromNib] 的调用。一旦我添加了对该方法的调用,该错误就消失了。

                    我不确定它实施IB_DESIGNABLE 是否对此产生了影响。

                    【讨论】:

                    • 你在哪里添加了 [super awakeFromNib] 的代码?你能分享你的代码吗?
                    【解决方案20】:

                    这对我来说是最简单的方法:将此脚本添加到您的 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

                    【讨论】:

                      【解决方案21】:

                      在我的情况下,我遇到了这个问题,因为我使用了一个产生该错误的类,只需停止使用它,问题就解决了!。这是我正在使用的类,我为 UIView 进行了更改,然后错误消失了

                      【讨论】:

                        【解决方案22】:

                        对我来说,这是由于incorrect Font Name in Storyboard。 更正字体名称解决了这个问题。

                        放弃以下更改解决了该问题。

                        【讨论】:

                          【解决方案23】:

                          我第一次尝试退出 Xcode 并重新启动有帮助。所以这是一些简单的快速修复而不是一些工作,-)

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 2020-06-29
                            • 2018-03-25
                            • 2018-05-11
                            • 1970-01-01
                            • 2019-11-17
                            • 2015-02-07
                            • 1970-01-01
                            相关资源
                            最近更新 更多