Utas Crashlytics hanya mogok di iOS13 yang dibangun dengan Xcode11

18

Aplikasi saya hanya macet di iOS13 dengan tumpukan panggilan berikut:

#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

Saya benar-benar tidak tahu, apa yang bisa terjadi masalah ini dan bagaimana saya bisa mereproduksi. Itu crash secara acak. Saya menggunakan Crashlytics v3.14 dalam proyek saya. Adakah yang menghadapi masalah yang sama?

bemul12
sumber
1
Apakah Anda masih memiliki masalah ini
Anjula S.

Jawaban:

9

Pertama-tama saya akan merekomendasikan untuk mengaktifkan "Pemeriksa Utas Utama", dalam Xcode, pergi ke Produk -> Skema -> Edit skema -> Diagnostik, Anda akan melihat jendela ini Tab diagnostik Hal lain yang dapat Anda coba adalah pergi ke bagian breakpoint Anda di Xcode dan mengklik tanda + dan menambahkan breakpoint simbolis, yang akan mendengarkan panggilan tertentu dan Anda dapat menambahkan kondisi untuk memeriksa apakah itu dipanggil pada utas utama.

Sebuah breakpoint simbolis

Jika Anda menemukan bug Anda dalam kode, silakan posting di sini, karena saya mengalami crash yang sama dengan Anda di aplikasi saya, jadi sejauh ini saya sudah mencari tahu bug tersebut. Semoga ini bisa membantu Anda!

Laurynas Letkauskas
sumber
Saya sudah mencoba saran ini, tetapi sayangnya saya tidak menangkap crash.
bemul12
Masalah saya ada di otorisasi lokal (ID sentuh, ID wajah), saya menghadirkan pengontrol tampilan lain di utas latar belakang, dan aplikasi saya mogok hanya kemudian setelah menggunakan aplikasi selama sekitar 2 menit secara acak. Anda dapat mencoba memeriksanya
Laurynas Letkauskas
Jika saya mengerti benar, masalah Anda ditangkap oleh pemeriksa utas utama dan Anda menemukannya di bawah bagian peringatan runtime. Saya memeriksa banyak aliran di aplikasi saya dan saya tidak mendapatkan peringatan runtime oleh pemeriksa utas.
bemul12
Itu tidak persis di penutupan otentikasi. Saya sebenarnya memanggil metode delegasi dari penutupan, memberi tahu pengontrol tampilan bahwa pengguna diautentikasi, mulai membangun layar utama, yang tampaknya membuat panel bar sementara masih di utas latar belakang, dan di situlah pemeriksa utas utama berhasil, jadi saya menggali dan menemukan bahwa delegasi dipanggil bukan di utas utama adalah masalah
Laurynas Letkauskas
17

Apakah Anda memiliki iklan google diaktifkan di aplikasi Anda? Itu bisa berupa bug di Google ads sdk atau bug di implementasi WebKit SDK di iOS 13. (sry saya tidak bisa berkomentar, jadi saya posting ini sebagai jawaban)

Membawa dukungan dari ini - Membaca melalui utas tertaut di atas, solusi "resmi" dari tim Iklan Google pada 19 November 2019 adalah memodifikasi daftar aplikasi Anda untuk memasukkan kunci / pasangan berikut untuk menggunakan wkwebview alih-alih uiwebview.

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

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

own2pwn
sumber
Terima kasih jawaban anda Saya tidak memiliki iklan Google di aplikasi saya, tetapi saya memiliki UIWebView di dalamnya, tetapi UIWebView adalah bagian dari UIKit, bukan WebKit.
bemul12
Apakah Anda menggunakan UIWebView atau WKWebview?
own2pwn
2
Masalah yang sama di sini. Saya masih menunggu pembaruan baru oleh Google. Dalam versi saat ini (7.52.0) kesalahan ini masih ada.
fdlr
1
@ nab Mungkin, ya. Satu pengembang melaporkan kehilangan pendapatan, dengan alasan "laju pertunjukan" turun ~ 10% groups.google.com/d/msg/google-admob-ads-sdk/PuHOKMX1mVI/... Dan yang lain melaporkan penurunan persentase "tampilkan" "persentase: grup .google.com / d / msg / google-admob-ads-sdk / PuHOKMX1mVI / ...
262Hz
1
Inilah solusi "resmi" dari Google: groups.google.com/forum/#!category-topic/google-admob-ads-sdk/… tetapi perhatikan ada satu masalah yang diketahui: iklan dengan suara akan SELALU memainkan suara, terlepas dari sakelar getar sedang aktif.
262Hz
6

Masalah ini mungkin disebabkan oleh iklan Google SDK (7.5XX + iOS13), ditemukan utas ini .

Pengembang mencoba menggunakan di bawah ini nilai pasangan kunci dalam Info.plistfile seperti yang disarankan oleh tim Iklan Google.

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

Penurunan crash ini tetapi ini memberikan masalah pembekuan (penggunaan CPU 100%).

Baru-baru ini Google merilis 7.55.0 dengan catatan:

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

jadi coba perbarui SDK iklan Google ke 7.55.0

Arya
sumber
3

Untuk menampilkan jejak stack untuk utas Anda, Crashlytics perlu menjalankan beberapa kode pasca-kerusakan. Karena kode ini dijalankan di salah satu utas aplikasi Anda, Crashlytics selalu menangkap informasi tentang eksekusi sendiri sebagai bagian dari proses ini. Anda akan selalu melihat utas menjalankan fungsi "CLSProcessRecordAllThreads". Bahkan, Anda akan melihatnya lebih dari sekali, karena optimasi kompiler yang disebut inlining. masukkan deskripsi gambar di sini Pengecualian menambah sedikit kompleksitas. Ketika pengecualian Objective-C atau C ++ tidak berhasil, Crashlytics mencatat beberapa informasi tentang hal itu sebelum aplikasi diizinkan untuk berhenti. Ketika ini terjadi, fungsi CLSProcessRecordAllThreads harus dijalankan pada utas yang melempar pengecualian. Ini berarti bahwa dalam kasus pengecualian, utas "macet" akan selalu terlihat seperti sedang menjalankan kode Crashlytics. Ini normal, dan hanya sebuah artefak tentang bagaimana kami menangkap dan menyajikan jejak tumpukan pada saat pengecualian.

Zubair
sumber
1
Karena "utas tabrakan akan selalu terlihat seperti sedang menjalankan kode Crashlytics", bagaimana Anda menentukan apa utas tabrakan sebenarnya?
wilc0