Gratulacje
Nowa wersja Xcode (11.2.1) jest już dostępna, co jest najlepszym sposobem na pozbycie się tego problemu.
Obejścia
@Mojtaba Hosseini rozwiązanie, które zaproponowałem, pochodziło z pomocy i udziału moich kolegów programistów nad StackOverflow. Ty, ja i cała reszta programisty tutaj już wiesz, że kiedy nowa wersja zostanie ogłoszona przez Apple, ten problem zniknie.
Ale oprócz wszystkiego
Powyższe rozwiązanie zostało zdecydowanie zaakceptowane przez Apple Review, ponieważ w ogóle nie jest zaangażowany prywatny interfejs API. To podejście jest bardzo podobne do tworzenia właściwości typu
@ interfejs UITextView (układ)
Lub
UITextView + Layout.h
Więc kiedy tworzysz własność, bezpośrednio używasz APPLE Private Components i ponownie modulujesz je według własnego uznania lub wymagań.
Prostym przykładem są klasy AMFNetworking
- (void)setImageWithURL:(NSURL *)url {
[self setImageWithURL:url placeholderImage:nil];
}
Mam nadzieję, że skończyłem z zarzutem
Poniższa odpowiedź była tylko pomocą mojej strony, aby umożliwić programistom kontynuowanie rozwoju, ponieważ początkowo proponowaliśmy programistom wycofanie Xcode. Ponowne pobranie 8 GB Xcode było złą praktyką, ponieważ wszyscy wiemy, że nowa wersja Xcode zostanie wkrótce wydana.
Chociaż jest to naprawione w Xcode 11.2.1, mam jedno rozwiązanie dla Xcode 11.2, dzięki któremu można pozbyć się tej awarii:
*** Zakończenie aplikacji z powodu nieprzechwyconego wyjątku „NSInvalidUnarchiveOperationException”, powód: „Nie można utworzyć instancji klasy o nazwie _UITextLayoutView, ponieważ nie znaleziono klasy o nazwie _UITextLayoutView; klasa musi być zdefiniowana w kodzie źródłowym lub połączona z biblioteki (upewnij się, że klasa jest częścią poprawnego celu) ”
ROZWIĄZANIE
Przejdź do wyszukiwania „Ustawienia kompilacji” dla „DEAD_CODE_STRIPPING” i ustaw na NIE
DEAD_CODE_STRIPPING = NO
Następnie
utwórz pliki 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
uruchom go w aplikacji delegata
#import "UITextViewWorkaround.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[UITextViewWorkaround executeWorkaround];
return yes;
}
Skompiluj kod, a będziesz mieć działającą aplikację :)