【Xcode】アップロード時にITMS-4238エラーが出た場合【Application Loader】

この記事は最終更新から4年以上が経過しています。情報が古くなっている可能性があります。

先日、iOSのアプリ審査でリジェクト(却下)されました(´A`)
指摘された内容を修正・再ビルドし、XcodeのApplication Loaderを使ってアップロードしようとしたところ、こんなエラーに遭遇。

ERROR ITMS-4238: “Redundant Binary Upload. There already exists a binary upload with build version ‘1.0.5’ for train ‘1.0.5’” at SoftwareAssets/PreReleaseSoftwareAsset

このエラーの対処法について、貴重なビルド数(*Monaca freeプランだと上限あり)を消費してしまった戒めをこめてまとめます。

ITMS-4238エラーってどんなエラー?

改めてエラーメッセージ。

ERROR ITMS-4238: “Redundant Binary Upload. There already exists a binary upload with build version ‘1.0.5’ for train ‘1.0.5’” at SoftwareAssets/PreReleaseSoftwareAsset

日本語訳だと、

エラーITMS-4238: “冗長バイナリアップロード。ソフトウェアアセット/ PreReleaseSoftwareAssetでtrain ‘1.0.5’のビルドバージョン ‘1.0.5’を持つバイナリアップロードがすでに存在します。
Google翻訳より

ということで、既に同じバージョンのビルドがiTunesConnectにアップロードされてるよ!というエラーです。

確かにiTunesConnect>マイAPPのTestFlightやアクティビティを見ると、却下されたビルドも存在したままになっています。
以前はアップロードしたビルドは消せたとのことですが、現在は無理みたいですね。

勿論iTunesConnectに入力する(App Storeに表示される)バージョンをあげれば問題ありませんが、そのバージョンはあげないまま修正版をアップロードする方法があります。

バンドルバージョンをあげればいい

バンドルバージョンとは

Bundle version:内部バージョン(文字列)
内部のバージョン番号でユーザに見せるものではない。
リリースの時に特に利用されていない。
ユニークである必要はない(*1)。
(中略)

*1あるバージョンのリリース時にパッケージを複数個アップロードすることができ、その中から審査対象を選ぶことができる。その時に、Bundle versionがすでにアップ済みのものと同じだとアップロードすることができない。
引用元)AndroidとiOSのアプリバージョン周りについてまとめてみた 

こちらにある通り、同じバージョンでビルドを複数あげたい時に使われる内部バージョンがバンドルバージョンです。
バンドルバージョンまで同じビルドをあげるとITMS-4238エラーが発生するということですね。

バンドルバージョンの設定方法

Xcodeで開発している方は、こちらの記事が参考になると思います。

以下はMonacaでの設定方法です。

MonacaではiOSアプリ設定から指定できます。

バンドルバージョンは、デフォルトだと「バンドルバージョンを指定」のチェックボックスがOFF、バージョンと同じ文字列がグレーアウトしている状態だと思います。

この「バンドルバージョンを指定」のチェックを外して、違う文字列を入れましょう。
ここではバージョンが1.0.5なので、適当に1.0.5.1と入れてみました。その後保存をクリック。

そしてビルドし、Application LoaderでiTunesConnectへアップロード。
そうするとITMS-4238エラーはでなくなったかと思います。

iTunesConnectにアップロードされたという連絡が来たら、
ビルドのエリアから複数のビルドパッケージから選択できるようになってるので、新しい方を選択すればok!


私はこのエラーでビルド上限に達して1日待つことがありました。。(´ω`)
再アップロード時は気をつけましょう!