使用fastlane gym/xctool编写ipa打包脚本

96
xi_lin
2016.01.21 00:54* 字数 462

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打包

  1. 安装gym

sudo gem install fastlane

  1. 新脚本
  • 不再需要手工指定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上。

准备环境

  1. 安装xctool

brew install xctool

  1. 安装fir-cli
  • fir的命令行工具
  • 需要先装好ruby再执行

gem install fir-cli

一些概念

  1. *.workspace文件
    使用CocoaPods管理的工程在执行完pod install之后生成的workspace文件
  2. scheme
    显示在Xcode的左上角,run图标的右边,设备选择的左边
  3. configuration
    在Xcode中选项目,Info tab下会列出所有的configuration,一般有Debug和Release两种
  4. provisioning profile
    在Xcode中选target,在Build Settings tab下搜索Provisioning Profile,默认应该是Automatic,点击看到下拉列表中的就是所有可用的名称

脚本的步骤

  1. 清理项目
  2. 生成archive
  3. 导出ipa
  4. 上传到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==="

Refer

随笔
Web note ad 1