1. 库 .a与.framework区别
  2. 创建framework静态库
  3. CocoaPods发布Framework

前言:静态库的简单介绍

ios静态库分为 .a和.framework;
同样有静态库就有动态库,
动态库在ios中是 .dylib和.framework;
系统提供的.framework都是动态库,
我们自己写的.framework都是静态库(我们提供动态库是不能通过审核的)。

为什么我在项目中选择framework开发,主要因为.a文件必须手动提供对应的.h文件,而framework包括了.h文件和.a文件。

一、新建工程

一般使用工程名就使用库的名称

iOS framework 调试 苹果framework_sdk


新工程创建完成:

iOS framework 调试 苹果framework_ios_02

二、编写或导入需要打包的资源文件

iOS framework 调试 苹果framework_sdk_03

iOS framework 调试 苹果framework_sdk_04

三、配置工程

1. 设置公开的头文件

同时把资源文件需要外界访问的.h文件导入到系统推荐的.h中

iOS framework 调试 苹果framework_iOS framework 调试_05

iOS framework 调试 苹果framework_sdk_06

2. 设置最低版本

iOS framework 调试 苹果framework_静态库_07

iOS framework 调试 苹果framework_库_08

3. 设置Framework 为静态库

在Build Settings 中搜索 “Mach”,

在出来的结果中,选择Mach-O Type 的值为Dynamic Libray.

iOS framework 调试 苹果framework_静态库_09

4. Build配置

一般开发SDK为release版, 用户可才可以添加在工作中用来上架:

iOS framework 调试 苹果framework_ios_10

iOS framework 调试 苹果framework_静态库_11

四、真机,模拟器编译

分别选择真机,模拟器 CMD+B进行编译

可以看到红色文件变为黑色

iOS framework 调试 苹果framework_iOS framework 调试_12


iOS framework 调试 苹果framework_库_13

iOS framework 调试 苹果framework_iOS framework 调试_14

iOS framework 调试 苹果framework_ios_15

右键Products 下的Framework.framework打开可以看到编译生成的Framework:

iOS framework 调试 苹果framework_ios_16

五、查看编译后的可运行架构

可以查看一下,没合并模拟器架构之前包含几个同.a(可跳过此步)(真机包含两个,模拟器包含一个)

使用的命令:

lipo -info "framework路径"

iOS framework 调试 苹果framework_iOS framework 调试_17

模拟器(电脑CPU):
4s~5 : i386(32位)
5s~7plus : x86_64(64位)

真机(iPhone的CPU):
3gs~4s : armv7
5~5c : armv7s (静态库只要支持了armv7,就可以跑在armv7s的架构上)
5s~7plus : arm64

六、合并架构(真机和模拟器)

iOS framework 调试 苹果framework_ios_18

然后可以看到生成的静态库文件:

iOS framework 调试 苹果framework_iOS framework 调试_19

查看生成静态库文件所支持的架构:

iOS framework 调试 苹果framework_ios_20

然后将这个静态库文件替换任意一个编译生成的Framework.farmework里的Framework静态库文件,然后这个Framework.framework就是我们需要的库文件了。

iOS framework 调试 苹果framework_iOS framework 调试_21

注意:合并之后的动态/静态库要与原来的名称一致。不然用的时候编译报错

七、测试生成的Framework.framework库

1.新建工程

创建testFramework工程。

2.拖入刚生成的Framework.framework库

iOS framework 调试 苹果framework_静态库_22

iOS framework 调试 苹果framework_ios_23

3.编写测试代码

iOS framework 调试 苹果framework_sdk_24

4.运行

iOS framework 调试 苹果framework_sdk_25

5.处理输出日志

因为用的是Xcode8, 在输出的日志中有太多的调试信息,

而这些会干扰我们自己的输出,这里设置一下工程去掉这些调试信息:

工程的Edit Scheme -> Run -> Arguments -> Environment Variables :

Name :OS_ACTIVITY_MODE

Value :disable

iOS framework 调试 苹果framework_库_26

然后再运行一次,就可以看到干净的日志信息了。

iOS framework 调试 苹果framework_iOS framework 调试_27