这篇主要是记录一下 iOS 下静态库与动态库的打包流程,以便之后用到时快速查阅,供本身也供你们学习记录。同时也简述了一下 动态库
与 静态库
的区别。微信
库是写好的现有的,成熟的,能够复用的代码。本质上来讲库是一种可执行代码的二进制形式,能够被操做系统载入内存执行。库有两种:静态库
和 动态库
。iphone
连接时会被完整的复制到可执行文件中,被屡次使用就有多分拷贝。以下图,抖音和微信的可执行文件加载静态库时,每一个可执行文件连接时都要加载这份静态库。学习
系统的动态库与咱们本身打包的动态库还不大同样,先来看一下系统的动态库。测试
系统动态库: 连接时不复制,程序运行时由系统动态加载到内存,系统只加载一次,多个程序共用,节省内存。 例以下图:抖音和微信的可执行文件加载动态库时,内存中只有一份动态库,不用加载到可执行文件。ui
本身打包的动态库: 本身打包的动态库,则是在应用程序里的,可是与静态库不一样,它不在可执行文件中。 操作系统
咱们在 iOS 下能建立的静态库分两种,分为 .a
和 .framework
两种。code
首先建立一个工程,选择为 Static Library
类型。 cdn
而后咱们在 Products 下就能够看到一个 .a 文件,可是如今它仍是不存在的,须要咱们 command+B
编译一下,就能够找到它了,因为咱们是在模拟器下编译的,因此它生成在 “Debug-iphonesimulator” 文件夹下。 blog
若是添加了新的 .h 文件,须要在 Phases 中把头文件加上,此处 FanjiduoStatic.h
是建立工程时默认加进去了。 ip
(1)首先建立一个工程,选择为 Framework
类型。
建立好发现是 .framework
结尾了
(2)这里要设置一下,由于默认是动态库,要改成静态库。Build Settings => Mach-O Type
改成 Static Library:
首先编写了一个 Student
类,实现了一个 study
的打印方法, 而后把 Student
类 import 进了 FanjiduoFrameworkTest.h 总的头文件里面。
而后在 build Phases => Headers
中把头文件公开,从默认的 Project 中拖拽到 Public 中:
创建一个名为 staticTestDemo 的工程引入 framwork
试一下,发现能够成功调用 study
方法!
动态库有不少种,目前像 .tbd .dylib
这种的动态库咱们没法打包,只能打包 .framework
格式的动态库。 系统默认设置的就是动态类型,而后就是将新添加的头文件公开,整个流程和 .framework
静态库同样,这里就再也不赘述了。
建立一个项目来测试一下这个动态库,直接拖入工程,引入头文件,调用动态库中的方法,而后编译,编译经过没问题。 可是当咱们运行的时候,会报错误 "Reason:image not found"
,以下图:
General => Frameworks, Libraries, and Embedded Content
" 中,把
"Do Not Embed
" 改成
"Embed & Sign
" 便可,以下图:
以上就是对静态库和动态库的简单介绍,还有打包的流程,但愿在你须要的时候能够帮到你!
转载请备注原文出处,不得用于商业传播——凡几多