You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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项目,进入Target Medipills -> 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 17:37:42