Screen Time APIでAppleに直してほしい3つのこと

同じアプリブロッカーをiPhoneとAndroid向けに作っていて、ぶつかったこと。Thomas Willheim · 2026年9月30日

僕はHonorFitというアプリブロッカーを作っています。腕立て伏せをするとスクリーンタイムを稼げるアプリです(自己申告制で、カメラは使いません)。iPhoneとAndroidで同じアプリ、同じコンセプトで、コードもほとんど共通です。で、正直に言うと、Android版のほうが使いやすいんです。

Androidのほうがアプリのブロックが得意だから、ではありません。ブロックすること自体については、iOSのScreen Time APIは実はかなりしっかりしています。理由は、iOSが3つの点で開発者を縛っていて、そのどれもユーザーを守るためにあるようには見えないことです。というわけで、Appleにお願いしたいことと合わせて、僕のリストを書いておきます。誰のプライバシーも犠牲にしないものに絞ったつもりです。

(このAPIで開発するときの具体的な話は、別の記事にまとめました:Appleのドキュメントに書かれていないこと)

1. スクリーンタイムを使えるアプリは一度に1つだけ

たとえば、すでにBrick、Opal、one secのどれかを使っていて、HonorFitも試してみたいとします。iPhoneではそれができません。2つめのアプリがスクリーンタイムへのアクセスを求めても、iOSは許可を求めるダイアログすら出しません。Family Controls is available for only one application at a time(Family Controlsは一度に1つのアプリでしか使えません)という趣旨のエラーを返すだけです。僕自身もこのエラーを見ていますし、ほかの開発者も同じ問題にぶつかっています。

切り替えるには、設定 › スクリーンタイム › スクリーンタイムにアクセスできるAppを開いてもう一方のアプリをオフにし、場合によってはスマホを再起動する必要があります。生のエラーメッセージは普通の人には何の意味もないので、HonorFitは今ではこのエラーを検出して、手順を案内するようにしています。

iPhoneのHonorFitに表示されるアラート:別のアプリがスクリーンタイムを使用中です。iOSではスクリーンタイムを制御できるアプリは一度に1つだけです、という説明と、設定でもう一方のアプリをオフにする手順
ほかのアプリがすでにスクリーンタイムへのアクセス権を持っているときに、iPhoneユーザーがHonorFitで目にする画面。iOS自体はアプリにエラーを渡すだけなので、この説明はHonorFitが独自に用意したものです。

不思議なのはここです。AppleはWWDC22でこの種の認可を紹介したとき、保護者による管理のための認可とは違って、個人用の認可はデバイス上のいくつのアプリでも使える、と説明していました。今の挙動はそうなっていませんし、そのことが書かれたドキュメントも見つけられませんでした。

これがユーザーのためにならない理由:人はツールを組み合わせて使います。仕事中の集中セッションにはBrickを、夜のスクロール時間を稼ぐにはHonorFitを、という人もいるでしょう。Appleには、制限を組み合わせるためのルールがすでにあります。複数のManagedSettingsStoreが同じ項目を設定した場合、Appleの言葉を借りれば “the most restrictive setting always wins”(いちばん厳しい設定が常に優先される)です。同じことをアプリ間でもやれば両方使えるようになりますし、それならスマホの制限は強くなることはあっても、弱くなることはありません。

お願いしたいこと:WWDC22で説明されていたとおり、複数のアプリが個人用のスクリーンタイムの認可を持てるようにして、シールドは同じ「いちばん厳しい設定が優先」のルールでまとめてほしい。制限に本当の理由があるなら、それをドキュメントに書いて、アプリがユーザーに説明できるようにちゃんとしたエラーコードを用意してほしいです。

2. アプリ選択画面が使いにくく、アプリ側でカスタマイズもできない

iPhoneでブロックするアプリを選ぶには、AppleのFamilyActivityPickerを使うしかありません。システムのシートで、ヘッダーとフッターに1行ずつテキストを入れられる以外、アプリからは何も変えられません。開くとカテゴリの一覧(ソーシャル、ゲーム、エンターテインメント...)が表示され、カテゴリをタップして中に入らないと実際のアプリは出てきません。Androidでは一覧を自分で作れるので、HonorFitはインストール済みのアプリを、過去24時間の使用時間が長い順に表示しています。

iOSのスクリーンタイムのアプリ選択画面:アプリのカテゴリが並び、Health & Fitnessを展開して中のアプリを表示している
iPhone:Appleのピッカー。まずカテゴリ、使用時間の表示なし、どのアプリから開いても同じ画面。
HonorFitのAndroid版アプリ選択画面:過去24時間の使用時間つきでアプリが並び、よく使うアプリほど上にある
Android:HonorFit独自の一覧。使用時間順なので、いちばん問題のアプリがいちばん上に来ます。

iOS版で気になるのは2点です。

これはプライバシーを一切犠牲にしません。ピッカーはiOSが自分のプロセスで描画しています。アプリにはその中身が見えず、受け取るのは選ばれたものを表す中身の見えないトークンだけです。HonorFitは、あなたがどのアプリを選んだのか文字通り分かりません。つまり、iOSがピッカーの中に使用時間を表示しても、アプリが知ることは何もありません。AppleはすでにDeviceActivityReport Extensionで似たことをやっています。アプリからは読めないサンドボックスの中で、使用状況を表示する仕組みです。

お願いしたいこと:
  1. ピッカーでカテゴリごと選べるようにするか、アプリだけにするかを指定できるオプション。アプリブロッカーが、うっかりカテゴリを選んでしまうことのない「アプリだけ」の一覧を出せるように(Webサイトを使わないならそれも非表示にできるように)。
  2. 各アプリの横に計測済みの使用時間を表示し、その順に並べるオプション。描画はiOSが行い、アプリには数値が一切渡らない形で。

3. 残り時間の正確なカウントダウンが見られない

HonorFitでは、稼いだ時間はブロック中のアプリを実際に使っているあいだだけ減ります。なので、当然表示したいのはカウントダウンです。「残り12:34」と表示され、スクロール中は減っていき、アプリを離れると止まる、というものです。

Androidでは簡単です。HonorFitのバックグラウンドサービスが毎秒どのアプリが画面に出ているかをチェックし、通知にはAndroid標準のカウントダウンタイマーを使っているので、通知パネルが毎秒勝手に描き直してくれます。通知パネルを下ろせば、残り時間が秒単位で正確に分かります。

iPhoneではそれができません。理由はこうです。

というわけで、Androidユーザーには本当の数字が見えるのに、iPhoneユーザーにはおおよその目安しか出せません。

お願いしたいこと:DeviceActivityのイベントで、iOS自身が描画するカウントダウンを動かせるようにしてほしい。通知でも、ライブアクティビティでも、シールドでもいいので、監視対象のアプリが画面に出ているあいだだけ進むものを。iOSはすでにその使用時間を秒単位で追跡しているので、アプリに新しい情報を渡さなくても時間を表示できるはずです。モニターExtensionに「ブロック中のアプリが開かれた/閉じられた」という単純なコールバックがあるだけでも、ほとんど解決します。

以上です

Appleの名誉のために言っておくと、ここのプライバシーモデルは本当によくできています。アプリは、あなたが何をブロックしたのかも、どれだけ使っているのかも知りません。ここが変わってほしくはありません。上の3つはどれも、それを変えるものではありません。iPhoneのアプリを、Android版がすでにそうであるのと同じくらい役に立つものにしてくれるだけです。

Screen Time APIで開発していて、どれかが欲しいと思った人は、ぜひフィードバックアシスタントで報告してください。僕の理解では、同じ内容の報告がたくさん届くことで気づいてもらえるようです。アプリを試してみたいだけなら、HonorFitはiPhoneとAndroidで無料です。気に入ってもらえたらうれしいです!

あわせて読みたい