ios - PhaseScriptExecution Run\ Script /Users/runner/Library/Developer/Xcode/DerivedData/Runner 构建flutter ios app时
问题描述
当我在 Github Actions() 中编译我的项目时bundle exec fastlane beta
,显示此错误:
** ARCHIVE FAILED **
The following build commands failed:
PhaseScriptExecution Run\ Script /Users/runner/Library/Developer/Xcode/DerivedData/Runner-gzzbtgmsqethlzedjqlbspydxjjv/Build/Intermediates.noindex/ArchiveIntermediates/Runner/IntermediateBuildFilesPath/Runner.build/Release-iphoneos/Runner.build/Script-9740EEB61CF901F6004384FC.sh
(1 failure)
[12:03:09]: Exit status: 65
我现在使用的版本:
- 颤振 2.0.1
- cocopods 1.10.1(1.10.0)
- 快车道 2.177.0
- xcode 12.4
- 操作系统:macOS Catalina 10.15
当我在本地机器上编译时,它可以成功完成。哪里出了问题,我应该怎么做才能解决它?这是我的 GitHub Actions 脚本:
name: Cruise-CI
on:
push:
branches: [ main ]
jobs:
build:
#
# more macOS version:
# https://github.com/actions/virtual-environments/blob/main/images/macos/macos-10.15-Readme.md
#
runs-on: macos-10.15
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: '12.x'
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.1'
#
# more xcode version path:
# https://github.com/actions/virtual-environments/blob/main/images/macos/macos-10.15-Readme.md
#
- name: Select Xcode version
run: sudo xcode-select -s '/Applications/Xcode_12.4.app/Contents/Developer'
- name: Bundle install
run: |
cd ./ios
gem install cocoapods -v 1.10.1
bundle install
gem install fastlane -v 2.177.0
- name: Install tools
run: |
flutter precache
flutter pub get
cd ./ios
pod install
#- run: flutter pub get
#- run: flutter build apk
#- run: flutter build ios --release --no-codesign
- name: Setup SSH Keys and known_hosts for fastlane match
run: |
SSH_PATH="$HOME/.ssh"
mkdir -p "$SSH_PATH"
touch "$SSH_PATH/known_hosts"
echo "$PRIVATE_KEY" > "$SSH_PATH/id_rsa"
chmod 700 "$SSH_PATH"
ssh-keyscan github.com >> ~/.ssh/known_hosts
chmod 600 "$SSH_PATH/known_hosts"
chmod 600 "$SSH_PATH/id_rsa"
eval $(ssh-agent)
ssh-add "$SSH_PATH/id_rsa"
env:
PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Deploy to TestFlight/PGY
run: |
cd ./ios
bundle exec fastlane beta
env:
FLUTTER_ROOT: ${{ secrets.FLUTTER_ROOT }}
APPLE_ID: ${{ secrets.APPLE_ID }}
GIT_URL: ${{ secrets.GIT_URL }}
PGY_USER_KEY: ${{ secrets.PGY_USER_KEY }}
PGY_API_KEY: ${{ secrets.PGY_API_KEY }}
TEAM_ID: ${{ secrets.TEAM_ID }}
ITC_TEAM_ID: ${{ secrets.ITC_TEAM_ID }}
FASTLANE_USER: ${{ secrets.FASTLANE_USER }}
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: ${{ secrets.FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}
FASTLANE_SESSION: ${{ secrets.FASTLANE_SESSION }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
MATCH_KEYCHAIN_NAME: ${{ secrets.MATCH_KEYCHAIN_NAME }}
MATCH_KEYCHAIN_PASSWORD: ${{ secrets.MATCH_KEYCHAIN_PASSWORD }}
DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS: ${{ secrets.DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS }}
这是我的 fastlane 配置文件:
default_platform(:ios)
platform :ios do
desc "Push a new beta build to pgy"
before_all do
ENV["CACHE_GIT_URL"] = ENV["GIT_URL"]
end
lane :beta do
xcode_select("/Applications/Xcode_12.4.app")
if is_ci
create_keychain(
name: ENV['MATCH_KEYCHAIN_NAME'],
password: ENV["MATCH_KEYCHAIN_PASSWORD"],
default_keychain: true,
unlock: true,
timeout: 3600,
lock_when_sleeps: false
)
end
match(
app_identifier: ENV["APP_IDENTIFIER"],
git_url: ENV["GIT_URL"],
type: "adhoc",
readonly: is_ci,
keychain_name: ENV['MATCH_KEYCHAIN_NAME'],
keychain_password: ENV["MATCH_KEYCHAIN_PASSWORD"]
)
build_app(
workspace: "Runner.xcworkspace",
scheme: "Runner",
export_method: "ad-hoc"
)
pgyer(
api_key: ENV['PGY_API_KEY'],
user_key: ENV['PGY_USER_KEY']
)
end
end
这是错误片段:
解决方案
可能是 Flutter 2.0.1 的 null-safety 导致构建发布失败(我发现其他错误可能导致此错误,但构建错误提示与实际错误无关)。我通过预构建项目修复它,在工作流 ci 文件中添加这一行:
- run: flutter build ios --release --no-codesign --no-sound-null-safety
推荐阅读
- javascript - 使用通过网络访问的 uri 反应原生 Image 组件
- swift - 在不使用 TextStorage 的情况下使用属性字符串在 UILabel 中查找被触摸的字符
- mysql - 如果外键列具有 NULL 值,MySQL 不选择行
- python - 如何将 MS Word 段落对象(来自 VBA)转换为 python 字符串
- node.js - Dockerising 一个节点应用程序
- android - 在本机代码与 USB 设备交互期间,此日志消息在 android studio 日志中的含义是什么?
- html - CSS、HTML 在所有尺寸的屏幕上保持外观相同
- javascript - 检测 Web App 浏览
- node.js - 升级到最新节点和 npm 后 npm i 不工作
- node.js - Mongoose Node Express 需要至少 18 个位置的 _id 号