【iOS】Screen Time APIを使ったアプリを申請するときの落とし穴

## Screen Time APIとは

Screen Time APIとは、iPhoneやiPadの設定アプリにあるスクリーンタイムの機能を開発者が使用するためのAPIです。
親が子どものiPhoneの使用制限をするペアレンタルコントロールに使用したり、アプリをどのくらい使用したかをチェックすることができます。

WWDC21で、Screen Time APIとして開発者に開放されました。
[Screen Time APIについて - WWDC21 - ビデオ - Apple Developer](https://developer.apple.com/jp/videos/play/wwdc2021/10123/)

そして、WWDC22では自分の端末の制限をコントロールする機能が追加されました。
[Screen Time APIの最新情報 - WWDC22 - ビデオ - Apple Developer](https://developer.apple.com/jp/videos/play/wwdc2022/110336/)

詳しくは、WWDCのセッションをご覧ください。
ざっくりと概要を知りたいという方は、こちら↓の記事がわかりやすいです。
[Screen Time API まとめ - Satsuki Hashiba - Medium](https://shiba1014.medium.com/screen-time-api-%E3%81%BE%E3%81%A8%E3%82%81-a6608f643623)

## Family Controlsとは

Screen Time APIにはいくつか主要なAPIが含まれていますが、その中のひとつでありプライバシーポリシーの核となるのが[Family Controls](https://developer.apple.com/documentation/familycontrols)です。

>Family Controlsはゲートウェイとして Screen Time APIへのアクセスを許可します。ペアレントコントロールAppの削除を防ぎ AppやWebサイトを識別する Opaqueトークンでユーザープライバシーを守ることができます。

[Screen Time APIの最新情報 - WWDC22 - ビデオ - Apple Developer](https://developer.apple.com/jp/videos/play/wwdc2022/110336/)より引用

## Family Controlsを使うためには使用許可が必要

上記の通りFamily ControlsはScreen Time APIのプライバシーを守るための重要なAPIです。そのため、アプリで使用する場合には、下記のリクエストフォームで申請をしてAppleから使用許可をもらう必要があります。

[Family Controls & Personal Device Usage Entitlement Request - Contact Us - Apple Developer](https://developer.apple.com/contact/request/family-controls-distribution)

使用許可をもらってからリリースするまでについては、こちら↓の記事が詳しいのでぜひご覧ください。
[Screen Time APIを用いたiOSアプリをストアにリリースするまで #Swift - Qiita](https://qiita.com/segawanko/items/22ee9e7766eb1450bad1)

## 落とし穴に落っこちた

前置きはこのくらいにして、ここからが本題です。

わたしが開発した集中アプリのFocus Rainbowは、Screen Time APIを使っています。

ちょっと宣伝タイムです。
Focus Rainbowは、今集中したいアプリだけを実行することができます。  
便利なタイマー機能や、楽しいキャラクターが集中をサポートしてくれるので、ぜひお試しください！

https://apps.apple.com/jp/app/focus-rainbow/id6569223924

宣伝タイム終わりです。

Focus Rainbowでは本体のFocusRainbowとApplication ExtensionのShieldActionとShieldConfigurationという三つのTargetがあります。

![Target.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38924/db395efa-551c-2529-0e48-b02351083499.png)

ShieldActionとShieldConfigurationは、以下のスクリーンショットのようなスクリーンタイムのシールド画面の実装を行うものです。

![シールド画面.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38924/b4c701fa-46f3-1acb-03eb-552ea2e5d366.jpeg)

Family Controlsの申請をするときに、本体のFocusRainbowターゲットだけ申請すればいいだろうと思って申請しました。
無事に許可が降りたので、Additional CapabilitiesでFamily Controls(Distribution)をチェックしてProvisioning Profileを作成してからArchiveしてValidateしたら……

![Validate Error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38924/125194ad-b17d-8bed-fd27-ac0b6d74c1ac.png)

なんとエラーになってしまいました！

そして落とし穴に落っこちたことに気がついたのです。
Family Controlsの申請をするときは、本体のターゲットだけでなくApplication Extensionのターゲットも申請しないといけないことに。

というわけで、ShieldActionとShieldConfigurationの二つを追加で申請しました（申請フォームのBundle IDの入力欄はひとつしかないので二回に分けて申請しました）。

紆余曲折ありましたが、追加分も許可が降りて無事にFocus Rainbowをリリースすることができました。ふう、よかった。

## おまけ

こちら↓の記事では、Family Controlsの申請は時間がかかるということが書かれています。
[Screen Time APIを用いたiOSアプリをストアにリリースするまで #Swift - Qiita](https://qiita.com/segawanko/items/22ee9e7766eb1450bad1)

>申請の結果メールが届くまでなんと５週間もかかった
>追記：2023.5現在デベロッパーフォーラムには２ヶ月待っても返信がないとの書き込みもある

わたしが申請した当時（2024年10月）は、2週間で結果のメールが届きました。
1年以上経って審査の手続きが効率化されたのかもしれません（アプリの審査も年々早くなってますしね）。

Screen Time APIを使ったアプリを開発するときは、落とし穴に落っこちないように気をつけてください（そんなことするのはわたしだけかもですが……）。

そして、仕事に勉強に趣味に瞑想に推し活に集中したい方は、ぜひFocus Rainbowを活用して集中モードを手に入れてください。

https://apps.apple.com/jp/app/focus-rainbow/id6569223924