Потік Crashlytics вийшов з ладу лише на iOS13, створеному за допомогою Xcode11


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
У вас все ще виникає ця проблема
Анжула С.

Відповіді:


9

Перш за все, я б рекомендував увімкнути "Перевірка головної нитки", у Xcode перейти до Продукт -> Схема -> Редагувати схему -> Діагностика, ви повинні побачити це вікно. Вкладка Діагностика Ще одне, що ви можете спробувати, - це перейти до розділу перерви в Xcode та натискання знаку + та додавання символічної точки перерви, яка прослухає певний виклик, і ви можете додати до нього умову для перевірки, чи викликається він у головному потоці.

Символічна точка розриву

Якщо ви знайшли свою помилку в коді, будь ласка, опублікуйте її тут, оскільки у мене в програмі такий самий збій, як і у вас, тому це все одно, наскільки я пішов шукати помилку. Сподіваюсь, це допоможе вам!


Я спробував цю пропозицію, але, на жаль, я не зловив аварію.
bemul12

Моя проблема полягала в локальній авторизації (сенсорний ідентифікатор, ідентифікатор обличчя), я представляв інший контролер перегляду на фоновому потоці, і мій додаток вийшов з ладу лише пізніше після використання програми приблизно 2 хвилини випадковим чином. Ви можете спробувати це перевірити
Laurynas Letkauskas

Якщо я правильно розумію, вашу проблему виявила перевірка основного потоку, і ви знайшли її в розділі попереджень про час виконання. Я перевірив багато потоків у моєму додатку, і я не отримав попереджень про час роботи за допомогою перевірки основних потоків.
bemul12

Це було не зовсім в закритті аутентифікації. Я насправді викликав метод делегування від закриття, сказав контролеру перегляду, що користувач перевіряє автентифікацію, почніть створювати головний екран, який, здавалося, створює панель вкладок, поки ще знаходиться на фоновому потоці, і саме там головна перевірка потоку працював, тож я перекопався і з’ясував, що питання про
виклику

17

Чи увімкнено об’яви google у вашому додатку? Тоді це може бути помилка в Google Ads sdk або бути помилкою в реалізації WebKit SDK на iOS 13. (sry я не можу коментувати, тому я публікую це як відповідь)

Піггейк від цього - Читаючи вищезазначені теми, "офіційним" рішенням команди Google Ads станом на 19 листопада 2019 року є зміна списку вашого додатка, щоб включити наступний ключ / пару для використання wkwebview замість uiwebview.

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

Джерело: https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/ios/I4EEWrPPbSc


Дякую за вашу відповідь. У моїй програмі немає оголошень Google, але у мене є UIWebView, але UIWebView є частиною UIKit, а не WebKit.
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 /…
262 Гц

1
Ось "офіційне" рішення від Google: groups.google.com/forum/#!category-topic/google-admob-ads-sdk/…, але зауважте, що існує одна відома проблема: оголошення зі звуком ЗАВЖДИ відтворюватимуть звук, незалежно. увімкненого вібраційного вимикача.
262 Гц

6

Ця проблема може бути з - за оголошення Google SDK (7.5XX + iOS13), знайшов цю нитку .

Розробники спробували використати у Info.plistфайлі нижче значення ключових пар, як це запропонувала команда Google Ads.

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

Це зменшило збій, але це спричинило ще одну проблему заморожування (100% використання процесора).

Нещодавно Google випустив 7.55.0 із приміткою:

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

тому спробуйте оновити пакет SDK оголошень Google до 7.55.0


3

Для того, щоб показати сліди стека для ваших потоків, Crashlytics повинен запустити деякий код після краху. Оскільки цей код виконується в одній із ниток вашої програми, Crashlytics завжди фіксує інформацію про власне виконання у рамках цього процесу. Ви завжди побачите потік, що виконує функцію "CLSProcessRecordAllThreads". Насправді ви побачите це не один раз, завдяки оптимізації компілятора, яка називається вбудованою. введіть тут опис зображення Винятки додають додатковий біт складності. Коли виняток Objective-C або C ++ залишається нездійсненим, Crashlytics записує деяку інформацію про нього до того, як додаток буде дозволено завершити роботу. Коли це відбувається, функція CLSProcessRecordAllThreads повинна запускатися на потоці, який викинув виняток. Це означає, що у випадку винятку потоки, що розбиваються, завжди будуть мати вигляд коду Crashlytics. Це нормально, і це лише артефакт того, як ми фіксуємо та представляємо сліди стека на момент винятку.


1
Оскільки "нитка, що виходить з ладу, завжди буде виглядати так, як вона працює з кодом Crashlytics", як ви визначите, що є фактичним потоком, що виходить з ладу?
wilc0
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.