Chatwork Creator's Note

ビジネスチャット「Chatwork」のエンジニアとデザイナーのブログです。

ビジネスチャット「Chatwork」のエンジニアとデザイナーのブログです。

読者になる

Privacy Manifests対応をしてみての学び

こんにちは!!23新卒でiOSエンジニアをしている中山 龍(@ryu_develop)です! 最近は部屋に緑を求めて植物を育てるのがマイブームです。レモンの果実に入っていた種を発芽させようと頑張っており、15個ほど植えた種から3つの芽が生えてきました!🌱大切に育てて観葉植物として楽しめたらいいなと思っています🍋

さて、iOS開発者の皆様、Privacy Manifests対応の期限が近づいてきましたが、対応状況はいかがでしょうか? ChatworkのiOSチームでは現在、Privacy Manifestsへの対応を進めているところであり、自分もメイン担当として取り組ませていただいているところです。この記事ではPrivacy Manifestsの概要や対応を行ってきて得た知見、大変だったポイントなどを紹介できればと思います。 また、iOSアプリの機能によって影響が出る部分なので、ぜひプロダクトマネージャーやマーケティングの方など、iOSアプリの機能追加・データ活用をする立場の方々にもご覧いただき、iOSアプリのプライバシーに対する知識を深めていただければと思います。

(この記事は mobile.stmn #4 というイベントにLT登壇させていただいた際の資料の内容を中心に、一部内容を付け加えたものとなっています。登壇資料はこちらです)
(注意: 本記事・登壇資料内に登場する設定値は設定例であり、実際のChatworkアプリのものではありません。)
(注意: 本記事の情報は2024年2月のものです。執筆以降に方針が変更される場合がございます。)

Privacy Manifestsとは?

Privacy ManifestsはiOSアプリの新しいプライバシー機能で、2023年のWWDCで発表されました。内容としてはiOSアプリから収集したデータをどのように使用するかを .xcprivacy ファイルに記載する物となっています。また、Appleからは2024年の春までに対応が必要とアナウンスされており、未対応のアプリはリジェクトの対象となります。 リジェクトリスクもあるということで、2月現在だと多くのiOS開発者はこの対応に追われている頃ではないでしょうか?

Privacy Manifestsの構成

Privacy Manifestsは大きく以下の4つの内容から構成されています

  1. Privacy Accessed API Types
  2. Privacy Nutrition Label Types
  3. Privacy Tracking Enabled
  4. Privacy Tracking Domains

各項目を1つずつ解説していきます

Privacy Accessed API Types

この項目は『フィンガープリントに誤用される可能性があるAPIを使用する際には、そのAPIの使用理由を記載する』というものです。

フィンガープリント

そもそも、フィンガープリントとは『デバイスやユーザーを特定しようとするデバイス信号にアクセスすること』です。

required reason API

Appleが一覧として公開している以下のAPI(required reason API)はフィンガープリントに誤用される可能性があるため、使用する際には『使用するAPIの種類』『使用する理由』をセットでPrivacy Manifestsへ記載する必要があります。

required reason API一覧

  • File Timestamp
  • System Boot Time
  • Disk Space
  • Active Keyboards
  • User Defaults

この中で特にメジャーなのは User Defaults ではないでしょうか?多くのアプリで使用されているので、Privacy Accessed API Typesの対応が必要なアプリが多いのではないかと思います。

記入例

まず、Privacy Accessed API Types配下に必要に応じてItemを追加し、その中に、 Privacy Accessed API として使用している required reason API のタイプを、 Privacy Accessed API Reasons としてその使用理由を選択式で記載します。

Privacy Accessed API Types 記入例
Privacy Accessed API Reasons に記載できる選択肢の説明はこちらの公式ドキュメントにまとまっていますので、ぜひご参照ください。

Privacy Nutrition Label Types

この項目は『収集しているデータタイプとそのデータがどのように使用されているか・ユーザーとリンク・トラッキングしているかなどを記載する』というものです。

収集

Appleが指すデータの『収集』として以下のことが書かれていました。 『「収集」とは、デバイスからデータを送信し、送信されたリクエストにリアルタイムで対応するために必要な期間よりも長い期間、デベロッパまたはサードパーティパートナーがそのデータにアクセスできるようにすることを指します。』 (App Storeでのアプリのプライバシーに関する詳細情報の表示 - データの収集 より引用)

この記述を参考に収集かどうかの例を挙げてみると…
収集していない

  • データを外部に送信せずに、iOSアプリ内で処理して破棄する
  • iOSアプリからサーバーへデータを送信し、そのデータを利用してレスポンスデータを作成、レスポンスを返したらそのデータを破棄する

収集している

  • iOSアプリからサーバーへデータを送信し、サーバーがDBなどに保存して永続化する

データの種類

Privacy Nutrition Label Typesとして記載するデータの種類の一例としてのようなものがあります。

各種データタイプ(例)
こちら以外のものも合わせて全てで約40種類ほどあり、こちらの公式ドキュメントにまとめられています。また、App Storeでのアプリのプライバシーに関する詳細情報の表示 - データの種類 には各データが指し示すの内容に関して日本語でまとまっているのでこちらもご参照ください。

収集するデータに対する記載事項

収集しているデータに対して以下の3点を記入する必要があります

  1. Linked to User
  2. Used for Tracking
  3. Collection Purposes

また、3. Collection Purposesは全6項目ある収集理由の選択肢から当てはまるものすべてを選択する必要があります。

収集するデータに対する記載事項
各項目の参考になる公式日本語ドキュメントは以下のものです

記入例

Privacy Nutrition Label Types に必要に応じてItemを追加し、各種記載事項を選択式で記入します。

記入例

Privacy Tracking Enabled

この項目は『アプリまたはサードパーティSDKがApp Tracking Transparency フレームワークを使用しているかどうかを記載する』というものです。

App Tracking Transparency(ATT)

ATTとは、『ユーザーをトラッキングしたり、ユーザーのデバイスの広告識別子にアクセスしたりする際に許可を得るために使うフレームワーク』のことです。 この項目はATTフレームワークを使用しているかどうかをYes / No で記載します。

記入例

Privacy Tracking Enabled の項目にATTフレームワークを使っているかをYes / No で選びます

記入例

Privacy Tracking Domains

この項目は『トラッキングに使用するドメインの一覧を記載する』というものです。

記載すべきドメインの調べ方

Instruments の Point of Interestsを使って調べることができます。WWDC23のGet started with privacy manifestsの動画の中でも画面を出しながらお話されているので、調べ方の参考になると思います。

記入例

Privacy Tracking Domains の項目に必要に応じてItemを追加し、トラッキングに使用するドメインを記載します

記入例

大変だったポイント

ここからは実際にPrivacy Manifestsの対応を行ってみて大変だったポイントをいくつか紹介したいと思います。

1. Privacy Manifests対応が完了していないサードパーティーライブラリがある

サードパーティーライブラリもPrivacy Manifestsへの対応をする必要があるが、現在(2月下旬)になってもライブラリ開発者側の方でなかなか対応が行われていないものがチラホラ.…..
内部の仕組みがわからないライブラリの場合、Forkなどを使って対応することもできないので、こちらで対応する手段がないです。できても開発者に問い合わせるぐらいでしょうか。
ちなみに、すべてのサードパーティライブラリがPrivacy Manifestsに対応する必要があるわけではなく、『データを収集しない』『required reason APIを使用しない』という2つを満たす場合には、そのライブラリは対応を行う必要はないようです。
参考: Privacy manifest for multiple targets - Developer Forums

2. 収集したデータが社内でどのように利用されているかを調査するのが大変

会社などの組織単位で開発し、アプリ提供している場合、アプリから取得したデータをどこの部署・チームがどう利用しているかを調べるのが大変でした。組織で開発しているアプリのデータを開発者以外の社員が利用する例として、マーケティング活動や新機能のための分析・効果計測に利用するということもあるのではないでしょうか?
アプリから収集したデータがどのように利用されているかを調査するために、データの保存先やそのデータの特性などから関連のありそうな部署・チームを予測し、そこの方に質問・ヒアリングを行うことで調査をしました。

3. Privacy Manifestsに関する情報が少ない

Privacy Manifestsはまだ発表されて1年も経っておらず、情報に関してもWWDCの発表やいくつかの公式ドキュメントが中心で、他社事例のような記事が増えてきたのも最近の話です。なので、対応を行う中で知りたいこと・疑問があってもなかなか検索でたどり着けないことも多くありました。 Privacy Manifestsに関して直接関連のあるものでなくても、プライバシー関連のApple公式ドキュメントを読むことで、Appleのプライバシーに対する考えや認識を知ったり、Developer Forumsで自分の疑問と同じような質問がないかを調べることで、疑問を解消しながら対応を進めました。

Privacy Manifests対応をしてみての感想

新卒入社してiOSエンジニア1年目のタイミングでAppleの新方針に対応するという役割を任せていただき、自分の中でとても大きな経験となりました。
特に『データがどのように利用されているかを調べる』というのは、非開発者も含めた組織で開発しているからこそ必要となる作業でしたし、その調査を進める中で、お話したことのない部署外の方々とチャットやミーティングでお話をさせていただく貴重な機会となりました。
また、iOSアプリのプライバシーに関しても知見が深まったことで『この機能を実装するためにプライバシー周りの設定を変更する必要がありそうだ』ということを感じ取れたりと、プライバシーの観点を持って開発に取り組めるということを感じています。
あと半年もしないうちにWWDC24が開催され、Appleから今回のPrivacy Manifestsのようにまた新しい方針が発表される可能性もあります。そのときには、今回のPrivacy Manifestsに対応した経験を活かして、新たな方針への対応作業もできればと思います。

【本記事に掲載した各種リンク集】

⭐️Chatworkのモバイルアプリケーション開発部は一緒に働く仲間を募集しています!⭐️

recruit.chatwork.com

hrmos.co

hrmos.co