- Shared/ layer compiled into the app and three new extension targets: rule snapshots in the app group, the usage ledger, monitoring-plan naming, and LimitEnforcement (shared, unit-tested event reactions) - RuleScheduler mirrors rules to the app group and reconciles DeviceActivity monitoring: one daily 00:00-23:59 activity per limit rule, with a cumulative usage-threshold event per budget minute for time limits; activities restart only when their configuration changes (a restart resets threshold accounting) - OpenAppLockMonitor (DeviceActivityMonitor): midnight budget resets, records usage minutes, shields at the budget, re-shields when a granted open session ends - OpenAppLockShieldConfig: open-limit shields show 'Opened X of N times today' with an 'Open (Y left)' secondary button - OpenAppLockShieldAction: an Open press spends one open, lifts the rule's shield, and starts the ~15-minute one-shot session - extensions are classic NSExtension app extensions (the ExtensionKit product type expects an @main entry and made the app fail to install); shield-store tracking moved to app-group defaults so the app and extensions see one consistent set - maps iOS 26's new .approvedWithDataAccess authorization status to approved (it previously fell through @unknown default to notDetermined) - shares the OpenAppLock scheme (Xcode dropped the autocreated one when targets were added)
20 lines
604 B
Swift
20 lines
604 B
Swift
//
|
|
// AppGroup.swift
|
|
// OpenAppLock
|
|
//
|
|
|
|
import Foundation
|
|
|
|
/// The app group shared by the app and its Screen Time extensions. Usage
|
|
/// tracking and rule snapshots live in its UserDefaults suite so the
|
|
/// DeviceActivity monitor and shield extensions can read and write them.
|
|
enum AppGroup {
|
|
static let identifier = "group.dev.bchen.OpenAppLock"
|
|
|
|
/// Shared defaults; falls back to standard defaults when the group
|
|
/// container is unavailable (e.g. entitlement not provisioned yet).
|
|
static var defaults: UserDefaults {
|
|
UserDefaults(suiteName: identifier) ?? .standard
|
|
}
|
|
}
|