Search code examples
iosxcodereact-nativehermes

Asset validation failed, NSLocalizedRecoverySuggestion=Invalid Executable. The executable hermes.framework/hermes' contains bitcode


if a build the app it is correct. archieve is also correct. but when i upload app to Test Flight i get this error o MacOS 15 , Xcode 16 .

<IDEDistributionContext: 0x7f9ef32a6d50; archive = "<IDEArchive: 0x6000171f4620>", distributionMethod="(null)", team="(null)">
    <IDEDistributionContext: 0x7f9ef30a67d0; archive = "<IDEArchive: 0x6000171f4620>", distributionMethod="(null)", team="(null)">
    <IDEDistributionContext: 0x7f9ef0aff8d0; archive = "<IDEArchive: 0x6000171f4620>", distributionMethod="(null)", team="(null)">
</IDEDistributionContext: 0x7f9ef0a1a0f0>
2024-09-25 10:05:15 +0000 [MT] Upload for archive TrueCaller had issues:
(
    "<IDEDistributionIssue: severity(error), error(Error Domain=ContentDelivery Code=90482 \"Asset validation failed\" UserInfo={IDEDistributionIssueSeverity=3, NSLocalizedDescription=Asset validation failed, NSLocalizedRecoverySuggestion=Invalid Executable. The executable 'TrueCaller.app/Frameworks/hermes.framework/hermes' contains bitcode. (ID: 70394fde-4ed8-40ca-b6a8-2aabb46b397a)})>"

Solution

  • I was getting the same issue after upgraded to Xcode 16 and iOS 18.

    You can solve this issue by following this.

    1. Open Podfile

    2. Search for word post_install

    3. If post_install not found then just directly paste the below code just before the last end keyword

       post_install do |installer|
      
       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
      
    4. In case you have already post_install has been used then copy and past the below script inside that.

         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
      
    5. Do pod install

    6. Do archive again and try upload