Поздравление
Доступна новая версия Xcode (11.2.1), которая является лучшим способом избавиться от этой проблемы.
Обходные пути
@ Mojtaba Hosseini Решение, которое я предложил, заключалось в помощи и участии моей стороны моим коллегам-разработчикам в StackOverflow. Вы, я и все остальные разработчики здесь уже знали, что когдаApple объявит о новой версии, этой проблемы больше не будет.
Но у каждой вещи
Вышеупомянутое решение было определенно принято Apple Review, так как нет частногоApi Involved at this Этот подход очень похож на свойство создания, например
@ interface UITextView (Layout)
Или
UITextView +Layout.h
Поэтому, когда вы создаете свойство, вы напрямую используете частные компоненты APPLE и повторно модулируете их в соответствии с вашими требованиями или требованиями.
Простой пример iс AMFNetworking классы
- (void)setImageWithURL:(NSURL *)url {
[self setImageWithURL:url placeholderImage:nil];
}
Надеюсь, что я закончил с утверждением
Ниже ответ был только помощь с моей стороны, чтобы дать возможность разработчику продолжать разработчика, как вы, мы изначально предлагали разработчику откатитьсяxcode, и это было плохой практикой - снова загружать 8 ГБ xcode, даже если мы все знаем, что скоро выйдет новая версия
Хотя исправлено в Xcode 11.2.1, у меня есть одно решение для Xcode 11.2, с помощью которого выможет избавиться от этой аварии:
*** Завершение работы приложения из-за необработанного исключения «NSInvalidUnarchiveOperationException», причина: «Не удалось создать экземпляр класса с именем _UITextLayoutView, поскольку не найден класс с именем _UITextLayoutView;класс должен быть определен в исходном коде или связан с библиотекой (убедитесь, что класс является частью правильной цели) '
SOLUTION
Goв настройках сборки найдите «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;
}
Скомпилируйте код, и у вас будет запущено приложение:)