Ao tentar criar um aplicativo de autocontrole usando a API Screen Time, três estruturas aparecem primeiro. Eles são FamilyControls, ManagedSettings e ManagedSettingsUI. Se você é novo no desenvolvimento para iOS, pode ser difícil entender as funções dos frameworks e você pode ficar confuso sobre qual deles importar. Compreender primeiro as responsabilidades de cada pessoa evitará que o projeto entre em colapso posteriormente.
Obtenha permissão primeiro: AuthorizationCenter
Os aplicativos precisam da permissão do usuário para usar a API Screen Time para impor limites. O ponto de entrada é AuthorizationCenter.shared.requestAuthorization(for:) e AuthorizationCenter pertence à estrutura FamilyControls.
Existem dois tipos de autorização. individual permite que os pais controlem os dispositivos de seus filhos e selfRestriction permite que os pais controlem seus próprios dispositivos. Use este último para aplicativos de autocontrole. Se você não está familiarizado com o desenvolvimento iOS, é fácil confundir “autorização” e “permissão (permissão para informações de localização, etc.)”, mas a autorização aqui se refere à aquisição de autoridade para usar toda a função Screen Time e, uma vez obtida, ela é mantida posteriormente.
Em vez de solicitá-lo sempre que o aplicativo for iniciado, ele foi projetado para ser chamado apenas uma vez durante o fluxo de inicialização inicial.
Selecione o que bloquear: FamilyActivityPicker
A Apple fornece uma interface de usuário para selecionar os sites e categorias que você deseja bloquear como FamilyActivityPicker. Isso será exibido como uma planilha SwiftUI.
Um problema comum aqui para pessoas novas no iOS é que elas não conseguem extrair os resultados da seleção como URLs de texto livre ou nomes de domínio. Ele é retornado como um token encapsulado em um modelo chamado FamilyActivitySelection. Este token é compatível com Codable, portanto pode ser salvo em JSON ou em um arquivo, mas a string de URL dentro dele não pode ser lida diretamente.
Se você projetar com a ideia de “Eu mesmo quero gerenciar a lista de domínios”, você ficará preso aqui. A premissa é que o design use FamilyActivitySelection retornado por FamilyActivityPicker como está. Se você tem experiência com desenvolvimento web, talvez queira tratar domínios como strings, mas a API Screen Time do iOS não aceita esse design.
Aplicar regras: ManagedSettings
É função do ManagedSettings impor os limites reais às escolhas feitas pelo usuário. Escreva regras para ManagedSettingsStore.
let store = ManagedSettingsStore()store.shield.webDomains = selection.webDomainsstore.shield.applicationCategories = .specific(selection.categories)Se você passar o token extraído de FamilyActivitySelection para shield.webDomains, uma tela de escudo será exibida ao acessar o site correspondente. Um “escudo” é uma tela de bloqueio criada pelo Screen Time da Apple que se sobrepõe ao Safari.
Todas as regras podem ser canceladas com store.clearAllSettings(). Esta chamada é fundamental para a implementação do processo de desbloqueio.
Estrutura de design
Combinando os três, o fluxo básico é o seguinte.
Na inicialização, verifique a autorização com AuthorizationCenter e emita uma solicitação se não for autorizado. Exiba FamilyActivityPicker na tela de configurações e salve a seleção do usuário como FamilyActivitySelection no contêiner compartilhado do Grupo de Aplicativos. Escreva regras em ManagedSettingsStore ao iniciar o modo de foco e libere-as com clearAllSettings() ao encerrar o modo de foco.
Pode parecer que as opções do usuário são limitadas em comparação ao gerenciamento de domínios de texto livre, mas esta é a especificação desta plataforma. Não há necessidade de se preocupar com manutenção ou registro incorreto, e você pode usar a categorização da Apple como está. À medida que você se acostuma com o iOS, a decisão de “seguir o framework fornecido pela Apple” se torna natural.
A complexidade da implementação se concentrará na personalização da tela do escudo e no desbloqueio do escudo para o aplicativo.
hsb.horse