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

iOS中UIImagePickerController启动相机后立即崩溃问题求助

相机启动后崩溃的排查与解决

从你提供的日志和代码来看,核心问题集中在相机服务尝试切换到不支持的人像模式,进而引发XPC连接中断导致崩溃。以下是具体的排查方向和解决方法:

1. 调整相机控制器的present时机

你在viewDidLoad中直接present相机控制器,此时视图控制器的布局尚未完成,可能导致相机服务初始化异常。建议将相机启动代码移至viewDidAppear(_:)方法中:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    let vc = UIImagePickerController()
    vc.sourceType = .camera
    vc.allowsEditing = true
    present(vc, animated: true)
}

2. 显式指定相机设备类型

日志中反复出现"Attempted to change to mode Portrait with an unsupported device",说明系统默认尝试使用的相机设备不支持人像模式。可以显式指定使用后置广角相机,避免自动切换到不兼容的设备:

import MobileCoreServices

// ...

let vc = UIImagePickerController()
vc.sourceType = .camera
// 优先指定后置相机
if UIImagePickerController.isCameraDeviceAvailable(.back) {
    vc.cameraDevice = .back
}
// 限制媒体类型为图片,避免触发视频相关的模式切换
vc.mediaTypes = [kUTTypeImage as String]
vc.allowsEditing = true
present(vc, animated: true)

3. 排查相机服务异常

日志中的"XPC connection interrupted"表明系统相机服务出现中断,可能是系统层面的临时异常。可以尝试:

  • 重启测试设备,重置相机服务状态
  • 清理App缓存数据后重新安装App
  • 检查是否有其他第三方SDK(如相机、权限管理类)与系统相机服务存在冲突

4. 验证编辑功能的兼容性

allowsEditing = true会启用系统图片编辑界面,部分设备的编辑功能依赖特定相机模式。如果上述方法无效,可以先临时关闭编辑功能,测试相机是否能正常启动:

vc.allowsEditing = false

若相机能正常启动,再逐步排查编辑功能与设备相机的兼容性问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:12:51