ios专题iOS拾遗iOS

创建使用.framework和.a静态库

2016-07-25  本文已影响1010人  夜3033

简介

在开发中.framework静态库还是比较常见的,比如:SDK,公司间的代码合作等。我们可以把一些不愿意让别人见到的代码,用静态库的方式把它隐藏起来,只留下.h文件显示方法供编程人员使用。而.a文件出了静态库本身外,还需要引入.h文件,而.framework就不需要如此,由于.framework的方便性所以一般情况下我们见到的较多。

区别

.a静态库的创建

.a静态库的创建

新建一个项目,如上图所示,左侧的选项可以新建.framework静态库,而右侧的则是创建.a的静态库。


STaticlib_xcodeproj.png

这里我们可以删除自带的.h和.m文件换成我们要打包的内容。这里为了测试,简单的在文件中写一个方法。当我们静态库创建成功之后,引入这个文件中会打印这句话。


写一个方法 添加Headers Phase STaticlib_xcodeproj.png
通过上述操作我们已经准备好了要打包的文件,并把想要暴露的文件添加完毕,下面我们要进行打包前的设置。
设置编译模式,打开Xcode菜单Product--->Scheme--->Edit Scheme,改为release模式,因为最终打包是要用release模式。
STaticlib_xcodeproj.png
编译机器的选择,如上图,如果我们选择的是NO,那么则会适配所有的机型,当然了编译后的包的大小会有点大,如果我们选择YES,那么编译的包只会适应当前机型以及版本低的机型,当我们用高于这个手机型号的机型时可能不能用。这里就看自己需要了。
下面就需要我们进行编译静态库了,注意的是我们要在真机环境和模拟器环境各编译一次。然后得到两个静态的二进制文件。下图为真机环境举例:
libSTaticlib_a.png
编译后我们会得到真机和模拟器两个静态文件,下面我们要打开终端去合并他。合并的命令为:
lipo -create 静态文件1路径 静态文件2路径 -output 输出最终文件的目的路径
终端截图
合并成功那么现在我们就去试试吧 ,首先我们新建一个叫做Test的测试工程,把我们的.a的静态文件加进去同时把我们需要暴露的.h文件加进去,如下图:
测试截图
通过打印结果我们可以看到,走了我们自己写的方法。静态.a文件打包成功。

.framework静态库的创建

下面我们来创建一个常见的.framework静态库。

.framework静态库创建
FrameWork_xcodeproj.png
如上图所示,我们在新建的项目中加入一组.h和.m文件,文件中写了一个简单的方法,并把想要暴露的.h文件加到Public的位置,此时的静态库还是红的的,表示并没有创建。
和.a文件一样设置编译模式,打开Xcode菜单Product--->Scheme--->Edit Scheme,改为release模式,因为最终打包是要用release模式。同时我们也可设置他所使用的版本。通过General里的Deployment Info选项进行设置。
修改生产的Mach-O格式
然后修改生产的Mach-O格式。
编译机器的设置方法与.a设置相同,根据自己的需求进行设置。
完成上述步骤后,我们一如.a的设置一样在真机和模拟器环境下分别编译。
编译后图片
编译结束后我们可以看到framework的颜色已经变为黑色,这是我们
右键show in Finder这次合并的是目录下的箭头所示的文件。合并方法与.a文件相同
lipo -create 静态文件1路径 静态文件2路径 -output 输出最终文件的目的路径
apple_—_-bash_—_80×24.png
这样我们在桌面上生成了一个文件,现在我们进行我们的最后一步,用这个文件与上图中.framework文件下的 模拟器或者真机下对应的这个文件替换下来。如上图中红色箭头的文件,把箭头所示文件替换下来。
这样我们替换后的文件找到,他就是我们要的. framework静态文件。
下面我们去试试我们新生成的静态库
使用步骤1 使用步骤2

由上图可以看到,我们把生成的静态库导入我们的测试工程中,打印出结果,可见我们的生成是正确的。
注意事项:

补充内容: bundle文件

在项目中另一个常见的额就是bundle文件了,主要用来进行资源的管理,用以存放xib文件或者图片等资源,但是需要注意的是bundle文件是是静态的,不进行编译的资源文件。所以,要使用bundle中的资源,就需要找到相应的资源路径。

后记

回顾这篇文章主要介绍了.a静态库和. framework静态库的创建和使用,另外还有bundle文件在工程中对图片资源的管理,通过使用这些小工具,可以帮助我们解决开发中的多种问题。还是值得好好记录下的。

上一篇下一篇

猜你喜欢

热点阅读