[解決済み】Xcode 11.1からXcode 11.2にアップグレードした後、_UITextLayoutViewが原因でアプリがクラッシュする。
質問
Xcode 11.1からXcode 11.2にアップグレードした後、アプリがクラッシュしてしまいます。
*** キャッチできない例外 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named _UITextLayoutView because no class named _UITextLayoutView was found; must be defined in source code or linked in from library (ensure the class is part of correct target)' によりアプリを終了します。
なぜこのようなことが起こるのでしょうか?どうすればこのクラッシュを防ぐことができますか?
解決方法を教えてください。
おめでとうございます
Xcodeの新バージョン(11.2.1)がリリースされており、この問題を解決する最善の方法です。
回避策
モジタバ・ホッセイニ 私が提案した解決策は、私の側からStackOverflowの開発者仲間に助けを求め、参加してもらったものです。Appleから新バージョンが発表されれば、この問題はなくなることは、あなたも私も、ここにいる他のすべての開発者も、すでに知っていることです。
しかし、すべての横で
前述の解決策は、プライベートAPIが全く関係ないため、Apple Reviewに間違いなく受け入れられました。この方法は、以下のようなプロパティを作成するのと非常に似ています。
インターフェース UITextView (Layout)
または
UITextView+Layout.h
つまり、プロパティを作成するときは、APPLE Private Componentsを直接使用し、依存や要件に応じてそれらを再モジュールしているのです。
簡単な例として、AMFNetworkingクラスがあります。
- (void)setImageWithURL:(NSURL *)url {
[self setImageWithURL:url placeholderImage:nil];
}
疑惑の解消を願う
以下の回答は、当初、開発者にXcodeをロールバックするよう提案しましたが、開発者が開発を継続できるようにするための私の側からの支援です。8GBのXcodeを再度ダウンロードするのは、新しいXcodeがすぐにリリースされることがわかっているため、悪い習慣でした。
Xcode 11.2.1では修正されていますが、Xcode 11.2用にこのクラッシュを取り除くことができる解決策を1つ得ました。
<ブロッククオート*** キャッチできない例外 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named _UITextLayoutView because no class named _UITextLayoutView was found; must be defined in source code or linked in from library (ensure the class is part of correct target)' によりアプリを終了します。
解決方法
ビルド設定から、"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;
}
このコードをコンパイルすると、アプリが動作するようになります :)
関連
-
[解決済み】Xcode - 'NSUnknownKeyException', reason: ... this class is not key value coding-compliant for the key X" エラーの修正方法とは?
-
[解決済み】arm64アーキテクチャの未定義シンボルについて
-
[解決済み] 'strcmp' はこのスコープで宣言されていません。
-
[解決済み] Xcodeエラー "Could not find Developer Disk Image" が発生する。
-
[解決済み] 基本的なUIButtonをプログラムで作成するには?
-
[解決済み] 指定されたホスト名を持つサーバーが見つからなかった
-
[解決済み] Swiftを使って音を鳴らすには?
-
[解決済み] selector' の引数が '@objc' メソッド、プロパティ、またはイニシャライザを参照していない
-
[解決済み] 識別子Cellのセルをdequeueできない - 識別子にnibまたはクラスを登録するか、ストーリーボードでプロトタイプセルを接続する必要があります。
-
[解決済み] MKMapView という名前のクラスをインスタンス化できませんでした。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンカーコマンドが終了コード1で失敗(起動を確認するには-vを使用)、Xcode 8、Swift 3
-
[解決済み] リンカーコマンドが終了コード 1 で失敗した(起動を確認するには -v を使用)、Xcode 8、Swift 3
-
[解決済み] iPhoneが使用できません。デバイスを再接続してください
-
[解決済み] データソースからのセルの取得に失敗しました。
-
[解決済み] selector' の引数が '@objc' メソッド、プロパティ、またはイニシャライザを参照していない
-
[解決済み] 条件付きバインディング:letエラーの場合 - 条件付きバインディングのイニシャライザーはOptional型でなければならない
-
[解決済み] BluetoothのロゴはiPhoneのキャラクターとして利用できますか?
-
[解決済み] あなたのリクエストはエラーを発生させました。[newNullResponse]?
-
[解決済み] iOS Swift 3 - UIDatePicker
-
[解決済み] Xcodeの古いバージョンはどこでダウンロードできますか?[クローズド]