简介
在开发中.framework静态库还是比较常见的,比如:SDK,公司间的代码合作等。我们可以把一些不愿意让别人见到的代码,用静态库的方式把它隐藏起来,只留下.h文件显示方法供编程人员使用。而.a文件出了静态库本身外,还需要引入.h文件,而.framework就不需要如此,由于.framework的方便性所以一般情况下我们见到的较多。
区别
- .a静态库是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
- .a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用(内部直接包含了要展示方法的.h文件)。
.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_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
由上图可以看到,我们把生成的静态库导入我们的测试工程中,打印出结果,可见我们的生成是正确的。
注意事项:
- 注意导入的方式
- 注意设置Mach-O格式
- 记得要把合并后的文件与第一次生成的静态库里的二进制文件替换。
补充内容: bundle文件
在项目中另一个常见的额就是bundle文件了,主要用来进行资源的管理,用以存放xib文件或者图片等资源,但是需要注意的是bundle文件是是静态的,不进行编译的资源文件。所以,要使用bundle中的资源,就需要找到相应的资源路径。
- 创建方式:
桌面上创建一个文件夹,把文件夹的后缀改为. bundle这时他就变成一个bundle文件了,这时我们右键显示包内容就可以把对应的图片资源等放进文件中,然后把他丢进工程中就可以使用了。 -
使用方法:
ViewController_m_—_Edited.png
这里介绍一种简单的方法,如上图所示,我们在工程中引入了bundle文件,我们要得到他的路径对他进行引用,但是如果我们每次都写文件的路径比较繁琐,我们可以写成预编译语句,这样就可以方便许多。而且bundle文件在多人开发中可以起到很好的作用,解决了多人开发中图片名字一样出现的问题。
后记
回顾这篇文章主要介绍了.a静态库和. framework静态库的创建和使用,另外还有bundle文件在工程中对图片资源的管理,通过使用这些小工具,可以帮助我们解决开发中的多种问题。还是值得好好记录下的。
网友评论