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

一覺醒來,準備打包上傳 appstore 的時候,天塌了?。。?/p>

image.png

蘋果一年一度都要給開發(fā)者挖幾個坑,還要求強制升級 Xcode,升級 Xcode 還要升級 mac 系統(tǒng),真是明知有坑還非跳不可。我就想說 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

# 檢查輸入?yún)?shù)
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核心可執(zhí)行文件路徑
    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,正在處理..."
        
        # 創(chuàng)建臨時文件
        tmp_file=$(mktemp)
        
        # 移除Bitcode并處理結(jié)果
        if xcrun bitcode_strip -r "$executable" -o "$tmp_file"; then
            # 替換原始文件并保持權(quán)限
            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

第二步、賦予腳本執(zhí)行權(quán)限:chmod +x remove_bitcode.sh。

第三步、打開“Organizer”窗口(Window -> Organizer”),找到剛才打包的文件,右鍵鼠標右鍵 Show Finder,找到后綴.xcarchive文件。

第四步、執(zhí)行腳本:./remove_bitcode.sh /path/to/your.xcarchive ,移除安裝包里面 framework 的 bitcode。

第五步、回到Organizer繼續(xù)上傳即可。

方案二(推薦):在 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

第二步、找到出現(xiàn)問題的Frameworks路徑,放到framework_paths數(shù)組中。

第三步、刪除Pods中有問題的framework,重新執(zhí)行pod install。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容