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

蘋果一年一度都要給開發(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。

解決辦法:
方案一(治標不治本,不推薦):針對此問題用一個腳本遍歷安裝包里面所有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打包上傳即可。