如何在iOS上实现应用封锁器?Foqos基于FamilyControls与ManagedSettings的完整技术解析
发布时间:2026/10/24 16:57:35 锦皓数字建站

【免费下载链接】foqosFoqos allows you to lock apps behind the tap of a NFC tag or scan of a QR code. Free and open source alternative to Brick, Opal, ScreenZen, Unpluq, Scrolly, Blok and more!项目地址https://gitcode.com/gh_mirrors/fo/foqos点击查看免费下载Foqos是一款免费开源的 iOS 应用封锁器App Blocker它基于苹果官方的 FamilyControls 与 ManagedSettings 两大框架让你可以封锁 App 和网站并通过 NFC 标签、二维码、计时器或手动按钮来开始/结束专注会话。本文将带你从框架原理到源码实现完整解析 Foqos 是如何在 iOS 上实现系统级应用封锁的 ️。一、为什么选 FamilyControls 与 ManagedSettings在 iOS 上实现应用封锁器只有两条官方路径框架作用在 Foqos 中的用途FamilyControls屏幕使用时间 API提供应用/网站封锁的授权与执行能力支持 DeviceActivity 后台活动调度请求 Screen Time 授权、定时封锁ManagedSettings提供ManagedSettingsStore写入系统级屏蔽Shield规则真正挡住App 弹窗、拦截应用移除/安装两者的分工非常清晰FamilyControls负责许可 时机——你有权封锁什么、什么时间封锁ManagedSettings负责执行 界面——系统弹出自定义 Shield 挡住被封锁的 App。这是 Foqos 无需越狱、无需 MDM 就能实现系统级封锁的关键也是它与 Brick、Opal 等付费应用封锁器的共同技术底座。二、整体架构5 个协同工作的 TargetFoqos 由 5 个 Target 组成各自承担一个封锁链路环节foqos/ |-- Foqos/ # 主 AppUI、策略、封锁规则写入 |-- FoqosDeviceMonitor/ # DeviceActivity 监控扩展计时器触发点 |-- FoqosShieldAction/ # Shield 按钮动作扩展临时放行逻辑 |-- FoqosShieldConfig/ # Shield 外观定制扩展主题色/趣味文案 -- FoqosWidget/ # Widget 与 Live Activity主 App管理封锁 Profile、策略选择、写入 ManagedSettings 规则DeviceActivity 扩展DeviceActivityMonitorExtension.swift 监听系统计时活动的起止在intervalDidStart/intervalDidEnd回调中启动或解除封锁——这是到点自动封锁/解封的核心触发器两个 Shield 扩展定制被封锁 App 弹出时看到的系统界面后文详述。NFC计时器封锁策略NFC标签与计时器组合的专注封锁模式三、第一步请求 Screen Time 授权FamilyControls一切的前提是获得系统授权。Foqos 通过 RequestAuthorizer.swift 封装了这一步调用AuthorizationCenter.shared.requestAuthorization(for: .individual)请求个人模式授权即用户封锁自己的设备而非儿童账户通过authorizationStatus判断当前授权状态驱动 App 的引导页跳转。对应的开发者权限在 foqos.entitlements 中声明keycom.apple.developer.family-controls/key true/⚠️ 本地开发时需要 Apple Developer 账户申请 Screen Time 权限App ID 勾选 Family Controls capability这是该框架的硬性门槛。授权数据还通过 App Groupgroup.dev.ambitionsoftware.foqos见 Shared.swift在 App 与各扩展之间共享保证 Shield 扩展、DeviceActivity 扩展能读到同一个会话状态。四、第二步写入 ManagedSettings 屏蔽规则授权完成后真正的封锁动作发生在 AppBlockerUtil.swift 中。它持有一个独立的ManagedSettingsStorelet store ManagedSettingsStore( named: ManagedSettingsStore.Name(foqosAppRestrictions) )激活封锁时它会设置以下几类系统级规则属性含义store.shield.applications按 App 黑名单封锁或白名单模式.all(except:)store.shield.webDomains封锁指定网站域名store.webContent.blockedByFilter通过 Web Content Filter 扩展拦截网页内容含成人内容自动拦截store.application.denyAppRemoval严格模式下禁止卸载被封锁的 Appstore.application.denyAppInstallation禁止安装新 App这套黑名单 / 白名单Allow Mode/ 严格模式禁止移除 App三档设计正是应用封锁器对抗直接卸载绕过的经典做法。停止会话时deactivateRestrictions()会逐项置nil并调用store.clearAllSettings()清理全部规则。五、第三步DeviceActivity 实现到点自动封锁手动开始/停止太简单了真正体现技术含量的是无人值守的定时封锁。Foqos 使用 FamilyControls 的DeviceActivityCenterDeviceActivityCenterUtil.swift 负责向系统注册DeviceActivitySchedule开始/结束时间、是否重复例如每日 21:00–23:00 自动封锁系统在对应时间点唤醒DeviceActivity 扩展回调intervalDidStart→ 调用activateRestrictions()写入屏蔽规则时间窗口结束触发intervalDidEnd→ 调用deactivateRestrictions()解除封锁。由于由系统进程而非 App 本身驱动即使 Foqos 被杀进程、甚至设备重启计时封锁依然生效——这是纯 Timer 方案做不到的。类似的机制还被复用在临时放行Soft Unblock到期收回SoftUnblockGrantScheduler.swift 为每次放行 N 分钟单独注册一个计时活动到期自动收回权限暂停计时器、休息时段、策略倒计时等多类计时场景统一定义在 Timers/ 目录。六、第四步定制 Shield 界面与软解锁按钮当用户点击被封锁的 App 时系统会弹出 Shield 界面。Foqos 用两个扩展把它做成了产品亮点1. 外观定制—— ShieldConfigurationExtension.swift位于FoqosShieldConfig/继承ShieldConfigurationDataSource为每个被封锁的 App/网站返回自定义ShieldConfiguration支持用户主题色背景、Emoji 图标以及按日期 App 名稳定随机挑选的 17 条趣味劝返文案如Brain check你真的是想用这个 App还是无意识点了。2. 临时放行按钮—— ShieldActionExtension.swift位于FoqosShieldAction/继承ShieldActionDelegate拦截用户在 Shield 上的主按钮点击.primaryButtonPressed校验剩余放行额度后创建一条SoftUnblockGrant含过期时间并通过 DeviceActivity 注册到期自动收回——实现允许打开 5 分钟之后自动重新封锁的Soft Unblock策略且整个流程无需打开 Foqos 主 App。七、策略模式12 种启动/停止方式如何统一Foqos 把怎么开始、怎么结束抽象为策略模式核心协议见 BlockingStrategy.swift每个策略声明usesNFC、usesQRCode、hasTimer等能力位UI 由策略自行返回StrategyManager.swift 注册了 12 个策略实现手动、NFC 碰一下、二维码、NFC计时器、暂停计时器、NFC/QR 软解锁等统一入口startBlocking/stopBlocking分发到具体策略最终都收敛到AppBlockerUtil的激活/解除方法。NFC 与 Shortcuts 集成是它的特色玩法App 内可直接向 NTAG213 标签写入 Profile 深链接https://foqos.app/profile/UUID碰一下就切换封锁状态也可以配合 iOS Shortcuts 的 NFC 自动化开启 Run Immediately实现贴标签 启动专注。仓库还提供了 25mm 标签的 3D 打印 NFC 砖块/钥匙扣设计八、如何获取与开发 Foqos使用直接从 App Store 下载 Foqos授予 Screen Time 权限创建 Profile选择 App/网站 策略即可开始封锁。数据全部存于本机 SwiftData无账号、无广告、无订阅。本地开发git clone https://gitcode.com/gh_mirrors/fo/foqos cd foqos make build # 构建项目 make lint # Swift 格式检查开发环境要求 Xcode 15、iOS 17.6 SDK以及具备 Screen Time / NFC entitlements 的 Apple Developer 账户。想深入阅读源码建议按这个顺序AppBlockerUtil.swift → DeviceActivityMonitorExtension.swift → ShieldConfigurationExtension.swift → StrategyManager.swift。九、总结回顾 Foqos 的技术路线iOS 应用封锁器的实现骨架其实非常清晰FamilyControlsAuthorizationCenter拿授权DeviceActivityCenter管什么时候封锁ManagedSettingsManagedSettingsStore写屏蔽规则两个 Shield 扩展管封锁时用户体验App 层用策略模式封装 12 种 NFC/二维码/计时器/手动触发方式统一调用上述两套 API。想给自己的 App 加专注模式能力、或实现类似 Brick 的物理触发封锁Foqos 的 MIT 开源代码见 LICENSE正是一份现成的最佳实践教材。赞分享【免费下载链接】foqosFoqos allows you to lock apps behind the tap of a NFC tag or scan of a QR code. Free and open source alternative to Brick, Opal, ScreenZen, Unpluq, Scrolly, Blok and more!项目地址https://gitcode.com/gh_mirrors/fo/foqos点击查看免费下载相关推荐为什么值得从Brick换到Foqos免费开源NFC应用封锁器的完整对比指南为什么值得从Brick换到Foqos免费开源NFC应用封锁器的完整对比指南 Foqos 是一款 免费开源的 iPhone 应用封锁器 让你用一张 NFC 标PrimeFaces与Spring Boot集成构建现代化Java Web应用的完整指南PrimeFaces与Spring Boot集成构建现代化Java Web应用的完整指南 PrimeFaces是一个功能强大的Jakarta FacesJSUI库/组件[技术突破]如何在iOS设备实现永久应用侧载TrollInstallerX全解析技术突破 如何在iOS设备实现永久应用侧载TrollInstallerX全解析 价值定位重新定义iOS应用侧载技术 在iOS生态系统中应用侧载长期面临签名移动开发网络安全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。