◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Expo SDK 58 が 10/15 に正式リリースされました(Beta は 09/15 から)。上げる前に依存の対応状況を確認しましょう●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Expo SDK 58 が 10/15 に正式リリースされました(Beta は 09/15 から)。上げる前に依存の対応状況を確認しましょう●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-04-28上級

Rork Max でスクリーンタイム制御アプリを実装する手順 — Family Controls / DeviceActivity / ManagedSettings

Rork Max でスクリーンタイム系アプリを実装する実践ガイド。Family Controls の認可、DeviceActivity の時間帯監視、ManagedSettings によるアプリブロックを Rork のカスタムネイティブモジュールに組み込む全工程を、ハマりどころとともに解説します。

Rork Max236ScreenTime APIFamily ControlsDeviceActivityManagedSettingsiOS開発15ネイティブモジュール9

✦ プレミアム記事

スクリーンタイム制御アプリ — 集中力管理、ペアレンタルコントロール、SNS依存からの脱却 — は、ストアで毎月のように新しいヒット作が生まれている数少ないジャンルの一つです。私自身、Rork で個人開発を続けるなかで「特定のアプリを時間帯で自動ロックするだけのシンプルなアプリ」を作ろうとして、最初の壁にぶつかりました。Rork のデフォルトテンプレートでは、これらのアプリの根幹をなす Apple のフレームワーク(Family Controls / DeviceActivity / ManagedSettings)が一切使えないのです。

理由は明確で、これら3つのフレームワークはいずれも「Family Controls エンタイトルメント」と呼ばれる Apple から個別申請して取得する特権が必要であり、加えて App Extension(Background Process)との連携が前提になっているためです。Rork Max のように React Native + Expo ベースで動く環境では、デフォルトで Native Module が用意されていない領域に踏み込むと、自分でカスタムモジュールを書く必要があります。

このガイドでは、私が実際に Rork Max で「フォーカスタイム」系アプリを実装する過程で得た知見を、エンタイトルメント取得から App Store 審査通過まで、全工程を通して解説します。React Native のカスタムネイティブモジュール経験がある方を対象としていますが、初めての方でも順を追って実装できる構成にしています。

なぜ Rork デフォルトではスクリーンタイム系アプリが作れないのか

Rork Max の標準ビルドが提供しているのは、Expo SDK にバンドルされている標準的な機能群(カメラ、通知、位置情報、ストレージなど)です。スクリーンタイム制御に必要な3フレームワークは、ここに含まれていません。

具体的には、以下の制約に直面します。

  • FamilyControls フレームワークは Apple のプライベート許可モデルで動作し、エンタイトルメント com.apple.developer.family-controls が無いとビルド自体が通りません
  • DeviceActivity フレームワークは「時間帯になったらコールバックする」処理を、メインアプリではなく App Extension(DeviceActivityMonitor Extension)として実装することを要求します
  • ManagedSettings でアプリをブロックする処理は、メインアプリ・Extension の双方からアクセスできる App Group 経由でのデータ共有を前提にしています

Rork で「単なる UI 制御アプリ」を作る分には Vibe Coding でほぼ完結できますが、スクリーンタイム制御は OS レベルの権限・Extension・データ共有という3つのレイヤーを跨ぐため、必然的にネイティブモジュールの実装と Xcode 側の設定が発生します。ここを誤魔化さずに、最初から「Rork + Custom Native Module + Extension Target」という構成で組むのが、結局いちばんの近道でした。

全体アーキテクチャ — 3つのフレームワークの役割を整理する

実装に入る前に、それぞれの役割を整理しておきましょう。混同するとあとで必ず詰まります。

  • FamilyControls は「ユーザーから利用許可を得る」「ユーザーに制御対象アプリを選ばせる」役割を担います。FamilyActivityPicker がコアの SwiftUI コンポーネントで、ユーザーがアプリを選んだ結果は FamilyActivitySelection というプライバシー保護された不透明なトークンとして返ってきます
  • DeviceActivity は「特定の時間帯(スケジュール)になったら起動する」「特定のしきい値(例: 30分使ったら)に達したらコールバックする」というスケジューリング機構です。実体は App Extension で、メインアプリが起動していなくても OS から呼び出されます
  • ManagedSettings は「実際にアプリをブロックする」「シールド画面を出す」役割を担います。ManagedSettingsStore に対して FamilyActivitySelection を渡すと、選ばれたアプリに即座にシールドがかかります

つまり「ユーザーに対象を選ばせる(FamilyControls)→ スケジュールを登録する(DeviceActivity)→ 時間が来たら自動的にブロック(ManagedSettings)」という3段ロケットの構造です。

Rork プロジェクトに組み込む構成

私が落ち着いた構成は次の通りです。

  • メインアプリ(Rork Max ビルド): React Native UI、カスタムネイティブモジュール経由で Swift 側の API を呼び出す
  • Native Module(Swift): FamilyControls の認可リクエスト、ピッカー表示、スケジュール登録、シールド適用のブリッジ
  • DeviceActivityMonitor Extension(Swift): メインアプリとは別ターゲット。スケジュール開始/終了時のコールバックを受け、ManagedSettings 経由でシールドを適用
  • App Group: group.{your-bundle-id}.shield をメインアプリと Extension の両方に追加し、UserDefaults(suiteName:) で FamilyActivitySelection を共有
✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦Rork デフォルト構成ではスクリーンタイム系アプリが作れない理由を理解し、必要な3つの Apple フレームワークを Rork Max のカスタムネイティブモジュールに組み込む全手順を手に入れられる
✦FamilyActivityPicker・DeviceActivityCenter・ManagedSettingsStore それぞれの動作確認済みコードと、App Group 設計・エンタイトルメント取得・審査通過のための具体的な対策を習得できる
✦『FamilyActivitySelection が他アプリでは扱えない』『App Extension とのデータ共有でブロックが効かない』など、5つの典型的な落とし穴を回避し、本番運用できるスクリーンタイム制御アプリを公開できるようになる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ 開発ツール2026-05-17
Rork Max の SwiftUI 機能を壁紙アプリ開発で検証した結果 — 実際に動いた機能と手を入れた機能
運用中の壁紙アプリの本番コードを基準に、Rork Max の SwiftUI ネイティブ生成を検証しました。そのまま使えた機能、手を入れた機能、生成を諦めた機能を、動くコードと実機での計測値とともにお伝えします。
⬡ 開発ツール2026-04-27
Rork Max × Apple TipKit 実装ガイド — オンボーディング離脱を減らすアプリ内ガイダンス設計
Rork Maxのネイティブモジュール経由でiOS 17以降のTipKitを組み込み、オンボーディング離脱を減らすアプリ内ガイダンスを設計します。Eligibilityルールによるタイミング制御、SwiftUI連携、4言語運用のローカライゼーション、CloudKit同期まで実装します。
⬡ 開発ツール2026-07-18
文字サイズ最大とドイツ語で、生成された画面は静かに詰まる — Rork Max の SwiftUI にレイアウト耐性の検証を通した記録
Rork Max が生成した SwiftUI 画面を疑似ローカライズと最大文字サイズに通し、どこから詰まるかを機械的に洗い出した記録です。ViewThatFits・ScaledMetric・layoutPriority の使いどころと、再生成のたびに回帰を捕まえるスナップショット検証を、実際の数値とともにまとめました。