iOS 26开发者测试版中AVCaptureMetadataOutput的.face检测无回调触发问题
我最近在iOS 26开发者测试版上也碰到了完全一样的问题,确实挺闹心的——当把AVCaptureMetadataOutput的metadataObjectTypes设为[.face]时,AVCaptureMetadataOutputObjectsDelegate完全收不到任何回调,但换成.qr这类其他元数据类型就一切正常,而且iOS 26以下的正式版本里,人脸检测的回调都是正常工作的。
结合自己的排查和社区讨论,给你几个可以尝试的方向:
重新确认权限配置:虽然旧版本没问题,但Beta版的权限逻辑可能有调整。先检查
Info.plist里是否正确添加了NSCameraUsageDescription,并且确保App已经获取到相机权限。可以在代码里主动检查授权状态:switch AVCaptureDevice.authorizationStatus(for: .video) { case .authorized: // 已授权,继续配置会话 break case .notDetermined: AVCaptureDevice.requestAccess(for: .video) { granted in // 处理授权结果 } default: // 提示用户开启权限 break }检查会话配置流程:Beta版可能对
AVCaptureSession的配置顺序要求更严格。确保你是先将AVCaptureMetadataOutput添加到会话,再设置metadataObjectTypes,并且所有会话的配置操作都用beginConfiguration()和commitConfiguration()包裹,避免线程问题:captureSession.beginConfiguration() if captureSession.canAddOutput(metadataOutput) { captureSession.addOutput(metadataOutput) metadataOutput.metadataObjectTypes = [.face] metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) } captureSession.commitConfiguration()显式设置感兴趣区域:有时候Beta版可能默认的
rectOfInterest出现异常,导致无法检测到人脸。可以尝试手动设置感兴趣区域为预览层的完整范围:if let previewLayer = self.previewLayer { metadataOutput.rectOfInterest = previewLayer.metadataOutputRectConverted(fromLayerRect: previewLayer.bounds) }向苹果提交反馈:目前来看这很大概率是iOS 26测试版的系统Bug,建议你通过苹果的Feedback Assistant提交详细的复现项目和设备日志,描述清楚问题场景(比如设备型号、iOS Beta版本号、复现步骤),这能帮助苹果更快定位并修复问题。
另外建议你创建一个最小化的复现项目,排除自己代码中其他逻辑的干扰,确认问题确实是系统层面的。
内容来源于stack exchange

