2024.4.15

4GBを超えたアプリを App Store Connect にアップロードしようとするとどうなるのか

前回の投稿でInHouseアプリをカスタムApp化するにあたり、既にipaファイルが4GBを超えている場合は注意が必要であると書きました。

ですが、実際のところ4GBを超えるアプリを App Store Connect にアップロードしようとするとどうなるのでしょうか。アップロードそのものができないのか、はたまた…。このあたりの挙動に関する情報は Apple も公にしていませんし、ネット上の情報を見かけることもありません。

そこで本稿では、アプリ上限4GB制限について、弊社が実際に検証し調査した結果をご紹介します。アプリ上限制限に引っかかりそうな InHouse アプリをカスタムAppに移行する時の参考として下さい。

では順に見ていきましょう。

 

App Store Connect にアップロードはできる

実は 4GB を超えたアプリであっても App Store Connect にアップロードは可能です。


(App Store Connect に ipa をアップロードする専用ツール Transporter)

上図は実際に4GBを超えるipaファイルをアップロードしている様子です。画面上にアプリサイズが表示されるわけではないので微妙なキャプチャではありますが…。

アップロードしたipaファイルは「ビルド」として App Store Connect にアプリと紐づく形で登録され、各アプリ毎に用意された TestFligth タブで下図のように確認することができます。


(過去にバージョン1.0として2回ipaファイルをアップロードして TestFlight に飛ばしている。3回目で4GB以上をトライ)

登録したてのipaファイル(ビルド)は、App Store Connect のシステムによって診断されます。上図の「処理中」とはまさに診断を受けている最中を意味します。ただこれはいわゆる「審査」ではありません。ipaファイルとして最低限の要件を満たしているかを App Store Connect が(ある程度)自動チェックする審査前の関門です。

このチェックが完了すると、通常は黄色バッジ付きで「提出準備完了」や「コンプライアンスがありません」という表示になります。ですが、ipaファイルが4GB上限を超えている場合、以下のような赤色バッジの表示になります。

もう少し分かり易く書いてくれてもいいのでは…と思いますが、なんにせよ無効だというわけです。この状態では TestFlight に飛ばすこともできませんし、もちろん申請もできません。サイズを小さくして出直してこいってなもんです。

この結果はメールでも教えてくれます。

4GBを超えているからダメだって書いてありますね。メール文中のリンク先には、アプリサイズを小さくするために使える技術も紹介されています。このメールが届いたら、4GB上限に対応すべくアプリのサイズを小さくする必要があります。

ここまでで、4GB上限を超えてしまっているアプリは App Store Connect にはアップロードできるが TestFlight にも申請にも使えない無効状態となる、という挙動を紹介しました。

 

4GB上限の正確なバイト数は?何のサイズを判定している?

ところで、アプリのサイズ上限は4GBということですが、4GBとは一体何バイトのことだと思われますか?

  • (A) 1024を基底に計算する → 4 x 1024x 1024 x 1024 = 4,294,967,296バイト
  • (B) 1000を基底に計算する → 4 x 1000x 1000 x 1000 = 4,000,000,000バイト

(A) ではないか?と考える方が多いと推測します(筆者もそうでした)が、実は正解は後者です。弊社検証で (A) (B) のバイト数を境に複数回調査したところ、(A)以上のサイズのアプリはもちろん、(A)以下(B)以上のサイズのアプリも無効になり、(B)以下のみが受け付けられました。

1024が基底ではなく1000基底のGB表記なのですね。いわゆる国際単位系(SI系)です。1024を基底とするIEC単位系(IEC 60027)ではないようです。まぁ厳密に書いているとすれば、もし(A)なら 4GiB というように、IEC的にギガを2文字表記する筈ですからそりゃそうか…ということでしかないのですが。

さて上限4GBの厳密なサイズは分かりました。では「何の」サイズが 4GB を超えるとダメなのでしょうか?やはりipaファイルでしょうか?

下図は生成された ipa ファイルが 4,000,000,000 バイトをわずかに超えている例を示していますが、このipaファイルで上限にひっかかるでしょうか?

答えはNOです。

実は上限判定は ipa ファイルのサイズに対してではありません。厳密には ipa ファイルをzip展開した中に含まれる .app のサイズとなります。過去にipaファイルとは何かという投稿で、ipaファイルは実は単なるzipファイルであり、展開すると中身が見れるという紹介をしました。


(sampleというアプリのipaをzipに変えて展開した様子。Payload 配下に .app がある)

階層的には上図のようになっていて、4GB上限でチェックされるのは sample.app というファイル(正確にはこれもまたフォルダでありバンドルと呼ばれる)のサイズです。これが4,000,000,000バイト未満ならokということです。ipa ファイルとして4GBを超えていても中の.appが4GB未満なら問題ないのですね。

 

サイズ上限は4GBだけではない

ついでに紹介すると、実はサイズ上限がもう一つあります。

.app の中に含まれている実行ファイル。これもサイズ上限があり、500MBを超えてはいけません。公式ドキュメントにも明記されています。

.app の上限4GBに比べるとかなりシビアに思うかも知れませんが、この500MBというのはコンパイルされてできるMach-O実行バイナリそのものの上限です。よっぽどのことがない限り超えることはない筈なので、さほど心配する必要はないでしょう。

 

以上、カスタムApp化する時に問題となりうるiOSアプリの4GB上限について詳しく解説しました。通常は該当するケースはほぼほぼ無いと思います。が、万が一、大容量ファイルを内蔵するアプリに関係しているという方は、先の投稿も合わせて意識するようにしてみて下さい。

本サイトはACNメンバーの(株)フィードテイラーが運営するエンタープライズiOS情報サイトです

最近の投稿