Xcode 8 - IB Designables - не удалось отобразить и обновить состояние автоматического макета, агент потерпел крах
Я недавно обновился до Xcode 8, и у меня возникли проблемы с раскадровкой.
Если я открою проект и у меня не откроется раскадровка, он скомпилируется и будет работать нормально. Как только я открываю раскадровку, я получаю несколько ошибок об IB Designables, как показано ниже.
Эти представления являются единственными представлениями, которые используют настраиваемые представления из TextFieldEffects
а также BEMCheckbox
что я импортировал с помощью Cocoapods.
24 ответа
Вы можете попробовать одно из следующего, чтобы выяснить причину:
искать
IBDesignablesAgentCocoaTouch
журналы в этом каталоге:~/Library/Logs/DiagnosticReports
и увидеть причину.Перейдите в Editor -> Debug Selected View при выборе вашего
@IBDesignable UIView
в вашей раскадровке, и увидеть трассировку стека.Удалить папку "Производные данные".
Xcode Preference -> Location -> Derived Data /Users/YourMacName/Library/Developer/Xcode/DerivedData
Очисти свой проект
Shift
+Command
+Alt
+K
,Создай свой проект
Command
+B
,
Я решил проблему, выполнив следующее:
- Идти к
File > Workspace settings
, - Нажмите на маленькую стрелку вправо рядом с "Производные данные". Это открывает приложение Finder в расположении
DerivedData
папка. - Зайди внутрь
DerivedData
папку и удалите папку, соответствующую вашему проекту. - Выйдите из Xcode и снова откройте его.
- Очистите командусдвига вашего проектаk.
- построить команду вашего проектаб.
- Откройте раскадровку.
- Идти к
Editor > Refresh all views
,
обновленный
Иногда просто перейти к Editor > Refresh all views
работал. Если Refresh all views
отключен, выйдите из Xcode и попробуйте снова.
Я просто удаляю неуспешный вид и нажимаю команду +Z, чтобы отменить удаление. Меня устраивает.
Если позднее редактировать ошибочный вид, ошибка может появиться снова, повторите описанные выше действия.
Я столкнулся с этой проблемой в 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
Добавление следующего кода в мой @IBDesignable
класс сделал свое дело.
override init(frame: CGRect) {
super.init(frame: frame)
}
Если вы используете XIB-файл для пользовательского интерфейса. Попробуй это:
Меняться от
Bundle.main.loadNibNamed("UserView", owner: self, options: nil)
Для того, чтобы:
let bundle = Bundle(for: UserView.self)
bundle.loadNibNamed("UserView", owner: self, options: nil)
Для всех, как я, кто не может найти это IBDesignablesAgentCocoaTouch
файл или при попытке "Отладить выбранные представления" из редактора получает ошибку, вот еще один способ отладки этих ошибок "Не удалось отобразить".
Откройте приложение "Терминал", на боковой панели выберите свой текущий Mac (он, вероятно, будет выбран автоматически по умолчанию), а затем в строке поиска найдите "IBSceneUpdate" и нажмите Enter. Каждый раз, когда вы получаете сообщение об ошибке XCode для IBDesignable, который не может отобразиться, вы также получаете новую запись "IBSceneUpdate" с более подробной информацией об ошибке. По крайней мере, как я смог отладить мой IBDesignable
Ошибки!
Моя проблема была решена путем удаления папок (которые связаны с этим проектом) из папки производных данных. Вы можете сделать это, щелкнув Файл -> Настройка проекта ->, затем щелкните знак стрелки, чтобы /Users/.../Xcode/DerivedData щелкните папку DerivedData, и вы увидите, что проект с именем папки удалит их. Выйдите из xcode, чтобы открыть ваш проект, очистите проект с помощью этого шага Product->clean, а затем создайте проект: Product->Build. Это решит эту проблему.
Попробуйте отключить "Использовать варианты признаков" (панель "Идентичность и тип") для любого файла XIB, который может иметься для пользовательских представлений, используемых в вашей раскадровке.
проверьте отчет о сбое на
~/Library/Logs/DiagnosticReports
Альтернативный способ:
- открытым
Spotlight
- тип
console.app
- Выбрать
Crash reports
- проверьте один для
IBDesignablesAgent-iOS
и просмотрите журнал сбоев
Я попытался очистить и запустить проект не решит эту проблему.
Но Закрыть и возобновить проект сделали.
Просто откройте свою раскадровку -> Редактор -> Обновить все представления. Это работа для меня.
У меня была та же проблема, и я пришел сюда, чтобы попытаться выяснить, что случилось. Я заметил ответ с самым высоким рейтингом, и сам ответ мне не помог, так как IBDesignable не существовал в папке журнала, и я уже пробовал все другие варианты там, однако в комментариях я заметил, что кто-то говорил о инициализации фрейма.
Я решил попробовать закомментировать мое расширение IBDesignable для UIView, и оно сразу решило проблему. Итак, чтобы исправить это, найдите расширение, вызывающее проблему, и убедитесь, что настроили требуемые начальные единицы, создав класс 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() {
}
}
ВАЖНО: не забудьте добавить новый класс к элементу, на котором вы используете дизайн.
Когда я отладил это, я обнаружил, что есть некоторые классы, которые модифицируют интерфейс. Обычно это маркированная метка, которая является подклассом UILabel или любого другого подкласса класса UIView и рисует пользовательский интерфейс во время выполнения и сталкивается с движком Autolayout. Попробуйте задать фиксированную ширину или высоту для этих пользовательских видов. Если это не решит вашу проблему, попробуйте следующие решения:-
Решение 1: - Раскомментируйте #use_frameworks внутри вашего файла pod.
Решение 2: - Попробуйте удалить производные данные
- Закройте окно редактора вашего Xcode и выйдите из симулятора ->
- Перейдите в Настройки XCode -> Места ->
- Нажмите маленькую серую стрелку, показывающую путь к производным данным ->
- Выберите свой проект ->
- Удалить все папки внутри ->
- Выйдите из Xcode и снова откройте
В моем классе @IBDesignable произошел сбой, потому что я использовал пользовательский класс для цвета и принудительно развернул цвета, принадлежащие тому, что класс @IBDesignable обнаружил ноль при развертывании
Итак, вам нужно найти
IBDesignablesAgent-iOS_[Date]_[YourMac].crash
на
~/Library/Logs/DiagnosticReports
это место, и вы получите причину сбоя с уважаемым путем к файлу.
Теперь вам нужно проверить уважаемый файл.
В моем случае я столкнулся с этой проблемой, потому что я использовал класс, который генерирует эту ошибку, просто прекратите использовать это, и проблема была решена !. Это был тот класс, который я использовал, я перешел на UIView, а затем ошибка исчезла.
Я столкнулся с этой проблемой после обновления до последней версии XCode. Попробовав несколько решений, описанных выше, я использовал только Xcode, а затем выключил систему и включил ее, и это сработало для меня.
Столкнулся с той же ошибкой: если настроил UITextField и использовал построитель интерфейса, ошибка в консоли была -Использование нереализованного инициализатора init(frame:) для класса CustomField.
Добавлен инициализатор для исправления ошибки
Для меня это самый простой способ: добавить этот скрипт в свой 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
После внесения необходимых изменений измените раскадровку или, в моем случае, файл.xib, чтобы открыть его в "XCode 7", сохранить и закрыть. Это всего лишь мера ограничения пробела для устранения ошибок, но в конечном итоге вам нужно будет их исправить или делать это до тех пор, пока вы больше не сможете это исправить.
В моем случае я использовал библиотеку, которая была подклассом UIView
, Он использовал IB_DESIGNABLE
и пропустил звонок [super awakeFromNib]
, Как только я добавил вызов к этому методу, ошибка исчезла.
Я не уверен, что тот факт, что он осуществлял IB_DESIGNABLE
оказал влияние на это.
Я столкнулся с этой проблемой. Мы можем использовать это решение, и оно у меня работает нормально.
Решение:
Удалить производные данные
Настройки Xcode → Местоположение → Производные данные/Пользователи/ВашеMacName/Библиотека/Разработчик/Xcode/DerivedData
Закройте Xcode и снова откройте Xcode.
Очистите папку сборки. Xcode -> Продукт -> Очистить папку сборки...
Для меня это было из-за
incorrect Font Name in Storyboard
. Исправление названия шрифта устранило проблему.
Моя первая попытка выйти из Xcode и перезапустить помогла. Так что это просто быстрое решение, а не работа ,-)