iOS制作framework时框架重复

在制作iOS的SDK供他人使用时,我们一般采用framework静态库和.a静态库。 这里只讲framework,当framework库打包好了之后,那么便会出现一个问题。

 问题提出:

   即使是我们自己开发SDK时,也不免会用到一些第三方框架。之后如果不做任何处理,就进行framework的打包,初看是没有问题的。但一旦他人接入我开发的SDK,就会报重复文件的错误。 原因就是因为,我的SDK中用了A、B第三方框架,而需要接入我们SDK的人,他的工程中恰巧又用了A、C框架,这个时候,我们的A框架便重复了。  那么该怎么去解决呢?

解决:

    处理的方式有两种,各有优缺点:

1.修改类名,变成自己的私有框架。(打包之前)

    在打包成framework之前,在每个第三方框架的类名的前面,加一个前缀(随便你加什么)。并不是加完前缀就可以了,加完前缀当然就是把类名都修改了,肯定会报错的,这个时候就一一细心的把所有报错的地方看一遍,一般是类名错了,修改过来就可以了。 可能还有一些枚举,结构体什么的。   这是个细活,但是一劳永逸,这个框架以后就是属于你自己的了,随便你怎么去修改。跟其他工程中的类,也不会有任何冲突。

    优点:一劳永逸,不会有任何冲突,并且可以任意去修改类里面的方法。需要接入SDK的项目工程也是一样,第三方库也可以任意修改,井水不犯河水。

    缺点:很明显。 如果第三方库比较大的话,SDK会比较大。如果项目需要接的SDK过多,主项目会更大。

2.剥离第三方库。 (打包之后)

    在打包好之后,我们再把framework分解,将第三方库一一剥离,就是删除,再合并,就可以了。因为内容比较多,所以优缺点先提出来:

    优点:这样,你所用的第三方库都被剥离出去了,framework所占的空间就会比较小。一般来说,framework所用第三方框架都会是比较常见的,所以第三方库大家都大同小异,这样剥离出去,大家共用同一份,工程就不会太大。

    缺点:一,这样公用一份第三方库,就不能随意去修改第三方库里面的代码了,会影响到所有的framework。 二,因为每次修修改了SDK,都需要重新打包,当然也需要重新分离一次第三方库,比较繁琐。

    剥离的过程是非常繁琐的,大概分为 分解成5个步骤:拆分为5个构建版本——分解为.o文件(*5)——删除第三方库(*5)——.o文件合成(*5)——合成兼容版本。

     现在我们需要做一下准备工作,一般,framework分有真机版和模拟器版,因为工程中我们需要真机和模拟器分别调试。其实这两个framework是可以合二为一的,这样一个framework就可以兼容不同的架构,并且在打包上架时,只会调用真机的framework的架构,不会造成ipa包过大,这点不用担心。

 

生成framework之后,右键点击show in finder,可以看到目录下有2个framework,2个framework下都存在着YR_webChat文件,我们现在要将这两个文件合并。打开终端:

 

1.先CD到一个目录,我一般会选择products目录。

2.再把模拟器和真机的framework下的YR_webChat合并。(文件拖一下就显示出路径了)

sudo lipo -create A文件 B文件 -output 重命名

3.得到了一个兼容的YR_webchat,看一下有什么架构模式。(一般是5个)

lipo -info 文件

这下面有5个架构模式。i386 x86_64(模拟器) armv7 armv7s arm64 (真机)

4.创建5个空文件夹,并把YR_webChat的架构模式一一分解到文件中。

YR_webChat是我取的名字,YR_webChat_i386同理。

5.进入到每个目录中,一一分解。 (跟4一样,要5次)

再cd .. 出来,再继续下一个。

6.查看文件夹中的.o文件,把第三方类删除掉。(这个应该要仔细)

7.5个不同的架构,都要删一次,然后再合并。(同4,要5次)

8.最后,把5个架构,合成一个YR_webChat。(先把之前的YR_webChat删掉,以防重名报错)

9.最后,把新生成的YR_webChat,替换掉Release-iphoneos中的framework下的YR_webChat。

10.大功告成,这个Release-iphoneos下的framework就是你要的,分离了第三方库,并且支持所有架构模式的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值