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