EAS Update で出力されたソースマップを GitHub Actions から Sentry にアップロードする

Posted on

React Native と Expo で作られた iOS アプリに EAS Update したあと、Sentry から通知された Issue を見るとソースマップが紐付いていないことに気づきました。

これまでは app.config.js に設定した postPublish フックでソースマップをアップロードしていましたが、EAS ではこのフックが実行されないためソースマップがアップロードされていませんでした。ソースマップが紐付いていないと調査の手掛かりが得られないので、別の方法でアップロードする必要があります。

公式ドキュメントの "Uploading source maps for updates" のセクションを読むと、eas update を実行したあとに作られる dist/bundles 以下のファイルを手動でアップロードする必要があるようです。

今回問題になったプロジェクトは、リリースも GitHub Actions から自動化していた (ref. "Using GitHub Actions") ので、既存のワークフローにソースマップをアップロードするステップを追加して対応しました。追加した部分だけ抜き出すと次のような感じです。

jobs:
  eas-update:
    runs-on: ubuntu-latest
    steps:
      # EAS Update の諸々の処理

      - name: Rename source maps
        run: |
          find . -name "ios-*.js" -exec mv {} main.jsbundle \;
          find . -name "ios-*.map" -exec mv {} main.jsbundle.map \;
        working-directory: ./dist/bundles

      - name: Upload source maps
        run: |
          node_modules/@sentry/cli/bin/sentry-cli releases \
            files <release> \
            upload-sourcemaps \
            --dist <dist> \
            --rewrite \
            dist/bundles/main.jsbundle dist/bundles/main.jsbundle.map
        env:
          SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
          SENTRY_ORG: ${{ env.SENTRY_ORG }}
          SENTRY_PROJECT: ${{ env.SENTRY_PROJECT }}

ドキュメントにもしっかり明記されていますが、ソースマップの名前は main.jsbundle, main.jsbundle.map にする必要があります。 EAS が出力するソースマップをそのままアップロードしても Issue と紐付きません(これを見落としていてハマりました)。

この名前は React Native のバンドルスクリプトで決め打ちされていました。

Popular Entries

Recent Entries