iOSでの新規リリースとアップデート対応
はじめに
この資料では、iOSでの新規リリースやアップデートなどで発生する(発生した)必要な対応の内容をまとめます。
アプリケーションやゲームのコンテンツに対するアップデートだけではストアでリリースできなくなります。
毎年発生する対応(Xcode)と新しい機能対応(ガイドライン対応)が必要になります。オフィシャル情報をチェックしてスケジュールに組み込みスムーズにリリースできるようにしましょう。
ターゲットはiOSネイティブアプリ向けではなくUnityゲーム開発向けになります。[1]
関連
オフィシャル
News(日本語)で新機能や対応しないといけないこと。ReleasesでOSのアップデート情報などオフィシャルのソースがあります。最新情報はRSSフィードリーダーを使って確認すると便利です。
App Store Connectのトップページにメンテナンス情報やステータスアップデートアラートなどが表示されます。定期的に確認しましょう。
新たに導入される技術はWWDCを確認しましょう。WWDC 2020 Videosで動画が公開されており必要な部分を確認しましょう。
リンク一覧
- News - Apple Developer
-
ニュース - Apple Developer
- 大きなラグはなく日本語情報が読める。
-
Releases - Apple Developer
- OS、Xcode、ツール系アップデート情報。英語のみ。
- App Store Connect
- WWDC21 - Apple Developer
- WWDC 2020 - Videos - Apple Developer
- ヒューマンインターフェイスガイドライン | Apple Developer Documentation
毎年発生する対応
環境のバージョンアップ
Xcodeバージョンアップ
毎年3月か4月頃に指定のXcodeバージョン以上ににアップデートする必要があります。
前年にリリースされたXcodeのバージョンがターゲットになります。
たとえば、2020年にXcode12がリリースされました。2021年はXcode12へのアップデートが必須になります。
Xcode14から32bitビルド廃止[2]、Bitcodeが非推奨になります。
ニュースにも配信されますので確認しましょう。
- iOS AppとiPadOS AppをApp Storeに提出する - Apple Developer
- Xcode Release Notes | Apple Developer Documentation
参考リンク
開発版がインストールできない
"{アプリ名}" はアップデートの必要があります
App をこのバージョンの iOS で動作させるには、デベロッパによるアップデートが必要です。
iOSのBetaにXcode旧バージョンでビルドしたEnterprise、AdHocをインストールできず。上記のようなエラーが端末ダイアログに表示される。
再署名を行うことでインストールできるようになる。[3]
- [iOS15] [未解決]「アップデートの必要があります AppをこのバージョンのiOSで動作させるには、デベロッパによるアップデートが必要です」で自作アプリがインストールできない時 - Qiita
- IPAファイルを再署名する方法(Mac) - Qiita
再署名方法
# 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アップデート、ツールチェーン、ビルド確認を確認してリリース環境を更新しましょう。[4]
- Xcode - サポート - Apple Developer
-
macOS の起動可能なインストーラを作成する方法 - Apple サポート (日本)
ダウンロードから必要する。AppStore.appを開くを選択する。「入手」ボタンを押すとシステム環境設定→ソフトウェア・アップデートが表示される。ダウンロードするか聞かれるので「ダウンロード」を選択する
iOS SDKバージョンアップ
Xcodeのバージョンを上げるとiOS SDK(+iPadOS)の対応バージョンも上がります。
Xcode12ではiOS 14に対応しています。新たに追加された機能や動作変更などに対応する必要があります。
外部ライブラリーやSDKを更新する必要があるかもしれません。Xcodeの新しいバージョンが出たタイミングから外部ライブラリーやSDKの対応状況を確認しておきましょう。
各種の修正を行い実機でテストを行い問題ないことを確認しましょう。
旧バージョン(iOS 10-11)
iOS 10
カメラ、マイク、GPSなどを使用する場合には許可ダイアログ用に使用理由の説明を書かなければなりません。
iOS 11
iPhone XのSafeエリア対応が2018年4月から新規アプリ対応が必須になり、2018年7月からアップデートも対象になった。
iOS 8から64bit対応が必須になり、iOS 11から32bitアプリが動かなくなりました。[5]
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内課金機能、アカウント削除機能などの対応が必要。
参考リンク
- iOS 15の新機能 - Apple サポート (日本)
- WWDC2021セッション等の要約(1) - Qiita
- WWDC2021セッション等の要約(2) - Qiita
- WWDC 2021: What's New in UIKit メモ - Qiita
- iOS 15 で追加された Location Button - Qiita
- iOS15でのIDFA許可要求の仕様変更とその対応方法 - Qiita
- 【WWDC21】Notificationの新機能とinterruptionLevelについて - Qiita
- 【iOS15】通知許可ダイアログの「時刻指定要約で許可」の状態を取得する - Qiita
- iCloud Private Relayに向けたネットワークやWebサーバの準備 - サポート - Apple Developer
- Private Relay と IP Blindness による Fingerprint 対策 | blog.jxck.io
- 新しいApp内課金機能が利用可能に - ニュース - Apple Developer
- Xcode13、iOS15に対応する | shtnkgm
iOS 16
Xcode Cloud、ロック画面のウィジェット、Passkeys、Metal 3、Developer Mode。
iPadOSにはステージマネージャ(マルチタスキング)、仮想メモリスワップ。
参考リンク
- iOS 16の新機能 - Apple サポート (日本)
- Apple、さらにパワフルなテクノロジーをデベロッパに提供 - Apple (日本)
- Apple、iOS 16で導入される共有とコミュニケーションのための新しい方法を発表 - Apple (日本)
- iPadOS 16により、iPadがこれまで以上に万能に - Apple (日本)
- Platforms State of the Union WWDC2022をまとめてみたら大量のアップデートがあってすごいことになっていた件について - Qiita
- AppleのFIDOサインイン認証情報「パスキー」の仕組み Google、Microsoftと共同で推進する「パスワードを不要にする認証」(1/2 ページ) - ITmedia NEWS
- [WWDC22]セッションビデオ一覧 - Qiita
- Developer Modeに関するメモ #WWDC22
iOS 17
スタンバイ、インタラクティブなウィジェット、ジャーナル、空間ビデオ撮影など。
参考リンク
iOS 18
写真アプリ、Apple Intelligence、パスワードアプリ、アイコン種類追加など。
セキュリティー対策
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をルーターにしてテストができます。
- IPv6のみのネットワークのサポート - サポート - Apple Developer
- App Store Reviewガイドライン/2.5.5
- Supporting IPv6-only Networks - News - Apple Developer
- iOS9対応のために、IPv6 only NetworkでのiOSアプリの動作テスト方法を調べてみた - Qiita
外部からのコードの取り込み禁止
2.5.2 Appはバンドル内で完結している必要があります。他のAppを含め、指定されたコンテナエリア外に対するデータの読み書き、またはAppの特徴や機能を導入したり変更したりするコードをエリア外からダウンロード、インストール、実行することは許可されません。実行形式のコードの学習や開発、学生によるテストを目的とした教育用Appでは、コードが他の目的で使用されないという、限られた状況での使用に限り、コードのダウンロードが許可される場合があります。こうしたAppでは、ユーザーがApp上でソースコードの全体を確認し、編集できることを許可しておく必要があります。
Appの特徴や機能を導入や変更したりするコードをエリア外からダウンロード、インストール、実行することは許可さません。実行形式のコードの学習などでは許可されるケースもあります。
App Transport Security(ATS)必須化
TLSに対応サイトにしか接続できない制限の必須化。
2017年のiOS9対応予定でした。延期されて2018年[6]からになりました。
参考リンク
終了ボタン
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
- Account deletion within apps required starting January 31 - News - Apple Developer
- Deadline for in-app purchase and account deletion requirements extended - News - Apple Developer
- アカウントの削除機能に関する要件の適用が6月30日開始
その他参考
削除項目
2022年6月6日 各種契約とガイドラインが更新されました - 最新ニュース - Apple Developer
- 2.5.4: バックグラウンドでの位置情報取得モードを使用する場合は、それによってバッテリー持続時間が大幅に減少する可能性があることを伝えるリマインダーを記載する、という要件を削除しました。
- 4.2.3: 起動時にAppが正しく機能するよう、バイナリに十分なコンテンツが含まれるようにする、という要件を削除しました。
4.2.3の解説
(ii)起動時にAppが正しく機能するよう、バイナリに十分なコンテンツが含まれるようにしてください。
(iii)初回起動時に正しく機能させるために追加のリソースをダウンロードする必要があるAppでは、ダウンロードする前にその追加データのサイズをユーザーに開示してください。
アプリケーションに必要なデータを含めておく必要があります。
初期起動時にリソースをダウンロードする必要がある場合は追加データサイズを開示してダウンロードする必要があります。
いわゆるソーシャルゲームなどで起動時にダウンロードする場合には対応する必要があります。
理由の宣言が求められるAPI
2023年秋以降、App Store Connectにアップロードされた新規アプリまたは既存アプリのアップデートで、理由が求められるAPI(サードパーティ製SDKからのものを含む)が使用されているにもかかわらず、承認される理由がアプリのプライバシーマニフェストで宣言されていない場合は、デベロッパにその旨が通知されます。また、2024年春以降は、App Store Connectに新規アプリまたは既存アプリのアップデートをアップロードする際に、該当するAPIをアプリでどのように使用しているかを正確に説明した承認される理由をアプリのプライバシーマニフェストに含めることが義務付けられます。
理由の宣言が求められるAPIの一覧が公開されました - 最新ニュース - Apple Developer
サーバサイド
モバイルデータ通信でダウンロードできるサイズ
モバイルデータ通信で、200MB、設定により無制限にできるようになりました。[7]
証明書の期限
2020年9月1日00:00 (GMT/UTCTLS) 以降に発行されたサーバ証明書は、有効期間が398日間を超えないものしか使用できなくなりました。新しい要件に違反する証明書のTLSサーバへの接続ができなくなります。
PUSHシステム切り替え
2021年3月31日で、APNsはレガシーバイナリプロトコルのサポートを終了しました。
HTTP/2ベースのApple Push Notificationサービス(APNs)に対応する必要がある。
Firebase Cloud Messagingを使っていると気にしなくても良い。
- 再度のご案内:APNs Provider APIの要件、3月31日に開始 - ニュース - Apple Developer
- Sending Notification Requests to APNs | Apple Developer Documentation
サービス障害
年に1回ぐらい障害でサービス停止することがある。
申請時に障害が発生した場合にリスケできるぐらいの余裕を持っておいた方が良い。
- Appleのネットサービスで大規模な接続障害が発生【復旧済み】 - ITmedia NEWS
- iCloudで「機能停止」 一時「Apple Music」なども【復旧済み】 - ITmedia NEWS
- AppleのApp Storeなど21のサービスが深夜にダウン 午前2時過ぎに復旧 - ITmedia NEWS
App Store Connect
年間メンバーシップの更新
1年に1回アカウントを維持するために更新する必要があります。[8]
あわせて、Apple Developer Program使用許諾契約確認と口座確認もする必要があったかもしれません。
納税者フォーム対応
昔も条件によっては提出する必要があったけどシステム的にリクエストされることはなかった気がします。日本人で日本の納税者だよという設定にすれば問題なさそう?
プライバシー
-
Appleにおけるプライバシーの全容を把握する - Speaker Deck
- 位置情報、IDFA、写真/動画、連絡先、プライバシーレポート、プライバシーラベルについて書かれている
Appのプライバシ登録
2020年12月8日以降から新規AppおよびAppのアップデートする場合必須になりました。
自分たちが取得しているデータと外部ライブラリ(広告SDKやFirebaseなど)がどんな情報を取得しているか確認して登録する必要があります。
プライバシーマニフェストと署名
2024年5月1日からアプリにプライバシーマニフェストへ「アプリのプライバシーの宣言」と「使用しているAPIの宣言」が必要になる。
あわせて、SDK側にプライバシーマニフェストと署名の必要がある。
参考リンク
App Store Reviewガイドライン対応
レビューガイドラインに準拠していないと、アプリを申請してもリジェクトされます。内容をよく読んで対応しましょう。[9]
英語版の更新が早いはずですがそこまで更新時間の差がなくなった?昔は英語のみだったが日本語版も整備されるようになりました。[10]
まずは、よくあるよくあるAppの却下理由を回避の部分を読むとよかと思います。
ニュースに差分が配信されます。
- App Store Review Guidelines - Apple Developer
- App Store Reviewガイドライン - Apple Developer
- App Review - App Store - Apple Developer
レビュープロセスアップデート
法的な懸念事項に関わる内容でない限り、バグ修正がガイドライン違反により遅れてしまうことがなくなりました。次の審査提出の際に、ガイドライン違反への対応をすることが可能になりました。
- App Reviewプロセスのアップデート - ニュース - Apple Developer
- App Storeの審査方法が改善〜ガイドラインのあり方に異議を唱えることも可能に - iPhone Mania
2ファクター認証必須化
iOS端末、macから2ファクター認証を有効化する必要がある。
設定しないとログインできない。2ファクター認証後にブラウザーで許可すると一定期間入力を求められなくなります。
Apple Silicon Mac対応
Apple Silicon(Arm)搭載のmacでiOSアプリが動くようになりました。
macで動作させないために、「App Store Connect→App→・・・→MacでのiOS Appの配信状況」でオプトアウト可能です。
審査
新しいOSでの申請が始まるタイミングでレビュー経過がリセットされて厳しくなる気がする。[11]
審査が休みの期間がある。現地時間での土日には審査が進まない。
また、ホリデースケジュール(クリスマス)のまとまった休みに注意する必要がある。
2021年からは審査の遅延で完全に止めることはなくなった。
-
ホリデー期間に向けてAppを準備しましょう - 最新ニュース - Apple Developer
- より審査に時間がかかる期間がある
2019-2021
- 2019:App Store Connectの年末スケジュール - 最新ニュース - Apple Developer
- 2020:App Store Connectのホリデースケジュール - ニュース - Apple Developer
- 2021:ホリデー期間中もAppの提出を受け付けます - 最新ニュース - Apple Developer
- 2021年は休暇で止まることはなかった。(通常より審査に時間がかかる)
非公開アプリ
App Storeに公開されず。カテゴリやワード検索、ランキングにアプリが表示されなくなる。
非公開アプリをリクエストするして承認後にダウンロードリンクなどからダウンロードできるようになる。
Tier設定
2022年12月6日に改定された。
2023年春には、買い切りのアプリやアプリ内課金も含めてTierの段階が増える。
すでに、月額課金で提供されているサブスクリプションサービスは設定可能。
- Apple announces biggest upgrade to App Store pricing, adding 700 new price points - Apple
- App Storeの価格設定のアップグレードの適用範囲が全購入タイプに拡大 - 最新ニュース - Apple Developer
- iPhoneアプリを配信する「App Store」の価格設定ルールが改定、新たな価格体系を読み解く - ケータイ Watch
以前は為替により価格が変動していた。
Tier為替による変更
為替の変動によりTierの価格が変更される。
状況によりTierを変更する必要が出てくる。
アプリケーションの譲渡
別デベロッパーへアプリケーションの譲渡することが可能です。
アプリケーションの所有権を譲渡することができ情報を残すことが可能です。[12]
Certificates, Identifiers & Profiles
CertificatesとProvisioning Profileの更新
Certificates(証明書)とProvisioning Profileは有効期限が1年間です。
年間メンバーシップの更新などと合わせてまとめて更新する等の対応をしましょう。
Apple Push Notifications service (APNs)更新
証明書(p12ファイル)で作成した場合は有効期限が1年間です。プロビジョニングファイルと合わせて更新しましょう。
認証キー(p8ファイル)で作成した場合は有効期限がありません。2個までしか作成できません。すべてのアプリ共通で使えます。[13]
2ファクター認証必須化
iOS端末、macから2ファクター認証を有効化する必要がある。
設定しないとログインできない。2ファクター認証後にブラウザーで許可すると一定期間入力を求められなくなります。
デザイン変更
2020年のどこかのタイミングでデザインが変更された。
機能は同じだがレイアウトが変更されたため再学習の必要があった。
2022年1月25日からApp Store Connectのデザインと機能が更新あり。
Updated App Store Submission - App Store Connect - Apple Developer
輸出コンプライアンス
米国輸出規制で暗号に関する対応が必要。
2022/11頃?からフランスの輸出コンプライアンス対応が増えた。
- 今こそ理解しよう、輸出コンプライアンス by 坂本 和大 | トーク | iOSDC Japan 2019 #iosdc - fortee.jp
- AppStore輸出コンプライアンスについて〜httpsは米国輸出規制対象外|アプリ作成語録
- 「Appが暗号化を使用する場合、輸出コンプライアンス書類をアップロードする必要があります。」と言われました - かずのアプリときどきキャンプ飯
- iOSの輸出コンプライアンス対応についてまとめてみた(フランス対応) - Qiita
課金
-
課金をテストする|株式会社グリモア
- テスト課金設定方法
-
ネイティブアプリでもそこまで大きく変わりませんが ↩︎
-
32ビットAppを実行できるiOSの最後のバージョンは、2016年にリリースされたiOS10まで ↩︎
-
常に問題ないかは不明 ↩︎
-
もしくは気合で対応しましょう ↩︎
-
UnityでmonoだとリジェクトされるになりIL2CPPが出てきて。さらに64bitに対応したり ↩︎
-
ちょっとオフィシャルソースが見つけられなかった。WWDC2017 で語られた iOS デバイス管理の変更点 ↩︎
-
50MB→100MB→150MB→200MBと増えていった。アプリサイズ的には4GBまで作れます。Now Accepting Larger Binaries - News - Apple Developer ↩︎
-
Apple税など呼ばれていますが ↩︎
-
Androidという文字列がレビュー中見つかるとリジェクトされたりする ↩︎
-
昔は日本語版がなく翻訳してくれている人のものを参考にしたりしていた。midnightSuyama - Qiita ↩︎
-
昔はレビューが遅くなったが。最近はそれほどでもない? ↩︎
-
何が移行できるか、移行できないかはよく確認しましょう ↩︎
-
証明書(p12ファイル)で通知通したあとでないとと認証キー(p8ファイル)でPUSH送れないとかがある? ↩︎
Discussion