iOS开发 引用第三方库出现duplicate symbol时的处理方法

使用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 后缀为移除版本 可以修改名称后尝试在项目中添加冲突库了'

给懒得粘贴的人的下载链接

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_Damon

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值