Pular para o conteúdo
Development

Screenshots para um app sem simulador

Por Victor Da Luz
astroiosmarketingdev-logsite

O Deep Cut Atlas tem um cartão provisório na página inicial deste site desde o primeiro dia, com um link “Acompanhe no dev log” e nada mais. Construir uma página de marketing de verdade dependia de uma única coisa: screenshots. E conseguir isso para esse app em particular acabou sendo mais interessante do que eu esperava, porque o caminho óbvio não funciona.

O caminho óbvio não funciona. O MusicKit, o framework sobre o qual o Deep Cut Atlas é construído, não tem nenhum suporte no simulador. Não é lento nem instável, simplesmente não retorna nada no simulador. Screenshots reais significavam um iPhone físico, com sessão em uma conta real da Apple Music, mostrando minha biblioteca real numa imagem pública de marketing. Eu não gostava muito desse plano, principalmente porque o que quer que estivesse na minha biblioteca no exato momento da captura viraria conteúdo público permanente.

O app já tinha a solução, por outro motivo. Como o MusicKit não roda no simulador de jeito nenhum, o app já vem com uma implementação simulada do seu serviço de biblioteca musical, MockMusicLibraryService, usada nas previews do SwiftUI e na suíte de testes unitários. Ela está lá desde o início do desenvolvimento, criada para resolver um problema completamente diferente (como fazer preview da interface ou rodar testes contra uma API sem suporte no simulador). Acabou sendo exatamente o que uma sessão de screenshots precisava também: rodar o app no simulador normalmente, só que a “biblioteca” é um pequeno conjunto de dados fixo em vez de uma conta real.

A única coisa que exigia cuidado: esse conjunto de dados não é um espaço qualquer para rascunho. A suíte de testes verifica contra ele pelo nome, strings específicas de artistas e álbuns disparam ramos de teste específicos. Editá-lo diretamente para colocar dados “mais bonitos” teria quebrado silenciosamente testes que passavam por bons motivos. Então os dados trocados ficaram numa branch descartável e sem commit, o código real do produto nunca os viu.

O cartão dizia “álbum,” o cartão não mostrava nada. A primeira tentativa com os dados trocados mostrou cada capa de álbum como uma caixa cinza com um ícone de nota musical. O app lê as capas a partir de um campo de URL, e os dados de exemplo do simulador sempre deixaram esse campo vazio, ninguém tinha precisado de arte real para testes ou previews. Para uma screenshot de marketing, uma parede de ícones de espaço reservado anula completamente o propósito. A solução foi quase constrangedoramente simples: a API de busca da iTunes da Apple é gratuita, não exige autenticação, e retorna URLs reais de capas para qualquer coisa no catálogo. Uma pequena troca no segmento de resolução da URL (de 100x100 para 600x600) e o simulador passou a mostrar capas de álbum reais, vindas de um CDN público, sem precisar de sessão na Apple Music.

O que foi publicado. Quatro telas, o feed de lançamentos novos, uma confirmação de adicionar à fila de reprodução, a fila, e o histórico de reproduções recentes, cada uma com uma breve descrição numa nova página /apps/deep-cut-atlas. Reaproveitou cada token de design que já existia no site, nada novo para manter. Ainda não há selo da App Store porque não há listagem, o botão de ação aponta para este dev log em vez disso, o que pareceu mais honesto do que um botão provisório que não leva a lugar nenhum.

O que encontrei pelo caminho. Checar a nova página numa largura móvel estreita revelou um bug de verdade, texto cortado na borda direita da viewport, e confirmou que não era exclusivo da página nova. A página inicial também tem esse problema. Isso ficou registrado como um pendente separado em vez de entrar nesta mudança, uma página de marketing de um app não é o lugar para consertar um bug de layout do site inteiro, mesmo quando você esbarra nele por acidente enquanto revisa o próprio trabalho.

Leitura relacionada

Development

Dando um rosto para cada link compartilhado

Uma proteção de og:image que nunca disparava, um valor padrão de uma linha que resolveu, um card de terminal feito sob medida, e uma pegadinha de retina no Chrome headless.

Ler
Development

O CSP que só quebrou em produção

Quatro falhas atrás de um único header: middleware morto, regras de _headers que se combinam em vez de sobrescrever, um worker de blob URL sob script-src, e um script que só o edge injeta.

Ler

Você também pode achar útil

NordPass

NordPass

Gerenciador de senhas da equipe por trás da NordVPN, com um plano gratuito.

Como afiliado da NordPass, ganho com compras qualificadas.

Saiba mais
Proton

Proton VPN

VPN comercial com filtragem NetShield e interruptor de desligamento automático.

Como parceiro da Proton, ganho com compras qualificadas dos serviços de privacidade e segurança da Proton (Pass, Mail, VPN, Drive).

Saiba mais
RackNerd

RackNerd VPS

Hospedagem VPS econômica para serviços leves que funcionam continuamente.

Como afiliado da RackNerd, ganho com compras qualificadas.

Saiba mais