iOS打包静态库,以及静态库包含图片时怎么打包

Xcode 8.3.1

闲话少说直接上图:

1.创建静态库 : 新建一个工程, 此时选择Cooca Touch Static Library

创建Library

2. 我随意将工程命名为  Library, 创建好后应该是这样的


工程里自动生成一对 .h 和.m的文件, 此时 libLibrary.a 显示的是红色

3.实现相关代码, 我只是实现了一个打印 log 的方法, 并暴露给外界调用

Library.h


Library.m


4. 一般静态库用于发布, 所以要编辑一下 Scheme, 修改为Release 状态



5.暴露.h 文件

选择 New Headers Phase 之后会出现 :

展开 Headers --> 点击左下角的 ➕号 出现:

选择要暴露的.h文件, 即Library.h, 点击 Add 

6.最后一步,打包, 可以打包 真机和模拟器 静态库, 取决于这个地方你选择的是真机还是模拟器

如果, 你导入了其他第三方, 并且也希望将他们的 .h 文件暴露出来 需要将 .h 文件 从 Project 移到 Public 当中, 下面以 AFN 为例, 如图: 


选择好 真机或模拟器后 直接运行:

此时, libLibrary.a 就变成了黑色, 如果没变,也没问题,直接 Show in finder

首先可以看见有两个文件夹 : Release-iphoneos 和 Release-iphonesimulator, 前者是真机下编译的静态包, 后者是模拟器下编译的静态包,注意真机测试不能用模拟器静态包, 反之亦然.

libLibrary.a 就是我们打包好的 静态库,  Library.h  就是暴露出来的头文件, 见下图 : 

或者: 你运行好以后是这个样子 :


最后, 直接将 libLibrary.a ,Library.h 拖到你所要运用 该静态库的 工程里, 导入Library.h 头文件,调用方法即可

那么, 问题来了, 如果 你既想在真机上运行又想在模拟器上运行, 该怎么办呢??????

没错, 可以合并, 

打开终端 ,输入 (注意空格): 

lipo -create 真机版本.a静态库路径 模拟器版本.a静态库路径 -output 合并后的.a静态库路径

lipo -create /Users/zhuyongjun/Library/Developer/Xcode/DerivedData/Library-cgfjojtxfkuotsbfqrriwyvyrtgk/Build/Products/Release-iphoneos/libLibrary.a /Users/zhuyongjun/Library/Developer/Xcode/DerivedData/Library-cgfjojtxfkuotsbfqrriwyvyrtgk/Build/Products/Release-iphonesimulator/libLibrary.a -output /Users/zhuyongjun/Library/Developer/Xcode/DerivedData/Library-cgfjojtxfkuotsbfqrriwyvyrtgk/Build/Products/libLibrary.a

合并后如图 : 




包含图片的 静态库怎么打包 ?

这是需要用到bundle包了,

首先将要用到 的图片放到文件夹里, 再给文件夹重命名为后缀带 .bundle的名字,前面的名称(这里是resource)随意给,此时会提示如图,点击添加后,会出现一个bundle 包,显示包内容,可以看到拖进去的图片

将bundle包拖进静态库的工程,并在Library.m, 实现如下方法:

之后,运行,找到 .a 文件,步骤与不包含图片的静态库一致

调用该接口,需要将图片的 bundle 包一并添加到工程里,如


推荐阅读更多精彩内容