【Swift】2024年5月から始まるプライバシー対応は、何をすればいい?

こんにちは!文系出身、個人開発独学中の「ゆとりくん」です????
当サイトでは自分が躓いた問題を基に、調査した内容と自分なりの解釈・解決策をまとめています。

今回のテーマは「2024年5月から始まるプライバシー対応は、何をすればいい?」です。
自分のような初心者の方にも分かりやすく読んで頂けるよう、できる限り丁寧にまとめました。参考になれば嬉しいです!

当ブログでは記事内で紹介する参考文献にアフィリエイトリンクを付与する場合がございます。それらはすべて著者が実際に利用している文献ですので、安心して参照いただけます。

※本記事は、著者が学習した内容をまとめたものとなります。内容の精査につきましては、執筆時の技術力で可能な限りの注意を払っていますが、万が一誤りがございましたらフォームからご一報いただけると幸いです。

スポンサーリンク
目次

この記事はこんな方におすすめ!

  • 2024年5月以降に必須となるプライバシー対応について知りたい
  • “プライバシーマニフェスト”とは何か知りたい
  • PrivacyInfo.xcprivacyの作成方法について知りたい
ゆとりくん

自分が躓いた点を中心に、初心者の方に向けて記事を書いています!

環境

この記事は以下のバージョン時点での情報をまとめています。

【XCode】15.3
【Swift】5.10
【iOS】17.1.2
【macOS】Sonoma 14.2

序章: Appleからのプライバシー勧告のメール

オリジナルアプリ『夢をかなえる1万時間タイマー』のアップデートを行うため、2024年3月16日にコードをApple Reviewに提出しました。

すると、以下のメールが返ってきました。

内容を要約すると、

「今回はOKにするけど、今のままでは5月1日以降NGになるよ。その理由は”プライバシーマニフェスト”に必要な情報を記載していないからだよ」

となります。

ゆとりくん

プ……プライバシーマニフェストってなんだ?
5/1以降リジェクトされるなんて困る……

……といった背景で、プライバシーマニフェストについて調査&対応を行うことにしました。

本記事では、プライバシーマニフェストに関する情報のまとめと筆者が実際に行った対応について言及しています。

プライバシーマニフェストって何?

プライバシーマニフェストの正体

Appleによると、プライバシーマニフェストとは「アプリに含まれるサードパーティのコードのプライバシー方針と関連情報の扱いを標準化された単一のフォーマットにまとめたもの」と説明されています。

誤解を恐れずシンプルに言い換えるとすれば「アプリが取り扱う個人情報をまとめて管理するために作成するファイル」になるかと、筆者は考えています。

プライバシーマニフェストの実態は、以下のような[PrivacyInfo.xcprivacy]という名称のプロパティファイルです。

今回筆者が作成したPrivacyInfo.xcprivacyの完成形。
アプリが取り扱う個人情報をプロパティファイルとして管理している。

プライバシーマニフェストを作成する必要がある人

プライバシーマニフェストを作成する必要がある人は「アプリの開発者」および「サードパーティ製SDKの開発者」です。

筆者のような個人アプリ開発者も、作成対象ということになります。

ちなみに「サードパーティ製のSDK」とはApple以外で開発が行われているSDKのことを指し、Googleが開発を行うFirebaseなどがこれに該当します。

プライバシーマニフェストを作成する目的

プライバシーマニフェストを作成する目的は、作成を行う主体によって異なります。

・アプリ開発者: アプリを利用するユーザに対して、アプリが利用する個人情報の種類とその利用目的を示すこと

・サードパーティ製SDK開発者: アプリの開発者に対して、SDKが利用する個人情報の種類とその利用目的を示すこと

アプリ開発者は、アプリに含まれるすべてのコードに責任を持ちます。そのため、内部で利用しているSDKがどのように個人情報を利用するかについても、ユーザに説明する義務があります。

しかし、ここで1つ問題が発生します。イメージしてみましょう。

アプリ個人開発者のAさんは、サードパーティ製のSDKを用いて開発したアプリをリリースするため、Appleにコードを提出することになりました。

App ReviewにあたってAさんは、アプリ”全体”が個人情報をどのように扱うかについて、ユーザに説明する義務があります。“全体”とは、Aさん自身が開発した機能だけでなく、内部で利用しているSDKの機能についても説明義務があることを意味します。

しかし個人開発者であるAさんにとって「サードパーティ製SDKが個人情報をどのように取り扱っているのか」までを把握することは難しく、正確なプライバシーマニフェストを作成することが困難です。

アプリ開発者

自分で実装した機能ならともかく、
サードパーティ製SDKがどのように個人情報を取り扱っているかなんて分からないよ……

そういった問題を解決すべく、Appleはサードパーティ製のSDKに対し、自らプライバシーマニフェストを作成しSDK自体に組み込むことを要求しています。

そうすることで、アプリ開発者はSDKに組み込まれたプライバシーマニフェストを参照し、アプリ全体のプライバシーポリシーを正確に作成することができます。

プライバシーマニフェストのSDKへの組み込みは、ユーザプライバシーに大きな影響を与えるとAppleが判断したサービスが対象となっています(2024年5月現在)。

対象となるSDKの一覧は、以下のサイトをご覧ください。

<参考>プライバシーマニフェスト組み込み対象のサードパーティ製のSDK一覧

対象外のSDKを用いる場合は、そのSDKの個人情報の取り扱い方法について開発者自身で調べなければなりません。

当記事をご覧いただいている方は基本的にアプリの開発者であると思われるため、これ以降の記述は「アプリ開発者が行うプライバシーマニフェスト対応」に内容を絞らせて頂きます。

プライバシーマニフェストに含める内容

プライバシーマニフェストには、おおまかに以下の情報を記述します。

  • アプリが収集する個人情報の種類と利用目的
  • 必須】アプリが使用する”理由必須API”の種類と利用目的

まず①について、”収集する個人情報の種類と利用目的”とはApp Review時に入力するプライバシー情報(Privacy Nutrition Labelとして表示されるもの)と同じ内容を指します。

App Review時に作成するPrivacy Nutrition Label。
これと同じ内容をプライバシーマニフェストとして宣言する。

同一の内容を2度記述するのは面倒に感じますが、現状「プライバシーマニフェスト記述する」→「 プライバシーマニフェストの内容に基づいて、App Store ConnectでPrivacy Nutrition Labelを作成する」という流れで作業を行う必要があります。

次に②について、”理由必須API”とは「個人情報の悪用を禁止するため、利用目的を宣言する必要があるAPI」のことです。理由必須APIを用いる場合にはプライバシーマニフェスト内に利用目的を明記する必要があります。

Appleはこのルールへの遵守を義務化しており、違反している全アプリを対象に2024年3月13日以降警告メールを送信、2024年5月1日以降は違反アプリの新規リリースおよびアップデートがApp Reviewにてリジェクトされます。

当記事の冒頭に掲載した警告メールも、筆者がプライバシーマニフェストに理由必須APIの利用目的を明記していなかったために受け取ったものです。

<参考>理由必須APIの導入背景について

(中略)ユーザーのプライバシー保護をさらに強化するために、フィンガープリント(App Storeでは禁止されている行為)に使用される可能性のあるAPIを参照するアプリでは、そのAPIの使用が認められる理由を選択し、プライバシーマニフェストでその使用について宣言することが求められるようになります。このプロセスの一環として、アプリではこうしたAPIの使用について正確に説明する必要があり、プライバシーマニフェストに記載されている理由に沿ってのみAPIを使用できます。

Apple Inc. “App Storeのプライバシーに関する最新情報”. AppleDeveloper, (参照 2024-05-15)

プライバシーマニフェストの作成方法

では実際に、プライバシーマニフェストを作成していきます。

前提として、『夢をかなえる1万時間タイマー』では、サードパーティ製のSDKであるGoogle Mobile Ads SDKと、2つの理由必須APIを利用しています。

そのため、「Mobile Ads SDKのプライバシー要件」と「理由必須APIの利用目的」をプライバシーマニフェストに含める必要があります。

※下記手順は、SDK自体にプライバシーマニフェストが組み込まれていない場合を想定しています。

手順1. PrivacyInfo.xcprivacyを作成する

プライバシーマニフェストの実態となる[PrivacyInfo.xcprivacy]を作成します。

STEP
テンプレートを選択する

Xcodeで[File] – [New] – [File…]を選択ます。

表示されるファイルテンプレート選択画面から、[Resourse]カテゴリの[App Privacy]を選んで[Next]を押します。

STEP
PrivacyInfo.xcprivacyファイルを作成する

ファイル名は初期のまま[PrivacyInfo.xcprivacy]とし、ターゲットプロジェクトにチェックをつけて[Create]します。

STEP
ナビゲーターで確認する

Xcodeのナビゲーターに[PrivacyInfo]が表示されます。これがプライバシーマニフェストの実態です。

GOAL
PrivacyInfo.xcprivacyの作成完了!

手順2. アプリが収集する個人情報の種類と利用目的の宣言

プライバシーマニフェスト(PrivacyInco.xcprivacy)に、アプリが収集する個人情報の種類と目的を記述していきます。

STEP
配列Privacy Nutrition Label Typesを作成する
[Key]列の[App Privacy Configuration]の右川に表示されている+ボタンを押下し、表示されるリストの中から[Privacy Nutrition Label Types]を選択します。

STEP
収集するデータごとに配列の要素を作成する

配列[Privacy Nutrition Label Types]を開くと、[Item0]というDictionary型の要素があります。

さらにその[Item0]を開くと、[Collected Data Type] [Linked To User] [Used For Tracking] [Collection Purpose]という4つのキーが確認できます。

次のステップ(STEP 2-3)で、これらの4つのキーにそれぞれバリューを設定していきます。
各キーはそれぞれ以下を意味します。

  • Collected Data Type: アプリが収集する情報の種類
  • Linked to User: その情報がユーザーに紐づけられるか
  • Used for Tracking: その情報がトラッキングに利用されるか
  • Collection Purposes: その情報を収集する目的は何か
STEP
バリューを設定する

各キーに対応するバリューを設定していきます。

Google Mobile Ads SDKが利用する個人情報とその用途は、以下のサイトで公開されています。

サイトによると、Mobile Ads SDKが利用する情報は全部で6種類です。

  • IPアドレス
  • クラッシュログ
  • パフォーマンスデータ
  • デバイスID
  • 広告データ
  • インタラクション情報

1つ目のIPアドレスから順に、[Collected Data Type] [Linked To User] [Used For Tracking] [Collection Purpose]の4つのキーにバリューを設定していきます。

IPアドレスの利用目的に関するGoogleの説明は、以下のとおりです。

・IP address, which may be used to estimate the general location of a device.
(IP アドレス: デバイスのおおよその位置を推定するために使用される可能性があります。)

Google LLC. “Apple App Store のデータ開示要件”. Google for Developers, (参照 2024-05-15)

この情報に従って、バリューを設定します。

[Collected Data Type]行の[Value]列の右端にある矢印をクリックしてリストを展開し、一覧の中から「おおよその位置」を意味する[Coarse Location]を選択します。

同様に[Linked to User] [Used for Tracking] [Collection Purposes]もサイトを参考にしながらバリューを設定し、4種類のキーを全て完了したら、IPアドレスに関する宣言は終了です。

同様の手順で②〜⑥全ての情報を入力します。
入力を終えた状態が以下となります。

GOAL
Privacy Nutrition Label Typesの宣言終了

手順3. Privacy Accessed API Typesの設定

理由必須APIの利用目的を宣言します。
当アプリでは宣言対象のAPIを2種類利用しているので、それぞれ理由を記述していきます。

STEP
配列App Privacy Configurationを追加する
[App Privacy Configuration]行の+ボタンをクリックして、[Privacy Accessed API Type]を追加します。

STEP
辞書にキーを追加する

配列[Privacy Accessed API Type]を開くと、[Item0]というDictionary型の要素があります。

[Item0]行の+ボタンを押し、[Privacy Accessed API Type]と[Privacy Accessed API Reasons]という2つのキーを追加します。

STEP
利用するAPIごとに配列の要素を作成する
[Privacy Accessed API Type]にAPIの種類を、[Privacy Accessed API Reasons]にAPIの利用目的をそれぞれ入力(リストから選択)します。

なお、宣言対象となるAPIと選択可能な利用目的の一覧については以下を参照します。

すべてのAPIに関する宣言が完了した状態が以下となります。

GOAL
Privacy Accessed API Typesの設定完了!

手順4. プライバシーレポートの生成

手順3までで完成したプライバシーマニフェストの全体は以下のとおりです。

このプライバシーマニフェストを元に、プライバシーレポートをpdf形式で出力します。

STEP
プロジェクトをアーカイブする
[Product] – [Archive]を選択し、プロジェクトのアーカイブを行います。

STEP
プライバシーレポートを出力する

その後、アーカイブ一覧画面でアーカイブしたプロジェクトを右クリックし[Generate Privacy Report]をクリックします。

レポートの出力を選択し、[Export]をクリックします。

STEP
レポートの中身を確認する

出力されたレポートを開くと、[PrivacyInfo.xcprivacy]に記述した内容が読みやすい形式で出力されていることが確認できます。

プライバシーレポートとして出力されるのは[Privacy Nutrition Label Types]の内容のみです。

GOAL
プライバシーレポートの出力完了

以上で、プライバシーマニフェストの作成は完了です!
出力したプライバシーレポートを元に、App Store Connectでプライバシー情報を入力し、AppReviewに望みます。

まとめ

上記の作業を行いAppReviewに提出したところ、冒頭の警告メールは送られて来なくなりました。
よってひとまずプライバシー対応を完了としましたが、Appleはプライバシーマニフェストを常に最新に保つよう呼びかけています。

アプリの機能を更新したり、サードパーティ製のSDKにアップデートされるたびにプライバシーマニフェストを見直し、実装と齟齬がない状態を保つ必要がありそうです。

以上、参考になれば嬉しいです!
まだまだ勉強中ですので、間違い等ありましたらフォームよりご連絡くださると助かります????????

参考文献

今回の記事を作成するために参考にした情報源です!
重要なものにはコメントを付与しています✨

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次