I have been following the tutorial from WWDC 21 for how to use the Screen Time API. The tutorial presents the following code:
import FamilyControls
import SwiftUI
@StateObject var model = MyModel()
@State var isPresented = false
var body: some View {
Button("Select Apps to Discourage") {
isPresented = true
}
.familyActivityPicker(isPresented: $isPresented,
selection: $model.selectionToDiscourage)
}
I tried using this in my application as such:
import SwiftUI
import SwiftData
import FamilyControls
struct AppSelectionButton: View {
@Binding var isPresented: Bool
@ObservedObject var model: MyModel
var body: some View {
Button("Select Apps to Discourage") {
isPresented = true
}
.familyActivityPicker(isPresented: $isPresented,
selection: $model.selectionToDiscourage)
}
}
class MyModel: ObservableObject {
@Published var selectionToDiscourage: FamilyActivitySelection
init() {
self.selectionToDiscourage = FamilyActivitySelection()
}
}
But when I do so I get the error "Value of type 'Button' has no member 'familyActivityPicker'".
I also tried:
struct ExampleView: View {
@@Published var selection = FamilyActivitySelection()
var body: some View {
VStack {
Image(systemName: "eye")
.font(.system(size: 76.0))
.padding()
FamilyActivityPicker(selection: $selection)
Image(systemName: "hourglass")
.font(.system(size: 76.0))
.padding()
}
.onChange(of: selection) { newSelection in
let applications = selection.applications
let categories = selection.categories
let webDomains = selection.webDomains
}
}
}
But it still didn't work.
I'm targetting iOS 18.1.
What could be causing this error?
Try this example code. See also FamilyActivityPicker
class MyModel: ObservableObject {
@Published var selectionToDiscourage = FamilyActivitySelection()
}
Here is my full test code:
import FamilyControls
import SwiftUI
struct ContentView: View {
@StateObject private var model = MyModel()
@State private var isPresented = false
var body: some View {
Button("Select Apps to Discourage") {
isPresented = true
}
.familyActivityPicker(isPresented: $isPresented,
selection: $model.selectionToDiscourage)
// AppSelectionButton(isPresented: $isPresented, model: model)
}
}
struct AppSelectionButton: View {
@Binding var isPresented: Bool
@ObservedObject var model: MyModel
var body: some View {
Button("Select Apps to Discourage") {
isPresented = true
}
.familyActivityPicker(isPresented: $isPresented,
selection: $model.selectionToDiscourage)
}
}
class MyModel: ObservableObject {
@Published var selectionToDiscourage = FamilyActivitySelection()
}
MacOS 15.3, using Xcode 16.2, target iOS-18, tested on real iOS device.