programming
動的アクター分離チェックの調査方法
Swift6の動的アクター分離チェックによってクラッシュした場合、正しいコードに飛べず、原因が分かりにくい場合があります。
その場合の調査方法を紹介します。
まず、_dispatch_assert_queue_fail
が動的アクター分離チェックによるクラッシュです。
フレームを選択してもコードにジャンプしませんが、lldbから該当のコードを確認することができます。
(lldb) bt
* thread #11, queue = 'com.apple.usernotifications.UNUserNotificationServiceConnection.call-out', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
* frame #0: 0x000000010d6076f5 libdispatch.dylib`_dispatch_assert_queue_fail + 102
frame #1: 0x000000010d60768f libdispatch.dylib`dispatch_assert_queue + 159
frame #2: 0x00007ffc124d6271 libswift_Concurrency.dylib`swift_task_isCurrentExecutorImpl(swift::SerialExecutorRef) + 385
frame #3: 0x000000010d155120 Sample.debug.dylib`closure #1 in ViewController.viewDidLoad(isAuthorized=false, _1=nil) at ViewController.swift:0
frame #4: 0x000000010d15523f Sample.debug.dylib`thunk for @escaping @callee_guaranteed (@unowned Bool, @guaranteed Error?) -> () at <compiler-generated>:0
frame #5: 0x000000010d604b3d libdispatch.dylib`_dispatch_call_block_and_release + 12
frame #6: 0x000000010d605ec6 libdispatch.dylib`_dispatch_client_callout + 8
frame #7: 0x000000010d60ddcf libdispatch.dylib`_dispatch_lane_serial_drain + 1078
frame #8: 0x000000010d60eb50 libdispatch.dylib`_dispatch_lane_invoke + 448
frame #9: 0x000000010d61bc76 libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh + 318
frame #10: 0x000000010d61b19d libdispatch.dylib`_dispatch_workloop_worker_thread + 837
frame #11: 0x000000010d1d9b84 libsystem_pthread.dylib`_pthread_wqthread + 327
frame #12: 0x000000010d1d8acf libsystem_pthread.dylib`start_wqthread + 15
(lldb) f 3
frame #3: 0x000000010d155120 Sample.debug.dylib`closure #1 in ViewController.viewDidLoad(isAuthorized=false, _1=nil) at ViewController.swift:0
19 override func viewDidLoad() {
20 super.viewDidLoad()
21
-> 22 UNUserNotificationCenter.current().requestAuthorization { isAuthorized, _ in
23 self.isAuthorized = isAuthorized
24 }
25 }
Note: this address is compiler-generated code in function closure #1 (Swift.Bool, Swift.Optional<Swift.Error>) -> () in Sample.ViewController.viewDidLoad() -> () that has no source code associated with it.
この記事で用いたコードはこちらから確認することができます
記事が気に入ったらチップを送ることができます!
You can give me a cup of coffee :)
Kyash ID: soranoba
Amazon: Wish List
GitHub Sponsor: github.com/sponsors/soranoba
PayPal.Me: paypal.me/soranoba
(Updated: )