ログオフ
開発2026-06-20

アップロードしたのに配信されない・弾かれる iOS ビルドの3つの原因

公開済みアプリに新ビルドを上げたら version closed で弾かれる、TestFlight が Missing Compliance で止まる、prebuild 後のアーカイブが codegen 欠落で落ちる。アップロード周りで詰まる3つを実例でまとめる。

ビルドのアップロードは、成功したように見えて先に進まないことが多い。弾かれる・配信保留になる・そもそもアーカイブが作れない。原因が分かれている3つをまとめる。

1. 公開済みバージョンに新ビルドを上げると弾かれる

事象

すでに App Store で公開済みのアプリに、TestFlight 配信用の新しいビルドを上げると、次のエラーで弾かれる。

Invalid Pre-Release Train. The train version '1.0.0' is closed for new build submissions

または「より大きいバージョンを含める必要があります(must contain a higher version)」と言われる。ビルド番号は上げているのに通らない。

原因

ビルド番号(CFBundleVersion)だけ上げてもダメだ。すでに承認・公開済みのバージョン番号(例:1.0.0)は「トレイン」が閉じていて、そこへは TestFlight 用でも新しいビルドを足せない。

上げるべきはマーケティングバージョンCFBundleShortVersionString)の方だ(1.0.01.0.1)。

解決策

マーケティングバージョンを上げる。Expo / React Native なら3か所を揃える。

  • app.jsonexpo.version
  • Info.plistCFBundleShortVersionString
  • project.pbxprojMARKETING_VERSION

どれかがズレていると、ビルド側とメタデータ側で食い違ってまた弾かれる。1.0.1 で揃えてから再アーカイブする。

2. TestFlight が Missing Compliance で止まる

事象

アップロード自体は成功したのに、ビルドが「コンプライアンス情報がありません(Missing Compliance)」の状態で配信保留になる。標準の HTTPS しか使っていないアプリでも起きる。

原因

ITSAppUsesNonExemptEncryption を設定していないと、輸出コンプライアンスの回答が未入力扱いになり、配信が止まる。毎回 Web 画面で「いいえ」を押せば進むが、ビルドのたびに手作業になる。

解決策

App Store Connect API(ASC API)で自動解除できる。.p8 鍵から ES256 の JWT を作り、対象ビルドに PATCH を投げる。

PATCH /v1/builds/{id}
{
  "data": {
    "type": "builds",
    "id": "{id}",
    "attributes": { "usesNonExemptEncryption": false }
  }
}

これで以後の配信が進む。恒久対策は、そもそも回答を焼き込んでおくこと。Expo なら app.json に書く。

{
  "expo": {
    "ios": {
      "infoPlist": { "ITSAppUsesNonExemptEncryption": false }
    }
  }
}

焼き込んでおけば、次のビルドからは Missing Compliance 自体が出ない。

3. prebuild 後のアーカイブが codegen 欠落で落ちる

事象

app.json を変えて expo prebuild したあと、アーカイブが「Build input file cannot be found」で落ちる。欠けていると言われるのは React Native のコード生成物だ。

Build input file cannot be found:
'.../ios/build/generated/ios/.../ComponentDescriptors.cpp'

RCTAppDependencyProvider.mm が無い、といったメッセージも同じ系統だ。

原因

expo prebuild は既存の ios/ ディレクトリを再利用する。このとき React Native の codegen 生成物(ios/build/generated)が古いまま残り、新しい構成と食い違ってアーカイブが入力ファイルを見失う。

解決策

欠けたファイルを1つずつ補おうとしない。ios/ を作り直す。

npx expo prebuild --clean

--clean を付けると ios/ を再生成し、pod install まで通してくれる。codegen 生成物も作り直されるので、入力ファイル欠落が解消する。

補足

  • 2と3は、app.json への焼き込み(ITSAppUsesNonExemptEncryption / クリーンな prebuild)で「次回から起きない」状態にできる。その場しのぎの手作業を繰り返さないこと
  • ASC API は .p8 鍵さえあれば JWT を自作して叩ける。ビルドの処理状況(processingState)の確認にも同じ仕組みが使えるので、一度組んでおくと Web 画面を見に行く回数が減る

※ 本記事にはアフィリエイトリンクが含まれます。

開発 一覧へ