Crashlytics iş parçacığı yalnızca Xcode11 ile oluşturulan iOS13'te çöktü


18

Uygulamam yalnızca aşağıdaki çağrı yığını olan iOS13'te kilitlendi:

#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

Kesinlikle hiçbir fikrim yok, bu problemin ne olabileceğini ve nasıl yeniden üretebileceğimi bilmiyorum. Rastgele çöküyor. Projemde Crashlytics v3.14 kullanıyorum. Aynı problemle karşılaşan var mı?


1
Hala bu sorunun var mı
Anjula S.

Yanıtlar:


9

Her şeyden önce, "Ana Konu Denetleyicisi" ni açmanızı tavsiye ederim, Xcode'da, Ürün -> Şema -> Şemayı düzenle -> Teşhis bölümüne gidin, bu pencereyi görmelisiniz. Teşhis sekmesi Deneyebileceğiniz başka bir şey, kesme noktası bölümüne gitmektir. Xcode ve + işaretini tıklayıp belirli bir çağrıyı dinleyecek sembolik bir kesme noktası ekleyerek ana iş parçacığında çağrılıp çağrılmadığını kontrol etmek için bir koşul ekleyebilirsiniz.

Sembolik bir kırılma noktası

Kodda hata bulursanız, benim app sizinle aynı çökme yaşıyorum gibi, burada buraya gönderin, bu yüzden bu bug bulmak için gitti kadarıyla. Umarım size yardımcı olur!


Bu öneriyi denedim ama maalesef kazayı yakalamadım.
bemul12

Benim sorunum yerel yetkilendirme (dokunmatik ID, yüz kimliği), bir arka plan iş parçacığında başka bir görünüm denetleyicisi sunuyordum ve benim app sadece yaklaşık 2 dakika rastgele uygulama kullandıktan sonra çöktü. Bunu kontrol etmeyi deneyebilirsin
Laurynas Letkauskas

Doğru anlıyorsam, sorununuz ana iş parçacığı denetleyicisi tarafından yakalandı ve çalışma zamanı uyarıları bölümünde buldunuz. Benim app akışları çok kontrol ve ana iplik denetleyicisi tarafından çalışma zamanı uyarıları alamadım.
bemul12

Tam olarak kimlik doğrulamasının kapanmasında değildi. Aslında, bir görünüm denetleyicisine kullanıcının kimliğinin doğrulandığını, ana ekranı oluşturmaya başladığını, hala arka plan iş parçacığındayken bir sekme çubuğu oluşturduğunu ve ana iş parçacığı denetleyicisinin nerede olduğunu söyleyen bir temsilci yöntemi çağırıyordum işe yaradı, bu yüzden kazdım ve delege ana iş parçacığı üzerinde değil denilen sorun olduğunu
öğrendim

17

Uygulamanızda Google reklamlarını etkinleştirdiniz mi? Daha sonra Google ads sdk'de bir hata olabilir veya iOS 13'teki WebKit SDK uygulamasında bir hata olabilir.

Bunu atlamak - 19 Kasım 2019'dan itibaren Google Ads ekibinin "resmi" çözümü olan yukarıdaki konudan okumak, uygulamanızın plistini uiwebview yerine wkwebview kullanmak için aşağıdaki anahtarı / çifti içerecek şekilde değiştirmektir.

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

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


Cevabınız için teşekkürler. Uygulamamda Google reklamları yok, ancak içinde bir UIWebView var, ancak UIWebView, WebKit'in değil UIKit'in bir parçasıdır.
bemul12

UIWebView veya WKWebview kullanıyor musunuz?
own2pwn

2
Burada da aynı sorun var. Hala Google'ın yeni bir güncellemesini bekliyorum. Geçerli sürümde (7.52.0) bu hata hala var.
fdlr

1
@nab Muhtemelen evet. Bir geliştirici olduğunu "göstermek oranı" gerekçe gelir kaybı düştü bildirilen ~% 10 groups.google.com/d/msg/google-admob-ads-sdk/PuHOKMX1mVI/... Ve "gösteri hızı" yüzde başka raporlanan azalma: gruplar .google.com / d / msg / google-admob-ads-sdk / PuHOKMX1mVI /…
262Hz

1
İşte Google'ın "resmi" çözümü: groups.google.com/forum/#!category-topic/google-admob-ads-sdk/…, ancak bilinen bir sorun olduğunu unutmayın: sesli reklamlar HER ZAMAN sesi ne olursa olsun çalacaktır titreşim anahtarının açık olduğundan emin olun.
262Hz

6

Bu sorun nedeniyle SDK (7.5XX + iOS13), bu Bulunan Google reklamlarına olabilir parçacığı .

Geliştiriciler Info.plist, Google Ads ekibinin önerdiği şekilde dosyada anahtar çifti değerinin altında kullanmaya çalıştı .

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

Bu çökmeyi azalttı, ancak bu başka bir donma sorunu veriyor (% 100 CPU kullanımı).

Son zamanlarda Google bir notla 7.55.0 yayınladı:

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

bu yüzden Google ads SDK'sını 7.55.0


3

İş parçacıklarınız için yığın izlerini göstermek için, Crashlytics'in kilitlenme sonrası bazı kodlar çalıştırması gerekir. Bu kod uygulamanızın iş parçacıklarından birinde yürütüldüğünden, Crashlytics her zaman bu işlemin bir parçası olarak kendi yürütme işlemiyle ilgili bilgileri yakalar. Her zaman “CLSProcessRecordAllThreads” işlevini yürüten bir iş parçacığı görürsünüz. Aslında, satır içi olarak adlandırılan bir derleyici optimizasyonu nedeniyle bunu bir kereden fazla göreceksiniz. resim açıklamasını buraya girin İstisnalar fazladan karmaşıklık katar. Bir Objective-C veya C ++ istisnası yakalanmazsa, Crashlytics uygulamanın sonlandırılmasına izin verilmeden önce bu konuda bazı bilgileri kaydeder. Bu durumda, özel durum atan iş parçacığında CLSProcessRecordAllThreads işlevi çalıştırılmalıdır. Bu, bir istisna durumunda, "kilitlenen" iş parçacığının her zaman Crashlytics kodunu çalıştırdığı gibi görüneceği anlamına gelir. Bu normaldir ve sadece istisna anında yığın izlerini nasıl yakaladığımız ve sunduğumuzun bir ürünüdür.


1
"Kilitlenen iş parçacığı her zaman Crashlytics kodunu çalıştırıyor gibi görüneceğinden", gerçek kilitlenen iş parçacığının ne olduğunu nasıl belirlersiniz?
wilc0
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.