Xcode 6.3 зависает / зависает после открытия файла XIB

82

После обновления до Xcode 6.3 (выпускная версия) Xcode теперь зависает каждый раз, когда я открываю файл XIB / Storyboard, который включает IB_DESIGNABLEпредставлениекоторый использует собственный шрифтдля любых проектов и включает собственный шрифт (не обязательно иметь ссылку на этот шрифт в этом XIB / раскадровке). Зависание происходит после открытия файла .xib и последующей попытки переключения на любой другой файл. Xcode зависает и должен быть принудительно завершен.

Я открыл отчет об ошибке в Apple. (Ошибка 20483867).

Прямо сейчас у меня есть две возможности.

  1. Загрузите и используйте Xcode 6.2 от Apple.
  2. Удалите теги IB_DESIGNABLE из файлов заголовков настраиваемого представления.

Вероятно, это ошибка Apple, но есть ли у кого-нибудь лучшее решение или решение?

Picciano
источник
7
То же самое, Xcode полностью зависает, когда я пытаюсь переключиться с Interface Builder на любой другой файл. Удаление ВСЕХ IB_DESIGNABLE атрибутов решает эту проблему. Сейчас вернусь к 6.2 fow ...
maxkonovalov 09
1
Тоже самое. Удаление папки ~ / Library / Saved Application State / com.apple.dt.Xcode.savedState мне помогает, но когда я снова пытаюсь открыть раскадровку, у меня возникает та же проблема.
Тихоп 09
Вы также можете попробовать снять флажок «Автоматически обновлять представления», чтобы узнать, предотвращает ли это сбой? Если это так, вы могли бы увидеть, можете ли вы «Обновить все представления» без блокировки.
nhgrif
@nhgrif Где эта настройка?
Пиччиано
2
Apple запросила вывод из sysdiagnose. Я буду продолжать предоставлять обновления по мере развития событий.
Пиччиано

Ответы:

26

Xcode 6.3.1 устраняет проблему с пользовательскими шрифтами и IB_DESIGNABLEпредставлениями в раскадровке. Обновите через Mac App Store, и все будет хорошо.

Джош Браун
источник
28

Я уже предложил правку для более точного описания .

Это происходит только тогда, когда ваш проект содержит собственный шрифт. Он зависнет, просто посетив любую раскадровку / XIB, которая содержит настраиваемое представление IBDesignable, даже не ссылаясь на этот шрифт в вашей раскадровке / XIB.

Мой обходной путь - использовать более старую версию Xcode (бета-версию Xcode 6.3 или Xcode 6.2) и использовать ее для обновления файлов Interface Builder и никогда не открывать ее в 6.3. откройте эти Storyboard / XIB в новом окне в Xcode с option+ shift+ clickфайлом в дереве проекта.

Всякий раз, когда вы сталкиваетесь с зависанием, я использую эту команду, чтобы очистить сохраненное состояние только для этого проекта.

rm -rf YourProject.xcodeproj/project.xcworkspace/xcuserdata

Джеймс Танг
источник
3
команда для очистки xcuserdataполезна. работает на меня.
Евгений Дубинин
5
Если вы используете CocoaPods, вам также может потребоваться удалить xcuserdata из основного файла рабочей области вместо файла из .xcodeproj rm -rf YourProject.xcworkspace / xcuserdata
Нур Иман Изам
Привет, я много раз сталкивался с этой проблемой в последнее время, поэтому я написал сценарий, который поможет решить эту проблему. Он отлично работает для проекта, использующего CocoaPods, но я не тестировал его вне своей среды. Он включает решение, опубликованное в этом ответе, но должно обрабатывать как отдельные проекты, так и рабочие области gist.github.com/Ziewvater/3190e20b1ace2ab3c3b6 . Дайте мне знать, если я могу что-то
улучшить
15

Ответ Apple: ссылка на форумы разработчиков Apple

Спасибо всем за ваши отчеты. Мы отслеживаем это со своей стороны и прилагаем все усилия, чтобы решить эту проблему. К сожалению, у нас нет отличного обходного пути, но есть два варианта, которые помогут вам:

Если Xcode зависает при запуске из-за того, что ранее была открыта раскадровка / XIB с использованием настраиваемого шрифта / IBDesignable: удалите файл «UserInterfaceState.xcuserstate» внутри xcodeproj проекта, который вы открываете, он будет по пути вроде этого: My App .xcodeproj / project.xcworkspace / xcuserdata / yourusername.xcuserdatad / UserInterfaceState.xcuserstate

Если вам действительно нужно отредактировать файл раскадровки / XIB, содержащий пользовательский шрифт, с помощью Xcode 6.3:

  1. Сделайте копию файла раскадровки / XIB в качестве резервной копии
  2. Откройте файл раскадровки / XIB в текстовом редакторе
  3. Удалите теги XML с именем «fontDescription», которые ссылаются на ваш собственный шрифт, например:. Удаление этого тега вернет шрифт к стандартному системному шрифту.
  4. Сделайте выходы для объектов, используя настраиваемый шрифт, и во время выполнения установите шрифт этих объектов на свой настраиваемый шрифт, например, в переопределении viewDidLoad или awakeFromNib на вашем контроллере представления.

ВАЖНАЯ ЗАМЕТКА: мы никогда не рекомендуем вручную редактировать файлы раскадровки / XIB. Однако мы понимаем, что эта проблема мешает многим из вас редактировать ваши документы, и хотели предоставить обходной путь с оговоркой, что любое ручное редактирование может привести к повреждению вашего документа.

Picciano
источник
9
Все это весело. «Если вам действительно нужно отредактировать файл раскадровки / XIB»
user1021430
13

У меня такая же проблема. Удаление IB_DESIGNABLE решает проблему. Возврат к 6.2 не работает для меня, поскольку я тестирую приложения на устройстве с iOS 8.3 - Xcode 6.2 не может запускать приложения на устройствах с iOS 8.3 :(

Денис Кильдишев
источник
Та же проблема и здесь. Мне нужен 8.3, и я также использую некоторые новые функции Swift.
Christian A. Strømmen
Альтернатива, если вам все еще нужно выполнить работу, и у вас есть одна проблема, - это вернуться к одной из бета-версий Xcode 6.3. Могу подтвердить, что сборка 6D532l (кажется, beta 3) не зависает.
Samscam
3

Другой обходной путь - изменить расширения файлов для всех файлов шрифтов и загрузить измененные имена файлов из Info.plist. Таким образом, вы можете сохранить IBDesignables и по-прежнему использовать свои собственные шрифты, но не сможете видеть их в средстве выбора шрифтов в Interface Builder.

Все пользовательские шрифты, которые были предварительно установлены из Interface Builder, будут продолжать работать, но для того, чтобы изменить их или установить другие пользовательские шрифты, вам нужно будет сделать это либо из кода, либо изменить файлы раскадровки или перьев из текстового редактора по порядку. для установки названия шрифта.

KoCMoHaBTa
источник
Это сработало для меня. Я обнаружил, что даже после удаления сохраненного состояния / xcuserdata он снова сломается при следующем открытии раскадровки. Удаление расширений для шрифтов и обновление Info.plist, кажется, работают лучше
Джон Мартин
Это сработало и для меня, после выполнения шагов, которые опубликовал @picciano
Альберт Бори
2

У меня нет ответа, но я обнаружил, что простой принудительный выход и перезапуск перезапускают Xcode в той же ситуации. Чтобы просто перезапустить Xcode, удалите папку ~/Library/Saved Application State/com.apple.dt.Xcode.savedState.

Барт ван Куик
источник
1
Другой вариант - найти файл проекта в Finder (.xcodeproj или .xcworkspace) -> показать содержимое пакета -> и удалить там папку «xcuserdata». Это восстановит ваше состояние пользовательского интерфейса Xcode.
maxkonovalov 09
Уничтожение пользовательских данных помогло мне с моей проблемой Xcode 6.3
Sascha Held
1

Эта ошибка была исправлена ​​в бета-версии 6.4 Xcode, которая вышла сегодня. Перейдите в центр разработки и войдите в систему, чтобы загрузить его.

Кристиан А. Стрёммен
источник
Я бы предпочел дождаться новой версии Xcode 6.3 (например, 6.3.1), потому что мы не можем позволить себе разработку бета-версий, потому что они могут вызвать больше проблем по сравнению с теми, которые исправлены.
KoCMoHaBTa
3
Я скачал 6.4, но все равно вылетает.
Джибла
1

Xcode 8.1 - если у вас есть представление с навигацией (в моем случае это была верхняя непрозрачная панель навигации), просто попробуйте установить для свойства «верхняя панель» значение None.

О. Курненков
источник
Думаю, вы добавили это не к тому вопросу.
Пиччано
@picciano нет, это действительно так. Это было единственное, что у меня сработало. Пожалуйста, смотрите мой ответ для более подробной информации
Луиссьен
0

В качестве обходного пути я просто закомментировал всю разметку @IBDesignable в нескольких пользовательских компонентах, которые ее используют. Когда я это сделал, да, я потерял возможность настраивать параметры в Interface Builder, но это позволило мне по крайней мере открыть файлы .xib без сбоя XCode.

Я просто не буду комментировать эти строки @IBDesignable, когда Apple придет с исправлением.

user871177
источник
0

@O. Ответ Курненкова сработал для меня. Это не имело ничего общего ни с IB_Designable, ни с пользовательскими шрифтами, Cocoapods и т. Д.

По какой-то причине наличие «непрозрачной панели навигации» заставляет nibфайл (похоже, это не влияет на storyboards) постоянно менять yположение; это можно увидеть в том месте, Size Inspectorгде yпозиция будет мерцать между 0 и 64. Это происходит со мной с Xcode 8.2 (8C38).

введите описание изображения здесь

Я предполагаю, что это заставляет Xcode постоянно обновлять макет, истощая ресурсы и заставляя его зависать / зависать.

введите описание изображения здесь

Решение состоит в том, чтобы использовать любой из параметров «Полупрозрачный», «Предполагаемый» или «Нет».

Надеюсь это поможет!

Луиссьен
источник