ios - 找不到 "This application is modifying the autolayout engine from a background thread"的来源

标签 ios swift xcode google-maps ios13

我的应用程序仅在我第一次登录时崩溃。它使用了 GoogleMaps (3.7.0) pod,我怀疑错误来自那个库:

 Stack:(
    0   Foundation                          0x000000018c1b8550 80C31587-F538-3437-966F-300F6632EB95 + 2331984
    1   Foundation                          0x000000018bfb18c4 80C31587-F538-3437-966F-300F6632EB95 + 207044
    2   Foundation                          0x000000018bfb17d8 80C31587-F538-3437-966F-300F6632EB95 + 206808
    3   Foundation                          0x000000018bfb1448 80C31587-F538-3437-966F-300F6632EB95 + 205896
    4   UIKitCore                           0x000000019025a824 AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 15611940
    5   UIKitCore                           0x000000019026db1c AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 15690524
    6   libobjc.A.dylib                     0x000000018b9e0a4c A486C2B3-41B0-3F23-AF40-C5579F5BE97E + 6732
    7   QuartzCore                          0x0000000192883a9c A3363F67-6783-3979-8FA9-5563ABD4737D + 1403548
    8   QuartzCore                          0x0000000192883eec A3363F67-6783-3979-8FA9-5563ABD4737D + 1404652
    9   QuartzCore                          0x0000000192896614 A3363F67-6783-3979-8FA9-5563ABD4737D + 1480212
    10  QuartzCore                          0x00000001927db1c4 A3363F67-6783-3979-8FA9-5563ABD4737D + 713156
    11  QuartzCore                          0x0000000192805fd0 A3363F67-6783-3979-8FA9-5563ABD4737D + 888784
    12  QuartzCore                          0x0000000192806fb8 A3363F67-6783-3979-8FA9-5563ABD4737D + 892856
    13  libsystem_pthread.dylib             0x000000018b9dd104 5F848A4C-4907-3FC9-A76D-378FE8F2E4FC + 37124
    14  libsystem_pthread.dylib             0x000000018b9d58a0 5F848A4C-4907-3FC9-A76D-378FE8F2E4FC + 6304
    15  libsystem_pthread.dylib             0x000000018b9d7a20 5F848A4C-4907-3FC9-A76D-378FE8F2E4FC + 14880
    16  libsystem_pthread.dylib             0x000000018b9d7760 _pthread_wqthread + 424
    17  libsystem_pthread.dylib             0x000000018b9dd9e8 start_wqthread + 8
)

这是 XCode 显示的跟踪日志。

enter image description here

编辑截图:

enter image description here

这就是我从 ViewModel 接收回调的方式。我在所有输出中添加了 DispatchQueue.main 以尝试避免此异常,但仍然弹出....

disposeBag.insert(
            viewModel.outputs.onShowLoading
                .bind { show in
                    DispatchQueue.main.async { 
                        self.showLoading(show: show)
                    }
                },

            viewModel.outputs.onLoadDone
                .bind { mapInfo in
                    DispatchQueue.main.async {
                        self.loadMap(mapInfo: mapInfo)
                    }
                },

            viewModel.outputs.onLoadError
                .bind { error in
                    DispatchQueue.main.async {
                        print("ON LOAD ASSETS ERROR: \(error.localizedDescription)")
                    }
                },

            viewModel.outputs.onMultiClusterTap
                .bind { paths in
                    DispatchQueue.main.async {
                        self.centerMap(paths: paths)
                    }
                },

            viewModel.outputs.onLoadAssetsInfoDone
                .bind { assets in
                    DispatchQueue.main.async {
                        self.showBottomSheet(assets: assets)
                    }
                },

            viewModel.outputs.onDeviceChanged
                .bind {
                    DispatchQueue.main.async {
                        self!.showDeviceChangedError()
                    }
                }
        )

编辑(2020 年 2 月 5 日): 我尝试使用 NBUIKitMainThreadGuard 查找错误

但我仍然找不到这些错误的来源。 此外,我发现在注销-登录后也会出现该错误。这不仅仅是我第一次安装该应用程序。

编辑(2020 年 7 月 5 日): 也许正如 Werner Altewischer 指出的那样,有一个图形库正在解决这个问题。这是我的 podfile,也许有助于解决这个问题:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '11.0'
use_frameworks!

target 'WatchmanDoor' do

    pod 'DropDown', '2.3.13'
    pod 'GoogleMaps', '3.7.0'
    pod 'GooglePlaces'
    pod 'DKImagePickerController', '4.2.1'
    pod 'Alamofire', '4.9.1'
    pod 'iOSDFULibrary', '4.6.1'
    pod 'RxSwift', '~> 5.0.1'
    pod 'RxCocoa', '~> 5.0.1'
    pod 'Swinject', '~> 2.7.1'
    pod 'SwinjectAutoregistration', '~> 2.7.0'
    pod 'SwinjectStoryboard', '~> 2.2.0'
    pod 'FittedSheets', :git => 'https://github.com/WatchmanDoor/FittedSheets.git', :commit => '9824dd171499967226a4dd160aedc7d4d9db3a11'
    pod 'SDWebImage', '~> 5.5.0'
    pod 'NavigationDrawer', '1.0.2'

end

会不会是 FittedSheets pod 引发了错误?我 fork 存储库以更新它以支持 Swift 5,但可能是导致异常的原因。

更新: 仍然面临同样的错误......找不到别的 -_- 知道从哪里开始吗?

完整崩溃报告:

Incident Identifier: 34A039F6-9E4A-4E5C-B9B4-AB531A8E8D93
CrashReporter Key:   5f326dac824b350bd2afaacbdb938d680de621bc
Hardware Model:      iPhone8,4
Process:             WatchmanDoor [476]
Path:                /private/var/containers/Bundle/Application/717E7E5E-4E42-4950-B8C8-FC2042C09EDC/WatchmanDoor.app/WatchmanDoor
Identifier:          com.stmseguridad.WatchmanDoor
Version:             1 (2.0.9)
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.stmseguridad.WatchmanDoor [625]


Date/Time:           2020-04-16 14:21:00.9449 +0200
Launch Time:         2020-04-16 14:18:12.7530 +0200
OS Version:          iPhone OS 13.4 (17E255)
Release Type:        User
Baseband Version:    9.52.01
Report Version:      104

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x00000001a9d2d6e0
Termination Signal: Trace/BPT trap: 5
Termination Reason: Namespace SIGNAL, Code 0x5
Terminating Process: exc handler [476]
Triggered by Thread:  3

Last Exception Backtrace:
0   CoreFoundation                  0x1aa0cc5f0 __exceptionPreprocess + 224
1   libobjc.A.dylib                 0x1a9deebcc objc_exception_throw + 55
2   Foundation                      0x1aa5a3dac _AssertAutolayoutOnAllowedThreadsOnly + 419
3   Foundation                      0x1aa3b0c2c -[NSISEngine _optimizeWithoutRebuilding] + 67
4   Foundation                      0x1aa3b0b48 -[NSISEngine optimize] + 111
5   Foundation                      0x1aa3b07bc -[NSISEngine performPendingChangeNotifications] + 111
6   UIKitCore                       0x1ae6132d0 -[UIView+ 15499984 (Hierarchy) layoutSubviews] + 307
7   UIKitCore                       0x1ae625c7c -[UIView+ 15576188 (CALayerDelegate) layoutSublayersOfLayer:] + 2143
8   QuartzCore                      0x1b0bbf4ac -[CALayer layoutSublayers] + 283
9   QuartzCore                      0x1b0bc5604 CA::Layer::layout_if_needed+ 1406468 (CA::Transaction*) + 467
10  QuartzCore                      0x1b0bd0148 CA::Layer::layout_and_display_if_needed+ 1450312 (CA::Transaction*) + 139
11  QuartzCore                      0x1b0b18e34 CA::Context::commit_transaction+ 699956 (CA::Transaction*, double) + 295
12  QuartzCore                      0x1b0b427c4 CA::Transaction::commit+ 870340 () + 675
13  QuartzCore                      0x1b0b43764 CA::Transaction::release_thread+ 874340 (void*) + 227
14  libsystem_pthread.dylib         0x1a9de5f8c _pthread_tsd_cleanup + 579
15  libsystem_pthread.dylib         0x1a9de2df4 _pthread_exit + 79
16  libsystem_pthread.dylib         0x1a9de3e64 _pthread_wqthread_exit + 95
17  libsystem_pthread.dylib         0x1a9de3c04 _pthread_wqthread + 415
18  libsystem_pthread.dylib         0x1a9de6740 start_wqthread + 7


Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0:
0   libobjc.A.dylib                 0x00000001a9deab4c objc_msgSend + 44
1   AppleMetalGLRenderer            0x00000001c4b60624 GLDContextRec::setRenderState+ 54820 (unsigned int) + 84
2   AppleMetalGLRenderer            0x00000001c4b67084 gldRenderVertexArray+ 82052 (GLDContextRec*, unsigned int, unsigned int, int, int, unsigned int, void const*, int, void const*) + 1108
3   GLEngine                        0x00000001c4ae3cd0 glDrawElements_ACC_ES2Exec + 416
4   WatchmanDoor                    0x0000000103a12fcc 0x102c50000 + 14430156
5   WatchmanDoor                    0x0000000103a17be0 0x102c50000 + 14449632
6   WatchmanDoor                    0x0000000103ad4bb0 0x102c50000 + 15223728
7   WatchmanDoor                    0x0000000103a1088c 0x102c50000 + 14420108
8   WatchmanDoor                    0x0000000103a9ece8 0x102c50000 + 15002856
9   WatchmanDoor                    0x0000000103a82788 0x102c50000 + 14886792
10  WatchmanDoor                    0x0000000103acfc5c 0x102c50000 + 15203420
11  WatchmanDoor                    0x0000000103a80da8 0x102c50000 + 14880168
12  WatchmanDoor                    0x0000000103a7fc74 0x102c50000 + 14875764
13  QuartzCore                      0x00000001b0a7f368 CA::Display::DisplayLink::dispatch_items+ 70504 (unsigned long long, unsigned long long, unsigned long long) + 516
14  IOKit                           0x00000001ab010628 IODispatchCalloutFromCFMessage + 480
15  CoreFoundation                  0x00000001aa021bc0 __CFMachPortPerform + 172
16  CoreFoundation                  0x00000001aa04b200 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56
17  CoreFoundation                  0x00000001aa04a90c __CFRunLoopDoSource1 + 444
18  CoreFoundation                  0x00000001aa0456c0 __CFRunLoopRun + 1888
19  CoreFoundation                  0x00000001aa044c34 CFRunLoopRunSpecific + 424
20  GraphicsServices                0x00000001b418e38c GSEventRunModal + 160
21  UIKitCore                       0x00000001ae17722c UIApplicationMain + 1932
22  WatchmanDoor                    0x000000010360fa9c 0x102c50000 + 10222236
23  libdyld.dylib                   0x00000001a9ecc800 start + 4

Thread 1 name:  com.apple.uikit.eventfetch-thread
Thread 1:
0   libsystem_kernel.dylib          0x00000001a9ea0198 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x00000001a9e9f60c mach_msg + 72
2   CoreFoundation                  0x00000001aa04a3b4 __CFRunLoopServiceMachPort + 148
3   CoreFoundation                  0x00000001aa0453e8 __CFRunLoopRun + 1160
4   CoreFoundation                  0x00000001aa044c34 CFRunLoopRunSpecific + 424
5   Foundation                      0x00000001aa387bcc -[NSRunLoop+ 31692 (NSRunLoop) runMode:beforeDate:] + 228
6   Foundation                      0x00000001aa387aac -[NSRunLoop+ 31404 (NSRunLoop) runUntilDate:] + 88
7   UIKitCore                       0x00000001ae219160 -[UIEventFetcher threadMain] + 152
8   Foundation                      0x00000001aa4b69d0 __NSThread__start__ + 848
9   libsystem_pthread.dylib         0x00000001a9de2d98 _pthread_start + 156
10  libsystem_pthread.dylib         0x00000001a9de674c thread_start + 8

Thread 2:
0   libsystem_pthread.dylib         0x00000001a9de6738 start_wqthread + 0

Thread 3 Crashed:
0   libsystem_c.dylib               0x00000001a9d2d6e0 __abort + 144
1   libsystem_c.dylib               0x00000001a9d2d6e0 __abort + 144
2   libsystem_c.dylib               0x00000001a9d2d650 __abort + 0
3   libc++abi.dylib                 0x00000001a9e95cc0 __cxxabiv1::__aligned_malloc_with_fallback+ 76992 (unsigned long) + 0
4   libc++abi.dylib                 0x00000001a9e87e10 demangling_unexpected_handler+ 19984 () + 0
5   libobjc.A.dylib                 0x00000001a9deee80 _objc_terminate+ 24192 () + 124
6   libc++abi.dylib                 0x00000001a9e9514c std::__terminate(void (*)+ 74060 ()) + 16
7   libc++abi.dylib                 0x00000001a9e97bd8 __cxa_get_exception_ptr + 0
8   libc++abi.dylib                 0x00000001a9e97b98 __cxxabiv1::exception_cleanup_func+ 84888 (_Unwind_Reason_Code, _Unwind_Exception*) + 0
9   libobjc.A.dylib                 0x00000001a9deecf8 _objc_exception_destructor+ 23800 (void*) + 0
10  Foundation                      0x00000001aa5a3dac -[NSISEngine tryToOptimizeReturningMutuallyExclusiveConstraints] + 0
11  Foundation                      0x00000001aa3b0c2c -[NSISEngine _optimizeWithoutRebuilding] + 68
12  Foundation                      0x00000001aa3b0b48 -[NSISEngine optimize] + 112
13  Foundation                      0x00000001aa3b07bc -[NSISEngine performPendingChangeNotifications] + 112
14  UIKitCore                       0x00000001ae6132d0 -[UIView+ 15499984 (Hierarchy) layoutSubviews] + 308
15  UIKitCore                       0x00000001ae625c7c -[UIView+ 15576188 (CALayerDelegate) layoutSublayersOfLayer:] + 2144
16  QuartzCore                      0x00000001b0bbf4ac -[CALayer layoutSublayers] + 284
17  QuartzCore                      0x00000001b0bc5604 CA::Layer::layout_if_needed+ 1406468 (CA::Transaction*) + 468
18  QuartzCore                      0x00000001b0bd0148 CA::Layer::layout_and_display_if_needed+ 1450312 (CA::Transaction*) + 140
19  QuartzCore                      0x00000001b0b18e34 CA::Context::commit_transaction+ 699956 (CA::Transaction*, double) + 296
20  QuartzCore                      0x00000001b0b427c4 CA::Transaction::commit+ 870340 () + 676
21  QuartzCore                      0x00000001b0b43764 CA::Transaction::release_thread+ 874340 (void*) + 228
22  libsystem_pthread.dylib         0x00000001a9de5f8c _pthread_tsd_cleanup + 580
23  libsystem_pthread.dylib         0x00000001a9de2df4 _pthread_exit + 80
24  libsystem_pthread.dylib         0x00000001a9de3e64 _pthread_wqthread_legacy_worker_wrap + 0
25  libsystem_pthread.dylib         0x00000001a9de3c04 _pthread_wqthread + 416
26  libsystem_pthread.dylib         0x00000001a9de6740 start_wqthread + 8

Thread 4 name:  com.apple.NSURLConnectionLoader
Thread 4:
0   libsystem_kernel.dylib          0x00000001a9ea0198 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x00000001a9e9f60c mach_msg + 72
2   CoreFoundation                  0x00000001aa04a3b4 __CFRunLoopServiceMachPort + 148
3   CoreFoundation                  0x00000001aa0453e8 __CFRunLoopRun + 1160
4   CoreFoundation                  0x00000001aa044c34 CFRunLoopRunSpecific + 424
5   CFNetwork                       0x00000001ad309c44 0x1ad308000 + 7236
6   Foundation                      0x00000001aa4b69d0 __NSThread__start__ + 848
7   libsystem_pthread.dylib         0x00000001a9de2d98 _pthread_start + 156
8   libsystem_pthread.dylib         0x00000001a9de674c thread_start + 8

Thread 5 name:  com.google.Maps.LabelingBehavior
Thread 5:
0   libsystem_kernel.dylib          0x00000001a9ea0198 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x00000001a9e9f60c mach_msg + 72
2   CoreFoundation                  0x00000001aa04a3b4 __CFRunLoopServiceMachPort + 148
3   CoreFoundation                  0x00000001aa0453e8 __CFRunLoopRun + 1160
4   CoreFoundation                  0x00000001aa044c34 CFRunLoopRunSpecific + 424
5   Foundation                      0x00000001aa387bcc -[NSRunLoop+ 31692 (NSRunLoop) runMode:beforeDate:] + 228
6   WatchmanDoor                    0x0000000103b4e330 0x102c50000 + 15721264
7   Foundation                      0x00000001aa4b69d0 __NSThread__start__ + 848
8   libsystem_pthread.dylib         0x00000001a9de2d98 _pthread_start + 156
9   libsystem_pthread.dylib         0x00000001a9de674c thread_start + 8

Thread 6:
0   libsystem_pthread.dylib         0x00000001a9de6738 start_wqthread + 0

Thread 7:
0   libsystem_pthread.dylib         0x00000001a9de6738 start_wqthread + 0

Thread 8:
0   libsystem_pthread.dylib         0x00000001a9de6738 start_wqthread + 0

Thread 3 crashed with ARM Thread State (64-bit):
    x0: 0x0000000000000000   x1: 0x0000000000000000   x2: 0x0000000000000000   x3: 0x0000000000000001
    x4: 0x0000000000000000   x5: 0x0000000000989680   x6: 0x000000000000006e   x7: 0x0000000000000001
    x8: 0x0000000000000000   x9: 0x0000000000000002  x10: 0x000000002daafd89  x11: 0x000000000000000b
   x12: 0x00000001e48ea080  x13: 0x0000000000000000  x14: 0x0000000000000010  x15: 0x0000000000000000
   x16: 0x0000000000000030  x17: 0x00000002d7ffffff  x18: 0x0000000000000000  x19: 0x000000016d57ec48
   x20: 0x00000001f3404c80  x21: 0x000000016d57ed00  x22: 0x0000000169ba05b0  x23: 0x00000001e4b8c000
   x24: 0x0000000000000001  x25: 0x0000000000000068  x26: 0x000000000000009c  x27: 0x0000000000000068
   x28: 0x000000002b310019   fp: 0x000000016d57ec60   lr: 0x00000001a9d2d6e0
    sp: 0x000000016d57ec30   pc: 0x00000001a9d2d6e0 cpsr: 0x80000000
   esr: 0xf2000001  Address size fault

重要更新: 我发现,当应用程序崩溃时,我的堆栈 View 充满了 UITRANSITIONVIEW。不知道这个有没有关系...

XCode Stack View Screenshoot

解决方案 [13/05/2020] 所以我想我找到了错误的来源。请参阅下面的答案。

最佳答案

显然,有问题的后台线程(线程 17)正在直接访问一些 UIKit 方法,这通常是不允许的(只能从主线程完成)。

您是否使用 GCD 的分派(dispatch)异步在后台线程上分派(dispatch)了一些方法?

关于ios - 找不到 "This application is modifying the autolayout engine from a background thread"的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59874131/

相关文章:

ios - 带有自定义后退按钮字体的错误大标题动画

ios - 如何在与 iPad 和所有 iPhone 屏幕兼容的 React Native 中为 IOS 创建带有全屏图像的 LaunchScreen

iOS 支持同一应用的广告与无广告版本

javascript - 将 iOS 模块从 pod 导入 nativescript 插件

ios - 如何检查哪个图像在按钮的背景上

ios - 捕捉按钮压力持续时间

swift - macOS Privileged Helper 无权访问文件系统路径?

objective-c - Xcode:我应该如何组织我的多窗口用户界面项目?

ios - ReactiveSwift 中运算符 '<~' 的使用不明确

ios - 在 UIScrollView subview 中使用自动布局(以编程方式)