Xcode打包应用时如何保留资源的原有文件夹结构?
Xcode构建保留资源目录结构配置方法
Xcode构建时扁平化资源结构的核心原因:项目中显示为黄色图标的文件夹是虚拟组(Group),仅用于Xcode内部的文件分类,不会对应文件系统里的真实目录,构建时组内所有文件都会被直接拷贝到Resources根目录。
要保留原有Help目录结构、避免后续新增文件出现同名冲突,可按以下两种方案配置:
方案1:使用文件夹引用(优先推荐)
该方案完全映射本地真实目录结构,后续在文件夹内新增/修改/删除文件无需手动在Xcode里操作,构建时自动同步,是静态资源目录的最优配置方式:
- 选中项目里现有的黄色
Help组按Delete删除,弹窗选择Remove Reference即可,不要选「Move to Trash」,避免误删本地的真实文件 - 打开访达,找到你本地存放所有帮助文件的真实
Help文件夹,直接拖入Xcode左侧的项目导航栏 - 在弹出的添加文件弹窗中,选择Create folder references for any added folders(不要选默认的Create groups),同时在「Add to targets」列表勾选你的App主target
- 点击Finish完成添加,此时项目里的
Help文件夹会显示为蓝色图标,代表配置生效
配置完成后,Xcode构建时会把整个Help文件夹按原有层级完整复制到产物的Resources目录下,完全保留目录结构。
方案2:配置Copy Files构建阶段
如果不想调整现有文件的引用方式,可以通过新增构建规则指定文件的拷贝路径:
- 选中项目的App主target,切换到
Build Phases标签页 - 点击标签页左上角的
+按钮,选择New Copy Files Phase - 选中刚新增的Copy Files阶段,将Destination下拉选项设置为
Resources,在Subpath输入框中填写Help - 勾选
Copy items when needed,取消勾选Copy only when installing - 将所有需要放在Help目录下的资源文件(html、css等)拖入该阶段的文件列表即可
配置验证
重新构建项目后,执行如下命令查看构建产物的资源目录:
ls ~/Library/Developer/Xcode/DerivedData/[你的项目对应DerivedData路径]/Build/Products/Debug/MyApp.app/Contents/Resources
确认输出中存在Help子目录即可,原有Swift代码无需任何修改就能正常运行,不会再出现找不到路径的强制解包崩溃:
let url = Bundle.main.url(forResource: "help.en", withExtension: "html", subdirectory: "Help")!
内容的提问来源于stack exchange,提问作者Rob N
相关产品推荐
相关产品推荐

