从Xcode 11.1升级到Xcode 11.2后,我的应用崩溃了:


  ***由于未捕获的异常'NSInvalidUnarchiveOperationException'而终止应用程序,原因:'无法实例化名为_UITextLayoutView的类,因为未找到名为_UITextLayoutView的类;该类需要在源代码中定义或从库中链接(确保该类是正确目标的一部分)'


为什么会这样呢?如何防止此崩溃?

最佳答案

恭喜啦

新版本的Xcode(11.2.1)现在可用,这是摆脱此问题的最佳方法。

解决方法

@Mojtaba Hosseini我提出的解决方案是基于StackOverflow的帮助和我的同伴开发人员的参与。您,我以及此处的所有其他开发人员已经知道,当Apple宣布新版本时,此问题将消失。

但是除了一切

由于完全不涉及私有API,因此上述解决方案已被Apple Review接受。这种方法非常类似于创建属性,例如


  @interface UITextView(布局)


要么


  UITextView + Layout.h


因此,当您创建属性时,您将直接使用APPLE私有组件并根据您的要求或要求对其进行重新调制。

最简单的例子是AMFNetworking类

- (void)setImageWithURL:(NSURL *)url {
    [self setImageWithURL:url placeholderImage:nil];
}


希望我已经完成指控

下面的答案只是我方面的一些帮助,可以使开发人员在您最初建议开发人员回退Xcode时继续进行开发。再次下载8 GB 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;
    }


编译代码,您将拥有一个正在运行的应用程序:)

关于ios - 从Xcode 11.1升级到Xcode 11.2后,由于_UITextLayoutView,应用程序崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58658683/

10-13 03:50
查看更多