如何读取应用包外本地JSON文件或通过Build Phases脚本将其加入包?
解决方案:处理构建脚本生成的JSON文件读取问题
一、将生成的JSON文件添加到应用包中(推荐方案)
这是最稳妥的做法,能让你现有的Swift代码直接正常工作,步骤如下:
- 打开Xcode项目,切换到
Build Phases标签页 - 点击左上角的
+,选择New Run Script Phase,把这个阶段挪到Compile Sources前面(保证脚本先生成文件,再被打包流程处理) - 在Run Script的输入框里写入你的.sh脚本执行命令,比如:
# 假设你的生成脚本在项目根目录下 ./generate_client_token.sh
- 接下来把生成的
client_token_key.json加入打包资源:- 在Build Phases里找到
Copy Bundle Resources - 点击
+按钮,选中生成的JSON文件;如果文件是脚本动态生成在项目目录的,也可以直接把文件拖进项目,在文件属性的Target Membership里勾选你的主Target,同时确认Copy items if needed已勾选 - 或者也可以在Run Script之后加一个
Copy Files阶段,把JSON文件复制到$(BUILT_PRODUCTS_DIR)/$(CONTENTS_FOLDER_PATH)目录,这样文件会被自动打包进应用包
- 在Build Phases里找到
完成后,你现有的Swift读取逻辑就能正常拿到文件了。
二、读取应用包外的JSON文件(仅适合调试场景)
iOS应用受沙盒限制,运行时只能访问自己的沙盒目录(Documents、Library、tmp等),构建脚本在电脑上生成的文件,安装到设备后根本访问不到。
如果是在模拟器运行,理论上可以硬编码电脑上的文件路径读取,但这种方式完全不能用于生产环境,真机上直接失效,所以不推荐这么做。
额外提示:如果脚本执行后文件没找到,可以在Run Script里加日志输出排查路径,比如:
./generate_client_token.sh echo "Generated JSON path: $(pwd)/client_token_key.json"
内容的提问来源于stack exchange,提问作者DanielRM
相关产品推荐
相关产品推荐

