从Xcode 11.1升级到Xcode 11.2后,我的应用程序崩溃:
*由于未捕获的异常‘NSInvalidUnarchive veOperationException’而终止应用程序,原因:‘无法实例化名为_UITextLayoutView的类,因为找不到名为_UITextLayoutView的类;该类需要在源代码中定义或从库链接(确保该类是正确目标的一部分)’
为什么会这样?我怎样才能防止这次坠机?
从Xcode 11.1升级到Xcode 11.2后,我的应用程序崩溃:
*由于未捕获的异常‘NSInvalidUnarchive veOperationException’而终止应用程序,原因:‘无法实例化名为_UITextLayoutView的类,因为找不到名为_UITextLayoutView的类;该类需要在源代码中定义或从库链接(确保该类是正确目标的一部分)’
为什么会这样?我怎样才能防止这次坠机?
Congratulation个
Xcode的新版本(11.2.1)现在可以使用,这是解决这个问题的最好方法.
Workarounds个
@Mojtaba Hosseini我提出的解决方案来自StackOverflow上我的帮助和我的开发伙伴的参与.你我和在座的所有开发者睡觉都已经知道,等苹果宣布新版本,这个问题就没了.
But Beside Everything个
上述解决方案完全被Apple Review接受,因为它根本不涉及私有API.此方法与创建属性非常相似,例如
@界面UITextView(布局)
或
UITextView+Layout.h
因此,当您创建属性时,您将直接使用Apple Private Components,并根据您的依赖或要求对它们进行重新模块化.
简单的示例是AMFNetworking类
- (void)setImageWithURL:(NSURL *)url {
[self setImageWithURL:url placeholderImage:nil];
}
希望我对指控了结
下面的回答只是我这边的一些帮助,使开发人员能够像我们最初建议开发人员回滚Xcode那样继续开发.再次下载8 GB的Xcode是一种糟糕的做法,因为我们都知道Xcode的新版本很快就会发布.
虽然Xcode11.2.1中已经修复了这个问题,但是我为Xcode11.2提供了一个解决方案,您可以通过它摆脱这种崩溃:
*由于未捕获的异常‘NSInvalidUnarchive veOperationException’而终止应用程序,原因:‘无法实例化名为_UITextLayoutView的类,因为找不到名为_UITextLayoutView的类;该类需要在源代码中定义或从库链接(确保该类是正确目标的一部分)’
SOLUTION个
转到构建设置,搜索"DEAD_CODE_STRIPING"并将其设置为no
DEAD_CODE_STRIPPING = NO
Then个
创建文件UITextView解决方法
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;
}
编译代码,您将拥有一个正在运行的应用程序:)