Po aktualizacji do Xcode 11.2 z Xcode 11.1 moja aplikacja ulega 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) ”
Dlaczego to się dzieje? Jak mogę zapobiec tej awarii?
Odpowiedzi:
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
Lub
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
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:
ROZWIĄZANIE
Przejdź do wyszukiwania „Ustawienia kompilacji” dla „DEAD_CODE_STRIPPING” i ustaw na NIE
Następnie
UITextViewWorkaround.h
UITextViewWorkaround.m
Skompiluj kod, a będziesz mieć działającą aplikację :)
źródło
Aktualizacja: Naprawiono! 🎉🎊
JEDYNYM rozwiązaniem jest aktualizacja
Ten błąd został naprawiony w Xcode 11.2.1. Możesz więc pobrać i używać go stąd.
Xcode 11.2 jest przestarzały przez Apple 5 listopada 2019 r
jeśli kiedykolwiek spróbujesz przesłać aplikację zbudowaną przy użyciu Xcode 11.2 do AppStore, zostaniesz odrzucony:
Ostrzeżenie o działaniu aplikacji App Store
Dlatego wszystkie obejścia wykonane za pomocą Xcode 11.2 są bezużyteczne
Jest to błąd dla Xcode 11.2 i naprawiony w Xcode 11.2.1.
Rozwiązania)
Cofnij do poprzedniej wersji Xcode z:Cofanie nie jest już opcją, a AppStore odrzuci każdą kompilację z Xcode poniżej 11.2.1 spójrz na toPamiętaj, że powinieneś użyć Safari, aby go pobrać i musisz najpierw zalogować się do portalu programistów Apple .
Możesz znaleźć wszystkie inne wersje Xcode i inne zasoby (w tym wersje i wersje beta) tutaj na https://developer.apple.com/download/moreObejście
Jest to bardzo trudne, ale działające obejście. Zamień wszystkie
UITextView
w scenorysach i Xibach na czystą wersję kodu .Pamiętaj, że ten błąd został znaleziony i naprawiony przez Apple
Również wcześniej błąd został potwierdzony przez Apple Staff edford
Dla osób z iOS 13.2 i nie mogących już używać Xcode 11.1:
Dla osób z storyboardem:
UITextView
UITextView
obiektówDla tych, którzy lubią metody swizzling (Objc i zachowanie dynamiczne)
Udaj się do odpowiedzi @aftab muhammed khan dla Objective-C i @MikRo dla Swift w wersji dostosowanejPo prostu nie rób tego więcej:
Nawet jeśli te dwa ostatnie obejścia nie używają prywatnego API Apple , zostaną odrzucone w AppStore, ponieważ Apple nie zaakceptuje kompilacji z wersjami Xcode w wersji 11.2.1 !
I znowu:
Xcode 11.2 jest przestarzały przez Apple 5 listopada 2019 r
źródło
CMD + Shift + K
)Problem został rozwiązany w Xcode 11.2.1.
EDYCJA: Ponieważ poprawka została już wydana, powinieneś przełączyć się na tę wersję Xcode i skomentować to obejście. Jak wspomniał Mojtaba Hosseini w swojej odpowiedzi:
Do czasu opublikowania poprawki przez Apple było to dobre obejście dla dalszego rozwoju i testowania.
Dla Xcode 11.2, w oparciu o ideę Aftaba Muhammeda Khana i przy pomocy Johna Nimisa właśnie przetestowałem następujący kod.
Nie trzeba zmieniać plików scenorysu!
Zmodyfikowałem mój plik AppDelegate.swift i dodałem tę klasę
oraz w zaproszeniu delegata „didFinishLaunchingWithOptions” wywołaj obejście
źródło
Zaadaptowałem rozwiązanie Obj-C Khana do Swift :
Nazwijmy to w końcu
didFinishLaunchingWithOptions
wAppDelegate
.Dzięki @Aftab!
źródło
didFinishLaunchingWithOptions
Szybsza poprawka:
Dodaj gdzieś ten kod, a następnie zastąp wszystkie wystąpienia scenorysu
FixedTextView
.Uwaga: stracisz wszystkie atrybuty utworzone w scenopisach. Może to mieć poważne konsekwencje (np. Ustawienie delegata, rozmiar itp.)
źródło
Zaktualizowane rozwiązanie: aktualizacja do Xcode 11.2.1 . Dla mnie działa na urządzeniach iOS 11, 12 lub 13.
Zapoznaj się z dokumentacją firmy Apple Ta aktualizacja rozwiązuje problem krytyczny, który może powodować awarię aplikacji korzystających z UITextView.
Stare rozwiązanie: Pobrano Xcode 11.1 z https://developer.apple.com/download/more/ Powrót z wersji 11.2 na 11.1 naprawił awarię.
Również dla mnie, nawet z Xcode 11.2, kiedy uaktualniłem iPhone'a do 13.2, to naprawiło awarię.
źródło
11.2.1 Nasiona GM rozwiązują ten problem
(i można go użyć do opublikowania w App Store)
Przejdź na https://developer.apple.com/download/ . Pobierz Xcode 11.2.1 GM seed
Informacje o wersji potwierdzają, że naprawia ten błąd:
źródło
Możesz pobrać ostatnią wersję beta Xcode (11.2.1 GM) ze strony internetowej programistów Apple.
Tutaj bezpośredni link
źródło
Poprawa odpowiedzi @garafajon. Dla mnie to działa w większości przypadków.
źródło
Jako „szybką” poprawkę możesz dodać
UITextView
bezpośrednio z kodu, a nie przez IB. Przynajmniej mi się udało. Chociaż z mojego punktu widzenia lepiej jest przywrócić poprzedni Xcode / poczekać na nowy.źródło
Jest to błąd związany z Xcode 11.2. Podklasy Textviews ulegają awarii na wszystkich urządzeniach, na których nie zainstalowano nowej wersji iOS (13.2). Prawdopodobnie lepiej nie budować wersji z tą wersją.
Możesz teraz:
źródło
Użyłem udanego obejścia, ale było to bolesne. Oto proces, który śledziłem:
TextView
. W moim przypadku:id
(w moim przypadku:id="782-j1-88c"
:)W ten sposób naprawiłem problem bez utraty pożądanej funkcjonalności. Na szczęście miałem tylko jednego
UITextView
do wymiany. W przeciwnym razie staje się to nie do utrzymania.źródło
Miałem ten sam problem, który właśnie zaktualizowałem Xcode 11.2 do 11.2.1, który działał dobrze.
Po aktualizacji przetestowałem to samo na iOS 13 i iOS 12 i działało dobrze.
źródło
1. Problem:
Występuje problem z Xcode 11.2, w którym Storyboardy zawierające UITextView powodują awarię aplikacji w wersjach systemu wcześniejszych niż iOS 13.2, jeśli zostaną skompilowane z Xcode 11.2.
Sprawdź tę dokumentację Apple .
2. Rozwiązanie:
Jedynym rozwiązaniem jest aktualizacja Xcode do wersji 11.2.1 lub 11.3.
Xcode 11.2.1 został wydany szczególnie w celu rozwiązania tego problemu z awarią.
Sprawdź tę dokumentację Apple.
3. Sugestia:
Sugeruję skorzystanie z najnowszej wersji Xcode 11.3, ponieważ obsługuje on tworzenie aplikacji na iOS 13.3, a także istnieje wiele nowych funkcji. Sprawdź tę dokumentację Apple .
źródło
Ten problem został rozwiązany w wersji Xcode 11.2.1 i wywołany w uwagach do wydania:
źródło