最近支持一个项目需要给将我们的工程打包成静态库供第三方平台使用,在开发之余做一个知识整理。
一.SDK的创建
1第一步打开Xcode创建framework工程
第二步书写工程名完成创建
以上两步就完成.framework工程的创建工程如下并将兼容版本勾选为8.0(这个不一定根据项目需要)
第三步更改工程配置
1.搜索:MACH_O_TYPE 选择Static Library
2.还有一处是这样的,如果你的framework里面需要添加一些分类,那么需要在Other Linker Flags 添加 -all_load(注意符号不要用中文写了,all_load它的作用是加载静态库中所有文件,all_load作用于所有的库.如图:
3如果你需要对外暴露你的.h文件直接拖到Headers下即可(例如我将新建的DCITSTwo.拖入即可对外暴露供第三方平台调用)
第四步就command+B进行编译 选择虚拟机编译(随便选择一个iphone手机机型)和 Generic in device(真机模式编译)
第五步 如需要上线版本将Build Configuration 更改为Release 重复第四步即可
以上就完成.framework的工程创建你根据自己项目需要编写。
二.SDK的打包
完成上面之后点击.framework->show in Finder
展示界面如下 Release-iphoneos 表示上线版本的真机模式 下面为上线版本的模拟器版本 (如果你Run的是debug模式将会生成 Debug-iphoneos或者Debug-iphonesimulator 下面生成的是我Run的是Release模式你可以根据你的项目需要选择Release或者Debug )。一般项目都需要将两个.framework工程合并为一个可供真机和模拟器使用的工程所以就有了合成打包。为了得到高效又能给真机和模拟用的framework的话,需要合成。我们接下来做合成打包。
合并打包有两个途径
1.脚本合成
2.终端合成
a、脚本合成
第一步 如下图流程操作
第二步选择Aggregate生成脚本工程
第三步书写脚本工程名完成创建如下图
第四步选择脚本工程BuBuild Phases 点击+号选择New Run Script Phase 添加(*重要*)
第五步打开Run Script 将合成代码拷贝到脚本工程中如下图
1.
2.
脚本代码如下
# Sets the target folders and the final framework product.
# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME
# 例如: FMK_NAME = "MyFramework"
FMK_NAME=${PROJECT_NAME}
# Install dir will be the final output to the framework.
# The following line create it in the root folder of the current project.
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
# Working dir will be deleted after the framework creation.
WRK_DIR=build
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
# -configuration ${CONFIGURATION}
# Clean and Building both architectures.
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build
# Cleaning the oldest.
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"
rm -r "${WRK_DIR}"
open "${INSTALL_DIR}"
第六步选择脚本工程真机运行command+B
运行结果就是你想要的合成包
b、终端合成
第一步点击.framework->show in Finder 并打开终端
在终端中
1.执行cd 将Products拖入终端运行
2.执行lipo -create 拖入真机模式下DCITSFirst拖入终端 再将模拟器下的DCITSFirst拖入终端 -output 将一个文件夹拖入终端/xxx.framework(绿色为手动输入如xxx/DCITSFirst.framework)一般SDK命名和你的创建的SDK工程名相同
蓝色的为需要手动输入的/xxx.framework
就会给你在你导出的文件夹里生成一个xxx.framework