Avatar
Avatar
kebo
URL を返す async 関数を Task のクロージャで await するようなボタンを Xcode Previews 上でクリックしたら必ずプレビューのプロセスがクラッシュする (実機だと問題なし) という謎の問題を発見して,特に困っているわけではないのですが気になるので情報をお持ちの方を探しています. 以下ミニマル再現コードです.(macOS 12.3 & Xcode 13.3 や iPadOS 15.4 & Swift Playgrounds 4.0.2 で再現することを確認) import SwiftUI func foo() async -> URL { URL(fileURLWithPath: "/") // 戻り値が String 等では問題なし } struct ContentView: View { var body: some View { Button("Press Me") { Task { _ = await foo() } } } } スタックトレース: Thread 4 Crashed:: Dispatch queue: com.apple.root.user-initiated-qos.cooperative 0 libsystem_kernel.dylib 0x1cba39e60 __pthread_kill + 8 1 libsystem_pthread.dylib 0x1cba8d3c0 pthread_kill + 256 2 libsystem_c.dylib 0x1801023f4 abort + 124 3 libswift_Concurrency.dylib 0x1cb9db604 swift::swift_Concurrency_fatalError(unsigned int, char const*, ...) + 12 4 libswift_Concurrency.dylib 0x1cb9dd350 swift_task_dealloc + 124 5 ContentView.1.preview-thunk.dylib 0x104a2b06c (1) await resume partial function for closure #1 in closure #1 in ContentView.__preview__body.getter + 80 (ContentView.swift:17) 6 ContentView.1.preview-thunk.dylib 0x104a2b5d9 (1) await resume partial function for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) + 1 7 ContentView.1.preview-thunk.dylib 0x104a2b73d (1) await resume partial function for partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@out A) + 1 8 libswift_Concurrency.dylib 0x1cb9dced1 completeTaskWithClosure(swift::AsyncContext*, swift::SwiftError*) + 1 (edited)
だいぶ前ですが,この問題は Swift 5.7 で修正されてそうです.