Studyplus Engineering Blog

スタディプラスの開発者が発信するブログ

Studyplus iOSアプリのプライバシーマニフェスト対応事例

プロダクト部クライアントグループの明渡です。

成長曲線上辺すれすれで推移していた息子が、1歳半検診で成長曲線を上限突破していることが判明しました。 あの曲線って至極健康な範疇でも突破することあるんですね、びっくりしました。

今回は、iOSアプリにて今年5月1日以降App Storeへ審査提出するには必須となったプライバシーマニフェスト対応について、弊社で実施したことを紹介します。

developer.apple.com

はじめに

現在Studyplus iOSアプリはFlutterのAdd-to-appにより一部機能を提供しております。 しかしながら、結論としてはFlutterなしのネイティブアプリケーションと同じ一般的な対応しかしておりません。

Add-to-app部分で利用しているうちAppleが対応必須として名指しのサードパーティSDKにて、たまたまプライバシーマニフェストの中身が空だったため特別対応しなくとも問題が発生しませんでした。詳細は後述します。

Add-to-appを利用しているアプリへ行なった対応の知見として、目新しい情報はありません。

実行環境

  • サポートOSバージョン: 14〜17
  • Xcodeバージョン: 15.4
  • 一部の機能をFlutter Add-to-appで提供
    • Flutter 3.19

対応したこと

  • Privacy.xcprivacyを作成
  • Flutterのバージョンアップデート
  • サードパーティSDKをプライバシーポリシー対応済みのものへアップデート

Privacy.xcprivacyを作成

App Storeで表記済みのアプリのプライバシーに関して、アプリにも直接設定しておきます。

ほとんどの項目は表示項目に連動した選択肢があったので、表記通りに設定していきました。

トラッキングデータについてのみ、Firebaseも関連するため、以下のIssueを追って設定しました。

iOS NSPrivacyTrackingDomains · Issue #12404 · firebase/firebase-ios-sdk · GitHub

Flutterのバージョンアップデート

2024年1月時点でAdd-to-app部分は3.10系で動作していたため、3.19系にアップデートしました。 Flutterのバージョンを上げないと、プライバシーマニフェスト対応を含むSDKのアップデートに差し障る恐れがあったためです。

Flutterのバージョンおよび利用しているSDKのアップデートはこまめに行うのが理想ですが、Add-to-appはネイティブでも同じSDKを利用しているとそちらともバージョンも揃える必要があり、気軽にアップデートがしにくいです。

そしてFlutter製のSDKは1個のSDKで完結していることが少なく、依存関係の管理がSwift Package Managerより煩雑なのでアップデート対応自体そこそこ骨が折れる作業です。

1個のSDKをアップデートすると、依存しているSDKのバージョン不足でエラーが発生します。 そのエラーを解消するべくアップデートするとさらに別のSDKでエラーが発生し、ときどき破壊的変更が含まれていてソースコードの修正も行うのをビルドが通るまで繰り返します。

もちろん、ビルドが通った後は修正により影響が起こりうる機能を正しく動作するかももれなく確認します。心を無にして地道に対応しました。

サードパーティSDKをプライバシーポリシー対応済みのものへアップデート

Appleが対応必須なサードパーティSDKを提示しています。

developer.apple.com

基本的に、名指しされているSDKがもれなくプライバシーマニフェストに含まれるよう対応を進めました。

余談ですが、年明け確認した段階ではSwift製のSDKしか載っておらず、2〜3月に確認したタイミングでFlutter製のSDKも増えていて少し焦りました。 Flutter製のSDKに関しては期限までにある程度新しいバージョンを取り込んでおけばよさそう、くらいの目論見が外れたためです。

名指しされたSDKを中心にプライバシーマニフェスト対応状況の観測対象に追加して、もれなくアップデートはしました。 そして、サイレント追記されるSDKが今後増えない保証もないので、利用しているSDKは一通り破壊的な変更を含むアップデート作業もこなしました。

Swift Package

Appleが名指しで記載しているSDKのうち、弊社で利用しているものは以下が該当しました。

  • RealmSwift

  • Firebase全般

  • GoogleSignIn

2月中旬頃から利用しているSDKの対応状況は各GitHubのリポジトリをこまめに観測していました。 観測といっても、アップデートがあったか、あったならCHANGELOGにプライバシーマニフェスト対応について記載があるか確認していただけです。

一番最後にプライバシーマニフェストへ対応されたのが、3月27日のGoogleSignInでした。 3月下旬にやっと出揃うまでは、Appleが提示している期限までに本当に間に合うのかひやひやしました。

CocoaPods(Flutter Add-to-app)

Appleが名指しで記載しているSDKのうち、弊社で利用しているFlutter製ものは以下が該当しました。

  • image_picker_ios

  • path_provider

  • path_provider_ios

上記をそれぞれPrivacy.xcprivacyファイルが存在するバージョンまでアップデートするところまでは対応しました。

しかしながら、ファイルは初期状態で値は空、プライバシーマニフェストとして出力する内容が存在しない状態でした。

Swift Package Managerで管理しているSwift製のSDKと共にプライバシーマニフェストの出力内容へ含ませる対応も必要だと見込んでいたのですが、見送って様子見してみることにしました。 アプリの審査も無事に通っているので、今のところ問題はなさそうです。

補足: Add-to-appのFlutter製SDKもプライバシーマニフェストの出力内容へ含ませる対応

Studyplus iOSアプリでは、Flutter Add-to-app部分にてCocoaPods経由でインストールしたSDKを、Swift Package ManagerのPackage.swiftで静的ライブラリとして参照しています。

Xcodeでは静的ライブラリに含むPrivacy.xcprivacyを自動的に取り込む手段はサポートされていないそうです。

Adding a privacy manifest to your app or third-party SDK | Apple Developer Documentation

今後プライバシーの値が設定されたFlutter製SDKを利用する場合、手動で追加するような対応をする必要があるらしい、というところまでは把握しています。