EAS Buildでプロファイルごとに証明書を切り替える唯一の実用的な方法
Expo の EAS Build でローカル証明書(credentialsSource: "local")を使うとき、開発用と本番用で異なる Provisioning Profile を使い分けようとして詰まったことはないだろうか。結論から言うと、ファイル名やパスを引数・環境変数で変える方法は公式に存在しない。この記事では、実際にハマって解決した「唯一の実用的な方法」を共有する。
何が問題なのか
eas.json でこう書いたとする。
{
"build": {
"preview-dev": {
"ios": { "credentialsSource": "local" }
}
}
}
このとき EAS は 常にプロジェクトルートの credentials.json を固定参照する。プロファイルごとに別ファイルを見に行ってくれるわけではない。つまり「dev プロファイルでは別の証明書を使いたい」というニーズに、設定だけでは応えられない。
解決策: ビルド前にファイルを差し替える
唯一の実用的な方法は、ビルド直前に credentials.dev.json を credentials.json にコピーで上書きすることだ。
cp credentials.dev.json credentials.json
eas build --profile preview-dev --local
地味だが、これが公式の制約内でできる現実解になる。CI に組み込むなら、プロファイル名に応じてコピー元を切り替えるスクリプトを一枚かませるとよい。
ハマりどころ: Fastlane の sh は起点が違う
もう一つの落とし穴として、Fastlane の sh コマンドは fastlane/ ディレクトリを起点に実行される。そのため credentials.json を参照するときは、一つ上の階層を指す必要がある。
sh "cat ../credentials.json"
ここを credentials.json と書くとファイルが見つからずに失敗する。地味だが見落としやすい。
eas.json の preview-dev プロファイル設定例
credentialsSource: "local" は extends 元から自動で引き継がれないため、各プラットフォームに明示する必要がある点にも注意したい。
{
"build": {
"preview-dev": {
"extends": "preview",
"env": { "APP_VARIANT": "development" },
"ios": { "credentialsSource": "local" },
"android": { "credentialsSource": "local" }
}
}
}
また APP_VARIANT のような環境変数は eas.json の env で渡すこと。.env はローカルでは読まれるが、EAS のビルド環境では読まれない。
さらに学ぶなら
EAS や Fastlane を含むモバイルCI/CDを腰を据えて学ぶなら、体系立った教材で一気に基礎を固めるのが結局は近道だ。実務で詰まる前提知識を先に押さえておくと、こうしたハマりどころでの消耗が激減する。
まとめ
credentialsSource: "local"はプロジェクトルートのcredentials.jsonを固定参照する- プロファイルごとに証明書を変えたいなら、ビルド前にファイルを差し替えるのが唯一の実用解
- Fastlane の
shはfastlane/起点なので../credentials.jsonと参照する credentialsSourceは extends で引き継がれないので各プラットフォームに明示する