Executando verificação de segurança...
2

[erro oculto ] - Atualize seus apps React Native - Bitcodes não são mais suportados

Atualize seus apps React Native

Recentemente enfrentei uma situação bem curiosa com a versão 0.71.13 do React Native, se quiser saber mais detalhes, já escrevi aqui no TabNews sobre: aqui.

O trigger

Recentemente a Apple lançou uma atualização para o xCode, trazendo assim o xCode 16 a tona, e uma das grandes mudanças que houveram foi: não existe mais suporte para o Bitcode. O bitcode era um recurso da Apple introduzido no Xcode 7 (2015) que permitia que os aplicativos fossem enviados à App Store em uma forma intermediária de código, em vez de binários completamente compilados. A Apple usava isso especialmente para poder fazer melhorias nos apps sem que os desenvolvedores enviassem uma nova versão daquele app para receber tais otimizações.

O problema

Com a remoção do bitcode, comecei a enfretar problemas com o Hermes framework saiba mais aqui, que é basicamente uma engine para executar aplicativos Javascript em dispositivos móveis. E eu comecei a obter a seguinte mensagem ao dar o distribute do meu app: Asset validation failed Invalid Executable. The executable 'app/Frameworks/hermes.framework/hermes' contains bitcode. (ID: 19823c7232c42-854c-423e0c-97a7-016we3887cc4), justamente porque esse framework ainda possuía um bitcode.

Se era bom, por que foi removido?

Se você olhar bem, desde novembro de 2020, a Apple não fabrica mais computadores com Chips que não sejam seus chips proprietários a familia M (M1, M2, M3) com isso houve menos necessidade de recompilar apps para múltiplas arquiteturas.

  1. Com a evolução do Swift e do LLVM, os binários já gerados pelos desenvolvedores passaram a ser eficientes o suficiente, tornando o Bitcode desnecessário.
  2. O Bitcode adicionava etapas extras ao processo de compilação e distribuição, tornando tudo mais lento e complicado para desenvolvedores.

Qual a minha solução?

Adicionei um script no meu podfile que manualmente remove o bitcode após a geração do build, remove os bitcodes do projeto, segue o script:

bitcode_strip_path = `xcrun --find bitcode_strip`.chop!
         def strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
           framework_path = File.join(Dir.pwd, framework_relative_path)
           command = "#{bitcode_strip_path} #{framework_path} -r -o #{framework_path}"
           puts "Stripping bitcode: #{command}"
           system(command)
         end

         framework_paths = [
           "Pods/LogRocket/LogRocket.xcframework/ios-arm64/LogRocket.framework/LogRocket",
           "Pods/hermes-engine/destroot/Library/Frameworks/macosx/hermes.framework/hermes",
           "Pods/hermes-engine/destroot/Library/Frameworks/macosx/hermes.framework/Versions/Current/hermes",
           "Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework/ios-arm64/hermes.framework/hermes",
           "Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework/ios-arm64_x86_64-maccatalyst/hermes.framework/hermes"
         ]

         framework_paths.each do |framework_relative_path|
           strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
         end

Qual a solução definitiva?

A solução definitiva é atualizar o seu projeto para as últimas versões, incluíndo o seu app React Native para que ele não gere mais bitcodes, e se caso ainda continuar gerando, use o script acima e aguarde que as atualizações das mantenedoras dos frameworks lancem as devidas correções.

Conclusão

Esse é um erro bem sorrateiro, porque você pode desenvolver, buildar seu projeto sem problemas, mas ele só se revela quando você tenta gerar uma versão que será distribuida nas lojas. Isso deixa claro a importância de realiar realeases contantes do seu projeto e também a sempre verificar as atualizações.

Valeu e até logo.

Carregando publicação patrocinada...