поздравление
Доступна новая версия Xcode (11.2.1), которая является лучшим способом избавиться от этой проблемы.
обходные
@Mojtaba Hosseini Решение, которое я предложил, было от помощи и участия моей стороны до моих коллег-разработчиков через StackOverflow. Вы, я и все остальные разработчики здесь уже знаете, что когда Apple выпустит новую версию, эта проблема исчезнет.
Но кроме всего
Вышеупомянутое решение было определенно принято Apple Review, так как не было задействовано никакого частного API. Этот подход очень похож на создание свойства, как
@interface UITextView (Layout)
Или
UITextView + Layout.h
Поэтому, когда вы создаете свойство, вы напрямую используете APPLE Private Components и повторно модулируете их в соответствии с вашими требованиями или требованиями.
Простой пример - AMFNetworking классы
- (void)setImageWithURL:(NSURL *)url {
[self setImageWithURL:url placeholderImage:nil];
}
Надеюсь, я закончил с утверждением
Ответ, приведенный ниже, был лишь некоторой помощью с моей стороны, которая позволила разработчику продолжить развитие, так как вы изначально предложили разработчику откатить Xcode. Это была плохая практика, чтобы снова загрузить 8 ГБ XCode, поскольку мы все знаем, что скоро будет выпущена новая версия XCode.
Хотя это исправлено в Xcode 11.2.1, у меня есть одно решение для Xcode 11.2, с помощью которого вы можете избавиться от этой аварии:
*** Завершение работы приложения из-за необработанного исключения «NSInvalidUnarchiveOperationException», причина: «Не удалось создать экземпляр класса с именем _UITextLayoutView, поскольку не найден класс с именем _UITextLayoutView; класс должен быть определен в исходном коде или связан с библиотекой (убедитесь, что класс является частью правильной цели) '
РЕШЕНИЕ
Перейдите к поиску параметров сборки для "DEAD_CODE_STRIPPING" и установите для него значение NO
DEAD_CODE_STRIPPING = NO
затем
создавать файлы UITextViewWorkaround
UITextViewWorkaround.h
#import <Foundation/Foundation.h>
@interface UITextViewWorkaround : NSObject
+ (void)executeWorkaround;
@end
UITextViewWorkaround.m
#import "UITextViewWorkaround.h"
#import <objc/runtime.h>
@implementation UITextViewWorkaround
+ (void)executeWorkaround {
if (@available(iOS 13.2, *)) {
}
else {
const char *className = "_UITextLayoutView";
Class cls = objc_getClass(className);
if (cls == nil) {
cls = objc_allocateClassPair([UIView class], className, 0);
objc_registerClassPair(cls);
#if DEBUG
printf("added %s dynamically\n", className);
#endif
}
}
}
@end
выполнить его в приложении делегата
#import "UITextViewWorkaround.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[UITextViewWorkaround executeWorkaround];
return yes;
}
Скомпилируйте код, и у вас будет запущено приложение :)