見出し画像

サードパーティSDKを使用したiOSアプリのプライバシーマニフェストの話

みなさん、こんにちは。ウイングアーク1stの いしま です。
2024-5-1から、iOSアプリのプライバシー要件が変わり、サードパーティSDKを使用している場合にプライバシーマニフェストが必要になりました。

私のチームでは、サードパーティSDKの Apache Cordova を使用して iOS・Androidのクロスプラットフォームのアプリを開発しております。このプライバシーマニフェストの対応に少し手間がかかりましたので、その内容についてご紹介します。
※当記事は Apache Cordova での開発経験があるかたが前提の内容になっています。


プライバシーマニフェストとは

アプリでサードパーティSDKを使用している場合でも、そのデータ収集と使用方法を把握して、開発者がユーザーのプライバシーへの影響を把握する必要があります。そのエビデンスとなるのがプライバシーマニフェストのファイル(PrivacyInfo.xcprivacy) です。このプライバシーマニフェストのファイルに適切な内容を設定して、アプリに同梱する必要があります。

サードパーティSDKを使用したアプリの審査でプライバシーマニフェストに対応していないとアプリ審査でリジェクトされます。リジェクトされた際には、必要なプライバシーマニフェストの情報が提示されます。

提示されるプライバシーマニフェストの情報

プライバシーマニフェストの適用範囲

アプリ本体とアプリ拡張(App Extension)に対してプライバシーマニフェストの対応が必要になります。

私たちが開発しているiOSアプリは、cordova-ios と Cordova Plugin でアプリ拡張(App Extension)を利用しているため、プライバシーマニフェストの対象は以下の3つでした。

  • アプリ本体(cordova-ios)

  • アプリ拡張1(外部アプリからの共有時に情報を受け取る機能)

  • アプリ拡張2(push通知を受け取る機能)

直面した問題

3週間サイクルでアプリのリリースを行う体制のため、緊急リリースなどの不測の事態に備えて、2024-4月中旬までにプライバシーマニフェストの対応を完了させようとしていましたが、Cordova 自体がプライバシーマニフェストに対応していない状態でした。

cordova-iosの状況

cordova-ios でプライバシーマニフェストを対応を進めていた当時は未対応の状態でした。
※2024-4-22にリリースされた cordova-ios 7.1.0 でプライバシーマニフェストに対応されています。

https://github.com/apache/cordova-ios/releases/tag/rel%2F7.1.0

Cordova pluginの状況

利用している Cordova plugin のプライバシーマニフェストは対応されていません(2024-6-25時点でも未対応)。

プライバシーマニフェストへの個別対応

cordova-ios と 利用している Cordova plugin のプライバシーマニフェスト対応が2024-4月に入っても見通しが立てられず、アプリの4月中のリリースに影響したため、個別に対応を進めました。

cordova-iosの対応

cordova-iosはプライバシーマニフェストの対応自体は進められていたため、cordova-iosをforkして、対象のコミットを取り込みしました。これにより、Cordova の config.xml にプライバシーマニフェストの設定を行うことで、PrivacyInfo.xcprivacy のファイルが同梱できるようになりました。

Cordova plugin の対応

Cordova plugin のプライバシーマニフェストの対応は進められていなかったため、対象のCordova plugin をforkしてプライバシーマニフェストのファイルを同梱しました。
Cordova plugin のプライバシーマニフェストのファイルは、当初PrivacyInfo.xcprivacy というファイル名で同梱していたのですが、ビルドしてもファイルが同梱されませんでした。 Cordova pluginのリソースは格納フォルダーが分かれており、ファイルパス上は被らないので意味が分からずハマりました。
原因は、Cordovaのビルド時のコピー処理でファイル名だけの重複チェックが行われており、cordova-ios の PrivacyInfo.xcprivacy のファイル名と被っていてコピー対象外となっていました。
Cordovaのビルドのコピー処理の修正は影響が大きいため、プライバシーマニフェストのファイル名を「<プラグイン名>-PrivacyInfo.xcprivacy」とし、重複しないようにすることで解決しました。

Cordova pluginにプライバシーマニフェストを同梱した状況

プライバシーマニフェストの設定

プライバシーマニフェストの設定の詳細は Apple Developer Documentation 
に記載されています。

この Apple Developer Documentation の内容から、アプリ本体とアプリ拡張機能の3つにプライバシーマニフェストの設定ファイルを設定しました。

  • アプリ本体(cordova-ios)

  • アプリ拡張1(Cordova Plugin)

  • アプリ拡張2(Cordova Plugin)

実際に設定した内容は以下のとおりです。

アプリ本体(cordova-ios)の設定

プライバシーマニフェストとして、以下の4つの設定が必要と指摘を受け設定しています。

  • NSPrivacyAccessedAPICategoryDiskSpace

    • 設定値:E174.1

      • ファイルを書き込むための十分なディスクスペースがあるかを確認する、またはディスクスペースが少ない場合にアプリがファイルを削除できるようにするためにディスクスペースが低いかをチェックします。

  • NSPrivacyAccessedAPICategorySystemBootTime

    • 設定値:35F9.1

      • アプリ内で発生したイベント間の経過時間を測定したり、タイマーを有効にするための計算を実行するために、システム起動時間にアクセスします。このデータをデバイス外に送信することはできません。

  • NSPrivacyAccessedAPICategoryFileTimestamp

    • 設定値:3B52.1

      • ユーザーが特にアクセスを許可したファイルやディレクトリのタイムスタンプ、サイズ、またはその他のメタデータにアクセスする(アップロードなどを行う場合)

  • NSPrivacyAccessedAPICategoryUserDefaults

    • 設定値:1C8F.1

      • アプリ自体と同じアプリグループのメンバーであるアプリ、アプリ拡張、App Clipsのみがアクセス可能な情報を読み書きするためにユーザーデフォルトにアクセスします。

アプリ拡張1(Cordova Plugin)の設定

プライバシーマニフェストとして、以下の設定が必要と指摘を受け設定しています。

  • NSPrivacyAccessedAPICategoryUserDefaults

    • 設定値:1C8F.1

      • アプリ自体と同じアプリグループのメンバーであるアプリ、アプリ拡張、App Clipsのみがアクセス可能な情報を読み書きするためにユーザーデフォルトにアクセスします。

アプリ拡張2(Cordova Plugin)の設定

プライバシーマニフェストとして、以下の設定が必要と指摘を受け設定しています。

  • NSPrivacyAccessedAPICategoryUserDefaults

    • 設定値:1C8F.1

      • アプリ自体と同じアプリグループのメンバーであるアプリ、アプリ拡張、App Clipsのみがアクセス可能な情報を読み書きするためにユーザーデフォルトにアクセスします。

同梱されたプライバシーマニフェスト(xode上での表示)

最後に

既にリリースされた製品の基盤の変更は、なかなかできないと思います。
そのような状況でも、プラットフォーム側の規約変更などに追従する必要があるため、可能な限り製品に影響が少ない対応が求められます。
当記事の内容が、プラットフォーム側の規約変更対応の1つの事例としてお役に立てれば幸いです。



この記事が気に入ったらサポートをしてみませんか?