如何在XCode 16中构建App Bundle的结构化Resources文件夹?
在Xcode 16中保留资源层级嵌入App Bundle的解决方案
用Folder References(灰色文件夹)解决层级扁平化问题
直接用Group(蓝色文件夹)会导致资源被扁平化,必须改用Folder References:
- 删除项目里现有资源相关的组或文件夹,重新导入资源目录时,选Create folder references(别选Create groups),导入后文件夹显示为灰色。
- 这种方式下Xcode会完整保留本地资源的目录结构,构建后App Bundle的Resources里会和原目录层级一致,同名文件因为路径不同(比如
Flowers/Marguerite.jpeg和Other/Marguerite.jpeg)不会触发构建冲突。
检查构建设置确保生效
如果导入灰色文件夹后还是扁平化,检查两处:
- 项目的Build Phases → Copy Bundle Resources里,灰色文件夹得是一个整体条目,不能是里面的文件被单独列出来。
- 去Build Settings搜
ENABLE_STRICT_RESOURCE_VALIDATION,要是设成了YES,改成NO试试——严格验证模式可能会强制扁平化资源。
脚本方案的沙箱问题修复
如果非得用脚本复制资源,调整后就能绕过沙箱限制:
- 在Build Phases加Run Script,把它拖到Copy Bundle Resources前面执行。
- 用正确的路径变量写脚本:
# 先创建目标目录,避免报错 mkdir -p "$TARGET_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/MyResources" # 复制资源内容到目标路径 cp -r "$SRCROOT/MyResources/." "$TARGET_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/MyResources/"
- 勾选脚本的Run script in sandbox选项,确保Xcode允许这个脚本的文件操作权限。
优先用Folder References的方法,这是Xcode官方推荐的,不用额外维护脚本,稳定性更高。
内容的提问来源于stack exchange,提问作者AirXygène
相关产品推荐
相关产品推荐

