Dunfey · Hotel WWDC as data, est. 1983
Front desk everything
Years
Topics

2022 App ServicesBusiness & EducationEssentialsSystem Services

WWDC22 · 10 min · App Services / Business & Education / Essentials / System Services

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.

Watch at developer.apple.com ↗

Transcript all transcripts

Code shown on screen · 6 snippets

Request aAhuthorization swift · at 3:12 ↗
// 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)")
                        }
                    }
                }
        }
    }
Managed settings store swift · at 5:13 ↗
// 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])
    }
}
Device activity report and filter swift · at 7:02 ↗
// 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)
                    
       
    }
}
Device activity report swift · at 7:24 ↗
// 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)
    }
}
Configure Custom Device Activity Report swift · at 7:55 ↗
// 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)
    }
}
Present custom report swift · at 8:05 ↗
// 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)
        }
    }
}

Resources