축하합니다
이 문제를 해결하는 가장 좋은 방법은 Xcode의 새로운 버전 (11.2.1)입니다.
해결 방법
@ Mojtaba Hosseini 내가 제안한 솔루션은 StackOverflow를 통해 동료 개발자에게 도움과 참여의 도움을 얻은 것입니다. 귀하와 저의 모든 개발자는 이미 Apple에서 새 버전을 발표하면이 문제가 사라질 것임을 이미 알고 있습니다.
그러나 모든 것 옆에
언급 된 솔루션은 Apple API에 전혀 수용되지 않았기 때문에 Apple Review에서 확실히 받아 들였습니다. 이 방법은 다음과 같은 속성 생성과 매우 유사합니다.
@interface UITextView (레이아웃)
또는
UITextView + Layout.h
따라서 속성을 만들 때 APPLE 개인 구성 요소를 직접 사용하고 의존성 또는 요구 사항에 따라 다시 변조합니다.
간단한 예는 AMFNetworking 클래스입니다
- (void)setImageWithURL:(NSURL *)url {
[self setImageWithURL:url placeholderImage:nil];
}
내가 혐의로 끝났 으면 좋겠다
아래 답변은 개발자가 Xcode를 롤백하도록 처음 제안했을 때 개발자가 계속 개발할 수 있도록 도와주는 도움이었습니다. 8GB Xcode를 다시 다운로드하는 것은 나쁜 습관이었습니다. 새로운 버전의 Xcode가 곧 출시 될 것입니다.
Xcode 11.2.1에서 수정되었지만 Xcode 11.2에 대한 하나의 솔루션이 있어이 충돌을 제거 할 수 있습니다.
*** catch되지 않은 예외 '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;
}
코드를 컴파일하면 실행중인 앱이 있습니다 :)