返回

解决 iOS 提交错误 ITMS-90482:移除可执行文件 Bitcode

IOS

解决 iOS 应用提交时 ITMS-90482 错误:可执行文件包含 Bitcode

当向 App Store 提交 iOS 应用时,遇到 “ITMS-90482: Invalid Executable - The executable 'oladoc.app/Frameworks/TwilioVideo.framework/TwilioVideo' contains bitcode” 错误是一个常见问题。这个错误表明应用中包含的 TwilioVideo.framework 仍然带有 Bitcode,而苹果公司已经不再支持 Bitcode。下文将详细分析此问题,并提供有效的解决方案。

问题分析

苹果公司自 Xcode 14 开始已弃用 Bitcode,并在 Xcode 16 中完全移除相关支持。该错误通常出现在使用了包含 Bitcode 的第三方库时,比如本例中的 TwilioVideo.framework。虽然 Xcode 项目设置中已无 Bitcode 选项,但构建时仍可能将 Bitcode 嵌入到第三方库中,导致提交审核失败。

该问题的核心在于需要完全移除应用及其依赖库中的 Bitcode。

解决方案

以下列出几种解决 “ITMS-90482” 错误的方案,开发者可以根据自身情况选择合适的方案。

1. 更新 TwilioVideo SDK 到最新版本

Twilio 可能已在新版本的 SDK 中移除 Bitcode。检查并更新 react-native-twilio-video-webrtc 及其依赖的 TwilioVideo SDK 到最新版本是首要步骤。

  • 操作步骤:

    1. 通过包管理器(如 npm 或 yarn)更新 react-native-twilio-video-webrtc 到最新版本。
    npm install react-native-twilio-video-webrtc@latest
    # 或
    yarn upgrade react-native-twilio-video-webrtc@latest
    
    1. 进入 ios 目录,使用 CocoaPods 更新 TwilioVideo SDK。
    cd ios
    pod update TwilioVideo
    pod install
    
    1. 清理 Xcode 项目并重新构建。

      • 在 Xcode 中,选择 Product > Clean Build Folder
      • 重新构建项目。

2. 手动移除框架中的 Bitcode

如果更新 SDK 后问题仍然存在,可以尝试手动移除 TwilioVideo 框架中的 Bitcode。

  • 操作步骤:

    1. 找到 TwilioVideo.framework 文件。通常位于项目 Pods/TwilioVideo/ 目录下。
    2. 使用 find 命令查找框架中的 Bitcode 段:
    find YOUR_PROJECT_PATH/ios/Pods/TwilioVideo -type f -exec otool -l {} \; | grep __bitcode
    

    YOUR_PROJECT_PATH 替换为你的项目路径。如果没有输出任何内容,说明该框架可能已不含 Bitcode。如果有输出,则继续执行后续步骤。

    1. 使用 xcrun bitcode_strip 命令移除 Bitcode。

      xcrun bitcode_strip TwilioVideo.framework/TwilioVideo -r -o TwilioVideo.framework/TwilioVideo
      

    这段指令做了两件事:首先它会把原来的二进制备份到 TwilioVideo.framework/TwilioVideo.bck 文件。然后从原 TwilioVideo 二进制文件中删除了 bitcode 并用修改后的二进制替换了原来的二进制文件。

    1. 替换原有的 TwilioVideo 框架,清理 Xcode 项目,并重新构建。
      额外提示 : 可以创建一个构建脚本自动执行这个操作。

3. 修改 Podfile 添加 Post Install 脚本自动移除 Bitcode

为了简化流程,可以在 Podfile 中添加一个 Post Install 脚本,在每次 pod install 后自动移除 Bitcode。

  • 操作步骤:

    1. 打开项目的 Podfile 文件。

    2. 添加以下 Post Install 脚本:

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        if target.name == 'TwilioVideo'
          target.build_configurations.each do |config|
            config.build_settings['BITCODE_ENABLED'] = 'NO'
          end
    
           binary_path = target.product_reference.real_path
          if binary_path != nil
            puts "strip bitcode from #{target.name}"
                `xcrun bitcode_strip #{binary_path} -r -o #{binary_path}`
            end
        end
      end
    end
    
    1. 保存 Podfile 文件,并重新执行 pod install
      pod install
      

此脚本会在每次安装 Pod 后检查 TwilioVideo 框架,并自动移除其中的 Bitcode。同时也会确保编译设置里禁用掉 bitcode。

4. 使用 Xcode 构建设置排除特定架构的 Bitcode (可选)

虽然 Bitcode 已被弃用,但在某些特定情况下,旧版本的构建系统或第三方库可能仍会尝试生成 Bitcode。可以在 Xcode 构建设置中强制排除特定架构的 Bitcode。

  • 操作步骤:

    1. 打开 Xcode 项目,选择 Target。
    2. 进入 Build Settings
    3. 搜索 Other Linker Flags
    4. 添加 -fembed-bitcode-marker 选项,确保没有任何架构被强制包含 Bitcode。

    虽然此方法不是直接移除 Bitcode,但可以防止构建系统生成不必要的 Bitcode 数据,从而避免提交时的错误。

5. 联系 Twilio 技术支持

如果上述方法都无法解决问题,建议联系 Twilio 技术支持,获取官方的解决方案或最新的 SDK 版本信息。他们可能提供了特定版本的 SDK 或者新的解决办法。

总结

解决 ITMS-90482 错误的重点在于确保应用及其所有依赖库中都不包含 Bitcode。 通过更新 SDK、手动移除 Bitcode、使用 Post Install 脚本或调整 Xcode 构建设置,开发者可以有效解决此类问题,并顺利提交应用到 App Store。建议优先考虑更新 SDK 和使用自动化脚本的方式,以便于维护和后续的更新。同时,保持对第三方库更新的关注,及时升级到最新版本,是避免此类问题的有效措施。

相关资源: