iOS项目在GitHub Actions构建失败:错误代码65求助
GitHub Actions构建Xcode项目时PhaseScriptExecution失败(Exit Code 65)
问题概述
使用GitHub Actions构建Xcode项目时遭遇PhaseScriptExecution错误,退出代码65,已尝试清理DerivedData、复制文件到项目源、检查仓库文件完整性,但问题未解决。
错误日志
The following build commands failed: PhaseScriptExecution Run\ Script /Users/runner/Library/Developer/Xcode/DerivedData/Medipills-fcfyzvumkxvttzcpwnfwxeldqivu/Build/Intermediates.noindex/Medipills.build/Debug-iphonesimulator/Medipills.build/Script-53C11E9C2A3B69C60070480A.sh (in target 'Medipills' from project 'Medipills') (1 failure) Error: Process completed with exit code 65.
当前Workflow配置
# Test name: App Control on: workflow_dispatch: push: branches: - main jobs: build_test: runs-on: macos-latest env: xcode_version: 14.3 steps: - name: Checkout repository uses: actions/checkout@v3 - name: Set up GoogleService-Info.plist run: echo "$GOOGLE_SERVICE_INFO" > Medipills/GoogleService-Info.plist - name: Check Comfortaa.ttf permissions run: ls -l Medipills/Comfortaa.ttf - name: Create Comfortaa directory run: mkdir -p $HOME/work/Downloads/Comfortaa - name: Copy Comfortaa.ttf run: cp Medipills/Comfortaa.ttf $HOME/work/Downloads/Comfortaa/Comfortaa.ttf - name: Create Downloads directory run: mkdir -p $HOME/work/Downloads - name: Copy JSON files run: | cp Medipills/Animations/syrup.json $HOME/work/Downloads/syrup.json cp Medipills/Animations/medicine.json $HOME/work/Downloads/medicine.json cp Medipills/Animations/blue_pill.json $HOME/work/Downloads/blue_pill.json - name: Copy GoogleService-Info.plist run: cp Medipills/GoogleService-Info.plist $HOME/work/Downloads/GoogleService-Info.plist - name: Clean project run: xcodebuild clean -scheme Medipills -project Medipills.xcodeproj - name: Build Medipills run: xcodebuild build -scheme Medipills -project Medipills.xcodeproj -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPhone 14 Pro Max" - name: Run Unit Tests run: xcodebuild test -scheme Medipills -project Medipills.xcodeproj -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPhone 14 Pro Max" - name: Fix Script Permissions run: chmod +x /Users/runner/Library/Developer/Xcode/DerivedData/Medipills-fcfyzvumkxvttzcpwnfwxeldqivu/Build/Intermediates.noindex/Medipills.build/Debug-iphonesimulator/Medipills.build/Script-53C11E9C2A3B69C60070480A.sh - name: Run Script run: sh /Users/runner/Library/Developer/Xcode/DerivedData/Medipills-fcfyzvumkxvttzcpwnfwxeldqivu/Build/Intermediates.noindex/Medipills.build/Debug-iphonesimulator/Medipills.build/Script-53C11E9C2A3B69C60070480A.sh
解决方案
提前处理脚本权限(而非构建失败后补救)
当前Workflow里的权限修复步骤放在构建之后,此时已失败无法执行。找到项目中对应的Run Script源文件(非DerivedData生成文件),本地执行chmod +x 脚本文件路径,再提交到GitHub,确保拉取代码后脚本本身具备可执行权限。检查Run Script的实际内容和依赖
打开Xcode项目,进入TargetMedipills->Build Phases->Run Script,检查:- 脚本是否依赖
$HOME/work/Downloads下的文件?若依赖,确认路径是否正确,或改用项目内相对路径(如${SRCROOT}/Resources/xxx)。 - 脚本是否调用了未安装的命令,或存在路径拼写错误。
- 脚本是否依赖
优化文件复制逻辑,避免绝对路径问题
移除Workflow中手动复制文件到$HOME/work/Downloads的步骤,将依赖文件放在项目目录内(如新建Resources文件夹),让Run Script通过${SRCROOT}引用项目内文件,避免环境路径不一致问题。增加构建日志详细程度
修改xcodebuild命令添加-verbose参数,获取更具体的错误信息:xcodebuild build -scheme Medipills -project Medipills.xcodeproj -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPhone 14 Pro Max" -verbose匹配Xcode版本与runner环境
在Workflow中添加明确设置Xcode版本的步骤,放在Checkout repository之后:- name: Select Xcode version uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: '14.3'
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

