使用ARKit与RealityKit开发时出现大量调试错误是什么原因?
你遇到的日志可以分为多个类别,绝大多数属于ARKit/RealityKit框架的内部系统提示,不会影响AR功能的正常运行,仅部分内存相关警告需要优化:
1. 调试工具提示日志
以下两行是Xcode调试模式下默认开启的Metal调试配置提示,属于正常信息,发布版本编译运行时不会出现:
Metal GPU Frame Capture Enabled Metal API Validation Enabled
2. 框架内部兼容警告
以下所有日志均为苹果系统框架自身的资源加载、版本兼容提示,和业务代码无关,后续iOS版本迭代会由苹果官方修复,无需额外处理:
- Shader库重复注册警告:
[AssetTypes] Registering library (/System/Library/PrivateFrameworks/CoreRE.framework/default.metallib) that already exists in shader manager. Library will be overwritten. - 材质加载废弃用法警告:所有以
[Assets] Resolving material name 'engine:xxx' as an asset path -- this usage is deprecated开头的日志 - 配置序列化警告:所有以
[Foundation.Serialization] Json Parse Error line xxx开头的日志 - 人体分割模型计算警告:所有以
[espresso] Warning: padding deconvolution PersonSeg/xxx开头的日志 - 音频服务内部错误:所有
throwing -10878日志,对应AVAudioSession内部错误码,是ARSession启动时抢占音频资源产生的无影响提示
3. 需要优化的内存警告
以下两类日志是业务代码可以优化的部分:
ARSessionDelegate is retaining X ARFrames. This can lead to future camera frames being dropped. World tracking performance is being affected by resource constraints [2]
产生原因:你在ARManager中遵循了ARSessionDelegate协议,但没有实现session(_:didUpdate:)方法,系统会默认持有所有生成的ARFrame无法释放,内存占用持续升高后就会触发世界追踪性能受限的警告。
修复方案:在ARManager中主动实现空的帧更新代理方法即可:
func session(_ session: ARSession, didUpdate frame: ARFrame) { // 无需额外逻辑,方法实现后系统会自动回收ARFrame内存 }
实现该方法后,ARFrame持有警告和追踪性能受限的提示都会消失。
内容的提问来源于stack exchange,提问作者Damiano Miazzi
相关产品推荐
相关产品推荐

