Xcode新建ARKit项目运行时解包可选值意外发现nil如何解决
问题产生原因
- Xcode 13.0版本的ARKit项目模板存在已知缺陷,创建项目时
art.scnassets资源包没有被正确添加到项目的*Target Membership(目标成员身份)*中,导致编译后应用包内不存在对应资源,读取路径返回空值,强制解包触发崩溃。 - 部分版本的Xcode 13默认模板会直接缺失
ship.scn文件,创建项目时资源包内仅有默认纹理素材,没有对应3D场景文件。
解决方法
方法1:修正资源包目标成员身份
- 左侧项目导航栏选中
art.scnassets文件夹 - 右侧检查器面板打开Target Membership选项卡
- 勾选当前项目的主target,确保资源会被拷贝到应用包内
- 清理项目(快捷键
Command + Shift + K)后重新运行即可
方法2:修改资源加载逻辑避免强制解包
如果不需要使用默认的飞船模型,可以替换原有强制解包的代码,使用安全加载逻辑避免崩溃:
// 替换原有的let scene = SCNScene(named: "art.scnassets/ship.scn")! 代码段 if let scene = SCNScene(named: "art.scnassets/ship.scn") { sceneView.scene = scene } else { // 资源不存在时加载空场景 sceneView.scene = SCNScene() }
方法3:手动补全缺失资源
如果需要使用默认的ship.scn文件:
- 从旧版本Xcode的ARKit模板中拷贝
ship.scn文件到当前项目的art.scnassets目录下 - 导入时勾选Copy items if needed选项和对应target的成员身份
- 重新运行项目即可
方法4:升级Xcode版本
该模板缺陷已在Xcode 13.1及后续版本被官方修复,将Xcode升级到最新稳定版后重新创建项目,即可正常运行默认模板。
内容的提问来源于stack exchange,提问作者Ted.Mosby
相关产品推荐
相关产品推荐

