はじめに
iOSアプリエンジニアのあっきーです。今回は、開発工程としては前後しますが、App Storeリジェクト対応について書いていきます。ご挨拶がまだの方はこちらの記事からご覧ください。
実際にリリースしたアプリはこちらです。興味があればぜひ触ってみてください。
最近はレビュー期間が長くなったように感じます。一週間待ってもレビューが進まず、特急審査リクエストを出してようやくIn Reviewになることもありました。一回でもやり取りを減らして、迅速なリリースをするためにも、リジェクトされないようにしていきたいところです。
リジェクト1.サブスクリプション実装ルール
Guideline 3.1.2(c) - Business - Payments - Subscriptions
The submission did not include all the required information for apps offering auto-renewable subscriptions.
(提出された書類には、自動更新型サブスクリプションを提供するアプリに必要な情報がすべて含まれていませんでした。)
サブスクリプションを提供する場合は、購入処理が動くだけでは不十分でした。審査では、定期購読に関する情報が購入直前に確認できることが必要でした。
特に、利用規約やプライバシーポリシーについては、設定画面からリンクを貼るだけでは対応不足と判断されるらしく、購入ボタンが配置された画面からリンクを確認できるようにすることが必要でした。
定期購読に関する情報
- 商品名、利用期間、価格
- 自動更新されることの説明
- 解約・管理方法
- 利用規約、プライバシーポリシーへのリンク
リジェクト2.ダーク/ライトモードの切り替えでUIの視認性が悪くなっていた
Guideline 4 - Design
There are issues with the app's user interface that contribute to a lower-quality user experience than App Store users expect. Specifically, the app includes hard to read type or typography.
(アプリのユーザーインターフェースには問題があり、App Storeユーザーが期待するよりもユーザーエクスペリエンスの質が低い原因となっています。具体的には、アプリ内の文字やフォントが読みにくいという問題があります。)
自分の端末では問題なく表示されていたUIでも、Appleの審査環境では問題になることがありました。該当の画面はFirebaseUIで構築されたメールアドレスでのログイン画面でした。ライトモードで見たときにナビゲーションボタンの視認性が悪くなっていました。
FirebaseUI側でカスタム方法を見つけられず、実用上は操作可能だったため優先度を下げていましたが、審査では視認性の問題として指摘されました。
今回の対応では、FirebaseUIをカスタムすることはせず、自前のメールアドレス画面を用意してFirebaseUIからそちらに誘導することで解決しました。また、FirebaseUIの標準画面にあったパスワードリセットや利用規約、プライバシーポリシーへの導線についても、自前画面へ引き継いでいます。
| FirebaseUI | EmailAuthViewController |
|---|---|
![]() |
![]() |
リジェクト3.App Storeのキーワードにも審査がある
Guideline 1.1 - Safety - Objectionable Content
The app's marketing includes terms or images that reference objectionable content or services. These references can be found in the app's metadata, including, but not limited to, the following metadata field(s): keywords.
(アプリのマーケティングには、不適切なコンテンツやサービスを参照する用語や画像が含まれています。これらの参照は、アプリのメタデータに含まれており、キーワードなどのメタデータフィールドが含まれますが、これらに限定されません。)
App Store Connectでは、検索用のキーワードを設定できます。検索されそうな単語をできるだけ入れたくなりますが、ここにも審査がありました。今回、アプリとは直接関係が薄かったり、検索流入を狙いすぎたキーワードが問題になり、修正することになりました。
- NGだったキーワード: 匿名、Anonymous
これまでに携わってきた有名どころのアプリでは、競合サービス名に近いワードや、検索流入を狙ったやや広めのワードが使われているケースも見ていたため、審査は軽めなんだろうと思っていました。指摘を受けて修正した以降は、検索されそうなワードではなく、アプリの機能や用途を直接説明できるワードを設定するようにしています。
リジェクト4.審査員に操作方法が伝わらない問題
Guideline 5.1.1(v) - Data Collection and Storage
The app supports account creation but does not include an option to initiate account deletion. Apps that support account creation must also offer account deletion to give users more control of the data they've shared while using an app.
(このアプリはアカウント作成に対応していますが、アカウント削除のオプションは含まれていません。アカウント作成に対応するアプリは、ユーザーがアプリ使用中に共有したデータをより詳細に管理できるように、アカウント削除機能も提供する必要があります。)
機能自体は実装されていても、レビュアーがその機能に辿り着けなければ、機能が存在しないと判断される可能性があります。今回指摘された退会機能についても、その導線をレビュアーに確実に伝える必要がありました。
App Store Connectでのレビュワーへのメモを書く欄には退会手順についての共有は書いていましたが、退会手順を実際に操作した動画を添付するよう指摘がありました。
ストアで新規バージョンを作ったときに、「レビュワーへのメモ」は前バージョンから自動でコピーされますが、「添付ファイル」はコピーされません。毎回添付し直す必要があるため、私はFastlane Deliverを使ってアップロードするようにしています。
修正したら別の指摘が来る
個人的に一番つらかったのはこれでした。一つのリジェクト理由を修正して再申請しても、次の審査で別の問題を指摘されることがあります。最初のリジェクトで全ての問題点が列挙されるとは限りません。
前回それも一緒に言ってくれれば、と思うこともありましたが、審査のたびに確認される箇所やレビュアーも変わるため、そういうものだと考えた方が精神衛生上は良さそうです。
重大な不具合を指摘されることもありますが、リジェクトされたからといって、そのアプリ自体が否定されたわけではありません。面倒ではありますが、Appleからの指摘内容をひとつずつ潰していけば、ちゃんとリリースには辿り着けます。
次回以降
次回からも、今回のアプリ開発で発生したテーマを個別に掘り下げて書いていく予定です。どうぞよろしくお願いします。
投稿予定の内容
- 個人開発だけどセキュリティは十分過ぎるほど対応したい
- 個人開発アプリのサーバコストをできるだけ抑えたい
- 言葉の壁を越えたい ~iOSアプリに翻訳機能を組み込む~
- iOSアプリの投稿をWebでシェアする ~ディープリンクとOG画像~
- いろいろあってアプリの配信国を制限した

