image

Unlimited bootcamps and 750+ courses forever

70
%OFF

AK

Ayumu Kitabayashi30/10/2026 03:38
Share

Bloquear apps de redes sociais toda noite no iPhone com DeviceActivity (2026)

    O minulo é um app para iPhone que, na hora de dormir, bloqueia automaticamente toda noite os apps oficiais do Instagram, do YouTube, do TikTok e de outras redes, e mantém os Reels e os Shorts ocultos sem perder as DMs. Ocultar Reels e Shorts é grátis, o bloqueio dos apps oficiais é grátis por até 2 horas de cada vez, e o Modo sono, que começa sozinho toda noite no horário escolhido, é do minulo Pro. Neste artigo eu mostro como fiz esse "bloquear toda noite" com a API do Tempo de Uso (DeviceActivity e ManagedSettings) e onde tropecei. (Este artigo foi escrito pelo desenvolvedor do minulo.)

    Confira o comportamento exato da API na documentação da Apple para desenvolvedores. O que está aqui é a estrutura que uso de verdade no minulo e o que aconteceu em aparelhos reais. A base da extensão é o react-native-device-activity, do Robert Herber.

    A estrutura

    • O app principal (React Native) monta um DeviceActivitySchedule com a hora de dormir e a hora de acordar e começa o monitoramento com o DeviceActivityCenter.
    • Na hora marcada, o sistema chama a extensão DeviceActivityMonitor com `intervalDidStart`. A extensão aplica um escudo (a tela de bloqueio) com o ManagedSettings.
    • Na hora de acordar, `intervalDidEnd` é chamado e a extensão tira o escudo.
    • A extensão é chamada pelo sistema mesmo com o app fechado.

    A extensão não decide nada sozinha. O app principal grava no UserDefaults do App Group as ações de cada sinal, com a chave `actions_for_<nome do monitoramento>_<sinal>`, e a extensão só lê e executa. A extensão tem pouca memória e roda por pouco tempo em cada sinal, então a lógica pesada fica fora dela.

    Desligar só esta noite

    Se o botão "Desligar só esta noite" parasse o monitoramento, os horários das próximas noites também sumiriam. Por isso o monitoramento continua, e o app só grava uma marca dizendo "esta vez deste horário já foi encerrada".

    • O app grava no App Group um JSON com o id do horário e o momento em que essa vez termina.
    • A cada `intervalDidStart`, a extensão lê essa marca e, se for uma vez encerrada, não faz nada.
    • Marcas vencidas são descartadas na leitura.

    Tropeço 1: registrar de novo no meio do horário chama o "início" na hora

    Quando o monitoramento é registrado de novo no meio do horário (ao editar o horário, por exemplo), o sistema chama `intervalDidStart` na mesma hora. No minulo, numa noite em que o bloqueio tinha sido liberado pela saída de emergência, o monitoramento foi registrado de novo, o sistema chamou o início e tudo voltou a ser bloqueado.

    A correção foi olhar a mesma marca de "Desligar só esta noite" também nesse `intervalDidStart` do novo registro.

    Tropeço 2: o fim de um monitoramento tira o escudo de outro

    Os escudos do ManagedSettings não ficam em caixas separadas por monitoramento. Se o `intervalDidEnd` da noite tira o escudo, pode tirar também um escudo colocado por outro motivo no mesmo horário (um bloqueio manual de 2 horas, por exemplo).

    Então, junto com o fim, registrei uma ação de "colocar de novo se alguém ainda precisa", com a informação de para quem é (o id do horário ou o momento em que o bloqueio manual termina). Se todos já terminaram, a extensão não coloca de novo.

    Tropeço 3: o horário segue o relógio da região

    O DeviceActivitySchedule segue o relógio da região do aparelho. Numa viagem, a marca gravada pelo app e a hora que a extensão vê podem não bater. No minulo, a marca guarda o nome do fuso horário; se o nome for diferente, a extensão não faz nada e o app corrige quando for aberto. Comparo pelo nome do fuso, e não pela diferença com o UTC, porque no dia da mudança do horário de verão a diferença enganou a extensão.

    O que não dá para fazer

    • Enquanto o app oficial está bloqueado, as notificações dele não chegam. O escudo é do iOS, e o app não muda isso.
    • O escudo bloqueia o app oficial inteiro, então dentro dele não dá para "bloquear só os Reels e manter as DMs". No minulo, as DMs ficam na versão web aberta dentro do minulo.

    Resumo

    • O bloqueio automático toda noite sai com o monitoramento do DeviceActivity e uma "tabela de ações" que a extensão lê.
    • "Desligar só esta noite" se faz com uma marca da vez encerrada, sem parar o monitoramento.
    • O `intervalDidStart` do novo registro, o escudo compartilhado e o relógio da região aparecem em aparelho real.

    Os ajustes da noite como um todo (Repouso, Tempo de Uso e as diferenças) estão nesta página:

    Share
    Recommended for you
    Neo4j - Certification
    DXC - IA do Zero ao Primeiro Agente
    Reclame AQUI - Dados e IA na Prática
    Comments (0)