После обновления до Xcode 11.2 с Xcode 11.1 приложение вылетает из-за _UITextLayoutView

После обновления до Xcode 11.2 из приложения Xcode 11.1 происходит сбой:

*** Завершение работы приложения из-за необработанного исключения «NSInvalidUnarchiveOperationException», причина: «Не удалось создать экземпляр класса с именем _UITextLayoutView, поскольку ни один класс с именем _UITextLayoutView не существует был найден; класс должен быть определен в исходном коде или связан с библиотекой (убедитесь, что класс является частью правильной цели) '

116
задан Volker Siegel 3 November 2019 в 02:02
поделиться

15 ответов

Я встретился с той же проблемой и искал подобную проблему вокруг сети тогда, я получил одно решение, которым можно избавиться от этого катастрофического отказа

приложение Завершения *** из-за неперехваченного исключения '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;
    }

Компиляция код, и у Вас будет запущенное приложение:)

121
ответ дан 23 November 2019 в 01:02
поделиться
DEAD_CODE_STRIPPING = NO

В настройках сборки проекта фиксирует его.

0
ответ дан 4 November 2019 в 23:03
поделиться

Более быстрая фиксация:

///Substitute class for _UITextLayoutView bug
class FixedTextView: UITextView {
    required init?(coder: NSCoder) {
        if #available(iOS 13.2, *) {
            super.init(coder: coder)
        }
        else {
            let rect = CGRect(origin: .zero, size: CGSize(width: 100, height: 44*3))
            super.init(frame: rect, textContainer: nil)
        }
    }
}

Добавляют этот код где-нибудь и затем заменяют все экземпляры раскадровки к FixedTextView.

Примечание: Вы потеряете любые атрибуты, созданные в раскадровках. Это могло иметь серьезные последствия (например, делегат, устанавливающий, размер, и т.д.)

17
ответ дан 23 November 2019 в 01:02
поделиться

Это - ошибка для решения

Xcode 11.2

, Откатывают к предыдущей версии Xcode выпуска от:

https://developer.apple.com/services-account/download? Примечание =/Developer_Tools/Xcode_11.1/Xcode_11.1.xip

пути, что необходимо использовать Safari для загрузки его и Вы должны сначала вход в систему портала разработчика Apple .

можно найти все другие версии XCode и другую ссылку ресурсов (включая версии выпуска и бета-версии) здесь в https://developer.apple.com/download/more

обходное решение

, Это - очень трудное но рабочее обходное решение. Замените весь UITextView с в [1 122] раскадровка с и Xib с с чистый код версия.

<час>

Примечание, что этот ошибка подтверждена Штат Apple edford

Confirmation

199
ответ дан 23 November 2019 в 01:02
поделиться

Загруженный Xcode 11.1 от https://developer.apple.com/download/more / Переключение назад от 11,2 до 11,1 зафиксировал катастрофический отказ.

кроме того, для меня даже с Xcode 11.2, когда я обновил свой iPhone до 13,2, который зафиксировал катастрофический отказ.

14
ответ дан 23 November 2019 в 01:02
поделиться

Изменение к лучшему @garafajon ответ. Для меня это работает в большинстве случаев.

///Substitute class for _UITextLayoutView bug
class FixedTextView: UITextView {
    required init?(coder: NSCoder) {
        if #available(iOS 13.2, *) {
            super.init(coder: coder)
        }
        else {
            super.init(frame: .zero, textContainer: nil)
            self.autoresizingMask = [.flexibleWidth, .flexibleHeight]
            self.contentMode = .scaleToFill

            self.isScrollEnabled = false   // causes expanding height

            // Auto Layout
            self.translatesAutoresizingMaskIntoConstraints = false
            self.font = UIFont(name: "HelveticaNeue", size: 18)
        }
    }
}
9
ответ дан 23 November 2019 в 01:02
поделиться

Как "быстрая" фиксация можно добавить UITextView непосредственно от кода а не через IB. По крайней мере, это работало на меня. Хотя с моей точки зрения лучше откатывать к предыдущему XCode/ожидать для нового.

5
ответ дан 23 November 2019 в 01:02
поделиться

Я принял решение хана Obj-C Swift:

import UIKit

@objc
class UITextViewWorkaround : NSObject {

    static func executeWorkaround() {
        if #available(iOS 13.2, *) {
        } else {
            let className = "_UITextLayoutView"
            let theClass = objc_getClass(className)
            if theClass == nil {
                let classPair: AnyClass? = objc_allocateClassPair(UIView.self, className, 0)
                objc_registerClassPair(classPair!)
            }
        }
    }

}

Спасибо Aftab!

28
ответ дан 23 November 2019 в 01:02
поделиться

Это - ошибка с Xcode 11.2. Разделенные на подклассы Textviews отказывают на всех устройствах, не имеющих neweset сборку iOS (13.2) установленный. Вы, вероятно, лучше не создаете выпуск с той сборкой.

Вы можете теперь:

  • снижение XCode к 11,1 или
  • обновляют Ваше устройство до iOS 13.2
3
ответ дан 23 November 2019 в 01:02
поделиться

На основе идеи Aftab Muhammed Khan и с помощью John Nimis я просто протестировал следующий код.

Никакое изменение в необходимых файлах раскадровки!!!

Отредактированный мой файл AppDelegate.swift и добавил, что этот класс

//******************************************************************
// MARK: - Workaround for the xCode 11.2 bug
//******************************************************************
class UITextViewWorkaround: NSObject {

    // --------------------------------------------------------------------
    // MARK: Singleton
    // --------------------------------------------------------------------
    // make it a singleton
    static let unique = UITextViewWorkaround()

    // --------------------------------------------------------------------
    // MARK: executeWorkaround()
    // --------------------------------------------------------------------
    func executeWorkaround() {

        if #available(iOS 13.2, *) {

            NSLog("UITextViewWorkaround.unique.executeWorkaround(): we are on IOS 13.2+ no need for a workaround")

        } else {

            // name of the missing class stub
            let className = "_UITextLayoutView"

            // try to get the class
            var cls = objc_getClass(className)

            // check if class is available
            if cls == nil {

                // it's not available, so create a replacement and register it
                cls = objc_allocateClassPair(UIView.self, className, 0)
                objc_registerClassPair(cls as! AnyClass)

                #if DEBUG
                NSLog("UITextViewWorkaround.unique.executeWorkaround(): added \(className) dynamically")
               #endif
           }
        }
    }
}

и в призыве делегата "didFinishLaunchingWithOptions" называет обходное решение

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        // Override point for customization after application launch.

        // this is the workaround for xCode 11.2
        UITextViewWorkaround.unique.executeWorkaround()

}
33
ответ дан 23 November 2019 в 01:02
поделиться

Семя на 11.2.1 Гм разрешает этот выпуск

(и это может использоваться для публикации к App Store)

, Переходят в https://developer.apple.com/download / . Загрузите 11.2.1 Гм семени XCode

, Информация о версии подтверждает, что они фиксируют эту ошибку:

enter image description here

13
ответ дан 23 November 2019 в 01:02
поделиться

Можно пойти для загрузки последней бета-версии XCode (11.2.1 Гм) с веб-сайта разработчика Apple.

Здесь прямая ссылка

enter image description here

Hope эта справка 🠘 ‰

9
ответ дан 23 November 2019 в 01:02
поделиться

Я использовал успешное обходное решение, но это было болезненно. Это - процесс, за которым я следовал:

  1. Открывают, XIB в текстовом редакторе
  2. Находят оскорбление TextView. В моем случае:
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="782-j1-88c" customClass="LCAnsiConsoleTextView">
  <rect key="frame" x="16" y="20" width="343" height="589"/>
  <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
  <fontDescription key="fontDescription" name="Menlo-Regular" family="Menlo" pointSize="12"/>
  <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
  1. Примечание id (в моем случае: id="782-j1-88c")
  2. Переопределение класс, как отмечено в ответах выше и воссоздает опции (мой - Objective C, извините):
@implementation FixedTextView

- (id) initWithCoder:(NSCoder*)coder
{
    if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){13,2,0}])
        self = [super initWithCoder:coder];
    else {
        self = [super initWithFrame:CGRectMake(16, 3, 343, 605)];
        self.editable = YES;
        self.selectable = YES;
        self.insetsLayoutMarginsFromSafeArea = YES;
        self.clipsToBounds = YES;
        self.clearsContextBeforeDrawing = YES;
        self.autoresizesSubviews = YES;
        self.contentMode = UIViewContentModeScaleToFill;
        self.scrollEnabled = YES;
        self.userInteractionEnabled = YES;
        self.multipleTouchEnabled = YES;
        self.translatesAutoresizingMaskIntoConstraints = NO;
        self.font = [UIFont fontWithName:@"Menlo-Regular" size:12.0];
    }
    return self;
}
  1. Примечание ограничения, которые включают Ваш текстовый идентификатор представления и воссоздают те ограничения против других идентификаторов элемента в Вашем представлении или просматривают контроллер. В моем случае:
- (id) initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self xibSetup];
        [self initView];
/*
        <constraint firstItem="75C-lt-YtE" firstAttribute="top" secondItem="782-j1-88c" secondAttribute="bottom" constant="8" symbolic="YES" id="8SH-5l-FAs"/>
        <constraint firstItem="782-j1-88c" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leadingMargin" id="Mve-aZ-HCe"/>
        <constraint firstItem="782-j1-88c" firstAttribute="leading" secondItem="75C-lt-YtE" secondAttribute="leading" id="dPG-u3-cCi"/>
        <constraint firstItem="782-j1-88c" firstAttribute="trailing" secondItem="iN0-l3-epB" secondAttribute="trailingMargin" id="sjT-0Q-hNj"/>
        <constraint firstItem="782-j1-88c" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" id="vic-vZ-osR"/>
*/
        [self.command.topAnchor constraintEqualToAnchor:self.console.bottomAnchor constant:8].active = YES;
        [self.console.leadingAnchor constraintEqualToAnchor:self.layoutMarginsGuide.leadingAnchor].active = YES;
        [self.console.leadingAnchor constraintEqualToAnchor:self.command.leadingAnchor].active = YES;
        [self.console.trailingAnchor constraintEqualToAnchor:self.trailingAnchor].active = YES;
        [self.console.topAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor].active = YES;

    }
    return self;
}

Выполнение этого устранило проблему для меня без потери в желаемой функциональности. К счастью, у меня был только один UITextView для замены. Иначе это становится ненадежным.

3
ответ дан 23 November 2019 в 01:02
поделиться

У меня была та же проблема, я просто обновил свой Xcode 11.2 до 11.2.1, это хорошо работало.

После обновления я протестировал то же на iOS 13 и iOS 12, и это хорошо работало.

1
ответ дан 23 November 2019 в 01:02
поделиться

Недостаточно Репутации для добавления комментария но я нашел, что даже после обновления XCode, все еще испытывал этот катастрофический отказ. ПОКА Я НЕ ПЕРЕЗАПУСТИЛ СВОЙ КОМПЬЮТЕР!

, Если вышеупомянутые решения не работают мгновенно, попытайтесь перезапустить XCode и также Ваш компьютер.

1
ответ дан 23 November 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: