Flutter iOS插件中JSON文件的正确放置位置及读取问题咨询
Flutter iOS插件读取JSON文件的正确配置方案
一、JSON文件的正确放置位置
直接把sound.json放到插件的iOS/Assets目录下(如果没有Assets目录,就在iOS文件夹里新建一个)。不要放到插件根目录的assets文件夹——那是给Flutter侧用的资源路径,iOS原生代码无法直接识别。
二、关键配置步骤
- 打开插件的iOS工程(
ios/Runner.xcworkspace或插件专属的.xcodeproj) - 把
sound.json拖到Xcode的Assets目录中,确保弹出的对话框里勾选了插件的target(不是宿主App的target) - 检查
Build Phases -> Copy Bundle Resources,确认sound.json已在列表中,保证编译时会被打包进插件的Bundle
三、代码修改要点
你当前用Bundle.main是错误的——这是获取宿主App的Bundle,而插件的资源存放在自身的Bundle里。修改loadSound函数,换成插件自身的Bundle:
private func loadSound(filename: String) -> [Sound] { // 通过当前类定位插件Bundle guard let bundle = Bundle(for: Self.self) else { print("无法获取插件Bundle") return [] } // 仅传入文件名(不带扩展名) if let url = bundle.url(forResource: filename, withExtension: "json") { do { let data = try Data(contentsOf: url) let decoder = JSONDecoder() let sounds = try decoder.decode([Sound].self, from: data) return sounds } catch { print("加载JSON失败: \(error)") } } else { print("找不到指定的JSON文件") } return [] }
调用时直接传"sound"即可,无需带路径和扩展名:
let sounds = loadSound(filename: "sound")
四、常见排查点
- 检查文件名大小写:iOS文件系统区分大小写,确保代码里的文件名和实际文件名完全一致
- 校验JSON格式:用在线工具检查JSON语法,避免格式错误导致解码失败
- 查看编译日志:如果资源未被打包,Xcode编译日志会有相关提示
内容的提问来源于stack exchange,提问作者Juliettead
相关产品推荐
相关产品推荐

