iOS 16下ARKit ARSession相机追踪状态无法恢复至.normal问题求助
iOS 16下ARKit追踪状态异常解决方案及版本问题确认
问题现象
- iPhone 12 Pro Max升级iOS 16.0后,ARSession的
CameraTrackingState卡滞在.notAvailable或.limited(initializing),无法进入.normal状态,相机界面持续显示加载;仅重启相机后AR模型可正常显示。 - iOS 15.6环境下,追踪状态可正常流转:
.notAvailable→.limited(initializing)→.limited(relocalising)→.normal,重定位逻辑工作正常。
版本问题确认
iOS 16.0存在ARKit重定位相关的已知Bug,苹果在iOS 16.1及后续更新中修复了多起ARSession追踪异常的问题,包括追踪状态无法正常恢复的场景。
解决方案
- 升级系统版本:优先将设备更新至iOS 16.1或更高版本,这是修复该问题最直接的方式,官方补丁已覆盖此类场景。
- 修正重定位逻辑:当前
sessionShouldAttemptRelocalization方法内直接重置追踪、移除锚点的操作,会打断ARSession的自动重定位流程,导致追踪状态异常。建议调整代码:
修正后示例:
若需自定义追踪状态处理,建议在func sessionShouldAttemptRelocalization(_ session: ARSession) -> Bool { // 仅返回true,交由系统自动处理重定位,不要在此重置session或加载新配置 return true }session(_:didChange:)代理方法中操作:func session(_ session: ARSession, didChange trackingState: ARCamera.TrackingState) { switch trackingState { case .limited(let reason): if reason == .relocalizing { // 此处可添加自定义重定位提示逻辑,不要重置session } case .normal: // 追踪恢复正常后的业务逻辑 case .notAvailable: // 追踪不可用时的降级处理 } } - 基础检查:确保App已获取相机全部权限,设备摄像头无遮挡,所处环境有足够的纹理特征点(避免纯白/纯黑场景)、光线充足。
- 临时恢复手段:重启App或设备可暂时恢复追踪状态,但无法解决版本Bug导致的根源问题。
内容的提问来源于stack exchange,提问作者Ruhi
相关产品推荐
相关产品推荐

