#一、编译.framework静态库

1.1 创建项目时,选择Framework&Library–>Frameword

默认创建的项目中有一个主头文件,可以将其他头文件在该头文件中import 一下

1.2 编写核心代码

编译库前,将头文件暴露出去

默认情况直接编译的库位动态库,可以修改配置改成静态库

1.3 分别编译模拟器和真机库

打开Products即可看到.framework库

二、开发调试静态库

如果希望一遍开发一遍调试静态库,可以在项目中直接添加静态库

在项目中,按照下面步骤即可:

  • 点击项目–>左下角+号
  • 选择希望开发的静态库类型(.a/.framework)
  • 创建静态库后,即可看到静态库文件

使用静态库

  • 使用静态库前需要进行配置
  • 测试之后,按照之前步骤打包成静态库即可

静态库合并

根据编译选择的机器类型,静态库有模拟器和真机的区别,两者是不能混用的。
此时可以通过配置一个Run Script,在Script中使用lipo命令来合并两个版本的Framework,重新生成一个新的Framework,这个Framework将同时支持在模拟器和真机上运行。

在项目的Build Phases中,新建一个Run Script,输入下面内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework

DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework

SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework


if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"

lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"

#open "${DEVICE_DIR}"
#open "${SRCROOT}/Products"
fi

当项目再次Build时,就会在项目目录下面出现Products目录,里面包含了合并后的Framework文件夹。

使用lipo -info来检测下:

1
lipo -info 二进制文件路径(拖进来即可)

如果出现:

1
x86_64 armv7 arm64

说明成功合并架构