App Store に落ちた理由が、自分の端末では絶対に再現しなかった — 制作日誌 #8
「規約のリンクをタップしても何も起きない」で審査落ち。だが自分のiPhoneでは普通に開く。原因は審査側の端末が管理された端末だったことだった。通った後にもっと大きなミスもやらかした話。
個人開発の iOS アプリを App Store に出したとき、**Guideline 2.1(a)(アプリの完成度)**で審査に落ちた。指摘はこう書かれていた。
アプリ内のプライバシーポリシー/利用規約のリンクをタップしたが、何も起きなかった(unresponsive)
読んだ瞬間、正直「そんなはずはない」と思った。手元の iPhone で何度タップしても、普通にページが開くからだ。
サーバーは無実、コードも一見正常
まず疑うべきはリンク先だが、URLは新旧のドメインとも正常に応答していた。サーバーは無実。
次にコードを見た。法的ページへのリンクは、外部のブラウザにURLを渡して開かせる、という一番素直な実装になっていた。iOSでいえば「Safariにこの住所を渡して開いてもらう」処理だ。特別なことは何もしていない。
そして自分の端末では、確かに開く。再現しない不具合ほど厄介なものはない。
真因:審査の端末は「管理された端末」だった
調べていて行き着いた答えがこれだ。
Appleの審査で使われる端末は、組織によって管理された状態(supervised / MDM 管理)になっていることがある。 そして管理下の端末では、アプリから外部のブラウザへ受け渡す動作が制限される場合がある。
つまり、こうなっていた。
| 端末 | 外部ブラウザへの受け渡し | 結果 |
|---|---|---|
| 自分のiPhone(制限なし) | 通る | 普通に開く |
| 審査端末(管理下) | 止められる | タップしても無反応 |
コードは間違っていない。サーバーも正常。環境の前提が違っただけで、審査では致命傷になっていた。
修正:外部に投げず、アプリの中で開く
直し方はシンプルで、外部ブラウザに渡すのをやめ、アプリ内に埋め込まれたブラウザで開くようにした。iOSにはそのための標準の仕組みがあり、アプリの中に小さなブラウザ画面が乗る形になる。外へ受け渡していないので、管理された端末でも止められない。
そのうえで、外部への受け渡しは失敗したときの予備手段として残した。
置き換えたのは法的リンク全5箇所(設定画面の3つと、課金画面の必須リンク2つ)。ただし「サブスクリプションの管理」だけは、Appleの管理画面へ飛ばす必要があるので意図的に外部のままにした。
再提出して、翌日に審査を通過した。
教訓:審査に出すリンクは、最初からアプリ内で開く
この一件で得た結論は1行だ。
審査に出るアプリで、法的ページや外部ページを開くときは、最初からアプリ内ブラウザを使う。外部への受け渡しを前提にしない。
自分の端末で動くことは、審査端末で動くことを一切保証しない。「手元で再現しない」は反証ではなく、環境差を疑う合図だった。
通ってからのほうが、もっとひどかった
正直に書く。審査は通ったが、公開直後にもっと大きなミスが見つかった。
App Store に載せた6枚のスクリーンショットに、自分の実データがそのまま写っていたのだ。
- タスク一覧に、開発用のメモ(「◯◯機能追加」「アルゴリズム考える」など)
- メモ画面に、「歯医者」「引っ越し」といった自分の私用の予定
- 課金画面に、無料プランのはずなのに開発者アカウント特有の数値が出ている状態
説明文もキーワードも問題なかったが、画像だけ撮り直しを忘れていた。開発者アカウントで撮ると、開発者の生活がそのまま商品ページに載る。
しかも、すぐには取り下げられなかった
「販売を止めて作り直そう」と考えたが、ここで詰まった。**「アプリを配信から削除」のボタンが押せない(無効化されている)**のだ。
調べて分かったのは、新規アプリは初回リリースの反映処理が終わるまで、Appleの仕様で配信停止ができないということだった。何度試しても押せないのは、操作ミスではなく仕様だった。
さらに厄介なことに、管理画面のバージョンページには「このアプリはApp Storeの配信から削除されました」という表示が出ていた。だが実際の配信設定を確認すると全175か国で公開のまま。管理画面の表示が実態と矛盾していたので、鵜呑みにしていたら判断を誤っていた。
不幸中の幸いは、この時点でストアへの伝播がまだ終わっておらず、検索しても出てこない=誰にも見られていない状態だったこと。実害はゼロで済んだ。
対応としては、ボタンが有効になるのを待つしかなかったので、2時間おきに管理画面を見に行って、押せるようになった瞬間に押すという定期処理を仕込んで放置した。
なお、スクリーンショットは公開中のバージョンでは差し替えられない。撮り直すには新しいバージョンを作って審査に出す必要がある。ここも事前に知っておきたかった点だ。
まとめ:個人開発者が踏みやすい3つ
- 外部ブラウザ頼みのリンクは審査で落ちる。 環境が違えば動かない
- スクリーンショットは専用のデモデータで撮る。 自分のアカウントで撮ると私生活が商品ページに載る
- 公開直後は取り消しが効かない。 出す前に確定させる。管理画面の表示も疑う
どれも「言われれば当たり前」だが、当たり前が抜けるのは、確認する人が自分しかいないからだと思う。個人開発でいちばん高くつくのは、他人のレビューが無いことだ。
この記事で触れているアプリ
本稿の題材は、筆者が個人開発している iOS アプリ THE TASK:AI下調べToDoリスト(App Store・無料)です。書いたタスクをAIが着手できる状態まで補完する、という発想で作っています。他の回は制作日誌シリーズにまとまっています。
あわせて読みたい
コメント (0)
まだコメントはありません。最初の一言を残しませんか?