You need to enable JavaScript to run this app. UIImagePickerController相册正常但相机报exposureBiasesByMode错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

UIImagePickerController相册正常但相机报exposureBiasesByMode错误如何解决

错误产生原因

  • 该exposureBiasesByMode相关报错绝大多数是iOS 15及以上版本的系统内部日志冗余,本身不会导致功能崩溃,如果相机只是打印该报错但可以正常使用,属于正常现象。
  • 如果伴随报错相机完全无法启动,常见原因有两个:
    1. 项目Info.plist缺少相机权限声明NSCameraUsageDescription,系统直接拒绝相机访问触发错误。
    2. 全局复用同一个UIImagePickerController实例,在相册和相机之间切换sourceType时,系统内部相机参数没有正确重置,导致读取曝光配置失败。

修复方案

  • 方案1:补全权限配置
    在项目Info.plist中添加相机权限声明,右键Info.plist选择Open As -> Source Code,添加如下代码:

    <key>NSCameraUsageDescription</key>
    <string>需要访问您的相机拍摄照片</string>
    

    也可以在可视化界面添加Privacy - Camera Usage Description项,值填写自定义的权限提示文案即可。

  • 方案2:不复用UIImagePickerController实例
    修改ImagePicker类逻辑,每次调用对应功能时重新初始化picker,避免切换来源时的参数冲突:

    open class ImagePicker: NSObject {
        private weak var presentationController: UIViewController?
        private weak var delegate: ImagePickerDelegate?
        // 临时持有当前使用的picker避免提前释放
        private var currentPicker: UIImagePickerController?
    
        public init(presentationController: UIViewController, delegate: ImagePickerDelegate) {
            super.init()
            self.presentationController = presentationController
            self.delegate = delegate
        }
    
        private func action(for type: UIImagePickerController.SourceType, title: String) -> UIAlertAction? {
            guard UIImagePickerController.isSourceTypeAvailable(type) else {
                return nil
            }
            
            return UIAlertAction(title: title, style: .default) { [unowned self] _ in
                let picker = UIImagePickerController()
                picker.delegate = self
                picker.allowsEditing = true
                picker.mediaTypes = ["public.image"]
                picker.sourceType = type
                self.currentPicker = picker
                self.presentationController?.present(picker, animated: true)
            }
        }
    
        func openCamera() {
            guard UIImagePickerController.isSourceTypeAvailable(.camera) else { return }
            let picker = UIImagePickerController()
            picker.delegate = self
            picker.allowsEditing = true
            picker.mediaTypes = ["public.image"]
            picker.sourceType = .camera
            currentPicker = picker
            presentationController?.present(picker, animated: true)
        }
    
        func openPhotoLibrary() {
            guard UIImagePickerController.isSourceTypeAvailable(.photoLibrary) else { return }
            let picker = UIImagePickerController()
            picker.delegate = self
            picker.allowsEditing = true
            picker.mediaTypes = ["public.image"]
            picker.sourceType = .photoLibrary
            currentPicker = picker
            presentationController?.present(picker, animated: true)
        }
    
        public func present(from sourceView: UIView) {
            // 原有逻辑保持不变
        }
    
        private func pickerController(_ controller: UIImagePickerController, didSelect image: UIImage?) {
            controller.dismiss(animated: true, completion: nil)
            self.delegate?.didSelect(image: image)
            // 用完释放picker
            self.currentPicker = nil
        }
    }
    
    extension ImagePicker: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
        // 原有代理逻辑保持不变
    }
    
  • 方案3:忽略系统日志
    如果相机功能完全正常,仅控制台打印该报错,可以直接忽略,属于iOS系统内部的打印bug,不会影响App功能和上架审核。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 16:39:02