React Native清理iOS构建产物遇Exit Code 65及权限问题求助
问题场景
在Azure DevOps中执行xcodebuild clean,或使用react-native-clean-project工具(其清理命令包含rm -rf ios/build、xcodebuild -alltargets clean等)时,出现Exit Code 65错误,无法删除ios/build文件夹,系统提示该文件夹非构建系统创建,疑似权限或标记问题。相关错误信息:
error: Could not delete '/Users/me/repos/Mobile-App/ios/build' because it was not created by the build system.
note: To mark this directory as deletable by the build system, runxattr -w com.apple.xcode.CreatedByBuildSystem true /Users/me/repos/Mobile-App/ios/buildwhen it is created.
IDEPackageSupportUseBuiltinSCM = YES
解决方法
1. 标记build文件夹为构建系统创建
在build文件夹生成后(比如首次构建完成后),立即执行以下命令添加标记,让Xcode认可该文件夹可被构建系统删除:
xattr -w com.apple.xcode.CreatedByBuildSystem true /Users/me/repos/Mobile-App/ios/build
如果是在Azure DevOps流水线中,可以将此命令添加到首次构建步骤的后续环节,确保每次生成build文件夹后都完成标记。
2. 调整清理流程,绕过Xcode的构建系统检查
修改清理脚本,优先手动删除build文件夹,再执行其他清理步骤,避免触发xcodebuild clean的删除限制:
- 针对react-native-clean-project,可自定义清理命令,移除
xcodebuild -alltargets clean环节,替换为直接删除build文件夹:rm -rf ios/build && (killall Xcode || true) && xcrun -k && rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang/ModuleCache" && rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang.$(whoami)/ModuleCache" && rm -fr ~/Library/Developer/Xcode/DerivedData/ && rm -fr ~/Library/Caches/com.apple.dt.Xcode/ - 在Azure DevOps流水线中,将
xcodebuild clean步骤替换为手动删除命令,再执行后续的Xcode构建操作。
3. 修复文件夹权限问题
检查ios/build文件夹的权限归属,确保执行清理命令的用户拥有完全读写删除权限:
- 查看权限:
ls -ld /Users/me/repos/Mobile-App/ios/build - 调整权限(如果需要):
chown -R $(whoami) /Users/me/repos/Mobile-App/ios/build chmod -R 755 /Users/me/repos/Mobile-App/ios/build
在Azure DevOps代理机器上,确保流水线执行用户对项目目录有足够权限,避免因权限不足导致无法删除或标记文件夹。
4. 调整Xcode构建配置
检查Xcode的构建配置,确保构建过程由Xcode构建系统生成build文件夹:
- 确认项目中
IDEPackageSupportUseBuiltinSCM配置未干扰构建系统的文件夹创建逻辑,可在项目的project.pbxproj中核查该设置,或在构建命令中添加参数强制使用Xcode的构建系统。
内容的提问来源于stack exchange,提问作者Before The Empire

