Xcode - 是否可以在Interface Builder的实时渲染过程(IBDesignable)中调试崩溃?

Chr*_*ver 23 macos xcode interface-builder ios

是否可以设置Xcode/Interface Builder的实时渲染执行的断点和调试代码?也就是说,我使用IBDesignable和IBInspectable属性来影响视图,因为它在界面构建器故事板中呈现,并且希望能够调试"IB崩溃"错误.我不记得WWDC会话中的这个,除了关于prepareForInterfaceBuilder的部分.

上下文

我最近开始看到一些错误报告在尝试渲染我的代码时IB崩溃了.我最终将它追溯到layoutSubviews中的一个无辜的代码行,在我的一个视图中,它是从故事板链接的.IB在渲染实时视图时的特定问题,在设置所有视图的子视图属性之前称为layoutSubviews(这本身就是一个单独的问题).这与模拟器和设备形成对比,其中视图是在第一次调用layoutSubviews之前设置的.不过长话短说,它涉及分散一堆文件以找到违规的变化.可以说,如果可以设置断点并捕获崩溃,我本可以快速找到问题.

有没有人想出如何调试和/或一般陷阱这些问题,或者该访问还没有?

Chr*_*ver 35

我再次观看了WWDC视频(§411@ 22:00左右).你必须

  • 编辑IB中的视图,并将其自定义类设置为代码库中的类
  • 在自定义类中根据需要设置断点
  • 在IB中选择视图,然后选择Editor - >"Debug Selected Views"(在底部)

奇怪的是,在我今天的测试中,它是通过(initWith)Frame而不是(initWith)Coder创建我的视图.这导致后续约束配置逻辑失败,因为尚未设置子视图(因为他们将'withCoder被调用).


cbo*_*wns 7

(工具说明:Xcode 8.2,macOS Sierra)

我的失败与您的失败完全不同:我的代码崩溃导致Xcode中出现IB错误:

错误:IB设计项:无法更新自动布局状态:代理崩溃

要在macOS Sierra上进行调试,请打开Console.app,然后在右侧栏中打开“用户报告”。查找“ IBDesignablesCocoaTouch *”崩溃,然后选择适用的崩溃。这给了我诊断它所需的代码级信息。

Crashed Thread:        0

Exception Type:        EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes:       0x0000000000000001, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Illegal instruction: 4
Termination Reason:    Namespace SIGNAL, Code 0x4
Terminating Process:   exc handler [0]

Application Specific Information:
CoreSimulator 375.21 - Device: IBSimDeviceTypeiPad2x - Runtime: iOS 10.3 (14E8301) - DeviceType: IBSimDeviceTypeiPad2x

Thread 0 Crashed:
0   libswiftUIKit.dylib             0x000000021a2ddead _TToFE5UIKitCSo7UIImagecfT24imageLiteralResourceNameSS_S0_ + 205
1   libswiftUIKit.dylib             0x000000021a2ddcef _TFE5UIKitCSo7UIImageCfT24imageLiteralResourceNameSS_S0_ + 79
2   com.company.App         0x0000000216df74ad _TZFC10App21ControlsP33_F7118662B6663018C7DD0DEBB6FDD87511buttonImagefT8forStateOS_25State_CSo7UIImage + 109 (Controls.swift:121)
…
Run Code Online (Sandbox Code Playgroud)

(在我的情况下,Interface Builder无法加载图像文字。我必须实现此变通方法:xcode 6 IB_DESIGNABLE-不从Interface Builder中的包中加载资源