最近在尝试自动化打包,毕竟每次xcode
打包还是挺麻烦的
网上有很多教程,选择适合自己的需求的就好
facebook 的xctool
fastlane 的gym
集成Jenkins的(我的需求没那么高,只是要自动化打包和上传fir而已)
自然也就有着不同的准备工作的咯
安装工具
因为系统更新到eicapitain,所以很多同学用HomeBrew
或者gym
安装工具的时候都可能会出现Permition denied 的提示
两种方法:
1 去掉系统的rootless的设置
2 我的做法,安装的时候指定目录
brew install xctool
(xctool)
gem install -n /usr/local/bin gym
(fastlane)
gem install -n /usr/local/bin fir-cli
(fir 上传)
安装好这些工具,就可以开始尝试先用xcode
打一次包,确认的证书和provison文件是对的
fastlane 的打包脚本
#!/bin/bash
#计时
SECONDS=0
#假设脚本放置在与项目相同的路径下
project_path=$(pwd)
#取当前时间字符串添加到文件结尾
now=$(date +"%Y_%m_%d_%H_%M_%S")
#指定项目的scheme名称
scheme="tete"
#指定要打包的配置名
configuration="development"
#指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method参数
export_method='development'
#指定项目地址
workspace_path="$project_path/tete.xcworkspace"
#指定输出路径
output_path="/Users/chengxun/Desktop/"
#指定输出归档文件地址
archive_path="$output_path/tete_${now}.xcarchive"
#指定输出ipa地址
ipa_path="$output_path/tete_${now}.ipa"
#指定输出ipa名称
ipa_name="tete_${now}.ipa"
#获取执行命令时的commit message
commit_msg="$1"
#输出设定的变量值
echo "===workspace path: ${workspace_path}==="
echo "===archive path: ${archive_path}==="
echo "===ipa path: ${ipa_path}==="
echo "===export method: ${export_method}==="
echo "===commit msg: $1==="
#先清空前一次build
gym --workspace ${workspace_path} --scheme ${scheme} --clean --configuration ${configuration} --archive_path ${archive_path} --export_method ${export_method} --output_directory ${output_path} --output_name ${ipa_name}
#上传到fir
fir publish ${ipa_path} -T fir_token -c "${commit_msg}"
#输出总用时
echo "===Finished. Total time: ${SECONDS}s==="
xctool的打包脚本
#!/bin/bash
#计时
SECONDS=0
#假设脚本放置在与项目相同的路径下
project_path=$(pwd)
#取当前时间字符串添加到文件结尾
now=$(date +"%Y_%m_%d_%H_%M_%S")
#指定项目的scheme名称
scheme="tete"
#指定要打包的配置名
configuration="Adhoc"
#指定打包所使用的provisioning profile名称
provisioning_profile='qiaoshouteteIdentifier'
#指定项目地址
workspace_path="$project_path/tete.xcworkspace"
#指定输出路径
output_path="/Users/chengxun/Desktop/"
#指定输出归档文件地址
archive_path="$output_path/tete${now}.xcarchive"
#指定输出ipa地址
ipa_path="$output_path/tete_${now}.ipa"
#获取执行命令时的commit message
commit_msg="$1"
#输出设定的变量值
echo "===workspace path: ${workspace_path}==="
echo "===archive path: ${archive_path}==="
echo "===ipa path: ${ipa_path}==="
echo "===profile: ${provisioning_profile}==="
echo "===commit msg: $1==="
#先清空前一次build
xctool clean -workspace ${workspace_path} -scheme ${scheme} -configuration ${configuration}
#根据指定的项目、scheme、configuration与输出路径打包出archive文件
xctool build -workspace ${workspace_path} -scheme ${scheme} -configuration ${configuration} archive -archivePath ${archive_path}
#使用指定的provisioning profile导出ipa
#我暂时没找到xctool指定provisioning profile的方法,所以这里用了xcodebuild
xcodebuild -exportArchive -archivePath ${archive_path} -exportPath ${ipa_path} -exportFormat ipa -exportProvisioningProfile "${provisioning_profile}"
#上传到fir
#fir publish ${ipa_path} -T fir_token -c "${commit_msg}"
#输出总用时
echo "===Finished. Total time: ${SECONDS}s==="
对比下两者
fastlane gym: 1 速度快 2 有dysm文件 3 不用指定provison文件
xctool: 相比下就要弱一些咯 看图就知道咯