O projeto iOS-factor foi inspirado pelo famoso framework de apps twelve-factor, que é uma metodologia para escrever serviços web de alta qualidade. O projeto usa a mesma estrutura e princípos similares, reescritos e aplicados aos processos de desenvolvimento de apps iOS.

Contexto

Nos últimos 10 anos, o processo de desenvolvimento para iOS mudou drasticamente:

  • de suportar um único aparelho para uma vasta lista de iPhones e iPads rodando iOS e outras plataformas como tvOS e watchOS
  • de manualmente incluir git submodules para usar gerenciadores de dependência
  • de apps iOS em sua maioria rodando localmente no aparelho, para apps iOS que dependem profundamente de serviços de backend
  • de processos de revisão de mais de 2 semanas para menos de um dia
  • de instalar apps no seu telefone usando o iTunes, para distribuir apps através de um canal oficial (TestFlight)
  • de subir 5 screenshots por idioma para o iTunes Connect, para 110 por idioma, bem como preview de apps
  • de apps puramente escritas em Objective-C/C++ para uma mistura de linguagens, incluindo JavaScript
  • de entregas lentas sempre quando algo estava pronto, para lançamentos semanais
  • de entregas de versões completas para testes A/B, entregas graduais e detecção automática de regressão

O que é o iOS-factor?

O iOS-factor é um projeto experimental iniciado em maio de 2018. Ele tem o objetivo de prover uma coleção de boas práticas para a construção de aplicações iOS de alta qualidade. Cada tópico é coberto por um fator, que descreve o estado ideal de como uma certa categoria do processo de desenvolvimento de apps iOS deveria ser.

Devido a certas limitações (como o Xcode rodar só no macOS) nem todos os requisitos podem ser preenchidos. Este projeto tem o intuito de definir objetivos, assim como as atuais melhores abordagens para resolver alguns dos desafios com os quais nos deparamos.

O iOS-factor é sobre decisões de arquitetura e processos de desenvolvimento de apps iOS num nível mais amplo, e por isso não cobre nenhum desafio específico de linguagem.

Este é um projeto em constante desenvolvimento, mantido pela comunidade de desenvolvedores iOS. Você pode encontrar o código fonte completo no GitHub e atualizar páginas já existentes ou adicionar novos fatores.


Os fatores iOS

I. Dependências

Explicitamente declare e isole dependências

II. Configuração

Sem configuração no código, submeta com a configuração padrão e permita atualizações "Over the air"

III. Paridade de ambientes de desenvolvimento/produção

Mantenha os ambientes de desenvolvimento, teste e produção o mais similares possível

IV. Distribuição

Automatize seu processo de distribuição para que possa liberar uma nova versão a partir de qualquer máquina

V. Prefira local ao invés de remoto

Matenha o aplicativo iOS inteligente o suficiente para que consiga funcionar sem backend sempre que possível

VI. APIs com compatibilidade retroativa

Não assuma que todo usuário irá sempre atualizar para a versão mais recente de sua app

VII. Versionamento de apps

Automatize os números de versão e build de seu aplicativo para gerar consistência

VIII. Rollbacks

Reverting a build that causes issues

IX. Persistência de dados

Siga as instruções da Apple ao armazenar dados