Xcode11로 빌드 된 iOS13에서만 Crashlytics 스레드가 충돌했습니다.


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

내 문제는 로컬 인증 (터치 ID, 얼굴 ID)에 있었고 백그라운드 스레드에 다른보기 컨트롤러를 표시하고 있었고 앱을 약 2 분 동안 무작위로 사용한 후에야 앱이 다운되었습니다. 당신은 체크 아웃을 시도 할 수 있습니다
Laurynas Letkauskas

올바르게 이해하면 기본 스레드 검사기에서 문제가 발생하여 런타임 경고 섹션에서 문제를 발견했습니다. 내 앱에서 많은 흐름을 확인했으며 기본 스레드 검사기에서 런타임 경고를 얻지 못했습니다.
bemul12

인증이 완전히 종료되지 않았습니다. 실제로 클로저에서 델리게이트 메서드를 호출하여 뷰 컨트롤러에 사용자가 인증되고 기본 화면을 작성하기 시작했으며 백그라운드 스레드에서 탭 표시 줄을 인스턴스화하는 것처럼 보였으며 메인 스레드 검사기가있는 곳이었습니다. 나는 아래로 팠 메인 스레드에없는 호출되는 대리자를 발견, 그래서 일이 문제입니다
Laurynas Letkauskas

17

앱에서 Google 광고를 사용하도록 설정 했습니까? 그런 다음 Google 광고 SDK 의 버그이거나 iOS 13의 WebKit SDK 구현의 버그 일 수 있습니다 (댓글을 달 수 없으므로 답변으로 게시)

피기 백-2019 년 11 월 19 일 현재 Google Ads 팀의 "공식"솔루션은 위에 링크 된 스레드를 통해 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/… 그러나 알려진 문제가 있습니다. 소리가있는 광고는 항상 소리를 재생합니다. 진동 스위치의
262Hz

6

이 문제는 Google 광고 SDK (7.5XX + iOS13) 때문일 수 있습니다 . 이 스레드를 찾았습니다 .

개발자 Info.plist가 Google Ads 팀에서 제안한 대로 키 쌍 값 이하를 파일 에 사용하려고했습니다 .

<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가 충돌 후 코드를 실행해야합니다. 이 코드는 앱의 스레드 중 하나에서 실행되므로 Crashlytics는 항상이 프로세스의 일부로 자체 실행에 대한 정보를 캡처합니다. "CLSProcessRecordAllThreads"기능을 실행하는 스레드가 항상 표시됩니다. 실제로 인라인이라는 컴파일러 최적화로 인해 두 번 이상 볼 수 있습니다. 여기에 이미지 설명을 입력하십시오 예외는 약간의 복잡성을 추가합니다. Objective-C 또는 C ++ 예외가 포착되지 않으면 Crashlytics는 앱이 종료되기 전에 이에 대한 정보를 기록합니다. 이런 상황이 발생하면 예외를 발생시킨 스레드에서 CLSProcessRecordAllThreads 함수를 실행해야합니다. 즉, 예외의 경우 "충돌"스레드가 항상 Crashlytics 코드를 실행중인 것처럼 보입니다. 이는 정상적인 현상이며 예외 상황에서 스택 추적을 캡처하고 표시하는 방식의 결과 일뿐입니다.


1
"충돌 스레드가 항상 Crashlytics 코드를 실행하는 것처럼 보일 것"이므로 실제 충돌 스레드가 무엇인지 어떻게 알 수 있습니까?
wilc0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.