Hello, I have an app that you can select apps and then start monitoring.
When I restrict the apps by button click, and monitor the activity, the scheduled time works and intervalDidEnd cancels shielding apps.
But when I schedule shielding apps, intervalDidStart doesn't start shielding.
What am I missing here?
I have already added FamilyControls capability.
import SwiftUI
@main
struct TestingScreenTimeAPIApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
import SwiftUI
struct ContentView: View {
@StateObject var model = MyModel.shared
@State var isPresented = false
var body: some View {
VStack {
Button("Select Apps") {
isPresented = true
}
.familyActivityPicker(isPresented: $isPresented, selection: $model.selectionToDiscourage)
Button("Start monitoring") {
model.startMonitoring()
}
.padding()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
import Foundation
import FamilyControls
import DeviceActivity
class MyModel: ObservableObject {
static let shared = MyModel()
private init() {}
var selection: FamilyActivitySelection? = nil
var selectionToDiscourage = FamilyActivitySelection() {
willSet {
selection = newValue
}
}
func startMonitoring() {
let intervalStart = DateComponents(hour: 11, minute: 09)
let intervalEnd = DateComponents(hour: 13, minute: 14)
let schedule = DeviceActivitySchedule(
intervalStart: intervalStart,
intervalEnd: intervalEnd,
repeats: true)
let center = DeviceActivityCenter()
do {
try center.startMonitoring(.activity, during: schedule)
} catch {
print ("Error: \(error)")
}
}
}
extension DeviceActivityName {
static let activity = Self("activity")
}
import UIKit
import FamilyControls
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
Task {
do {
try await AuthorizationCenter.shared.requestAuthorization(for: .individual)
} catch {
print("Error: \(error.localizedDescription)")
}
}
return true
}
}
import DeviceActivity
import FamilyControls
import ManagedSettings
class DeviceActivityMonitorExtension: DeviceActivityMonitor {
let store = ManagedSettingsStore()
override func intervalDidStart(for activity: DeviceActivityName) {
super.intervalDidStart(for: activity)
let model = MyModel.shared
if model.selection != nil {
let applications = model.selection!.applicationTokens
store.shield.applications = applications.isEmpty ? nil : applications
}
}
override func intervalDidEnd(for activity: DeviceActivityName) {
super.intervalDidEnd(for: activity)
store.shield.applications?.removeAll()
}
}
Post
Replies
Boosts
Views
Activity
Hi, I'm developing an app like Opal which uses Screen Time API. So the user should be able to create modes to activate it later, like an alarm. There's a list of durations and mode names and there should be selected apps, so whenever the user turns the switch on, app restricting should be started. How can I save the selected apps in FirebaseFirestore, and then get that data to restrict the apps whenever the user turns the switch on? I've tried to save it as Strings, but I can't convert it later to ApplicationToken to insert it to Set.
Hi, I added the ShieldConfiguration Extension target to my app to customize the shield UI but there are only a few things we can change like Label, backgroundBlurStyle, backgroundColor, icon, etc. Is it possible to customize the whole UI by creating a new one, I want to add an animation for example, is it possible or we can only change the text, icon, button, and background, that's all?
Hello, my client invited me to his account as an admin. But his account is not an Organization one, it Individual. My Apple ID already has a paid apple developer account and I'd like to create a new app for his account (since he invited me as an admin). It shows his name under my name when I'm on the Add Apps page, but when I choose to Register a new bundle ID in Certificates, Identifiers & Profiles, it chooses my account not his. How can I create an app for him? Maybe he needs to change his account to Organization?