-
What's new in Screen Time API
Find out how you can build apps that help people manage their relationship with their device — all while putting privacy first. We'll take you through the Screen Time API and share how you can use features like core restrictions and device activity reports to create great experiences while providing measurable control for the device's owner, parents, and guardians.
Ressources
-
Rechercher dans cette vidéo…
-
-
3:12 - Request aAhuthorization
// APP: Request Authorization import SwiftUI import FamilyControls @main struct Worklog: App { let center = AuthorizationCenter.shared var body: some Scene { WindowGroup { VStack {…} .onAppear { Task { do { try await center.requestAuthorization(for: .individual) } catch { print("Failed to enroll Aniyah with error: \(error)") } } } } } -
5:13 - Managed settings store
// MONITOR EXTENSION: Handle Social category at start/end of interval import DeviceActivity import ManagedSettings class WorklogMonitor: DeviceActivityMonitor { let database = BarkDatabase() override func intervalDidStart(for activity: DeviceActivityName) { super.intervalDidStart(for: activity) let socialStore = ManagedSettingsStore(named: .social) socialStore.clearAllSettings() } override func intervalDidEnd(for activity: DeviceActivityName) { super.intervalDidEnd(for: activity) let socialStore = ManagedSettingsStore(named: .social) let socialCategory = database.socialCategoryToken socialStore.shield.applicationCategories = .specific([socialCategory]) socialStore.shield.webDomainCategories = .specific([socialCategory]) } } -
7:02 - Device activity report and filter
// APP: Top-level view import SwiftUI import DeviceActivity extension DeviceActivityReport.Context { static let pieChart = Self(“Pie Chart") } @main struct Worklog: App { private let thisWeek = DateInterval(...) @State private var context: DeviceActivityReport.Context = .pieChart @State private var filter = DeviceActivityFilter(segment: .daily(during: thisWeek)) var body: some Scene { WindowGroup { GeometryReader { geometry in VStack(alignment: .leading) { DeviceActivityReport(context: context, filter: filter) .frame(height: geometry.size.height * 0.75) } } -
7:24 - Device activity report
// REPORT EXTENSION: Configure Custom Device Activity Report import SwiftUI import DeviceActivity struct PieChartReport: DeviceActivityReportScene { let context: DeviceActivityReport.Context = .pieChart let content: (PieChartView.Configuration) -> PieChartView func makeConfiguration(representing data: [DeviceActivityData]) -> PieChartView.Configuration { var totalUsageByCategory: [ActivityCategory:TimeInterval] totalUsageByCategory = data.map(…) return PieChartView.Configuration(totalUsageByCategory: totalUsageByCategory) } } -
7:55 - Configure Custom Device Activity Report
// REPORT EXTENSION: Configure Custom Device Activity Report import SwiftUI import DeviceActivity struct PieChartView: View { struct Configuration { let totalUsageByCategory: [ActivityCategory:TimeInterval] } let configuration: Configuration var body: some View { // A complex view that renders a bar graph based on Aniyah’s usage per category. PieChart(usage: configuration.totalUsageByCategory) } } -
8:05 - Present custom report
// REPORT EXTENSION: Draw Custom Device Activity Report import SwiftUI import DeviceActivity @main struct WorklogReportExtension: DeviceActivityReportExtension { var body: some DeviceActivityReportScene { PieChartReport { configuration in PieChartView(configuration: configuration) } } }
-