静态库制作之依赖库

开始制作静态库(SDK)的时候一直有一个疑问,如果我的静态库要集成其他SDK怎么办,就像友盟分享,你除了添加友盟的静态库的同时,如果你要进行新浪微博分享的时候,你就要另外导入微博的SDK,如果要进行微信分享的时候,就要另外导入微信SDK,这个是怎么做的呢,其实很简单,还有很多SDK集成都要添加许多依赖库,和打包库的时候的一些设置都是有关系的,就在这里简单的介绍一下。

首先,当你创建一个静态库的后,点击项目名字,相应的target并选着build phase这一个标签的时候,你会看到下面有许多选项


静态库制作之依赖库_第1张图片
build phase选项列表

要想知道怎么制作一个调用其他静态库(SDK)的静态库,

就要先介绍一下这些选项吧:

  • Compile Sources:
    用来编译的一栏,这里面有你创建的或者拖进去的所有.m文件,这些文件都是用来编译的,你可以减去你不想参与编译的文件。.h文件是不参与编译的哦。
静态库制作之依赖库_第2张图片
Compile Sources
  • Link Binary With Libraries:
    你可以在这里引入静态库,可以引入系统的库(就是apple写的库),可以引入其他第三方的库,也可以引入自己写的库。
    当你把第三方的库拖入到项目里面的时候,这个地方就会显示,这个时候,你进行编译(command + b),是可以将这个库编译进自己的静态库里面的。默认也是将第三方库打包进静态库的,但是这样的话你自己的静态库就会变的很大,但是你的静态库也不是所有的功能都要用到其他的静态库吧,比如说友盟的分享,如果将新浪的SDK、
    微信的SDK都打包进自己的分享SDK的话,那么自己的分享SDK将变得很大,很臃肿,但是有的用户可能只是想接微信分享,不想接微博分享,那么岂不是很不好,不够灵活。
    相反,不讲其他的库打包进自己的静态库的话,就变得很灵活,可以在使用到那个库的时候就在外界导入那个库,这样即灵活又轻便。
静态库制作之依赖库_第3张图片
Link Binary With Libraries
  • Headers :
    头文件,这一栏是用来设置头文件的,你可以将所有的头文件分为几类,公开的public、私有的private和project,public是公开的接口,也是留给外界调用的,project默认的所有的头文件都在这里,我只是将需要外界调用的放到public里面,private顾名思义是私有的接口,我暂时还是没有怎么使用这一个。
    打包静态库的时候,有不需要放到库里面的头文件,但是没有又会报错的(比如其他.a库的头文件),这个时候你就可以在这里将这个库的头文件减掉,说成减掉形象一点,选好一点减号就没有了。
静态库制作之依赖库_第4张图片
Headers
  • Copy Bundle Rosources:
    这个bundle一栏有事干嘛用的呢,那就要先介绍一些这个bundle的作用了,其实我们的每一个项目都是在一个bundle里面,还记得那个[NSBundle MainBundle]这个 bundle就是我们项目所在的bundle,在项目里面我们还可以新建另一个bundle,这个bundle可以干嘛用呢,哈哈,毫不夸张的说,什么都可以放里面。
    但是我们一般还是喜欢放一些图片啊,nib文件啊等等。
    那为什么要将图片放到这个里面呢,当我们创建一个SDK的时候,需要加载一些图片,那么我们要怎么实现呢,就是将图片放到这个bundle里面然后在加载,同样可以用imageNamed:来加载,只要在图片的名字前面加上一个bundle的全名,再加上一个斜线就好了。
    在这里你可以把自己的bundle打包进静态库,当导入静态库的后,再将静态库手动的导入到项目中,也可以在这里不导入自己的bundle,之后将资源文件bundle和自己的静态库一同拖到项目里。
静态库制作之依赖库_第5张图片
Copy Bundle Rosources

上面对这些个选项进行了一个简单的介绍,下面我们来看看打包静态库的问题:

当我打包一个.framework类型的静态库的时候,我们向项目中导入.a静态库和.framework静态库,然后直接进行编译(commamd + b),这个时候两种静态库有点不太一样。
当我新建一个项目来接入自己的静态库的时候,.framework静态库还是需要在外界导入才能正常使用,而.a静态库就不用在从外界导入了,可以直接使用了。
查看来了一下原因,发现这个时候已经将.a静态库导入到了自己的库里面了,并且还发现自己的库变得很大。

当然你也可以选择不导入任何库的方式来打包,在将需要使用的静态库到入到项目中后,就会在Link Binary With Libraries这一项中看到刚刚导入的库,然后选择这些库,点击减号后就可以不引入这些库来进行打包了,这个时候这些库还是在制作静态库项目中的,而且使用也是正常的,不会报错,只是打包的时候不会将这些库打包进去而已,外界使用静态库的时候要手动将依赖库同时导入到项目中。这就是为什么我们集成一些SDK的时候要添加依赖库的原因,SDK中使用了依赖库的接口却没有将其打包进去,当然要在外界手动导入了。

至于我们集成SDK的时候要导入很多依赖库其实是一样的道理的,我们在自己的库里面使用到了系统的库的接口,在其他应用集成我们的库的时候就一样要导入相应的依赖库,才能保证正常的使用,不报红。

这篇文章是根据自己的经验和测试总结的,仅供参考,如果有不恰当的地方还望指出,将完善,以免误导读者,浪费大家的时间。

你可能感兴趣的:(静态库制作之依赖库)