Deploy Canary em Swift: implemente recursos sem medo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que Canary não é só sobre pássaros?

\n\n

Imagine: você lança um novo recurso no seu aplicativo. Tudo foi testado, o CI/CD está verde, o code review foi aprovado. Uma hora depois — uma enxurrada de avaliações negativas, bugs, crashes. Parece familiar?

\n\n

No mundo do desenvolvimento iOS, existe uma solução elegante — os Canary deployments (implantação canário). É uma técnica onde a nova versão de um recurso é liberada apenas para uma pequena porcentagem de usuários (geralmente 1–5%). Se tudo correr bem, é distribuída para todos. Se não, é revertida com danos mínimos.

\n\n

Neste artigo, vamos explorar como implementar Canary deployments em Swift usando feature flags e Firebase Remote Config. Sem mágica — apenas código funcional e práticas reais.

\n\n

O que é Canary deployment e por que usá-lo em Swift?

\n\n

O termo vem da indústria de mineração: mineiros levavam canários para detectar vazamentos de gás. Em TI, é a mesma coisa: um pequeno grupo de usuários serve como "canário", indicando se a nova versão funciona corretamente.

\n\n

Por que isso é importante para desenvolvedores Swift?

\n\n
    \n
  • Segurança: Você não arrisca todos os usuários de uma vez
  • \n
  • Teste A/B: É possível comparar métricas entre a versão antiga e a nova
  • \n
  • Flexibilidade: O rollback leva segundos, não dias
  • \n
  • Controle: Você pode ativar o recurso seletivamente para testadores ou usuários beta
  • \n
\n\n

Em Swift, usamos feature flags (flags de recurso) — variáveis booleanas que ativam/desativam funcionalidades sem um novo build. Combinamos isso com configuração remota (Firebase, LaunchDarkly) — e temos um Canary deployment completo.

\n\n

Arquitetura do Canary deployment em Swift

\n\n

Vamos construir um sistema simples, mas robusto. Precisaremos de:

\n\n
    \n
  1. Feature Flag Provider — serviço que informa o status do recurso
  2. \n
  3. Remote Config — armazenamento remoto das flags (usaremos Firebase)
  4. \n
  5. Lógica de distribuição — quem entra no grupo canário
  6. \n
  7. Monitoramento — coleta de métricas e relatórios de crash
  8. \n
\n\n

Passo 1: Configuração do Firebase Remote Config

\n\n

Primeiro, adicione o Firebase ao projeto. Se ainda não fez isso, siga a documentação oficial. Em seguida, crie os parâmetros do Remote Config:

\n\n
    \n
  • new_checkout_enabled — ativa o novo checkout
  • \n
  • new_checkout_percentage — porcentagem de usuários que verão o recurso (0.0–1.0)
  • \n
  • new_checkout_deadline — data para ativação total (opcional)
  • \n
\n\n

No console do Firebase, defina os valores padrão: false, 0.0, nil.

\n\n

Passo 2: Feature Flag Provider em Swift

\n\n

Crie um protocolo e sua implementação. Isso permite alternar facilmente entre Firebase, flags locais ou mocks para testes.

\n\n
import Foundation\nimport FirebaseRemoteConfig\n\n// MARK: - Protocol\nprotocol FeatureFlagProvider {\n    func isFeatureEnabled(_ feature: FeatureFlag) -> Bool\n    func percentage(for feature: FeatureFlag) -> Double\n    func fetchRemoteConfig(completion: @escaping (Bool) -> Void)\n}\n\n// MARK: - Feature Flags\nenum FeatureFlag: String, CaseIterable {\n    case newCheckout = "new_checkout_enabled"\n    case newCheckoutPercentage = "new_checkout_percentage"\n    case newCheckoutDeadline = "new_checkout_deadline"\n    \n    var defaultValue: Any {\n        switch self {\n        case .newCheckout: return false\n        case .newCheckoutPercentage: return 0.0\n        case .newCheckoutDeadline: return "" // string ISO8601\n        }\n    }\n}\n\n// MARK: - Implementação com Firebase\nfinal class FirebaseFeatureFlagProvider: FeatureFlagProvider {\n    private let remoteConfig = RemoteConf\n                

Blogs

Book Recommendations