После обновления до Xcode 11.2 с Xcode 11.1 мое приложение вылетает:
*** Завершение работы приложения из-за необработанного исключения «NSInvalidUnarchiveOperationException», причина: «Не удалось создать экземпляр класса с именем _UITextLayoutView, поскольку не найден класс с именем _UITextLayoutView; класс должен быть определен в исходном коде или связан с библиотекой (убедитесь, что класс является частью правильной цели) '
Почему это происходит? Как я могу предотвратить этот сбой?
Ответы:
поздравление
Доступна новая версия Xcode (11.2.1), которая является лучшим способом избавиться от этой проблемы.
обходные
@Mojtaba Hosseini Решение, которое я предложил, было от помощи и участия моей стороны до моих коллег-разработчиков через StackOverflow. Вы, я и все остальные разработчики здесь уже знаете, что когда Apple выпустит новую версию, эта проблема исчезнет.
Но кроме всего
Вышеупомянутое решение было определенно принято Apple Review, так как не было задействовано никакого частного API. Этот подход очень похож на создание свойства, как
Или
Поэтому, когда вы создаете свойство, вы напрямую используете APPLE Private Components и повторно модулируете их в соответствии с вашими требованиями или требованиями.
Простой пример - AMFNetworking классы
Надеюсь, я закончил с утверждением
Ответ, приведенный ниже, был лишь некоторой помощью с моей стороны, которая позволила разработчику продолжить развитие, так как вы изначально предложили разработчику откатить Xcode. Это была плохая практика, чтобы снова загрузить 8 ГБ XCode, поскольку мы все знаем, что скоро будет выпущена новая версия XCode.
Хотя это исправлено в Xcode 11.2.1, у меня есть одно решение для Xcode 11.2, с помощью которого вы можете избавиться от этой аварии:
РЕШЕНИЕ
Перейдите к поиску параметров сборки для "DEAD_CODE_STRIPPING" и установите для него значение NO
затем
UITextViewWorkaround.h
UITextViewWorkaround.m
Скомпилируйте код, и у вас будет запущено приложение :)
источник
Обновление: исправлено! 🎉🎊
ЕДИНСТВЕННОЕ решение - обновить
Эта ошибка является фиксированной в Xcode 11.2.1. Таким образом, вы можете скачать и использовать его здесь.
Xcode 11.2 устарела Apple 5 ноября 2019 года
если вы когда-нибудь попытаетесь отправить свое приложение, созданное с помощью Xcode 11.2, в AppStore, вам будет отказано:
App Store Connect Операция Предупреждение
Таким образом, все обходные пути, сделанные с Xcode 11.2, бесполезны
Это ошибка для Xcode 11.2 и исправлена в Xcode 11.2.1.
Решение (s)
Откатк предыдущейверсиивыпускаXcodeиз:Откат больше не вариант, и AppStore отклонит любую сборку с Xcode ниже 11.2.1, посмотрите на этоОбратите внимание, что вы должны использовать Safari, чтобы загрузить его, и вы должны сначала войти на портал разработчиков Apple .
Вы можете найти все другие версии Xcode и ссылку на другие ресурсы (включая релизные и бета-версии) здесь на https://developer.apple.com/download/moreОбходной путь
Это очень сложный, но рабочий обходной путь. Замените все
UITextView
s в раскадровке s и Xib s чистым кодом версией .Обратите внимание, что эта ошибка найдена и исправлена Apple
Также ранее ошибка была подтверждена сотрудниками Apple Edford
Для тех, кто с iOS 13.2 и не может больше использовать Xcode 11.1:
Для тех, у кого раскадровка:
UITextView
UITextView
объектамДля тех, кто знаком с методом Swizzling (Objc и динамическое поведение)
Перейдите к ответу @aftab Мухаммеда Хана для Objective-C и ответа @MikRo для адаптированной версии Swift.Просто не делай этого больше:
Даже если эти два последних обходных обходных пути не используют закрытый API Apple , они будут отклонены в AppStore, поскольку Apple не будет принимать сборки с версиями Xcode под 11.2.1. !
И снова:
Xcode 11.2 устарела Apple 5 ноября 2019 года
источник
CMD + Shift + K
)Проблема была исправлена в Xcode 11.2.1.
РЕДАКТИРОВАТЬ: Поскольку исправление теперь выпущено, вы должны переключиться на ту версию XCode и закомментировать этот обходной путь. Как сказал Моджтаба Хоссейни в своем ответе:
Пока Apple не выпустила исправление, это был хороший обходной путь для продолжения разработки и тестирования.
Для Xcode 11.2, основанного на идее Афтаба Мухаммеда Хана и с помощью Джона Нимиса, я только что протестировал следующий код.
Никаких изменений в файлах раскадровки не требуется!
Отредактировал мой файл AppDelegate.swift и добавил этот класс
и внутри вызова делегата для "didFinishLaunchingWithOptions" вызовите обходной путь
источник
Я адаптировал ханское решение Obj-C для Swift :
Назовите это в конце
didFinishLaunchingWithOptions
вAppDelegate
.Спасибо @Aftab!
источник
didFinishLaunchingWithOptions
Более быстрое решение:
Добавьте этот код куда-нибудь, а затем замените все экземпляры раскадровки на
FixedTextView
.Примечание: вы потеряете все атрибуты, созданные в раскадровке. Это может иметь серьезные последствия (например, настройка делегата, размер и т. Д.)
источник
Обновленное решение: обновление до Xcode 11.2.1 . Он работает на iOS 11, 12 или 13 устройств для меня.
Обратитесь к документации Apple Это обновление устраняет критическую проблему, которая может привести к сбою приложений, использующих UITextView.
Старое решение: скачанный Xcode 11.1 с https://developer.apple.com/download/more/ Переключение с 11.2 на 11.1 исправило сбой.
Кроме того, для меня даже с Xcode 11.2, когда я обновил свой iPhone до 13.2, это исправило сбой.
источник
11.2.1 GM seed решает эту проблему
(и его можно использовать для публикации в App Store)
Перейдите на https://developer.apple.com/download/ . Скачать Xcode 11.2.1 GM seed
Примечания к выпуску подтверждают, что это исправляет эту ошибку:
источник
Вы можете скачать последнюю бета-версию Xcode (11.2.1 GM) с сайта разработчика Apple.
Здесь прямая ссылка
источник
Улучшение @garafajon ответа. Для меня это работает в большинстве случаев.
источник
В качестве «быстрого» исправления вы можете добавить
UITextView
непосредственно из кода, а не через IB. По крайней мере, у меня это сработало. Хотя с моей точки зрения лучше откатиться на предыдущий Xcode / дождаться нового.источник
Это ошибка в Xcode 11.2. Подклассифицированные текстовые представления не работают на всех устройствах, на которых не установлена новая сборка iOS (13.2). Вы, вероятно, лучше не создавать релиз с этой сборкой.
Ты можешь сейчас:
источник
Я использовал успешный обходной путь, но это было больно. Это процесс, которому я следовал:
TextView
. В моем случае:id
(в моем случае:id="782-j1-88c"
)Это помогло мне решить проблему без потери желаемой функциональности. К счастью, у меня был только один,
UITextView
чтобы заменить. В противном случае это становится несостоятельным.источник
У меня была та же проблема, я только что обновил свой Xcode 11.2 до 11.2.1, он работал нормально.
После обновления я протестировал то же самое на iOs 13 и iOS 12, и все работало нормально.
источник
1. Проблема:
Существует проблема с Xcode 11.2, в которой раскадровки, содержащие UITextView, приводят к сбою приложения в версиях ОС, предшествующих iOS 13.2, если они скомпилированы с Xcode 11.2.
Проверьте эту яблочную документацию .
2. Решение:
Единственное решение - обновить ваш Xcode до 11.2.1 или 11.3.
Xcode 11.2.1 был специально выпущен, чтобы исправить эту проблему.
Проверьте эту яблочную документацию.
3. Предложение:
Я бы посоветовал вам перейти на последнюю версию Xcode 11.3, поскольку она поддерживает разработку приложений для iOS 13.3, а также есть много новых функций. Проверьте эту яблочную документацию .
источник
Эта проблема была исправлена в версии XCode 11.2.1 и вызвана в примечаниях к выпуску:
источник