skip to Main Content

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)})>"

2

Answers


  1. Chosen as BEST ANSWER

    create a file in the ios folder with name `

    handle_bitcode.sh`

    use this commnad

    touch handle_bitcode.sh

    and then run this command

    sudo chmod +x handle_bitcode.sh

    and paste this script

    #!/bin/bash
    
    # Function to check if a binary contains bitcode
    check_bitcode() {
      local binary_path=$1
      if otool -l "$binary_path" | grep -q __LLVM; then
        echo "$binary_path contains bitcode."
        echo "$binary_path" >> bitcode_frameworks.txt
      else
        echo "$binary_path does not contain bitcode."
      fi
    }
    
    # Function to strip bitcode from a binary
    strip_bitcode() {
      local binary_path=$1
      local output_path="${binary_path}_stripped"
      xcrun bitcode_strip "$binary_path" -r -o "$output_path"
      echo "Stripped bitcode from $binary_path and saved to $output_path"
    }
    
    # Function to replace original binary with the stripped version
    replace_framework() {
      local original_path=$1
      local stripped_path="${original_path}_stripped"
    
      if [ -f "$stripped_path" ]; then
        echo "Replacing $original_path with $stripped_path..."
        rm "$original_path"
        mv "$stripped_path" "$original_path"
        echo "Replaced $original_path successfully."
      else
        echo "Stripped binary $stripped_path not found. Skipping."
      fi
    }
    
    # Function to disable Bitcode in the Xcode project
    disable_bitcode_in_project() {
      # Automatically detect the Xcode project file
      local xcodeproj_file=$(find . -name "*.xcodeproj" | head -n 1)
      if [ -z "$xcodeproj_file" ]; then
        echo "Xcode project not found. Exiting."
        exit 1
      fi
      local xcodeproj_name=$(basename "$xcodeproj_file" .xcodeproj)
    
      echo "Disabling Bitcode in Xcode project $xcodeproj_name..."
      /usr/libexec/PlistBuddy -c "Set :buildSettings:ENABLE_BITCODE NO" "$xcodeproj_file/project.pbxproj"
    
      # Clean and rebuild the Xcode project
      echo "Cleaning the build folder..."
      xcodebuild clean -workspace "$xcodeproj_name.xcworkspace" -scheme "$xcodeproj_name" -configuration Debug
    
      echo "Building the project..."
      xcodebuild -workspace "$xcodeproj_name.xcworkspace" -scheme "$xcodeproj_name" -configuration Debug
    
      echo "Process completed successfully!"
    }
    
    # Step 1: Check frameworks for Bitcode
    echo "Checking frameworks for Bitcode..."
    
    # Remove old bitcode_frameworks.txt if it exists
    rm -f bitcode_frameworks.txt
    
    # Check frameworks in Pods and the ios directory
    if [ -d "Pods" ]; then
      echo "Checking frameworks in Pods..."
      find Pods -name '*.framework' -type d | while read -r framework; do
        binary_name=$(basename "$framework" .framework)
        binary_path="$framework/$binary_name"
        if [ -f "$binary_path" ]; then
          check_bitcode "$binary_path"
        fi
      done
    fi
    
    echo "Checking frameworks in the ios directory..."
    find . -name '*.framework' -type d | while read -r framework; do
      binary_name=$(basename "$framework" .framework)
      binary_path="$framework/$binary_name"
      if [ -f "$binary_path" ]; then
        check_bitcode "$binary_path"
      fi
    done
    
    echo "Bitcode check completed. Frameworks containing bitcode are listed in bitcode_frameworks.txt."
    
    # Step 2: Strip Bitcode from all frameworks that contain it
    if [ -f bitcode_frameworks.txt ]; then
      echo "Stripping bitcode from frameworks..."
      while read -r binary_path; do
        strip_bitcode "$binary_path"
      done < bitcode_frameworks.txt
    else
      echo "No frameworks found containing bitcode. Exiting."
      exit 1
    fi
    
    # Step 3: Replace original frameworks with stripped versions
    echo "Replacing original frameworks with stripped versions..."
    while read -r binary_path; do
      replace_framework "$binary_path"
    done < bitcode_frameworks.txt
    
    # Step 4: Disable Bitcode in the Xcode project and rebuild
    disable_bitcode_in_project
    

    in the termianl run this in ios folder

    ./handle_bitcode.sh


  2. 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

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search