You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter iOS插件中JSON文件的正确放置位置及读取问题咨询

Flutter iOS插件读取JSON文件的正确配置方案

一、JSON文件的正确放置位置

直接把sound.json放到插件的iOS/Assets目录下(如果没有Assets目录,就在iOS文件夹里新建一个)。不要放到插件根目录的assets文件夹——那是给Flutter侧用的资源路径,iOS原生代码无法直接识别。

二、关键配置步骤

  1. 打开插件的iOS工程(ios/Runner.xcworkspace或插件专属的.xcodeproj)
  2. 把sound.json拖到Xcode的Assets目录中,确保弹出的对话框里勾选了插件的target(不是宿主App的target)
  3. 检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:33:24