Pitch: Como agendo lembretes de cobrança no iOS com o limite de 64 notificações (app Assinei)
Oi, pessoal. Sou product manager e fiz o Assinei, um app de iPhone que controla assinaturas e cobranças recorrentes e avisa antes de cada renovação. Ele é 100% local: sem conta, sem backend, sem SDK de terceiros. Fiz com o Claude Code como dupla, eu tomando as decisões de produto e revisando tudo. Queria contar três problemas que deram mais trabalho do que eu esperava, e ouvir como vocês resolveriam.
1. O iOS só deixa 64 notificações locais pendentes. Se a pessoa tem 30 assinaturas, não dá para agendar um ano de lembretes de cada uma. Eu planejo todos os lembretes juntos: ordeno pelos mais próximos, agendo até 60 (sobra folga) e refaço o plano a cada mudança (salvar, editar, pausar, cancelar) e sempre que o app abre. Também tem uma tarefa em segundo plano (BackgroundTasks) para reagendar sem a pessoa abrir o app. A última notificação avisa "abra o Assinei…" para o plano continuar.
2. Data de cobrança não pode andar. Se uma cobrança mensal é dia 31, ela cai em 28/29 em fevereiro e volta para 31 em março. Se eu somo um mês na data anterior, o dia 31 vira 28 e nunca mais volta. Então calculo sempre a partir de uma âncora: âncora + n × ciclo.
3. Dinheiro em Decimal, mas o SwiftData grava Decimal como double. Testei e perdia precisão. Guardo o valor como texto exato (amountText) e exponho um Decimal no modelo. Double só entra para desenhar o gráfico. Total anual primeiro (×12, ×52…) e mensal = anual ÷ 12, arredondando só na hora de exibir.
Perguntas: alguém já bateu no limite de 64 de outro jeito (por exemplo, empurrar tudo para um servidor)? E vocês guardam dinheiro como texto, inteiro em centavos ou Decimal?
O app é grátis para até 3 assinaturas e está na App Store do Brasil, EUA e Canadá: Assinei na App Store