iOS 静态库

周末总结一下静态库的打包过程,加强记忆!

一、静态库简介

1.1、库:是程序代码的集合,是共享程序代码的一种方式。
1.2、根据源代码的公开情况,库可以分为2种类型
  • 开源库
    公开源代码,能看到具体实现,比如我们常见的:AFNetworking、SDWebImage、MJRefresh 等等

  • 闭源库
    不公开源代码,是经过编译后的二进制文件,看不到具体实现
    主要分为:静态库、动态库

1.3、静态库和动态库的存在形式
  • 静态库:.a.framework
  • 动态库:.dylib.framework
1.4、静态库和动态库在使用上的区别
  • <1>静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝。如下图所示:
  • <2>动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存空间。

需要注意的是:iOS平台 在 iOS8 之前,苹果不允许第三方框架使用动态方式加载,从 iOS8 开始允许开发者有条件地创建和使用动态框架,这种框架叫做 Cocoa Touch Framework。虽然同样是动态框架,但是和系统 framework 不同,app 中使用 Cocoa Touch Framework 制作的动态库 在打包和提交 app 时会被放到 app main bundle 的根目录 中,运行在沙盒里,而不是系统中。也就是说,不同的 app 就算使用了同样的 framework,但还是会有多份的框架被分别签名,打包和加载。不过 iOS8 上开放了 App Extension 功能,可以为一个应用创建插件,这样主app和插件之间共享动态库还是可行的。
苹果系统专属的framework 是共享的(如UIKit), 但是我们自己使用 Cocoa Touch Framework 制作的动态库是放到 app bundle 中,运行在沙盒中的

1.5、 静态库应用场景

保护自己的核心代码,比如国内的环信,百度地图,高德地图,友盟,个推,他们掌握有核心技术,同时是又希望更多的程序员来使用其技术,因此采用"闭源"的方式开发使用,你只能看到他们的.h文件以及一些不重要的.m文件
将 MRC 的项目,打包成静态库, 可以在ARC下直接使用, 不需要转换

1.6、静态库的特点

.a.h 组成
看不到具体实现的代码

二、.a静态库的制作

2.1、新建项目,选择Cocoa Touch Static Library
2.2、定义一个类方法+ (void)test;,在.h文件暴露出来
2.3、添加暴露的文件
2.4、适配最低版本
2.5、设置支持多个架构的的静态库

Build Active Architecture Only 设置为NO

2.6、分别在真机和模拟器下编译 DebugRelease(Edit Scheme - Run - Build Configuration - Release)

提示:.a静态库 在 测试版本 与 发布版本 的特点
Debug(调试版本):1、调试版本会包含完整的符号信息,以方便调试;2、调试版本不会对代码进行优化
Release(发布版本): 1、发布版本不会包含完整的符号信息;2、发布版本的执行代码是进行过优化的;3、发布版本的大小会比调试版本的略小;4、在执行速度方面,发布版本会更快些,但不意味着会有显著的提升


2.7、如果想要一个静态库, 既可以在模拟器上运行, 也可以在真机上运行,就需要把两个.a静态库合成一个 .a静态库
终端命令合并
cd 到 Products目录,输入命令(如果是Debug模式,将Release替换成Debug即可)
lipo -create Release-iphoneos/libMXTool.a Release-iphonesimulator/libMXTool.a -output NewLibMXTool.a

提示:NewLibMXTool.a 是生成的新的 .a,合成的.a的大小是合成前两个.a大小的和

2.8、新建一个demo测试 上面我们创建的 .a 文件 与 暴露文件 是否可以使用

三、.framework 静态库的制作

3.1、新建项目,选择Cocoa Touch Framework
3.2、创建一个继承于NSObjectMXTool类,并写一个类方法+ (void)test;,把该类方法在.h文件暴露出来

提示:记得把需要暴露的 .h文件导入到在创建静态库的时候生成的 .h 文件里面,如上面的 MXFrameworkTool.h

3.3、修改适配的最低版本
3.4、把.framework的库由动态库改为静态库
3.5、设置支持多个架构的的静态库

Build Active Architecture Only 设置为NO

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

推荐阅读更多精彩内容