Xcode Cloud集成R.swift 7.4.0构建失败及权限问题求助
解决Xcode Cloud中R.swift 7.4.0的构建权限问题
问题回顾
升级R.swift到7.4.0并使用Swift PM插件后,Xcode Cloud构建先遇RswiftGenerateInternalResources禁用问题,通过ci_post_clone脚本跳过插件指纹验证解决后,又出现无权限保存R.generated.swift到Resources文件夹的错误。
可行解决方案
1. 调整R.swift生成路径至可写目录
Xcode Cloud对项目顶层目录的写入权限有限制,建议将生成文件路径改到项目内的源代码目录或构建临时目录:
- 打开Xcode,选中项目中的R.swift Package,进入Build Settings
- 找到R.swift插件的输出路径设置(对应
RswiftGenerateInternalResources的Output File Path) - 修改为项目内有权限的路径,例如:
或构建临时目录:$(SRCROOT)/YourAppTarget/Generated/R.generated.swift$(BUILD_DIR)/Intermediates.noindex/Generated/R.generated.swift
2. 完善ci_post_clone脚本的权限配置
如果坚持使用原Resources目录,在ci_post_clone.sh中添加目录创建与权限修改命令,同时修正原命令的拼写错误:
# 确保顶层Resources目录存在并设置可写权限 mkdir -p "$SRCROOT/Resources" chmod -R 755 "$SRCROOT/Resources" # 跳过插件指纹验证(修正拼写错误) defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidation -bool YES
3. 在构建阶段添加权限预处理
在Xcode项目的构建方案中添加Run Script阶段,确保R.swift执行前目标目录已准备好:
- 打开项目的Build Phases
- 点击
+选择New Run Script Phase,将其移到R.swift插件阶段之前 - 输入脚本内容:
# 生成目标目录路径,根据实际情况修改 GENERATED_DIR="${SRCROOT}/Resources" mkdir -p "$GENERATED_DIR" chmod 755 "$GENERATED_DIR"
4. 在Package.swift中明确配置输出路径
直接在Package.swift里指定R.swift插件的输出参数,避免Xcode自动选择受限目录:
targets: [ .target( name: "YourApp", plugins: [ .plugin( name: "RswiftGenerateInternalResources", package: "R.swift", options: [ .argument("--output", "$(SRCROOT)/YourApp/Generated/R.generated.swift") ] ) ] ) ]
内容的提问来源于stack exchange,提问作者sweetfa
相关产品推荐
相关产品推荐

