静态库 - ShenYj/ShenYj.github.io GitHub Wiki
-
.a
-
.o
文件合集 - 程序代码的集合,是共享程序代码的一种方式
-
-
.framwork
-
苹果针对
.a
的一层包装 -
在
Mac OS/iOS
平台,Framework
实际上是一种打包方式, 将库的二进制文件、头文件和有关的资源文件打包到一起, 方便管理和分发.-
Framework
可以通俗的理解为封装了共享资源的具有层次结构的文件夹。共享资源可以是nib
文件、国际化字符串文件、头文件、库文件等等。它同时也是个Bundle
,里面的内容可以通过Bundle
相关API
来访问。
Framework
可以是static framework
或dynamic framework
。 在iOS App
打包完成后,如果Framework
包含了模拟器指令集(x86_64
或i386
),那么用Xcode
发布App
的时候,会报unsupported architectures
的错误,所以需要我们手动或脚本去移除。 -
Framework
和系统的UIKit.Framework
还是有很大区别的. 系统的Framework
不需要拷贝到目标程序中, 我们自己做出来的Framework
哪怕是动态的, 字后也还是要拷贝到App
中(App
和Extension
的Bundle
是共享的), 因此苹果又把这种Framework
成为Embedded Framework
.
-
-
-
.xcframework
-
2019年推出 优化不同架构的处理
-
XCFramework
是XCode11
中提出的一个新特性,是由XCode
创建的一个可分发的二进制包,它包含了framework
或library
的一个或多个变体,因此可以在多个平台(iOS
、macOS
、tvOS
、watchOS
) 上使用,包括模拟器。XCFramework
可以是静态的,也可以是动态的。xcframework
的好处就是用Xcode
发布的时候,Xcode
会自动选用正确的指令集Frameworks
,省去了手动移除动态库中的模拟器指令集的工作。
-
摆脱
xcode
和任何相关原理方面的知识, 用最简单、直接、原始的方式先来创建一个.a
静态库
-
如果两个静态库存在重复
.o
,ar
会替换,libtool
不会, 只会警告
链接使用 ar生成.a静态库 / libtool生成.a静态库 中手动创建的
.a
静态库
自制的
.a
过于简单, 接下来以AFN
为例, 链接使用
-
通过
.a
静态库的链接过程得出结论, 链接一个库的三要素- 头文件
- 库文件目录
- 库文件名称
-
链接静态库的优化