实际开发中离不开静态库的使用,记录一下
静态库有两种, .a静态库 和 .framework静态库的区别
.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework。
Workspace 管理项目 添加静态库
创建
配置如下
加到主工程
配置路径
导入头文件 使用
打包静态库 (.a静态库)(包括workspace中的静态库(.a) 一样的步骤)
模拟器静态库打包
1、公开接口头文件
targets->Build Phases->Copy Files->"+"你需要公开的头文件
2、设置适配所有模拟器架构(模拟器i386和x86_64)(Build Active Architecture Only )
3、编译静态库 (command + B 或 command + R )
右键 show in finder4、导入工程 (注意 需要将.a文件和头文件放到一个文件夹下)
5、导入头文件就可以使用了
真机静态库打包
所有流程都跟上面的一样,只是我们运行打包时要选择真机运行,你可以选择自己插上去的真机,也可以选择Generic ios Devices。当然不要忘记了设置支持所有真机机型架构: Build Active Architecture Only 设为NO。
合并模拟器静态库和真机静态库
分别使用真机或者Generic iOS Device 和 随便一个模拟器运行静态库 得到模拟器静态库和真机静态库 然后在Finder 中打开
Show in Finder
通过命令行合并 (注意 库的名称要一致)
lipo -create 第一个.a文件的绝对路径 第二个.a文件的绝对路径 -output 最终的.a文件路径
然后在工程中将这个.a 替换就支持真机和模拟器了
静态库之间的引用
1、如下图,workspace中的静态库project 引入 主工程包内的静态库
workspace里 Argos是主工程 LJNetwork是一个静态库工程 AGFramework.framework是打包好并导入到主工程的静态库
现在LJNetwork要引用AGFramework.framework库
只需要在LJNetwork的Build Setting —> User Header Search Paths 中 拉入AGFramework.framework中的Headers文件夹的路径
2、两个静态库工程之间的引用
静态库LJNetwork引用 静态库LJFoundation的文件
配置如下
3 静态库引用pods中的三方库
静态库LJNetwork要引用pods中的AFNetworking 如下设置
个人博客地址:https://youyou0909.github.io