EAS Build iOS証明書エラー

エンジニアの記録
技術メモ・実体験

eas build --platform ios が証明書まわりのエラーで通らない。エラーメッセージを読んでも何を直せばいいのか分からない——ここで何時間も溶かす人は多いです。

この記事でわかること

iOSビルドが証明書・プロビジョニングプロファイルで落ちる典型パターンと、Expoに資格情報を管理させて事故を防ぐ手順をコードつきで書きます。

PROFILE 20代ITエンジニア|React Native(Expo)× AWS Amplifyでアプリ開発中|Raw Ambition 運営
キラ
キラ
iOSの証明書は「概念を理解せずにエラーだけ直そうとする」と一生ハマる。仕組みから整理するよ。
Contents
  1. 結論:証明書はExpoに管理させる
  2. そもそも証明書とプロファイルの関係
  3. よくあるエラーと原因
  4. 解決手順:eas credentials
  5. CI向けにcredentials.jsonで管理する
  6. まとめ
結論:証明書はExpoに管理させるのが一番事故らない

先に結論です。個人〜小規模開発なら、証明書とプロビジョニングプロファイルはEASのリモート管理に任せる。これが一番ハマりません。手動でcredentials.jsonを用意するのは、CIや複数人で資格情報を共有したいときだけで十分です。

そもそも証明書とプロファイルの関係

iOSビルドには2つの資格情報が必要です。ここを混同するとエラーの意味が読めません。

? iOSビルドに必要な資格情報

① Distribution Certificate(配布証明書)
   → 「誰がビルドしたか」を証明する鍵

② Provisioning Profile(プロビジョニングプロファイル)
   → 「どのアプリ(Bundle ID)を・どの証明書で・どこに配布できるか」をまとめた許可証
        ├ Bundle Identifier(例: com.yourname.memories)
        ├ Distribution Certificate への参照
        └ 配布方法(Ad Hoc / App Store など)

エラーの大半は②のプロファイルが、①の証明書やBundle IDと噛み合っていないことが原因です。

よくあるエラーと原因

症状①

Provisioning profile … doesn’t include signing certificate

プロファイルが参照している証明書と、ビルドに使う証明書が違う。証明書を作り直したのに古いプロファイルが残っているとこうなります。

症状②

Provisioning profile is not valid for the bundle identifier “com.example.app”

app.jsonios.bundleIdentifier と、Apple Developer / プロファイル側のBundle IDが一致していない。タイポか、途中でBundle IDを変えたのに反映していないケースです。

// app.json(抜粋)
{
  "expo": {
    "ios": {
      "bundleIdentifier": "com.yourname.memories"
    }
  }
}

症状③

You have no team associated with your Apple account

Apple Developer Program(有料)に未登録、もしくはログインしているApple IDがチームに紐づいていない。無料アカウントでは配布ビルドは作れません。

スカイ
スカイ
つまり「証明書・プロファイル・Bundle ID・Appleアカウント」の4つが揃って初めて通るってことね。
解決手順:eas credentials で作り直す

迷ったらまず資格情報をクリーンに作り直すのが速いです。

# 1. 資格情報の状態を確認・管理
eas credentials

# 対話形式で進む
#   → Platform: iOS を選択
#   → Apple Developer アカウントでログイン
#   → Distribution Certificate を生成(or 既存を使う)
#   → Provisioning Profile を再生成

# 2. ビルド実行(資格情報はExpo側が自動で適用)
eas build --platform ios --profile production

eas.json のプロファイル設定も確認しておきます。配布方法をここで指定します。

// eas.json
{
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "ios": { "simulator": false }
    },
    "preview": {
      "distribution": "internal"
    },
    "production": {
      "autoIncrement": true
    }
  }
}

? POINT

distribution: "internal" は端末を登録して直接配るAd Hoc配布、指定なし(production)はApp Store配布になります。「TestFlightに上げたいのにinternalで作っていた」もよくある詰まりです。
CI向けにcredentials.jsonで管理する

GitHub Actionsなどで自動ビルドしたい場合は、対話なしで使えるようにローカルに資格情報ファイルを置きます。

// credentials.json(.gitignore必須!)
{
  "ios": {
    "provisioningProfilePath": "./certs/profile.mobileprovision",
    "distributionCertificate": {
      "path": "./certs/dist.p12",
      "password": "環境変数から渡す"
    }
  }
}

⚠️ 注意

credentials.json.p12 は絶対にコミットしないこと。.gitignore に追加し、パスワードは環境変数で渡します。資格情報をGitに上げると最悪アカウント停止につながります。

? この記事のまとめ
  • iOSビルドは「証明書・プロファイル・Bundle ID・Appleアカウント」の4つが揃って通る
  • エラーの大半はプロファイルと証明書 / Bundle IDの不整合
  • 個人開発ならeas credentialsでExpoに管理させるのが事故りにくい
  • CIではcredentials.jsonを使い、資格情報は絶対にコミットしない
Recommended
学んだことは、ブログに書くと一番定着する
エンジニアのアウトプット先として、表示速度の速いConoHa WINGでブログを始めました。月額わずか、最短10分で開設できます。
▶ ConoHa WINGでブログを始める
※ アフィリエイトリンクです
Next
次回:FlatListが重い・カクつくときのレンダリング最適化
React Native実践シリーズ

コメント

タイトルとURLをコピーしました