Estou brincando com algum desenvolvimento swift pela primeira vez em alguns anos e a linguagem mudou um pouco com swiftui. Tenho seguido alguns tutoriais diferentes e acho que posso estar confundindo algumas maneiras de fazer as coisas.
Estou tentando inicializar um FamilyActivityPicker
e responder ao onChange
evento. Seguindo um tutorial, os dados que vinculei ao FamilyActivityPicker
são de um modelo usado como estado na minha visão. No entanto, o onChange
evento para o seletor nunca dispara (eu tenho uma print
declaração que nunca dispara). Se eu adicionar algum código a um didSet
no meu modelo, isso dispara (embora pareça disparar 6 vezes). Alguém consegue ver algo óbvio que estou fazendo errado aqui? Não tenho certeza se é devido ao meu entendimento do swiftui e como tudo se vincula
struct ContentView: View {
@StateObject var model = FamilyControlModel.shared
@State var isPresented = false
var body: some View {
Button("Open picker") {
Task {
try await model.authorize()
isPresented = true
}
}
.familyActivityPicker(
isPresented: $isPresented,
selection: $model.selection
).onChange(of: model.selection) {
print("on change")
let data = try? encoder.encode(model.selection)
let strData = data!.base64EncodedString()
print(strData)
}
.padding()
}
}
Class FamilyControlModel {
static let shared = FamilyControlModel()
var selection = FamilyActivitySelection()
}
Aqui está meu código de teste totalmente funcional usando
@StateObject private var model = FamilyControlModel()
andclass FamilyControlModel: ObservableObject {...}
e um exemplofunc authorize()
.No MacOS 15.3, usando Xcode 16.2, iOS-18 de destino, testado em dispositivo iOS real.
Observe que você também precisa adicionar
Family Controls (Development)
aoSigning & Capabilities
seu alvo. Nos documentos, "Family Controls habilita seu aplicativo para controles parentais, concedendo acesso às estruturas Managed Settings e Device Activity na Screen Time API."