Screenshots.live
Team
Construindo um pipeline de capturas no seu CI/CD: Guia passo a passo
Aprenda a construir um pipeline automatizado de capturas usando a API do Screenshots.live, GitHub Actions e Fastlane. Com configuracoes YAML completas, scripts de renderizacao e automacao de upload.
Por que capturas de tela pertencem ao seu pipeline CI/CD
Capturas de tela da App Store geralmente sao tratadas como tarefa de design, algo que acontece uma vez antes do lancamento e depois e dolorosamente atualizado a cada poucos meses. Essa abordagem falha quando seu time lanca com frequencia.
A solucao e tratar capturas como qualquer outro artefato de build. Devem ser geradas automaticamente quando sua UI muda, versionadas junto com seu codigo e deployadas nas lojas como parte do processo de release.
Visao geral da arquitetura
- Design do template — Seu time de design cria templates no editor visual do Screenshots.live.
- Configuracao — Um arquivo YAML define templates, idiomas e variaveis de texto.
- Renderizacao — Seu pipeline chama a API do Screenshots.live que retorna um ZIP.
- Pos-processamento — O pipeline extrai o ZIP e organiza os arquivos.
- Upload — Fastlane entrega as capturas automaticamente.
Configurando o arquivo
# .screenshots/config.yml
api_key: ${SCREENSHOTS_API_KEY}
base_url: https://api.screenshots.live/v1
templates:
- id: tpl_hero_screen
name: "Hero Screenshot"
devices:
- iphone67
- ipad129
- android_phone
- android_tablet
locales:
- code: en
variables:
headline: "Track Your Progress"
- code: pt
variables:
headline: "Acompanhe seu progresso"Workflow GitHub Actions
name: Generate App Store Screenshots
on:
push:
branches: [main]
paths:
- '.screenshots/**'
workflow_dispatch:
env:
SCREENSHOTS_API_KEY: ${{ secrets.SCREENSHOTS_API_KEY }}
SCREENSHOTS_OUTPUT_DIR: ./fastlane/screenshots
jobs:
generate-screenshots:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- uses: actions/cache@v4
with:
path: .screenshots/cache
key: screenshots-${{ hashFiles('.screenshots/config.yml') }}
- run: npm install js-yaml node-fetch@2 adm-zip
- run: node .screenshots/generate.js
- uses: actions/upload-artifact@v4
with:
name: app-store-screenshots
path: ${{ env.SCREENSHOTS_OUTPUT_DIR }}
upload-ios:
needs: generate-screenshots
runs-on: macos-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: app-store-screenshots
path: fastlane/screenshots
- run: gem install fastlane
- run: fastlane ios upload_screenshots
upload-android:
needs: generate-screenshots
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: app-store-screenshots
path: fastlane/screenshots
- run: gem install fastlane
- run: fastlane android upload_screenshotsIntegracao Fastlane
# fastlane/Fastfile
platform :ios do
lane :upload_screenshots do
deliver(
skip_binary_upload: true,
skip_metadata: true,
screenshots_path: "./fastlane/screenshots/ios",
overwrite_screenshots: true,
)
end
end
platform :android do
lane :upload_screenshots do
upload_to_play_store(
skip_upload_apk: true,
skip_upload_aab: true,
skip_upload_metadata: true,
images_path: "./fastlane/screenshots/android",
)
end
endGerenciando idiomas no pipeline
Quando voce adiciona um novo idioma, adiciona uma entrada no config.yml. A proxima execucao gera capturas para cada template no novo idioma.
Dicas de cache e otimizacao
Chaves de cache baseadas em conteudo. O workflow usa hashFiles('.screenshots/config.yml') como chave.
Renderizacao seletiva. Se apenas um idioma mudou, divida os renders por idioma.
Renderizacao paralela:
const renderPromises = config.templates.map(template =>
renderTemplate(template, config, apiKey)
);
await Promise.all(renderPromises);Monitoramento de renders com webhooks
Screenshots.live suporta webhooks para notificar seus sistemas quando renders completam ou falham.
Juntando tudo
- Um designer cria ou atualiza um template.
- Um desenvolvedor atualiza a configuracao e faz push para
main. - GitHub Actions detecta a mudanca e dispara o workflow.
- O script de renderizacao chama a API e baixa as capturas.
- Fastlane faz upload para ambas as lojas.
- Ambas as fichas sao atualizadas em minutos.