Xcode 8 - IB Designables - 无法呈现和更新自动布局状态,代理崩溃
Xcode 8 - IB Designables - Failed to render and update auto layout status, The agent crashed
我最近升级到 Xcode 8,但故事板出现问题。
如果我打开项目但没有打开 Storyboard,它将编译并且 运行 就好了。打开 Storyboard 后,我收到多个关于 IB Designables 的错误,如下所示。
这些视图是唯一使用我使用 Cocoapods 导入的来自 TextFieldEffects
和 BEMCheckbox
的自定义视图的视图。
您可以尝试以下方法之一来找出原因:
- 在此目录中查找
IBDesignablesAgentCocoaTouch
日志:
~/Library/Logs/DiagnosticReports
看看原因。
Note: for user with Catalina: look for
IBDesignablesAgent-iOS_<DATE>-<MAC_NAME>.crash
在故事板中选择 @IBDesignable UIView
的同时转到编辑器 -> 调试所选视图,然后查看堆栈跟踪。
删除派生数据文件夹。
Xcode Preference -> Location -> Derived Data
/Users/YourMacName/Library/Developer/Xcode/DerivedData
清理你的项目Shift
+Command
+Alt
+ K
.
构建你的项目Command
+B
.
进行必要的更改后,更改情节提要或在我的情况下更改 .xib 以在 "XCode 7" 中打开,保存并关闭。这只是解决错误的权宜之计,但最终您将需要修复它们或执行此操作,直到您无法再修复为止。
当我调试它时,我发现有一些 classes 正在修改 UI。通常 marquelabel 是 UILabel 的子class 或任何其他 class subclassing UIView and drawing ui at 运行 时间并与 Autolayout 引擎发生冲突。尝试为这些自定义视图提供固定的宽度或高度。如果它不能解决您的问题,请尝试以下解决方案:-
解决方案 1: - 在 pod 文件中取消注释 #use_frameworks。
解决方案 2: - 尝试删除派生数据
- 关闭 Xcode 和 quit 模拟器的编辑器 window ->
- 转到 Xcode 首选项 -> 位置 ->
- 单击显示派生数据路径的灰色小箭头 ->
- Select 你的项目 ->
- 删除里面的所有文件夹 ->
- Quit Xcode 并重新打开
尝试为故事板中使用的自定义视图禁用任何 xib 文件的 'Use Trait Variations'(身份和类型面板)。
我的问题已通过从派生数据文件夹中删除文件夹(与此项目相关)得到解决。
您可以通过单击文件 -> 项目设置 -> 来执行此操作
然后单击 /Users/.../Xcode/DerivedData 旁边的箭头符号
单击 DerivedData 文件夹,您将看到名为文件夹的项目将其删除。退出 xcode 打开您的项目,使用此步骤 Product->clean 清理项目
然后构建项目:Product->Build
这些将解决这个问题。
我通过执行以下操作解决了问题:
- 转到
File > Workspace settings
。
- 单击 "Derived data" 旁边的向右小箭头。这将在
DerivedData
文件夹的位置打开 Finder 应用程序。
- 进入
DerivedData
文件夹,删除与您的项目对应的文件夹。
- 退出Xcode,然后re-open它。
- 清理你的项目shiftcommandk.
- 构建你的项目命令b.
- 打开你的故事板。
- 转到
Editor > Refresh all views
。
已更新
有时直接转到Editor > Refresh all views
就可以了。如果 Refresh all views
被禁用,请退出 Xcode 并重试。
就我而言,我使用的是子类化 UIView
的库。它正在使用 IB_DESIGNABLE
,并且缺少对 [super awakeFromNib]
的调用。一旦我添加了对此方法的调用,错误就消失了。
我不确定它正在实施 IB_DESIGNABLE
这一事实是否对此产生了影响。
只需打开故事板 -> 编辑器 -> 刷新所有视图。
这对我有用。
我在 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
我只是删除失败的视图,然后按command+Z撤消删除。它对我有用。
如果稍后编辑失败的视图,可能会再次出现错误,请重新执行上述操作。
将以下代码添加到我的 @IBDesignable
class 就成功了。
override init(frame: CGRect) {
super.init(frame: frame)
}
我遇到了同样的问题,来到这里试图弄清楚发生了什么。我注意到评分最高的答案,但答案本身对我没有帮助,因为 IBDesignable 不存在于日志文件夹中,我已经尝试了那里的所有其他选项,但是在评论中我注意到有人在谈论框架初始化。
我决定尝试注释掉我的 UIView 的 IBDesignable 扩展,它立即解决了这个问题。因此,要解决此问题,请找到导致问题的扩展,并确保通过创建 IBDesignable class 并提供所需的初始化程序来设置所需的初始化程序,如下所示:
@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() {
}
}
重要提示:请记住将新的 class 添加到您正在使用可设计的项目。
我试过 clean,运行 该项目无法解决这个问题。
但是关闭并重新打开项目确实如此。
对于像我这样找不到 IBDesignablesAgentCocoaTouch
文件或尝试从编辑器 'Debug Selected Views' 遇到错误的人,这是调试这些 "Failed to render" 的另一种方法错误。
打开 'Console' 应用程序,从侧边栏 select 您当前的 Mac(默认情况下可能会自动 select),然后在搜索栏搜索 "IBSceneUpdate" 并按回车键。
这样,每次您收到 IBDesignable
无法呈现的 Xcode 错误时,您还会收到一个新的 "IBSceneUpdate" 条目,其中包含有关该错误的更多详细信息.
这至少是我能够调试 IBDesignable
错误的方式!
如果您将 xib 文件用于自定义 uiview。试试这个:
变化自
Bundle.main.loadNibNamed("UserView", owner: self, options: nil)
收件人:
let bundle = Bundle(for: UserView.self)
bundle.loadNibNamed("UserView", owner: self, options: nil)
面临同样的错误:
定制了 UITextField 并使用界面生成器,控制台中的错误是
-使用未实现的初始化程序 'init(frame:)' 用于 class "CustomField"
添加了初始化程序以修复错误
我在更新到最新的 XCode 版本后遇到了这个问题。在尝试了上述多种解决方案后,我只是相当 Xcode 然后关闭系统并打开它,这对我有用。
:
check crash report at ~/Library/Logs/DiagnosticReports
另一种方式:
- 打开
Spotlight
- 输入
console.app
- select
Crash reports
- 检查一个
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 class 中崩溃了,因为我使用了自定义 class 作为颜色并强制展开了 @IBDesignable class 的颜色属性,而 unwrap
因此您需要在 ~/Library/Logs/DiagnosticReports
这个位置找到 IBDesignablesAgent-iOS_[Date]_[YourMac].crash
并且您将通过相关文件路径获得崩溃的原因。
现在您必须检查相关文件。
就我而言,我遇到这个问题是因为我使用的 class 会产生该错误,停止使用它,问题就解决了!。这是我使用的 class,我更改为 UIView,然后错误消失了
对我来说,这是由于 incorrect Font Name in Storyboard
。
更正字体名称解决了这个问题。
放弃以下更改解决了这个问题。
我第一次尝试退出 Xcode 并重新启动很有帮助。所以这是一些简单的快速修复而不是一些工作,-)
我最近升级到 Xcode 8,但故事板出现问题。
如果我打开项目但没有打开 Storyboard,它将编译并且 运行 就好了。打开 Storyboard 后,我收到多个关于 IB Designables 的错误,如下所示。
这些视图是唯一使用我使用 Cocoapods 导入的来自 TextFieldEffects
和 BEMCheckbox
的自定义视图的视图。
您可以尝试以下方法之一来找出原因:
- 在此目录中查找
IBDesignablesAgentCocoaTouch
日志:~/Library/Logs/DiagnosticReports
看看原因。
Note: for user with Catalina: look for
IBDesignablesAgent-iOS_<DATE>-<MAC_NAME>.crash
在故事板中选择
@IBDesignable UIView
的同时转到编辑器 -> 调试所选视图,然后查看堆栈跟踪。删除派生数据文件夹。
Xcode Preference -> Location -> Derived Data /Users/YourMacName/Library/Developer/Xcode/DerivedData
清理你的项目
Shift
+Command
+Alt
+K
.构建你的项目
Command
+B
.
进行必要的更改后,更改情节提要或在我的情况下更改 .xib 以在 "XCode 7" 中打开,保存并关闭。这只是解决错误的权宜之计,但最终您将需要修复它们或执行此操作,直到您无法再修复为止。
当我调试它时,我发现有一些 classes 正在修改 UI。通常 marquelabel 是 UILabel 的子class 或任何其他 class subclassing UIView and drawing ui at 运行 时间并与 Autolayout 引擎发生冲突。尝试为这些自定义视图提供固定的宽度或高度。如果它不能解决您的问题,请尝试以下解决方案:-
解决方案 1: - 在 pod 文件中取消注释 #use_frameworks。
解决方案 2: - 尝试删除派生数据
- 关闭 Xcode 和 quit 模拟器的编辑器 window ->
- 转到 Xcode 首选项 -> 位置 ->
- 单击显示派生数据路径的灰色小箭头 ->
- Select 你的项目 ->
- 删除里面的所有文件夹 ->
- Quit Xcode 并重新打开
尝试为故事板中使用的自定义视图禁用任何 xib 文件的 'Use Trait Variations'(身份和类型面板)。
我的问题已通过从派生数据文件夹中删除文件夹(与此项目相关)得到解决。 您可以通过单击文件 -> 项目设置 -> 来执行此操作 然后单击 /Users/.../Xcode/DerivedData 旁边的箭头符号 单击 DerivedData 文件夹,您将看到名为文件夹的项目将其删除。退出 xcode 打开您的项目,使用此步骤 Product->clean 清理项目 然后构建项目:Product->Build 这些将解决这个问题。
我通过执行以下操作解决了问题:
- 转到
File > Workspace settings
。 - 单击 "Derived data" 旁边的向右小箭头。这将在
DerivedData
文件夹的位置打开 Finder 应用程序。 - 进入
DerivedData
文件夹,删除与您的项目对应的文件夹。 - 退出Xcode,然后re-open它。
- 清理你的项目shiftcommandk.
- 构建你的项目命令b.
- 打开你的故事板。
- 转到
Editor > Refresh all views
。
已更新
有时直接转到Editor > Refresh all views
就可以了。如果 Refresh all views
被禁用,请退出 Xcode 并重试。
就我而言,我使用的是子类化 UIView
的库。它正在使用 IB_DESIGNABLE
,并且缺少对 [super awakeFromNib]
的调用。一旦我添加了对此方法的调用,错误就消失了。
我不确定它正在实施 IB_DESIGNABLE
这一事实是否对此产生了影响。
只需打开故事板 -> 编辑器 -> 刷新所有视图。 这对我有用。
我在 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
我只是删除失败的视图,然后按command+Z撤消删除。它对我有用。
如果稍后编辑失败的视图,可能会再次出现错误,请重新执行上述操作。
将以下代码添加到我的 @IBDesignable
class 就成功了。
override init(frame: CGRect) {
super.init(frame: frame)
}
我遇到了同样的问题,来到这里试图弄清楚发生了什么。我注意到评分最高的答案,但答案本身对我没有帮助,因为 IBDesignable 不存在于日志文件夹中,我已经尝试了那里的所有其他选项,但是在评论中我注意到有人在谈论框架初始化。
我决定尝试注释掉我的 UIView 的 IBDesignable 扩展,它立即解决了这个问题。因此,要解决此问题,请找到导致问题的扩展,并确保通过创建 IBDesignable class 并提供所需的初始化程序来设置所需的初始化程序,如下所示:
@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() {
}
}
重要提示:请记住将新的 class 添加到您正在使用可设计的项目。
我试过 clean,运行 该项目无法解决这个问题。
但是关闭并重新打开项目确实如此。
对于像我这样找不到 IBDesignablesAgentCocoaTouch
文件或尝试从编辑器 'Debug Selected Views' 遇到错误的人,这是调试这些 "Failed to render" 的另一种方法错误。
打开 'Console' 应用程序,从侧边栏 select 您当前的 Mac(默认情况下可能会自动 select),然后在搜索栏搜索 "IBSceneUpdate" 并按回车键。
这样,每次您收到 IBDesignable
无法呈现的 Xcode 错误时,您还会收到一个新的 "IBSceneUpdate" 条目,其中包含有关该错误的更多详细信息.
这至少是我能够调试 IBDesignable
错误的方式!
如果您将 xib 文件用于自定义 uiview。试试这个:
变化自
Bundle.main.loadNibNamed("UserView", owner: self, options: nil)
收件人:
let bundle = Bundle(for: UserView.self)
bundle.loadNibNamed("UserView", owner: self, options: nil)
面临同样的错误: 定制了 UITextField 并使用界面生成器,控制台中的错误是 -使用未实现的初始化程序 'init(frame:)' 用于 class "CustomField"
添加了初始化程序以修复错误
我在更新到最新的 XCode 版本后遇到了这个问题。在尝试了上述多种解决方案后,我只是相当 Xcode 然后关闭系统并打开它,这对我有用。
check crash report at
~/Library/Logs/DiagnosticReports
另一种方式:
- 打开
Spotlight
- 输入
console.app
- select
Crash reports
- 检查一个
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 class 中崩溃了,因为我使用了自定义 class 作为颜色并强制展开了 @IBDesignable class 的颜色属性,而 unwrap
因此您需要在 ~/Library/Logs/DiagnosticReports
这个位置找到 IBDesignablesAgent-iOS_[Date]_[YourMac].crash
并且您将通过相关文件路径获得崩溃的原因。
现在您必须检查相关文件。
就我而言,我遇到这个问题是因为我使用的 class 会产生该错误,停止使用它,问题就解决了!。这是我使用的 class,我更改为 UIView,然后错误消失了
对我来说,这是由于 incorrect Font Name in Storyboard
。
更正字体名称解决了这个问题。
放弃以下更改解决了这个问题。
我第一次尝试退出 Xcode 并重新启动很有帮助。所以这是一些简单的快速修复而不是一些工作,-)