Projetos / Slipway github.com/a7t-ai/slipway
Slipway
Toolkit de auto-publicação para apps iOS.
Eu lanço quatro apps iOS nas horas vagas. Slipway é o toolkit que cuida de tudo entre "feature mergeada na main" e "build entregue no TestFlight com metadata da App Store preparada". A próxima feature recebe o meu tempo; o ritual de release, não.
Eu lanço quatro apps iOS nas minhas horas vagas:
- FareHawk: alertas calmos de tarifas aéreas. Paga uma vez, acompanha para sempre.
- Kinderuntersuchungsheft: a caderneta amarela alemã da pediatria, agora digital. Cada U-Untersuchung e vacinação STIKO no seu celular.
- Einbürgerung Pro: o jeito limpo e moderno de se preparar para o teste de cidadania alemã. As 310 perguntas, 11 idiomas de tradução, simulados e repetição espaçada.
- Reellette: recomendações de filmes e séries com IA para te ajudar a decidir o que assistir hoje.
O Slipway existe por causa do FareHawk e do Reellette. Foram os dois primeiros, cada um cresceu seu próprio pipeline de release em paralelo, e os pipelines acabaram 85% iguais e 15% exatamente o que faltava no outro. Juntar tudo num toolkit só deu menos trabalho do que consertar o mesmo bug duas vezes a cada sexta-feira. Os outros dois apps agora rodam no mesmo template.
O Slipway não é um binário nem um serviço. É um conjunto de workflows do GitHub Actions, lanes do Fastlane e scripts auxiliares que você copia para o seu projeto iOS. O trabalho sai da sua sexta-feira à tarde e vai parar num runner que já tem o seu código, e te devolve o tempo.
O que ele faz, de fato
Um slipway é a rampa que coloca o barco na água. O toolkit faz o mesmo com um build iOS: pega o que acabou de cair na main, bumpa a versão, builda e notariza, faz upload de metadados e screenshots, entrega no TestFlight, atribui aos grupos de beta e escreve as release notes. De git merge a “build disponível” é um workflow de segunda de manhã disparando, sem sessão do Xcode no meio.
O pipeline mora inteiramente no GitHub Actions para orquestração e cron, nas lanes do Fastlane para o trabalho no App Store Connect e os passos de build e notarização, e num punhado de helpers em Bash e Ruby para as tarefas pequenas: geração de ícones, composição de screenshots, interpolação das release notes.
O ciclo de release
Três workflows orquestradores conduzem uma semana inteira. Terça de madrugada, uma cadeia de submissão bumpa a versão, preenche os metadados na App Store, gera as release notes, builda e notariza, sobe para o TestFlight e submete para revisão. Uma hora depois, um segundo workflow taggeia a versão recém-submetida e bumpa o número de marketing para que os commits da nova semana caiam numa versão fresca. A versão fica na fila de revisão da Apple por três a cinco dias. Sexta-feira ao meio-dia, um terceiro workflow encontra o build agora aprovado e ativa o phased release.
Arraste a barra ou clique em play.
O que vale a pena copiar
O compositor de screenshots da App Store. A parte mais difícil de um release não é o binário. É que o App Store Connect quer nove tamanhos de tela diferentes, cada um com texto de marketing sobreposto no lugar certo, cada um com o device frame certo. O compositor do Slipway pega uma pasta de snapshots de UI (gerados pelo seu target de XCUITest) e produz a matriz nove-por-nove por idioma. Se você lança metadados localizados, isso economiza um dia por release.
A lane de release notes lê CHANGES_IN_VERSION.md, puxa os bullets acima do header ### Default Release Notes, manda para a persona de copywriting refinar e faz upload. Se a seção de cima estiver vazia depois de uma semana corrida, a piscina de fallback abaixo do header é amostrada aleatoriamente para que a entrada na App Store nunca saia com release notes vazias.
O version bumper usa calver: YY.MM.PATCH. O Slipway deriva a tag da data, o número do patch da quantidade de releases no mês, e escreve de volta no .xcconfig para o build bater.
O que está deliberadamente fora de escopo
macOS, tvOS, watchOS. Slipway é o pipeline iOS. O mesmo formato funciona para os outros, mas as lanes são diferentes o suficiente para eu não ter puxado para o merge.
Crash reporting e analytics. Questões a nível de app, não de pipeline.
Gerenciamento de beta testers. O Slipway atribui aos grupos existentes do TestFlight; não gerencia quem está dentro.
De onde veio
FareHawk contribuiu com o pipeline de metadados da App Store, o gerador de ícones e o compositor de screenshots: as peças que tocam o App Store Connect.
Reellette contribuiu com a geração de snapshots de UI, o pipeline de unit-test no CI, e a convenção de bump de versão.
Os dois apps agora rodam em cima do Slipway. Slipway é o que eles teriam sido se eu tivesse começado os dois no mesmo dia com o mesmo template.
Como rodar
Repo: https://github.com/a7t-ai/slipway. O README cobre os secrets necessários (chave de API do App Store Connect, certificados do Match, etc.) e as lanes do Fastlane que dá para mapear no seu app existente.
O que eu faria por você
Se você tem um app iOS onde lançar ainda parece um ritual manual (abrir o Xcode, arquivar, fazer upload, trocar para o App Store Connect, colar as release notes), o Slipway tira uns 90% disso da sua mesa numa sessão focada. A parte mais difícil normalmente é convencer o lado da Apple (certificados, chaves de API, roles no App Store Connect); o toolkit cuida do resto.