«Puf — e o aplicativo caiu»: conhecendo dyld: Library not loaded: @rpath/libswiftCore.dylib
\n\nVocê já iniciou seu aplicativo Swift, viu uma bela tela de splash, e então — bum! — tela preta e um console cheio de letras vermelhas? Familiar? Se você já se deparou com a mensagem dyld: Library not loaded: @rpath/libswiftCore.dylib, conhece aquela sensação de leve pânico. No Stack Overflow, essa pergunta acumulou milhares de visualizações, e não é à toa: o erro é traiçoeiro, mas totalmente solucionável.
Neste artigo, não vamos apenas dar uma instrução seca. Vamos analisar por que as bibliotecas Swift «se perdem» em tempo de execução, como evitar isso e o que fazer se você já se meteu nessa enrascada. Vamos nessa!
\n\nO que é dyld e por que ele está irritado?
\n\ndyld (dynamic link editor) é o carregador de bibliotecas dinâmicas no macOS e iOS. Quando seu aplicativo é iniciado, o dyld procura todas as bibliotecas necessárias nos caminhos especificados no binário. Um desses caminhos é @rpath (caminho de pesquisa em tempo de execução). Se a biblioteca (por exemplo, libswiftCore.dylib) não for encontrada nesse caminho, o dyld falha com o erro.
Simplificando: você disse ao aplicativo «pegue o livro na prateleira @rpath», mas a prateleira estava vazia. É todo o mistério.
\n\nPor que isso acontece especificamente com libswiftCore.dylib?
\n\nlibswiftCore.dylib é o núcleo do Swift runtime. Sem ele, nenhum código Swift funciona. O erro geralmente ocorre em três casos:
- \n
- Você está usando Xcode 14+ e o projeto está configurado para uma versão antiga do Swift. \n
- Você está conectando frameworks ou CocoaPods que exigem uma versão específica do Swift runtime. \n
- Você esqueceu de ativar «Always Embed Swift Standard Libraries» nas configurações de build. \n
5 maneiras de corrigir dyld: Library not loaded: @rpath/libswiftCore.dylib
\n\nVamos para a prática. Abaixo estão métodos comprovados, do mais simples ao mais complexo. Para cada um, darei um exemplo de código ou configurações.
\n\n1. Ative «Always Embed Swift Standard Libraries»
\n\nO culpado mais comum. Se seu aplicativo não incorpora as bibliotecas Swift no bundle, o dyld não as encontrará no dispositivo.
\n\nComo corrigir:
\n- \n
- Abra o projeto no Xcode. \n
- Selecione Target → Build Settings. \n
- Encontre
Always Embed Swift Standard Libraries. \n - Defina o valor como
Yes. \n
Se você usa CocoaPods, verifique se no Podfile não há uma linha desativando esse comportamento:
# Ruim (pode causar o erro)\npost_install do |installer|\n installer.pods_project.targets.each do |target|\n target.build_configurations.each do |config|\n config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO'\n end\n end\nend\n\n# Bom\npost_install do |installer|\n installer.pods_project.targets.each do |target|\n target.build_configurations.each do |config|\n config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'YES'\n end\n end\nend\n\n\n2. Verifique a compatibilidade das versões do Swift
\n\nSe você conectou um framework compilado com Swift 5.7, mas seu projeto está no Swift 5.5 — olá, erro. O Swift runtime não é 100% retrocompatível.
\n\nSolução: certifique-se de que todas as dependências usam a mesma versão do Swift. Abra o terminal e execute:
\n\n# Descobrir a versão do Swift para um .framework específico\nstrings MyFramework.framework/MyFramework | grep "Swift"\n# Ou verifique via xcrun\nxcrun swift --version\n\n\nSe o framework foi compilado com outra versão — recompile-o ou atualize-o.
\n\n3. Limpe os Derived Data e reconstrua o projeto
\n\nÀs vezes, o Xcode armazena em cache caminhos antigos para as bibliotecas. Uma reconstrução completa geralmente resolve o problema.
\n\n# Remover Derived Data manualmente\nrm -rf ~/Library/Developer/Xcode/DerivedData