You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 18+Swift 6下AVCaptureDevice.requestAccess调用崩溃求助

iOS 18 + Swift 6 相机权限请求崩溃问题排查与解决思路

问题概述

  • 仅在iOS 18 + Swift 6环境下触发崩溃,iOS 17及更早版本运行正常
  • Info.plist已配置Privacy - Camera Usage Description权限描述键
  • 崩溃场景:实现UIViewControllerRepresentable的视图控制器包装器(位于按钮跳转的目标视图内)中请求相机权限时,有时弹窗后崩溃,有时无弹窗直接崩溃
  • 无效尝试:在requestAccess闭包内添加Task { @MainActor },甚至将闭包置空仍无法避免崩溃
  • 崩溃堆栈核心信息:_dispatch_assert_queue_fail

可能的解决思路

  • 严格保证队列合规性:_dispatch_assert_queue_fail提示队列断言失败,Swift 6对并发队列的检查比之前版本更严格。需确保相机权限请求的调用完全在主队列执行,可显式用DispatchQueue.main.async包裹请求代码:
    DispatchQueue.main.async {
        AVCaptureDevice.requestAccess(for: .video) { granted in
            // 处理权限结果
        }
    }
    
  • 调整权限请求时机:避免在UIViewControllerRepresentable的makeUIViewController或updateUIViewController阶段触发权限请求,建议将请求移至视图控制器的viewDidAppear方法中,确保视图控制器生命周期完全就绪后再发起请求。
  • 检查Swift 6并发适配:Swift 6强化了Sendable协议和并发安全检查,确认代码中是否存在违反并发安全的情况,比如在非Sendable类型上执行异步操作,或不正确的上下文切换。
  • 升级至最新Beta版本:iOS 18和Swift 6均处于Beta阶段,可能存在系统或Xcode的已知Bug,尝试更新到最新的Xcode Beta版本重新测试。
  • 排查视图控制器生命周期冲突:检查UIViewControllerRepresentable的包装逻辑,确保视图控制器的创建、更新与销毁流程符合SwiftUI与UIKit交互的规范,避免因生命周期异常导致的队列混乱。

内容的提问来源于stack exchange,提问作者Luciano Perez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:54:54