📝

iOSでの新規リリースとアップデート対応

21 min read

はじめに

この資料では、iOSでの新規リリースやアップデートなどで発生する(発生した)必要な対応の内容をまとめます。

アプリケーションやゲームのコンテンツに対するアップデートだけではストアでリリースできなくなります。
毎年発生する対応(Xcode)と新しい機能対応(ガイドライン対応)が必要になります。オフィシャル情報をチェックしてスケジュールに組み込みスムーズにリリースできるようにしましょう。

ターゲットはiOSネイティブアプリ向けではなくUnityゲーム開発向けになります。[1]

関連

オフィシャル

News日本語)で新機能や対応しないといけないこと。ReleasesでOSのアップデート情報などオフィシャルのソースがあります。最新情報はRSSフィードリーダーを使って確認すると便利です。
App Store Connectのトップページにメンテナンス情報やステータスアップデートアラートなどが表示されます。定期的に確認しましょう。
新たに導入される技術はWWDCを確認しましょう。WWDC 2020 Videosで動画が公開されており必要な部分を確認しましょう。

リンク一覧

毎年発生する対応

環境のバージョンアップ

Xcodeバージョンアップ

毎年3月か4月頃に指定のXcodeバージョン以上ににアップデートする必要があります。
前年にリリースされたXcodeのバージョンがターゲットになります。
2020年にXcode12がリリースされました。2021年はXcode12へのアップデートが必須になります。

ニュースにも配信されますので確認しましょう。

参考リンク

開発版がインストールできない

"{アプリ名}" はアップデートの必要があります

App をこのバージョンの iOS で動作させるには、デベロッパによるアップデートが必要です。

iOSのBetaにXcode旧バージョンでビルドしたEnterprise、AdHocをインストールできず。上記のようなエラーが端末ダイアログに表示される。
再署名を行うことでインストールできるようになる。[2]

再署名方法
# IPAファイルを展開する
# `Payload` というフォルダが作成される
# 私の環境ではファイル名が補完されなかったので `unzip *.ipa` で展開した
$ unzip ○○.ipa

# アプリの署名を確認する
$ codesign -dvvvvv ./Payload/××.app

# アプリを再署名する
$ codesign -s "{キーチェーンアクセスに表示されている証明書の名前}" -f --preserve-metadata --generate-entitlement-der ./Payload/××.app

# 再署名したアプリをIPAファイルへ圧縮する
# ファイル名は任意だが、末尾に `_resign` と付けると元のIPAファイルと区別しやすい
$ zip -ru ○○_resign.ipa Payload

# 展開したファイルを削除する
$ rm -rf Payload/

macOSバージョンアップ

macOSバージョンによって、使用できるXcodeバージョンが決まります。
最新のXcodeは、最新のmacOSでないと動作しないためmacOSのアップデートも必須になります。
macOS Catalina(10.15.4)だとXcode12.4までしか使用できないため、2022年はmacOS Big SurにアップデートしてXcode13?にする必要があります。
リリースビルド用のmacとは別に、環境テスト用のmacを準備しておきましょう。テスト環境でOSアップデート、ツールチェーン、ビルド確認を確認してリリース環境を更新しましょう。[3]

iOS SDKバージョンアップ

Xcodeのバージョンを上げるとiOS SDK(+iPadOS)の対応バージョンも上がります。
Xcode12ではiOS 14に対応しています。新たに追加された機能や動作変更などに対応する必要があります。
外部ライブラリーやSDKを更新する必要があるかもしれません。Xcodeの新しいバージョンが出たタイミングから外部ライブラリーやSDKの対応状況を確認しておきましょう。
各種の修正を行い実機でテストを行い問題ないことを確認しましょう。

iOS 10

カメラ、マイク、GPSなどを使用する場合には許可ダイアログ用に使用理由の説明を書かなければなりません。

参考リンク

iOS 11

iPhone XのSafeエリア対応が2018年4月から新規アプリ対応が必須になり、2018年7月からアップデートも対象になった。
iOS 8から64bit対応が必須になり、iOS 11から32bitアプリが動かなくなりました。[4]

参考リンク

iOS 12

「OpenGL/CL」の利用が“非推奨”になりました。Metalの利用が推奨されています。

参考リンク

iOS 13

「Sign In with Apple」の対応の必須化。Launch Storyboard、すべての画面サイズ、画面分割機能対応の必須化。 UIWebViewの廃止。Wi-Fi MACアドレスランダム化。など。

参考リンク

iOS 14

広告識別子(IDFA)を取得するときにAppTrackingTransparencyへの対応(ダイアログ表示対応)が2021年4月26日以降から必須になった。
WWDC2020で発表されiOS14のリリース直後ぐらいの対応が必要だったようだがいろいろあって時期がずれた。(はず)
ローカルネットワークの取得にパーミッションが必要、位置情報取得精度の設定、写真アプリへのアクセス方法などプライバシー関連の対応が強化されました。

参考リンク

iOS 15

UIKit、位置情報取得、IDFA許可要求タイミング、PUSH通知の通知許可ダイアログ対応、iCloud Private Relayの位置情報やIPアドレスに関する対応、新しいApp内課金機能、アカウント削除機能などの対応が必要。

参考リンク

セキュリティー対策

Jailbreak対策、リバースエンジニアリング対策、メモリ改変対策、通信内容改変対策などのセキュリティー対策により新しいOSで動作しなくなることがないか確認する。

新しい機能対応

App Store Reviewガイドライン更新

非公開APIの使用禁止

2.5.1 Appでは公開APIのみ使用でき、現行のOSで動作する必要があります。公開APIについて詳しくは、こちらをご確認ください。Appは常に最新の状態に保ち、今後のOSバージョンでサポートが終了し、非推奨となる機能、フレームワーク、テクノロジーは段階的に使用を止めてください。Appではその用途に合ったAPIおよびフレームワークを使用し、その内容をAppの説明に記載してください。たとえば、HomeKitフレームワークを使用する場合はホームオートメーションサービスを提供するものである必要があります。HealthKitはヘルスケアとフィットネスの目的で、ヘルスケアAppに統合し使用される必要があります。

iOSアプリは公開APIのみ使用できます。現行のOSで動作する必要があります。

リワード禁止

(vi)Appでは、ユーザーが対価を支払ったコンテンツを、追加作業(ソーシャルメディアへの投稿、連絡先のアップロード、Appを特定の回数開くことなど)を実行しなくても入手できるようにする必要があります。Appは、ユーザーにAppの評価やレビュー、ビデオの視聴、他のAppのダウンロード、広告のタップ、トラッキングの有効化を求めるべきではありません。また、機能やコンテンツへのアクセス、Appの利用、(ギフトカードやコードを含むがこれに限らない)金銭やその他の報酬を受け取るために、同様のアクションを取ることもユーザーに求めるべきではありません。

大雑把にまとめると何かのアクションによってリワードを与える行為はリジェクトされる可能性があります。

IPv6ネットワークサポート

2.5.5 Appは、IPv6のみのネットワークで完全に機能する必要があります。

IPv6のネットワーク経由でも動くようにする必要があります。
iOS SDKの高レベルAPIはIPv6に対応しています。Socketを使用して対応していないなどでなければ問題はありません。
macをルーターにしてテストができます。

外部からのコードの取り込み禁止

2.5.2 Appはバンドル内で完結している必要があります。他のAppを含め、指定されたコンテナエリア外に対するデータの読み書き、またはAppの特徴や機能を導入したり変更したりするコードをエリア外からダウンロード、インストール、実行することは許可されません。実行形式のコードの学習や開発、学生によるテストを目的とした教育用Appでは、コードが他の目的で使用されないという、限られた状況での使用に限り、コードのダウンロードが許可される場合があります。こうしたAppでは、ユーザーがApp上でソースコードの全体を確認し、編集できることを許可しておく必要があります。

Appの特徴や機能を導入や変更したりするコードをエリア外からダウンロード、インストール、実行することは許可さません。実行形式のコードの学習などでは許可されるケースもあります。

アプリ起動時の動作

(ii)起動時にAppが正しく機能するよう、バイナリに十分なコンテンツが含まれるようにしてください。
(iii)初回起動時に正しく機能させるために追加のリソースをダウンロードする必要があるAppでは、ダウンロードする前にその追加データのサイズをユーザーに開示してください。

アプリケーションに必要なデータを含めておく必要があります。
初期起動時にリソースをダウンロードする必要がある場合は追加データサイズを開示してダウンロードする必要があります。
いわゆるソーシャルゲームなどで起動時にダウンロードする場合には対応する必要があります。

App Transport Security(ATS)必須化

TLSに対応サイトにしか接続できない制限の必須化。
2017年のiOS9対応予定でした。延期されて2018年[5]からになりました。

参考リンク

終了ボタン

iOS Human Interface Guidelinesに「Don’t Quit Programmatically」項がなくなっている。
みずほ銀行のアプリInstagramの言語変更などで終了処理が存在する。
要件によってはレビューが通る可能性はある。

アカウント削除機能の提供

アカウントのログイン機能がある場合は、ログアウトも実装する必要がある。

5.1.1 データの収集および保存
(v)アカウントへのログイン:(前略)ソーシャルネットワークの認証情報や、Appとソーシャルネットワーク間のデータアクセスをApp内で無効にできるメカニズムを用意する必要があります。(誤略)]
https://developer.apple.com/jp/app-store/review/guidelines/#data-collection-and-storage

その他参考

サーバサイド更新

モバイルデータ通信でダウンロードできるサイズ

モバイルデータ通信で、200MB、設定により無制限にできるようになりました。[6]

証明書の期限

2020年9月1日00:00 (GMT/UTCTLS) 以降に発行されたサーバ証明書は、有効期間が398日間を超えないものしか使用できなくなりました。新しい要件に違反する証明書のTLSサーバへの接続ができなくなります。

PUSHシステム切り替え

2021年3月31日で、APNsはレガシーバイナリプロトコルのサポートを終了しました。
HTTP/2ベースのApple Push Notificationサービス(APNs)に対応する必要がある。
Firebase Cloud Messagingを使っていると気にしなくても良い。

App Store Connect

年間メンバーシップの更新

1年に1回アカウントを維持するために更新する必要があります。[7]
あわせて、Apple Developer Program使用許諾契約確認と口座確認もする必要があったかもしれません。

納税者フォーム対応

昔も条件によっては提出する必要があったけどシステム的にリクエストされることはなかった気がします。日本人で日本の納税者だよという設定にすれば問題なさそう?

Appのプライバシ登録

2020年12月8日以降から新規AppおよびAppのアップデートする場合必須になりました。
自分たちが取得しているデータと外部ライブラリ(広告SDKやFirebaseなど)がどんな情報を取得しているか確認して登録する必要があります。

App Store Reviewガイドライン対応

レビューガイドラインに準拠していないと、アプリを申請してもリジェクトされます。内容をよく読んで対応しましょう。[8]
英語版の更新が早いはずですがそこまで更新時間の差がなくなった?昔は英語のみだったが日本語版も整備されるようになりました。[9]
まずは、よくあるよくあるAppの却下理由を回避の部分を読むとよかと思います。
ニュースに差分が配信されます。

レビュープロセスアップデート

法的な懸念事項に関わる内容でない限り、バグ修正がガイドライン違反により遅れてしまうことがなくなりました。次の審査提出の際に、ガイドライン違反への対応をすることが可能になりました。

2ファクター認証必須化

iOS端末、macから2ファクター認証を有効化する必要がある。
設定しないとログインできない。2ファクター認証後にブラウザーで許可すると一定期間入力を求められなくなります。

Apple Silicon Mac対応

Apple Silicon(Arm)搭載のmacでiOSアプリが動くようになりました。
macで動作させないために、「App Store Connect→App→・・・→MacでのiOS Appの配信状況」でオプトアウト可能です。

審査

新しいOSでの申請が始まるタイミングでレビュー経過がリセットされて厳しくなる気がする。[10]

審査が休みの期間がある。現地時間での土日には審査が進まない。
また、ホリデースケジュールのまとまった休みに注意する必要がある。

Certificates, Identifiers & Profiles

CertificatesとProvisioning Profileの更新

Certificates(証明書)とProvisioning Profileは有効期限が1年間です。
年間メンバーシップの更新などと合わせてまとめて更新する等の対応をしましょう。

Apple Push Notifications service (APNs)更新

証明書(p12ファイル)で作成した場合は有効期限が1年間です。プロビジョニングファイルと合わせて更新しましょう。
認証キー(p8ファイル)で作成した場合は有効期限がありません。2個までしか作成できません。すべてのアプリ共通で使えます。[11]

2ファクター認証必須化

iOS端末、macから2ファクター認証を有効化する必要がある。
設定しないとログインできない。2ファクター認証後にブラウザーで許可すると一定期間入力を求められなくなります。

デザイン変更

2020年のどこかのタイミングでデザインが変更された。
機能は同じだがレイアウトが変更されたため再学習の必要があった。

脚注
  1. ネイティブアプリでもそこまで大きく変わりませんが ↩︎

  2. 常に問題ないかは不明 ↩︎

  3. もしくは気合で対応しましょう ↩︎

  4. UnityでmonoだとリジェクトされるになりIL2CPPが出てきて。さらに64bitに対応したり ↩︎

  5. ちょっとオフィシャルソースが見つけられなかった。WWDC2017 で語られた iOS デバイス管理の変更点 ↩︎

  6. 50MB→100MB→150MB→200MBと増えていった。アプリサイズ的には4GBまで作れます。Now Accepting Larger Binaries - News - Apple Developer ↩︎

  7. Apple税など呼ばれていますが ↩︎

  8. Androidという文字列がレビュー中見つかるとリジェクトされたりする ↩︎

  9. 昔は日本語版がなく翻訳してくれている人のものを参考にしたりしていた。midnightSuyama - Qiita ↩︎

  10. 昔はレビューが遅くなったが。最近はそれほどでもない? ↩︎

  11. 証明書(p12ファイル)で通知通したあとでないとと認証キー(p8ファイル)でPUSH送れないとかがある? ↩︎

Discussion

ログインするとコメントできます