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
相关产品推荐
相关产品推荐

