一键自动化打包+合并Framework
每次更新SDK都需要重新编译一遍真机和模拟器的,然后在将两个包合并成一个包。对于稳定的SDK,这些工作做一遍so easy~ 。 But如果每个礼拜都要你这么来一遍似不似很烦恼。程序员是不允许重复劳动的,能点一个按钮完成绝不点两个按钮。
所以就考虑到自动化打包Framework,经过多次更迭最终实现一键自动化打包+合并真机模拟器包。这里记录一下更迭的各个方案。看客根据需求选择合适的就好。
方案一
在XCode中添加脚本,利用XCode实现自动化打包。
添加脚本
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
1.在Build Phases中点击1处加号,选择New Run Script Phase。就增加了Run Script一栏。
2.将脚本复制到 2处黑框中。
3.编译选择任意一个模拟器,编译一遍。第一遍会显示Failed,没有问题。在选择真机模式,即选择下图中Generic iOS Device再编译一遍。此时,已经完成了打包合并工作。
真机编译
打包完成的Framework,在工程目录下的Products文件夹中。此时可以在终端使用命令查看Framework支持的架构。
lipo -info FrameworkName.framework/FrameworkName
方案二
使用python脚本实现自动化打包。
此处使用的是python3.5,如何没有配置环境的需要先配置一下环境。点此下载下载完成,点击安装即可。安装完成,在终端中输入下方代码可查看python版本。
$ python3
直接上代码。
import os
# framework 的名字
FrameworkName = 'STKouyuEngine'
# 编译的路径
Build_Path = '/Users/Attu/Desktop/SDKDemo/Framework/STKouyuEngine'
# 保存framework路径
Product_Path = '/Users/Attu/Desktop/SDKDemo/Framework/Products'
INSTALL_DIR = '%s/%s.framework'%(Product_Path,FrameworkName)
DEVICE_DIR='%s/Build/Release-iphoneos/%s.framework'%(Build_Path,FrameworkName)
SIMULATOR_DIR='%s/Build/Release-iphonesimulator/%s.framework'%(Build_Path,FrameworkName)
# 编译
os.chdir('%s'%Build_Path)
os.system('xcodebuild -configuration "Release" -target %s -sdk iphoneos clean build'%(FrameworkName))
os.system('xcodebuild -configuration "Release" -target %s -sdk iphonesimulator clean build'%(FrameworkName))
# 创建一个通用文件夹
os.system('mkdir -p %s'%(Product_Path))
os.system('cp -R %s/ %s/'%(DEVICE_DIR,INSTALL_DIR))
# 合并
os.system('lipo -create %s/%s %s/%s -output %s/%s'% (DEVICE_DIR,FrameworkName,SIMULATOR_DIR,FrameworkName,INSTALL_DIR,FrameworkName))
os.system('open %s'% Product_Path)
保存为py文件,通过终端cd到该文件目录并运行该文件,运行结束后自动打开Framework所在文件夹。
到这里已经能够非常自动化的完成打包加合并真机和模拟器的Framework了。但是鉴于程序员的强迫症,此方案还是需要在终端上打很多代码,有没有一键就能搞定的方案呢?所以就催生了方案三。
方案三
方案三是在方案二的基础上改进的。是将方案二中Python文件转换为可执行文件。最终实现双击该可执行文件,就完成打包加合并的功能。
我是通过https://github.com/ZYunH/Python-script-converter来完成可执行文件的转换。感谢该工具的作者!
最终效果上面的为可执行文件,下面的为Python文件。
以上就是我一步一步实现一键打包加合并的历程,希望能给小伙伴们一点帮助!