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

GitHub Workflow搭配Fastlane与Flutter时缓存路径配置问题求助

CICD缓存路径问题修复方案

核心问题根因

你的工作流配置存在4个路径相关的逻辑错误,直接导致缓存命中后依赖找不到:

  • Pods缓存路径不匹配:你配置的缓存路径是项目根目录下的Pods,但pod install命令是在ios/子目录执行的,实际生成的依赖存储路径为ios/Pods,缓存动作根本没有抓取到正确的依赖文件,恢复缓存后自然找不到对应配置。
  • Flutter环境未全局生效:你将Flutter安装步骤的触发条件设为缓存未命中,但subosito/flutter-action除了安装Flutter之外,还负责将Flutter可执行文件路径加入系统PATH变量,缓存命中时这步直接跳过,后续Fastlane调用Flutter命令时就会提示找不到可执行文件。
  • flutter pub get执行逻辑缺失:当前配置只有Pods缓存未命中时才会执行flutter pub get,一旦Pods缓存命中,该步骤直接跳过,项目的Flutter依赖都未安装,也会导致后续构建失败。
  • Fastlane安装逻辑冲突:ruby/setup-ruby已经开启了bundler-cache: true配置,会自动根据Gemfile安装依赖,你额外添加的Fastlane缓存和安装步骤属于多余配置,反而可能导致版本冲突。

路径查询方法

如果需要确认Fastlane执行时的实际路径,可以在你的Fastlane对应lane的开头添加如下代码,执行工作流后即可在日志中查看对应路径:

# 输出当前工作路径
UI.message("Fastlane当前工作路径: #{Dir.pwd}")
# 输出Flutter可执行文件的调用路径
UI.message("Flutter可执行文件路径: #{`which flutter`.strip}")

修复后的完整Workflow配置

name: Deploy staging

on:
  workflow_dispatch:
    inputs:
      lane:
        description: "Staging lane to use : alpha or beta"
        required: true
        default: "alpha"

jobs:
  deploy-to-ios:
    runs-on: macos-latest
    timeout-minutes: 30

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Flutter Cache
        id: cache-flutter
        uses: actions/cache@v3
        with:
          path: /Users/runner/hostedtoolcache/flutter
          key: ${{ runner.os }}-flutter
          restore-keys: |
            ${{ runner.os }}-flutter-

      - name: Setup Flutter
        uses: subosito/flutter-action@v2
        with:
          channel: "stable"
          # 新增缓存判断,命中时跳过安装
          cache: ${{ steps.cache-flutter.outputs.cache-hit == 'true' }}

      - name: 执行flutter pub get(必走步骤,不管缓存是否命中)
        run: flutter pub get

      - name: Setup Pods Cache
        id: cache-pods
        uses: actions/cache@v3
        with:
          # 修正为实际的Pods路径
          path: ios/Pods
          key: ${{ runner.os }}-pods-${{ hashFiles('ios/Podfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-pods-

      - name: Setup Pods
        if: steps.cache-pods.outputs.cache-hit != 'true'
        run: |
          cd ios/
          pod install

      # Setup Ruby, Bundler, and Gemfile dependencies
      - name: Setup Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: "2.7.4"
          bundler-cache: true
          working-directory: ios

      - name: Build and deploy with Fastlane 🚀
        run: bundle exec fastlane ${{ github.event.inputs.lane || 'beta' }}
        env:
          MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }}
          MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
          APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }}
          APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }}
          APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }}
        working-directory: ios

内容的提问来源于stack exchange,提问作者Raphaël

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:09:05