删除静态库中的静态库~
2016-05-09
编程
iOS静态库开发的故事
假设我们要做一个SDK给别人用,有两个选择,framework包,a包.他们有啥区别?framework包里面可以包含图片资源.a包里面只能是纯代码.所以a文件的容量真的很小很小.
万一
,我们制作静态库的时候调用了第三方库,在打包的时候,如果不把这些第三方库去掉,会有什么效果呢?
使用我们SDK的人如果也使用了相同的第三方库,就会导致在编译的时候,出现duplicate信号,因为两个相同的类出现了,所以呢,如果一定要使用a包,只能手动的将包内的第三方库给去掉.
OK, 我们来看看删掉一个.a
静态库中的某个第三方静态库需要怎么搞
Context
我们做了一个.a
静态库,其中包含了
Masonary
JFMinimalNotification
FCFileManager
.....
第一步:
lipo * -thin [platform] dir/new.a
platform是平台,什么x86啊,arm之类的
ar -t dir/new.a
解压出来
cd dir && ar xv new.a
跳转到那个文件夹
rm *MAS*
rm JF*
rm ...
删啊删啊删
cd ..
ar rcs lib_1.a dir/*.o
重新再打包成lib_1.a
lipo -create ... -output new_clean_static_lib.a
最后生成多平台的静态库
这有什么问题嘛?
嗯,你发布的SDK肯定是多平台的,也就是说,你需要有多少个平台,上面的事情就得做多少次~~
So
,我写了一个Python脚本专门来解决这个难过的事情,VKRemove
Function 1
python VKRemove.py -lp xxx.a
返回这个静态库里面包含的平台
This library contains:i386 armv7 x86_64 arm64
Function 2
python VKRemove.py -lb xxx.a
返回这个静态库里面所有的库
...'View+MASAdditions.o', 'ViewController+MASAdditions.o', 'XuanWheelBluetoothManager.o'...
感觉很高端了对吧?
Function 3
python VKRemove.py -i XuanWheelSDK.a -rm FCFileManager HMSegmentedControl- JFMinimalNotification UIView+Round UIImage+ImageEffects.o MAS
这会生成一个xxx.a.new,它包含了之前所有的平台,并且去掉了指定的所有第三方库.
感觉更高端了吧?
Function 4
python VKRemove.py -i XuanWheelSDK.a -from clear.txt
每次都输入那么长的命令太难过了,不如从文件输入吧~
当然咯,Function 3中的-
是干什么用的,可以直接去Github上面看,虽然是英文的~