使用ios 第三方有个不可避免的问题
就是某些静态库 使用了afn mbhud 等流行库
而公司的项目也用了这些库
如果把静态库直接导入,在编译的时候会报错duplicate symbol
代表 项目中有两份 了 ,重复导入了
文章讲的比较细致,就是裁剪过于繁琐了,在验证了这种方案的可行性
之后,我将这段繁琐的内容作了简单的shell脚本化,便于需要裁剪需求的
人减少一些工作,现将裁剪脚本提供出来。
验证方法是自己做个静态库 ,打一个MBProgressHUD进去
然后在项目中引入这个静态库,尝试在项目中引入MBProgressHUD
造成duplicate symbol 错误,然后运行脚本 裁剪库后修改库名
再次运行,项目能跑通 代表裁剪成功。
这里我只做了裁剪一个import文件 如果需要裁剪多个文件
需要自己动手修改这个脚本。
#!/bin/sh
echo "请输入要裁剪的库 和裁剪内容 中间用逗号隔开比如:"
read -p "libstaticLibA MBProgressHUD :" a b
echo "裁剪 $a 中 $b 库"
inputLib=$a
deletedItem=$b
k='lipo -info '$inputLib'.a'
A=`$k`
echo $A
# Architectures in the fat file: libIOTCAPIs_ALLT.a are: armv7 i386 x86_64 arm64
arrayName=("armv7" "armv7s" "i386" "x86_64" "arm64")
cutArr=()
for var in ${arrayName[@]};
do
if [[ $A == *$var* ]]
then
cutArr=(${cutArr[@]} $var)
fi
done
echo "包含数组: "${cutArr[@]}
B=''$inputLib'.a'
E=''$deletedItem'.o'
D=$inputLib
F=''
for var in ${cutArr[@]};
do
c=''$D'_'$var'.a'
echo "瘦身"$c
lipo $B -thin $var -output $c
# echo "删除前包含"$c
# ar -t $c
echo "删除" $E
ar -d -sv $c $E
# echo "删除后包含"$c
ar -t $c
F=''$F' '$c''
done
echo '合并字符串'$F
final=''$D'_final.a'
echo '去除头文件后瘦包合并出最终包'
lipo $F -create -output $final
echo '删除多余的瘦包'
for var in ${cutArr[@]};
do
c=''$D'_'$var'.a'
rm $c
done
echo '带final 后缀为移除版本 可以修改名称后尝试在项目中添加冲突库了'