目录
目录
目录
1.设置Mach-O Type 为Static Library
3.设置Link With Standard Libraries为NO
前言
最近有这么一个需求:把自己的代码打包成framework,供其它语言调用,上网查了下资料,参考了很多文章,感觉比较繁琐,写篇文章记录下,希望能帮到需要的朋友们。
提示:以下是本篇文章正文内容,下面案例可供参考
一、开发环境
Xcode 14.3.1
MacOS: 13.5 (22G74)
二、Framework制作步骤
1.创建framework工程
这里以HelloWorld为例,步骤如下:
依次选择File-project-frame ,给项目起个名称,截图如下:
图1.选择framework作为项目类型
图2.创建项目的两个必选项
这里需要注意的是创建项目的时候有两个可选项:Include Test 和Include Documentation,一个是写测试单元代码的,一个是framework的说明文档,我这里没有勾选。
创建好项目之后,工程代码结构如下如:
图3.项目工程目录
2.添加需要打包的文件
这里我创建了一个HelloWorldTools的文件,主要用来演示用,代码如下:
图4.HelloWorldTools.h
图5.HelloWorldTools.m文件
选中项目的Target,把刚才的头文件移动到public中,具体参考下图
图6.移动文件
然后再创建framework时候生成的HelloWorldFramework.h中导入该文件,如下如:
图7.导入需要公开的头文件
3.配置项目参数
1.设置Mach-O Type 为Static Library
图8.设置Mach-O Type
2.设置Dead Code Stripping 为NO
图9.设置Dead Code Stripping
3.设置Link With Standard Libraries为NO
图10.设置Dead Code Stripping
4.设置Excluded Architectures
4.设置Framework支持的最低版本号
图10.设置framework支持的最低版本号
4.创建Aggregate Target
1.选中Target,点击左下角的+
这里要注意下,选择Project是看不到Aggregate这个选项的。
图11.添加Aggregate
2.选择Other---Aggregate
图12.添加Aggregate
3.添加脚本
这段脚本的作用是自动合并真机和模拟器的framework。
图13.添加Run Script脚本
把下面的脚本粘贴到Script Phase中:
图14.添加Run Script脚本
4.Script脚本如下:
# 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 "${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
5.生成framework
1.分别选中target和Aggregate,把Build Configuragtion改为release.
15.修改Target的build configuration为release
16.修改Target的build configuration为release
17.修改Target的build configuration为release
2.编译生成framework
1.选中Target,然后分别选中模拟器和真机(或者Any iOS Device),Command+B编译下:
18.编译HelloWorldFramework
2.选中Aggregate,然后分别选中Any iOS Device,Command+B编译下,编译成功之后,系统会自动打开framework目录,如下图所示:
19.编译Aggregate
三、测试Framework
1.创建测试项目
创建一个名为TestHelloWorldDemo的测试工程,用来测试测试上面制作的framework。然后把上面创建好的framework拖到项目中去。
20.创建测试工程,拖入framework
2.添加测试代码
导入framework,添加测试代码,发现控制台打印出来Hello World! ,成功了。
图21.测试代码
四、文章中测试Demo
上面的实例代码是以OC为例写的博客,Swift制作framework步骤和OC相同,区别就是Swift需要暴露的头文件需要添加public关键字,具体的工程代码,我把它传到了CSDN空间中,可以下载下来运行看下。