iOS Framework 的制作

  最近需要将自己项目的公共代码打包成Framework来使用,但是在打包过程中遇到一个问题,就是提取的公共代码中用到了一些第三方的库,比如AFNetworking等,网上找了很久,让我走了不少坑,现在就分享一下在打包Framework时怎样使用CocoaPods引入第三方库。

创建 Framework 工程

1. 创建打包工程

打开Xcode新建一个工程,选择Framework & Libray选项中的Cocoa Touch Framework,这里说一下我的Xcode版本是Version 11.2.1 。

iOS Framework 的制作_第1张图片

创建工程

假设我的代码中要用到MBProgressHUD这个第三方库(比较好演示),然后使用CocoaPods在工程中集成MBProgressHUD,集成方法和普通项目一模一样。

iOS Framework 的制作_第2张图片

CocoaPods

然后选择工程下的.xcworkspace重新打开工程。

iOS Framework 的制作_第3张图片

 添加公开头文件

1、删除项目创建,生成的.h文件(如果不删除,用默认的,把所有需要暴露的 .h 文件都用 #import <*****/PublicHeader.h>引入)

iOS Framework 的制作_第4张图片

2、选中Target,选择Build Phases-Headers,可以看出有三个选项,分别是Public 、Private 、Project,把需要公开给别人的.h文件拖到Public中,把不想公开的,即为隐藏的.h文件拖到Project中。(Public中的头文件,打包之后才能用到)


iOS Framework 的制作_第5张图片

3、更改设置参数

(1)选中Target,选择Build Settings,在Architectures下增加armv7s。

iOS Framework 的制作_第6张图片

(2)选中Target,选择Build Settings,在搜索栏搜索Mach-O Type,将Mach-O Type修改为Static Library。

iOS Framework 的制作_第7张图片

(3)修改支持系统版本

iOS Framework 的制作_第8张图片

4、增加所需依赖包


iOS Framework 的制作_第9张图片

模拟器编译所有文件

按照下图将Release模式下编译,选择为随便一个模拟器编译一次,然后真机编译一次,然后按下Command + B开始编译,编译成功后右键Products文件夹下的.framework文件,点击show in Finder。

iOS Framework 的制作_第10张图片

编译模拟器

打开后可以看到打包完成的模拟器Framework包。

iOS Framework 的制作_第11张图片

Framework

3. 将两个 Framework 合成

上面有两个Framework, 一个是Release-iphoneos(真机)下的,一个是Release-iphonesimulator(模拟器)下的,需要通过终端命令将两个Framework合为一个模拟器和真机都可使用的Framework。

打开终端先输入lipo -create,然后输入空格。

iOS Framework 的制作_第12张图片

Framework 合成

接着将Debug-iphoneos(真机)下的TestFramework也就是上面框出来的空白文件直接拖到终端,终端会自动显示路径。

iOS Framework 的制作_第13张图片

Framework 合成

然后直接将Debug-iphonesimulator(模拟器)下的TestFramework也拖到终端。

iOS Framework 的制作_第14张图片

Framework 合成

接着输入-output,然后输入空格。

iOS Framework 的制作_第15张图片

Framework 合成

然后输入~/Desktop/NewTestFramework后直接回车。

iOS Framework 的制作_第16张图片

Framework 合成

这时候桌面上会多一个新的文件为NewTestFramework,这时候将真机下的.framework包文件复制出来,然后将NewTestFramework重命名为TestFramework也就是.framework包中那个空白文件的名字,如果有.lipo后缀就去掉,接着替换.framework包中的那个空白文件。

iOS Framework 的制作_第17张图片

Framework 合成

最终替换完成后的.framework包就是我们最后所需要的包了,但是可以发现打包完后的.framework包里面是没有CocoaPods集成的第三方库的,所以在使用.framework包时,工程中必须也要集成.framework包中用到的第三方库,否则会找不到文件而报错。

* Framework合成简便方法


iOS Framework 的制作_第18张图片

# Type a script or drag a script file from your workspace to insert its path.

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"${DEVICE_DIR}"] || [ ! -d"${SIMULATOR_DIR}"]

then

exit 0

fi

# 如果合并包已经存在,则替换

if[ -d"${INSTALL_DIR}"]

then

rm -rf"${INSTALL_DIR}"

fi

mkdir -p"${INSTALL_DIR}"

cp -R"${DEVICE_DIR}/""${INSTALL_DIR}/"

# 使用lipo命令将其合并成一个通用framework 

# 最后将生成的通用framework放置在工程根目录下新建的Products目录下 

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

#合并完成后打开目录

open"${SRCROOT}/Products"

fi              

直接Command + B ,真机就会生成framework。

你可能感兴趣的:(iOS Framework 的制作)