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

简介

在开发中.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静态库创建

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文件在工程中对图片资源的管理,通过使用这些小工具,可以帮助我们解决开发中的多种问题。还是值得好好记录下的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容