CrashlyticsスレッドはXcode11でビルドされたiOS13でのみクラッシュしました


18

私のアプリはiOS13でのみクラッシュし、次のコールスタックがあります。

#57. Crashed: com.twitter.crashlytics.ios.exception
0  myapp                          0x105d6d494 CLSProcessRecordAllThreads + 376 (CLSProcess.c:376)
1  myapp                          0x105d6d87c CLSProcessRecordAllThreads + 407 (CLSProcess.c:407)
2  myapp                          0x105d5d58c CLSHandler + 26 (CLSHandler.m:26)
3  myapp                          0x105d6bab4 __CLSExceptionRecord_block_invoke + 198 (CLSException.mm:198)
4  libdispatch.dylib              0x1be5c100c _dispatch_client_callout + 20
5  libdispatch.dylib              0x1be5cd804 _dispatch_lane_barrier_sync_invoke_and_complete + 60
6  myapp                          0x105d6b55c CLSExceptionRecord + 205 (CLSException.mm:205)
7  myapp                          0x105d6b390 CLSExceptionRecordNSException + 102 (CLSException.mm:102)
8  myapp                          0x105d6afb4 CLSTerminateHandler() + 258 (CLSException.mm:258)
9  libc++abi.dylib                0x1be6d9634 std::__terminate(void (*)()) + 20
10 libc++abi.dylib                0x1be6d8f58 __cxa_get_exception_ptr + 34
11 libc++abi.dylib                0x1be6d8f10 __cxxabiv1::exception_cleanup_func(_Unwind_Reason_Code, _Unwind_Exception*) + 126
12 libobjc.A.dylib                0x1be6341f8 _objc_exception_destructor(void*) + 362
13 Foundation                     0x1bee05434 -[NSISEngine tryToOptimizeReturningMutuallyExclusiveConstraints] + 322
14 Foundation                     0x1bebfeb94 -[NSISEngine _optimizeWithoutRebuilding] + 72
15 Foundation                     0x1bebfeaa8 -[NSISEngine optimize] + 116
16 Foundation                     0x1bebfe718 -[NSISEngine performPendingChangeNotifications] + 116
17 UIKitCore                      0x1c2e447c4 -[UIView(Hierarchy) layoutSubviews] + 316
18 UIKitCore                      0x1c23c6948 -[UIButton layoutSubviews] + 596
19 UIKitCore                      0x1c2e57abc -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2156
20 libobjc.A.dylib                0x1be62faf0 -[NSObject performSelector:withObject:] + 68
21 QuartzCore                     0x1c53f60f4 -[CALayer layoutSublayers] + 292
22 QuartzCore                     0x1c53f63fc CA::Layer::layout_if_needed(CA::Transaction*) + 484
23 QuartzCore                     0x1c5409964 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 140
24 QuartzCore                     0x1c534ec1c CA::Context::commit_transaction(CA::Transaction*, double) + 308
25 QuartzCore                     0x1c5379bd8 CA::Transaction::commit() + 684
26 QuartzCore                     0x1c537abc0 CA::Transaction::release_thread(void*) + 232
27 libsystem_pthread.dylib        0x1be62c3c0 _pthread_tsd_cleanup + 584
28 libsystem_pthread.dylib        0x1be624dbc _pthread_exit + 84
29 libsystem_pthread.dylib        0x1be626de8 _pthread_wqthread_legacy_worker_wrap + 98
30 libsystem_pthread.dylib        0x1be626b30 _pthread_wqthread + 424
31 libsystem_pthread.dylib        0x1be62cc78 start_wqthread + 8

--

Fatal Exception: NSInternalInconsistencyException
Modifications to the layout engine must not be performed from a background thread after it has been accessed from the main thread.
0  CoreFoundation                 0x1be919c30 __exceptionPreprocess
1  libobjc.A.dylib                0x1be6340c8 objc_exception_throw
2  Foundation                     0x1bee05434 -[NSISEngine tryToOptimizeReturningMutuallyExclusiveConstraints]
3  Foundation                     0x1bebfeb94 -[NSISEngine _optimizeWithoutRebuilding]
4  Foundation                     0x1bebfeaa8 -[NSISEngine optimize]
5  Foundation                     0x1bebfe718 -[NSISEngine performPendingChangeNotifications]
6  UIKitCore                      0x1c2e447c4 -[UIView(Hierarchy) layoutSubviews]
7  UIKitCore                      0x1c23c6948 -[UIButton layoutSubviews]
8  UIKitCore                      0x1c2e57abc -[UIView(CALayerDelegate) layoutSublayersOfLayer:]
9  libobjc.A.dylib                0x1be62faf0 -[NSObject performSelector:withObject:]
10 QuartzCore                     0x1c53f60f4 -[CALayer layoutSublayers]
11 QuartzCore                     0x1c53f63fc CA::Layer::layout_if_needed(CA::Transaction*)
12 QuartzCore                     0x1c5409964 CA::Layer::layout_and_display_if_needed(CA::Transaction*)
13 QuartzCore                     0x1c534ec1c CA::Context::commit_transaction(CA::Transaction*, double)
14 QuartzCore                     0x1c5379bd8 CA::Transaction::commit()
15 QuartzCore                     0x1c537abc0 CA::Transaction::release_thread(void*)
16 libsystem_pthread.dylib        0x1be62c3c0 _pthread_tsd_cleanup
17 libsystem_pthread.dylib        0x1be624dbc _pthread_exit
18 libsystem_pthread.dylib        0x1be626de8 _pthread_wqthread_legacy_worker_wrap
19 libsystem_pthread.dylib        0x1be626b30 _pthread_wqthread
20 libsystem_pthread.dylib        0x1be62cc78 start_wqthread

私は絶対に何の考えもありません、この問題が何が起こり得るのか、そしてどのように私は再現することができますか?ランダムにクラッシュします。私のプロジェクトではCrashlytics v3.14を使用しています。誰かが同じ問題に直面していますか?


1
あなたはまだこの問題を抱えていますか
アンジュラS.

回答:


9

まず、「メインスレッドチェッカー」をオンにすることをお勧めします。Xcodeで、[製品]-> [スキーム]-> [スキームの編集]-> [診断]に移動します。このウィンドウが表示されます。診断タブ 別の方法として、 Xcodeで+記号をクリックし、シンボリックブレークポイントを追加すると、特定の呼び出しをリッスンし、メインスレッドで呼び出されるかどうかを確認するための条件を追加できます。

シンボリックブレークポイント

コードでバグを見つけた場合は、ここに投稿してください。アプリで同じクラッシュが発生しているため、バグを見つけるまではこれで終わりです。お役に立てば幸いです。


私はこの提案を試しましたが、残念ながらクラッシュをキャッチできませんでした。
bemul12

私の問題はローカル認証(タッチID、フェイスID)で、バックグラウンドスレッドで別のビューコントローラーを提示していたため、アプリをランダムに約2分間使用した後でアプリがクラッシュしました。ぜひチェックしてみてください
Laurynas Letkauskas

私が正しく理解している場合、問題はメインスレッドチェッカーによって検出され、ランタイム警告セクションの下にあります。アプリで多くのフローをチェックしましたが、メインスレッドチェッカーで実行時の警告が表示されませんでした。
bemul12

これは、認証が完全に終了したわけではありません。私は実際にクロージャーからデリゲートメソッドを呼び出して、ユーザーが認証され、メイン画面の作成を開始し、バックグラウンドスレッドのままでタブバーをインスタンス化しているように見え、メインスレッドチェッカーがその場所にいることをビューコントローラーに伝えました機能したので、
掘り下げて調べたところ

17

アプリでGoogle広告を有効にしていますか?次に、Google広告 SDKのバグか、iOS 13のWebKit SDK実装のバグの可能性があります(コメントできないので、回答として投稿します)。

これの便乗-上記のリンクされたスレッドを読んで、2019年11月19日現在のGoogle広告チームの「公式」ソリューションは、uiwebviewではなくwkwebviewを使用するように次のキー/ペアを含めるようにアプリのplistを変更することです。

<key>gad_preferred_webview</key>
<string>wkwebview</string>

出典:https : //groups.google.com/forum/#!category-topic / google-admob-ads-sdk / ios / I4EEWrPPbSc


回答ありがとうございます。アプリにGoogle広告はありませんが、内部にUIWebViewがありますが、UIWebViewはWebKitではなくUIKitの一部です。
bemul12

UIWebViewまたはWKWebviewを使用していますか?
own2pwn

2
ここで同じ問題。Googleによる新しい更新をまだ待っています。現在のバージョン(7.52.0)では、このエラーはまだ存在しています。
fdlr

1
@nabたぶん、はい。一つの開発者は「ショー率は、」〜10%低下したことを理由に、収入の損失を報告したgroups.google.com/d/msg/google-admob-ads-sdk/PuHOKMX1mVI/...を そして「ショー率」の割合で別の報告減少:グループ.google.com / d / msg / google-admob-ads-sdk / PuHOKMX1mVI /…
262Hz

1
Googleの「公式」ソリューションは次のとおりです:groups.google.com/forum / #!category-topic / google-admob-ads-sdk / ただし、既知の問題が1つあることに注意してください。バイブレーションスイッチがオンになっています。
262 Hz

6

この問題は、Google スレッド SDK(7.5XX + iOS13)が原因である可能性があります。このスレッドが見つかりました。

開発者Info.plistは、Google広告チームの提案に従って、ファイル内の以下のキーペア値を使用しようとしました。

<key>gad_preferred_webview</key>
<string>wkwebview</string>

これによりクラッシュが減少しましたが、これは別のフリーズの問題を引き起こしています(100%CPU使用率)。

最近グーグルはメモ付きで7.55.0をリリースしました:

Removed all references to UIWebView. UIWebView is no longer supported.

Google広告SDKを更新して 7.55.0


3

スレッドのスタックトレースを表示するには、Crashlyticsがクラッシュ後にコードを実行する必要があります。このコードはアプリのスレッドの1つで実行されているため、Crashlyticsは常にこのプロセスの一部として、自身の実行に関する情報をキャプチャします。「CLSProcessRecordAllThreads」関数を実行するスレッドが常に表示されます。実際、インライン化と呼ばれるコンパイラーの最適化により、これは複数回表示されます。 ここに画像の説明を入力してください 例外により、複雑さがさらに増します。Objective-CまたはC ++の例外がキャッチされなくなった場合、Crashlyticsはアプリの終了を許可する前にそれに関する情報を記録します。これが発生した場合、CLSProcessRecordAllThreads関数は、例外をスローしたスレッドで実行する必要があります。つまり、例外が発生した場合、「クラッシュ」スレッドは常にCrashlyticsコードを実行しているように見えます。これは正常であり、例外時にスタックトレースをキャプチャして表示する方法の単なるアーティファクトです。


1
「クラッシュしているスレッドは常にCrashlyticsコードを実行しているように見える」ので、実際のクラッシュしているスレッドが何であるかをどのように判断しますか?
wilc0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.