Xcode16 framework contains incomplete bitcode. To compile binaries with complete bitcode, open Xc...

一觉醒来,准备打包上传 appstore 的时候,天塌了!!!

image.png

苹果一年一度都要给开发者挖几个坑,还要求强制升级 Xcode,升级 Xcode 还要升级 mac 系统,真是明知有坑还非跳不可。我就想说 Xcode 是我用过的最难用的编译器,真是越升级越难用。2025年 Xcode16 的坑我先给大家趟过了,有遇到的童鞋可以参考一下。

问题描述:如果项目中打开了 bitcode 或者某些 sdk 里面用到了bitcode,用 Xcode16 打包提交 appstore 的时候会遇到以下报错。framework contains incomplete bitcode. To compile binaries with complete bitcode, open Xcode and choose Archive in the Product menu。

iShot2025-03-26 10.27.55.png

解决办法:
方案一(治标不治本,不推荐):针对此问题用一个脚本遍历安装包里面所有framework,移除bitcode即可。
第一步、保存以下脚本至桌面,命名为remove_bitcode.sh。

#!/bin/bash

# 检查输入参数
if [ $# -ne 1 ]; then
    echo "Usage: $0 <xcarchive_path>"
    exit 1
fi

ARCHIVE_PATH="$1"

# 验证xcarchive路径是否存在
if [ ! -d "$ARCHIVE_PATH" ]; then
    echo "错误:指定的xcarchive路径不存在 - $ARCHIVE_PATH"
    exit 1
fi

# 检查必要工具
command -v otool >/dev/null 2>&1 || { echo "错误:请先安装Xcode命令行工具"; exit 1; }
command -v xcrun >/dev/null 2>&1 || { echo "错误:找不到xcrun命令"; exit 1; }

# 主处理逻辑
find "$ARCHIVE_PATH" -name "*.framework" | while read framework; do
    # 获取framework核心可执行文件路径
    framework_name=$(basename "$framework" .framework)
    executable="$framework/$framework_name"
    
    if [ ! -f "$executable" ]; then
        echo "警告:跳过无效的framework - $framework"
        continue
    fi

    echo "正在检测: $executable"
    
    # 检测Bitcode存在性
    if otool -l "$executable" | grep -q "segname __LLVM"; then
        echo "检测到Bitcode,正在处理..."
        
        # 创建临时文件
        tmp_file=$(mktemp)
        
        # 移除Bitcode并处理结果
        if xcrun bitcode_strip -r "$executable" -o "$tmp_file"; then
            # 替换原始文件并保持权限
            mv -f "$tmp_file" "$executable"
            chmod +x "$executable"
            echo "成功移除Bitcode"
        else
            echo "错误:Bitcode移除失败"
            rm -f "$tmp_file"
            exit 1
        fi
    else
        echo "未检测到Bitcode"
    fi
done

echo "操作完成"
exit 0

第二步、赋予脚本执行权限:chmod +x remove_bitcode.sh。

第三步、打开“Organizer”窗口(Window -> Organizer”),找到刚才打包的文件,右键鼠标右键 Show Finder,找到后缀.xcarchive文件。

第四步、执行脚本:./remove_bitcode.sh /path/to/your.xcarchive ,移除安装包里面 framework 的 bitcode。

第五步、回到Organizer继续上传即可。

方案二(推荐):在 podfile 中添加脚本代码。
第一步、在Podfile中 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/xxx/Frameworks/xxx.framework/xxx"
 ]
 framework_paths.each do |framework_relative_path|
   strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
 end

第二步、找到出现问题的Frameworks路径,放到framework_paths数组中。

第三步、删除Pods中有问题的framework,重新执行pod install。

第四步:再次Archive打包上传即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容