iOS技术资料iOS

一键自动化打包+合并Framework

2018-01-24  本文已影响490人  Attu_7

每次更新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文件。

以上就是我一步一步实现一键打包加合并的历程,希望能给小伙伴们一点帮助!

上一篇下一篇

猜你喜欢

热点阅读