Вітаю
Зараз доступна нова версія Xcode (11.2.1), яка є найкращим способом позбутися від цієї проблеми.
Обхідні шляхи
@Mojtaba Hosseini запропоноване мною рішення було з довідки та участі з мого боку для моїх колег-розробників через StackOverflow. Ви, я та всі інші розробники тут уже знаєте, що коли нова версія буде оголошена Apple, цього питання вже не буде.
Але крім усього
Вищезгадане рішення було безумовно прийнято Apple Review, оскільки приватний API взагалі не бере участь. Цей підхід дуже схожий на створення власності
@interface UITextView (макет)
Або
UITextView + Layout.h
Отже, коли ви створюєте властивість, ви безпосередньо використовуєте приватні компоненти APPLE та перемодулюєте їх відповідно до ваших потреб чи вимог.
Простий приклад - класи 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" і встановіть його на "НІ"
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;
}
Складіть код і у вас буде запущена програма :)