使用fastlane gym/xctool编写ipa打包脚本
2016-01-21 本文已影响11773人
xi_lin
2017/09/29更新
修改project_path在新版fastlane脚本中的获取方式
2017/05/31更新
添加FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT设置
2017/02/27更新
fastlane更新后统一了各工具的使用,文章做了相应命令的更新
2016/04/21更新
文中所列脚本也更新到了https://github.com/xilin/ios-build-script
2016/03/14更新
使用fastlane gym打包
- 安装gym
- https://github.com/fastlane/fastlane
- gym使用了最新的API进行打包,速度更快,设计上也更简洁智能
- 需要先装好ruby再执行
sudo gem install fastlane
- 新脚本
- 不再需要手工指定provisioning profile了
- 打包核心命令从三行变为一行
#!/bin/bash
#更新timeout
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120
#计时
SECONDS=0
#假设脚本放置在与项目相同的路径下
project_path="$(dirname "$(pwd)")"
#取当前时间字符串添加到文件结尾
now=$(date +"%Y_%m_%d_%H_%M_%S")
#指定项目的scheme名称
scheme="DemoScheme"
#指定要打包的配置名
configuration="Adhoc"
#指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method参数
export_method='ad-hoc'
#上述scheme/target/configuration若不清楚值可以用`xcodebuild -list`查看
#指定项目地址
workspace_path="$project_path/Demo.xcworkspace"
#指定输出路径
output_path="/Users/your_username/Documents/"
#指定输出归档文件地址
archive_path="$output_path/Demo_${now}.xcarchive"
#指定输出ipa地址
ipa_path="$output_path/Demo_${now}.ipa"
#指定输出ipa名称
ipa_name="Demo_${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
fastlane 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==="
目标
- 对于一个使用
CocoaPods
做依赖管理的Xcode项目,编写一个脚本实现自动打包ipa文件,并上传到fir上。
准备环境
- 安装xctool
- https://github.com/facebook/xctool
- xctool是官方xcodebuild的一个增强实现,输出的内容比xcodebuild直观可读得多
- 通过brew即可安装
brew install xctool
- 安装fir-cli
- fir的命令行工具
- 需要先装好ruby再执行
gem install fir-cli
一些概念
- *.workspace文件
使用CocoaPods
管理的工程在执行完pod install
之后生成的workspace文件 - scheme
显示在Xcode的左上角,run图标的右边,设备选择的左边 - configuration
在Xcode中选项目,Info tab下会列出所有的configuration,一般有Debug和Release两种 - provisioning profile
在Xcode中选target,在Build Settings
tab下搜索Provisioning Profile
,默认应该是Automatic
,点击看到下拉列表中的就是所有可用的名称
脚本的步骤
- 清理项目
- 生成archive
- 导出ipa
- 上传到fir
最终脚本
#!/bin/bash
#计时
SECONDS=0
#假设脚本放置在与项目相同的路径下
project_path=$(pwd)
#取当前时间字符串添加到文件结尾
now=$(date +"%Y_%m_%d_%H_%M_%S")
#指定项目的scheme名称
scheme="DemoScheme"
#指定要打包的配置名
configuration="Adhoc"
#指定打包所使用的provisioning profile名称
provisioning_profile='AdHoc Profile'
#指定项目地址
workspace_path="$project_path/Demo.xcworkspace"
#指定输出路径
output_path="/Users/your_username/Documents/"
#指定输出归档文件地址
archive_path="$output_path/Demo_${now}.xcarchive"
#指定输出ipa地址
ipa_path="$output_path/Demo_${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==="