Github Actions中Flutter macOS Release构建卡在codesign步骤无报错
我之前也碰到过一模一样的糟心事——在Github Actions上打包Flutter macOS桌面应用时,codesign步骤突然就卡住不动了,等满30分钟超时都没反应,本地跑完全正常,日志里还找不到任何报错信息,真的折腾了好久才解决。结合自己的踩坑经验,给你几个排查方向:
先解锁Runner的默认密钥链
Github Actions的macOS runner默认的登录密钥链是锁定状态的,codesign可能因为拿不到权限卡着不动。你可以在执行fastlane或者Flutter构建前,先解锁密钥链:security unlock-keychain -p "" ~/Library/Keychains/login.keychain-db要是用fastlane的话,也可以在lane里加这个动作:
unlock_keychain( path: "~/Library/Keychains/login.keychain-db", password: "" # macOS Runner的登录密钥链默认密码为空 )跳过硬时间戳检查
很多时候codesign卡住是因为请求苹果的时间戳服务器超时(Runner的网络环境可能有限制)。你可以临时禁用硬时间戳来验证:
在Flutter构建前设置环境变量,让codesign跳过时间戳:export CODESIGN_OPTIONS="--timestamp=none"或者直接让Flutter不要自动签名,之后手动执行带参数的codesign:
# 先不签名构建 flutter build macos --release --no-codesign --build-number=${{ github.run_number }} -v # 手动签名,跳过时间戳 codesign --force --sign "你的签名证书名称" --options runtime --timestamp=none build/macos/Build/Products/Release/你的应用.app检查fastlane match的证书同步情况
看你的配置里用了readonly: true,有时候Runner上的证书可能没正确导入密钥链,或者权限不足。可以在sync_code_signing之后,加一步检查命令:# 在fastlane lane里添加 sh("security find-identity -v -p codesigning")确保输出里能看到你用来签名的证书。另外,Google Cloud存储模式下,要确认GCP密钥的权限足够访问存储桶,有没有过期或者权限配置错误。
指定Xcode版本,避免兼容性问题
Github Actions的macos-latest会自动更新Xcode版本,有时候和你用的Flutter版本(比如3.32.5)不兼容,导致签名流程出问题。可以手动指定稳定的Xcode版本:- name: 指定Xcode版本 if: needs.mac_check.outputs.macos_build == 'true' uses: actions/setup-xcode@v2 with: xcode-version: '15.4' # 选和你的Flutter版本兼容的Xcode给codesign加极致 Verbose 日志
要是上面的方法都没用,就把签名过程的日志拉满。修改Flutter的macos构建脚本,把codesign命令加上-vvvv参数,或者手动执行签名命令时加最高级别的日志:codesign --force --sign "证书名称" --options runtime --verbose=4 build/macos/Build/Products/Release/你的应用.app这样能看到codesign每一步的操作,到底是卡在证书验证、网络请求还是其他环节。
我当时是解锁密钥链+跳过时间戳就解决了问题,你可以一个个试这些方法,应该能定位到原因。
内容来源于stack exchange

