Swift Package中加载.scnassets资源的问题及解决方案
Swift Package中.scnassets场景无法加载的解决方案
最近做跨平台开发时遇到个坑:把可复用的SceneView封装进Swift Package,iPad端直接展示该视图,macOS端根据用户请求在独立窗口打开。目前SwiftUI视图在两个系统都能正常渲染,但Package里.scnassets文件夹中的3D场景始终加载失败,折腾一阵后终于搞定,分享下解决方法:
问题根源
Swift Package默认不会自动处理.scnassets这类需要编译处理的资源包,且加载资源时必须明确指定Package的模块Bundle,不能用默认的主Bundle。
解决步骤
配置Package资源规则
在Package.swift的目标声明中,添加.processed类型的资源引用,确保.scnassets被正确编译处理:.target( name: "YourPackageModuleName", dependencies: [], resources: [ // 替换为你的.scnassets实际路径 .process("Resources/Your3DScene.scnassets") ] )正确加载场景资源
加载场景时必须使用Bundle.module来获取Package内的资源,而不是默认的Bundle.main:// 方式1:通过URL加载 guard let sceneURL = Bundle.module.url( forResource: "YourScene", withExtension: "scn", subdirectory: "Your3DScene.scnassets" ) else { fatalError("无法找到目标场景文件") } let scene = try! SCNScene(url: sceneURL, options: nil) // 方式2:直接通过名称加载(指定Bundle) let scene = SCNScene( named: "YourScene.scn", in: Bundle.module, options: nil )!验证资源完整性
检查.scnassets文件夹内的所有附属文件(纹理、动画文件等)都已包含在Package中,没有被.gitignore或Package的排除规则过滤掉。
内容的提问来源于stack exchange,提问作者Arda Oğul Üçpınar
相关产品推荐
相关产品推荐

