Como Parar de Torturar o Xcode e Começar a Viver com o DebugSwift
Soa familiar: você está testando um app em um dispositivo físico longe da sua mesa, e de repente — um bug. Ou uma requisição de rede retorna 500, mas você não consegue ver o corpo do erro. Você precisa voltar ao seu computador, conectar o cabo, iniciar o Xcode e tentar reproduzir o problema. E se for um bug intermitente? Em momentos assim, você deseja ter um console de desenvolvedor bem no seu bolso.
Hoje vamos analisar o DebugSwift — um poderoso kit de ferramentas que transforma seu app iOS em um verdadeiro laboratório de depuração. Não é apenas "outro logger", mas sim uma ferramenta completa que oferece acesso a requisições de rede, hierarquia de visualizações e até mesmo ao banco de dados diretamente dentro do app em execução.

O Que é o DebugSwift e Por Que Você Precisa Dele
DebugSwift é uma biblioteca de código aberto para desenvolvedores Swift que嵌入式 um menu de depuração oculto no seu app. Pense no Chrome DevTools, mas para iOS. O projeto tomou as melhores ideias de ferramentas como CocoaDebug e DBDebugToolkit, mas com foco em Swift 6 moderno e suporte nativo a Apple Silicon.
O destaque principal aqui é a autonomia. Você pode entregar um build para um testador ou cliente, e se algo der errado, eles podem verificar os logs, inspecionar o tráfego de rede ou até tirar uma captura de tela da hierarquia de visualizações por conta própria, sem sua ajuda.
Cinco Motivos para Adicionar o DebugSwift ao Seu Projeto
1. Inspetor de Rede em Alta Velocidade
O monitoramento de tráfego é a base. O DebugSwift intercepta todas as requisições e respostas HTTP, formata JSON de forma bonita e destaca a sintaxe. Mas também há "recursos matadores":
- Inspetor de WebSocket: Rastreia automaticamente frames sem configuração extra.
- Descriptografia em Tempo Real: Se o seu backend entrega dados criptografados (AES-256/128), você pode registrar uma chave no DebugSwift, e o inspetor mostrará o texto limpo.
- Filtragem: Você pode ocultar requisições de analytics para que não poluam o log.

2. Auditoria Visual de Interface
Às vezes você precisa entender por que uma visualização deslocou por alguns pixels. O DebugSwift possui um inspetor de hierarquia 3D integrado (similar ao do Xcode, mas funcionando diretamente no app).
- Sobreposição de Grade: Exibe uma grade para verificar alinhamento.
- Animações Lentas: Diminui a velocidade das animações para examinar cada quadro de transição.
- Rastreamento de Renderização SwiftUI: Um recurso experimental que destaca componentes SwiftUI que estão sendo re-renderizados. Isso é invaluable para otimização de performance.

3. Caça aos Vazamentos de Memória
Um strong reference esquecido em um closure — um clássico. O DebugSwift monitora ViewControllers e Views em tempo real. Se um objeto deveria ter sido removido da memória, mas permaneceu lá, a ferramenta dispara um alarme. Há também um widget de performance que exibe FPS, carga de CPU e uso de memória sobrepostos à sua interface.
4. Acesso aos Internos do App
Não precisa mais escrever print(UserDefaults.standard.dictionaryRepresentation()).
Na seção Resources, você pode:
- Visualizar e editar
UserDefaultseKeychain. - Navegar pelos arquivos no Sandbox e App Groups.
- Inspecionar bancos de dados SQLite e Realm.
- Copiar token APNS com um botão (quanto tempo já economizamos com isso!).
5. Ações Personalizadas
Esta é minha parte favorita. Você pode adicionar seus próprios botões ao menu de depuração. Por exemplo: "Limpar Cache", "Trocar Servidor para Dev/Stage" ou "Preencher Carrinho com Produtos de Teste".
DebugSwift.App.shared.customAction = {
[
.init(title: "Инструменты разработки", actions: [
.init(title: "Сбросить состояние") {
// Ваша логика сброса
}
])
]
}
Como Funciona nos Bastidores
O projeto é escrito em Swift e requer iOS 14+. Curiosamente, os desenvolvedores prestaram muita atenção ao suporte a Apple Silicon. Se você já lutou com erros de arquitetura no simulador do Xcode em chips M1/M2, pode esquecer disso aqui — a biblioteca é distribuída como um XCFramework adequado.
Para interceptar o tráfego de rede, usa URLSession logging. Se você criar configurações de sessão antecipadamente, o DebugSwift oferece métodos convenientes para injetar seu próprio protocolo:
let config = URLSessionConfiguration.default
DebugSwift.Network.shared.injectIntoConfiguration(config)
let session = URLSession(configuration: config)
Casos de Uso Práticos
Caso #1: Teste Remoto. Você envia um build do TestFlight para um testador. Ele encontra um bug na lógica de desconto. Em vez de pedir logs através do console do Mac, o testador simplesmente balança o celular (Shake to Toggle), abre o DebugSwift, vai para o log de rede e envia uma captura de tela da resposta JSON do servidor.
Caso #2: Depuração de Push. Você precisa testar como o app lida com um payload específico de notificação push. O DebugSwift tem um simulador de push: você apenas cola o JSON, e o app o processa como se viesse da Apple.

Como Começar
A instalação é direta via Swift Package Manager ou CocoaPods. Em AppDelegate, leva apenas algumas linhas:
import DebugSwift
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
private let debugSwift = DebugSwift()
func application(_ application: UIApplication, didFinishLaunchingWithOptions ...) -> Bool {
#if DEBUG
debugSwift.setup()
debugSwift.show()
#endif
return true
}
}
Dica: Sempre envolva a chamada em #if DEBUG para garantir que as ferramentas de depuração não acabem accidentalmente na App Store.
Veredicto: Vale a Pena Experimentar?
Se você está cansado de recarregamentos constantes do print() e reconstruções de projeto só para verificar um valor no banco de dados ou nos cabeçalhos de requisição — com certeza sim. O DebugSwift economiza horas de tempo, especialmente durante desenvolvimento ativo e integração de API.
O projeto é ativamente desenvolvido, a comunidade está viva e o suporte a Swift 6 sugere que a ferramenta permanecerá relevante por muito tempo.
Experimente o projeto aqui: https://github.com/DebugSwift/DebugSwift
Quais ferramentas de depuração você usa? Compartilhe nos comentários!
Projetos relacionados