Xcode – можно ли отлаживать сбои в процессе Live Rendering Interface Builder (IBDesignable)?

Вопрос

Можно ли установить контрольные точки и код отладки, выполняемые Live Rendering Xcode / Interface Builder? То есть я использую атрибуты IBDesignable и IBInspectable, чтобы повлиять на представление, поскольку оно отображается в раскадровке построителя интерфейса, и хотел бы иметь возможность отлаживать ошибки «IB crashed». Я не помню этого из сессии WWDC, кроме раздела о подготовкеForInterfaceBuilder.

контекст

Недавно я начал видеть ряд ошибок, сообщающих о том, что IB разбился при попытке сделать мой код. Я в конечном счете проследил его до другой невиновной строки кода в layoutSubviews в одном из моих представлений, который был связан с раскадровкой. Конкретная проблема IB – при рендеринге живых представлений, называемая layoutSubviews, перед установкой всех свойств дочернего представления представления (что само по себе является отдельной проблемой). Это контрастировало с симулятором и устройством, в котором представления были установлены перед первым вызовом layoutSubviews. Короче говоря, это связано с тем, что у него было множество файлов, чтобы найти оскорбительные изменения. Достаточно сказать, что я мог бы быстро найти проблему, если бы можно было установить точки останова и ловушку крушения.

Кто-нибудь понял, как отлаживать и / или вообще ловить эти проблемы, или этот доступ еще недоступен?

Я снова смотрел видео WWDC (§411 @ 22: 00 или около того). Вы должны

  • отредактировать представление в IB и установить его собственный класс для класса в вашей кодовой базе
  • установить точки останова по вашему желанию
  • выберите представление в IB, затем выберите «Редактор» -> «Отладка выбранных представлений» (внизу)

Как ни странно, в моих тестах сегодня он создает мой взгляд через (initWith) Frame вместо (initWith) Coder. Это заставляет логику конфигурации последующих ограничений терпеть неудачу, поскольку суб-представления не были установлены (так как они были бы вызваны «с помощью Coder»).

(обратите внимание: Xcode 8.2, macOS Sierra)

У меня был совсем другой провал, чем у вас: у меня произошел сбой кода, в результате чего произошла ошибка IB в Xcode:

error: IB Designables: не удалось обновить статус автомакета: агент разбился

Чтобы отладить это на macOS Sierra, откройте Console.app и откройте «User Reports» на правой боковой панели. Найдите сбой «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) … 

(В моем случае интерфейс Builder не смог загрузить литерал изображения. Мне пришлось реализовать этот обходной путь: xcode 6 IB_DESIGNABLE – не загружать ресурсы из пакета в построителе интерфейса )

  • Преобразование h264 сжатого CMSampleBuffer в FFmpeg AVPacket
  • Возможно ли разработать iOS или OS X App в LLVM IR?
  • Библиотека для приложений iOS и OS X?
  • Отключение рук между устройствами iOS и Mac не работает
  • Служба Центра уведомлений Apple через OS X
  • Разница между группировкой фильтров изображений и фильтрами цепочки изображений
  • Как создать настраиваемое исключение в объекте c?
  • Потоковое видео с CocoaHTTPServer
  • Игровые центры
  • Обменные строки между Mac OS X и iOS через Bluetooth
  • Monodevelop iOS Unity не может подключиться к отладчику
  • Давайте будем гением компьютера.