2024.3.4

App Store Connect でアプリ申請時にビルドを選択できないことがある理由

業務用iOSアプリであるカスタムAppの開発が初めてで、かつ、2023年リリースのXcode15を使い始めたという現場から、同様の質問を何度か頂きました。

「TestFlightでのテスト後にいざ申請となった段階でビルドが選択できないんです。なぜでしょう?」

というもの。2024年4月29日以降、Xcode15以上を使うことが当たり前になり、恐らく同様の悩みを抱える現場が多くなると思われます。ので、本稿では、その理由と解決策について解説しようと思います。結論を先に書くと「Xcode organizer でアップデートする時に正しい選択肢を選びましょう」です。

 

Xcode15 で organizer が大きく変わった

Xcode15 の見逃せない変化の一つに、organizer で ipaファイルの再署名とエクスポート・アップロードのUIが少し変わったことがあります。アーカイブの一覧が表示されて、ここから操作するって基本は変わっていないのですが、

問題はこの後ですね。配布用の ipa ファイルを作る時、 Xcode14 以前では下図のように配布タイプを選ぶUIが出てきていました。

ADEPのInHouseなら3番目のEnterpriseを選んでエクスポートしてipaを納品、みたいなことをしていたわけですね。しかし、Xcode15では以下のような画面が表示されるようになりました。

Apple Developer へのアクセス権や Cloud Signing の権限が付与されることを前提としたUIに変わっています。Apple は、アプリ開発のフローを自動署名・自動アップロードに寄せていきたいのだと考えられます。

自動署名や Cloud Signing って何?という方は、Xcode14.0 の Release Note や WWDC2021の動画 Distribute apps in Xcode with cloud signing を見てみて下さい。本稿主旨ではないため詳細は別投稿としますが、将来的には全関係者が幸せになれる署名関連の新機能です。

Apple Developer で適切な権限が与えられていない場合、Xcode15 organizer の上図でそのまま [Distribute] をクリックすると以下のようなエラーが表示されます。(別のエラーの場合もあります)


(cloud-managed distribution certificates なる特別な配布用証明書が存在する。あなたは使えませんよというエラー)

適切なアクセス権を与えられていなかったり、そもそも今まで自動署名をやってきていなかったり、ADEPのInHouseしか経験が無かった開発現場では、このエラー回避に前述Xcode15の画面で Custom を選ぶことになります。すると以下の見慣れた画面となります。


(Xcode15では、この直前に自動署名&アップロードを前提とするUIが挟まるようになったということ)

しかし、この後に注意しないとハマってしまう罠が待ってます。次へ次へと進むと…以下の画面。


(配信オプションを指定するお馴染みの画面だが…)

Xcode15では、3つ目の項目が追加されています。デフォルトOFFです。ここで「このダイアログは全部ONにするもの…」ってな具合に何も考えずチェックして進むと、冒頭の「申請できない」問題が発生します。

 

内部テストにしか使わないという指定ができるようになった

3つ目のチェックボックスには以下の文言があり、

TestFlight internal testing only
Distribute only to internal testers with TestFlight. When enabled, this build of the app cannot be distributed via external TestFlight or the App Store.

「ONにするとTestFlight外部テストやAppStore向けに使えませんよ」と書いてあります。そう、文字通り App Store 向けに使えないビルドとしてアップロードされてしまうんですね。

「よく読みましょう」案件ではあるのですが、TestFlight の経験が浅い中で InHouse からカスタムApp に移行しているケースでは、致し方ないこととも言えます。慣れてませんし、英語ですし、TestFlightの細かなことを書かれてもよく分からないってなりますから。

このチェックボックスをONにしてビルドをアップロードすると、App Store Connect の [TestFlight] タブで以下のように表示されます。


(ビルド7のアップロード時に前述のチェックボックスをONにした。内部と明示されているのが分かる)

TestFlightの内部テスト専用となるわけです。なので、[配信] タブのバージョン設定からビルドを選択しようとすると…


(非常に分かりにくいがビルド7の行だけグレーアウトしている)

内部テスト専用であるビルド7はクリックできません。ここで、「App Store Connect にアップロード成功してるし、TesetFlight でのテストもできている。なぜ申請だけできない?」となってしまうのです。Xcodeを触る人とApp Store Connectを触る人が違う場合や、異なる会社の場合はなおさらです。

AppStoreアプリに慣れていない開発者の方であれば、Xcode organizer の設定が申請に影響を及ぼすとまで思い至らないのも無理はありません。また開発者自身は TestFlight を使わずテストできる場合も多いですから、TestFlight に慣れていない限り内部テスト関連の設定にまで気が回らないものです。

TestFlight の内部テストや外部テストを駆使したテストフローがあるのでもない限り、Xcode15 での以下画面では必ず3つ目のオプションはOFFにしましょう。

本来は、誤って外部テスト向けビルドや申請用ビルドとして指定してしまうのを避けるためのストッパー機能です。TestFlight を使いこなすフェーズになってくれば、テスト体制や運用ルールを考慮してON/OFFを柔軟に変えていくと良いと思います。

なお前述の Cloud Signing も理解して活用できている現場では、Xcode15 organizer 初っ端の以下画面で [TestFlight Internal Only] を選んで内部テスト用の署名・アップロードを行います。

 

以上となります。本稿では、InHouseからカスタムAppに移行する際に開発現場でハマりがちな罠を一つご紹介しました。内部テスト用かそれ以外用か…という使い分けは理解して活用するととても便利で安心できる機能ですので、是非TestFlightを使いこなして頂きたいと思います。

ちなみに、弊社からご提供するワークフロー手順書では開発会社様向けドキュメントに明記しているのですが、


(エンドユーザ企業から委託先開発会社に向けて提示することを想定したガイドライン)

繰り返しのルーティンなので注記していてもハマってしまうことがあるようです。難しいものですね。

Xcode も App Store Connect も仕様・UIが頻繁に変わりますので、やはり関係者全員が App Store や ipa ファイルの構造を理解して、対応力を身に着けたいものだなと感じるお問い合わせ例でした。

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

最近の投稿