Compilando para Simulador x86_64 no Mac Apple Silicon Chip
Se você está passando por esse erro abaixo da imagem no Xcode 16 ou superior, eu quero compartilhar a solução que resolveu para o meu caso. Não garanto que você terá o mesmo resultado positivo mas vale tentar.
Atualmente a Apple vem alterando algumas coisas no Xcode que não tem me agradado muito, principalmente se tratando do Build. Aparentemente a cada nova versão, os engenheiros estão gerando mais bugs do que de costume (espero que isso não prevaleça com o passar dos dias).
Bom, vamos ao erro:
Building for ‘iOS-simulator’, but linking in object file (/Users/tiagoaguiar/ios/freela/xxx/Pods/GoogleMaps/Maps/Frameworks/GoogleMaps.framework/GoogleMaps) built for ‘iOS’
Aparentemente a mensagem indica um erro no linker (e não no compilador do clang).
Ele informa ld: building for 'iOS-simulator', but linking in object file
.
E isso não ocorre em projetos novos e pela mensagem, o problema era na biblioteca do projeto.
Outros devs passaram pelo o mesmo problema informando que o erro era no SDK do Google Maps ou no Firebase. Que seus projetos XCFramework não está preparado ainda para o Apple Silicon Chip, logo a arquitetura arm64 ainda não está disponível para esse SDK.
Então, quando temos um projeto novo rodando no modo Apple Silicon, o Xcode faz o build para o simulador usando o ARCH arm64.
É ótimo pois temos o recurso incrível da compilação a partir deste chip, o problema são dependências que ainda não foram atualizadas para essa arquitetura ainda.
A maioria dos binários estão usando o SDK = iphonesimulator ARCH = x864_64, o que remete a arquitetura intel, causando erros no linker.
A solução é rodar o simulador do Xcode no modo Rosetta, o que faz ele agir como se estivesse em um Mac da Intel e o simulador será para o x84_64.
Alterando Settings do Projeto
Clique no projeto no File Explorer e selecione o PROJECT (não o TARGET).
Depois, vá até a aba Build Settings. Tenha certeza que o filtro esteja aplicado para exibir todas (ALL) propriedades.
Procure por Architectures e expanda as opções no >.
Tanto em Debug quanto Release, ao passar o mouse você encontra o sinal de +, para adicionar um novo valor.
Quando aparecer Any SDK, troque para iOS Simulator.
Agora, para atribuir uma propriedade para esse novo atributo, clique nos valores e troque para o x86_64.
Na hora de executar, ele deve mostrar a opção com Rosetta. Exemplo:
iPhone 16 (Rosetta)
Não é necessário executar todo o Xcode e seus compiladores no Rosetta para continuar a usar os simuladores criados para a Intel.
Você pode forçar os compiladores a sempre criarem para x86_64 e os simuladores são inteligentes o suficiente para executar o processo do seu aplicativo somente no Rosetta.
Isso nos permite colher os benefícios do Apple Silicon em nossas máquinas de desenvolvimento hoje e, ao mesmo tempo, dar tempo às nossas dependências para se organizarem e adotarem o XCFrameworks e reconstruírem para o iphonesimulator-arm64.
Espero ter ajudado!
Maravilha! Em breve você receberá conteúdos exclusivos por e-mail. Continue lendo os artigos para aprender mais sobre programação.