适配iOS 18:检测并移除三方库中的 bitcode 部分
适配iOS 18:检测并移除三方库中的 bitcode 部分
四月份开始,AppStore 不再接收 Xcode 16 之下的 Xcode 构建,而新版本,必须移除项目中的 bitcode 支持。
#!/bin/bash
#
# 检测 bitcode 脚本
if [[ -z $1 ]]; then
echo "参数1: 项目目录,或 framework 路径,或 .a/.ipa/.app 路径"
echo "参数2: 是否移除 bitcode"
exit 1;
fi
readonly RemoveBitcode="$2";
TestBitcode() {
local libPath="$1"
local libName="$2"
# 判断静态库与动态库
local libType=$(file "$libPath")
# 库支持的架构
local libInfo=$(lipo -info "$libPath")
# 库支持的架构
IFS=' ' read -r -a libArch <<< "${libInfo#*re: }"
if [[ "$libType" =~ "dynamically" ]]; then
libType="\033[31m动态库\033[0m"
else
libType="\033[32m静态库\033[0m"
fi
for arch in $libArch; do
# 静态库检测 bitcode
local bitcode1=$(otool -arch "$arch" -l "$libPath" | grep -q __bitcode | wc -l | tr -d ' ')
if [[ $bitcode1 > 0 ]]; then
echo "$(printf "%-50s" "$libName") $libType $(printf "%-4s" "$bitcode1") $libPath"
# 移除 bitcode
if [[ -n "$RemoveBitcode" ]]; then
xcrun bitcode_strip -r "$libPath" -o "$libPath"
fi
fi
# 动态库检测 bitcode
local bitcode2=$(otool -arch "$arch" -l "$libPath" | grep -E '__LLVM' | wc -l | tr -d ' ')
if [[ $bitcode2 > 0 ]]; then
echo "$(printf "%-50s" "$libName") $libType $(printf "%-4s" "$bitcode2") $libPath"
# 移除 bitcode
if [[ -n "$RemoveBitcode" ]]; then
xcrun bitcode_strip -r "$libPath" -o "$libPath"
fi
fi
done
}
SearchPath() {
if [[ -d "$1" ]]; then
local name=$(basename "$1")
if [[ "$name" =~ ".framework"$ ]]; then
# framework 库
local rawName="${name%.framework*}"
TestBitcode "$1/$rawName" "$name"
elif [[ "$name" =~ ".app"$ ]]; then
# .app 包
local rawName="${name%.app*}"
TestBitcode "$1/$rawName" "$name"
SearchPath "$1/Frameworks"
else
# 继续查找子目录
for path in "$1"/*; do
local name=$(basename "$path")
if [[ -d "$path" ]]; then
if [[ "$name" =~ ".framework"$ ]]; then
local rawName="${name%.framework*}"
TestBitcode "$path/$rawName" "$name"
elif [[ "$name" =~ ".app"$ ]]; then
local rawName="${name%.app*}"
TestBitcode "$path/$rawName" "$name"
SearchPath "$path"
else
SearchPath "$path"
fi
elif [[ -f "$path" ]]; then
if [[ "$name" =~ ".a"$ ]]; then
TestBitcode "$path" "$name"
fi
fi
done
fi
elif [[ -f "$1" ]]; then
if [[ "$1" =~ ".ipa"$ ]]; then
echo "\n"
echo "\033[32m解压缩文件:.ipa 需要解压后才能检测\033[0m"
# ipa 包
ipaName=$(basename "$1")
rawName="${ipaName%.ipa*}"
zipPath="$(dirname "$1")/$rawName"
if [[ ! -d "$zipPath" ]]; then
mkdir "$zipPath"
fi
unzip -o "$1" -d "$zipPath" # >> /dev/null
echo "\033[32m解压缩完成\033[0m"
echo "\n"
echo "\033[32m开始检测:Bitcode\033[0m"
SearchPath "$zipPath"
elif [[ "$name" =~ ".a"$ ]]; then
# .a 静态库
TestBitcode "$path" "$name"
fi
fi
}
echo "\033[32m开始检测:包含 Bitcode 的构建将在下方输出\033[0m"
SearchPath "$1"
echo "\033[32m完成检测\033[0m"
原文地址:https://blog.csdn.net/mlibai/article/details/146323494
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/589424.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/589424.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!