Fastlane + .sh 一键打包上传
通过最近的fastlane实践进行的整理
1. fastlane 初始化
fastlane init
2. Fastfile
Fastfile管理你所创建的 lan。它的格式是这样的:
# 自动更新fastlane 工具
# update_fastlane
#需要的fastlane的最小版本,在每次执行之后会检查是否有新版本,如果有会在最后末尾追加新版本提醒
fastlane_version "2.30.1"
#默认使用平台是 ios,也就是说文件可以定义多个平台
default_platform :ios
platform :ios do
before_all do
# ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
cocoapods
end
desc "Runs all the tests"
lane :test do
scan
end
desc "提交一个新的Beta版本到 Apple TestFlight"
desc "This will also make sure the profile is up to date"
lane :beta do
# match(type: "appstore") # more information: https://codesigning.guide
gym(scheme: "Docment") # Build your app - more options available
pilot
# sh "your_script.sh"
end
desc "部署一个新版本到App Store"
lane :release do
# match(type: "appstore")
# snapshot
gym(scheme: "Docment") # Build your app - more options available
deliver(force: true)
# frameit
end
# 你可以定义自己的lane
#执行lane成功后的回调
after_all do |lane|
# slack(
# message: "Successfully deployed new App Update."
# )
end
# 如果流程发生异常会走这里并终止
error do |lane, exception|
# slack(
# message: exception.message,
# success: false
# )
end
end
我们可以自定义一个lane
desc '构建 adhoc 任务'
desc 'fastlane adhoc'
lane :adhoc do
gym(
scheme: "bw",
export_method: "ad-hoc",
output_directory: "./build", # 打包后的 ipa 文件存放的目录
output_name: "bw2017" # ipa 文件名
)
end
PS:多个 lane 的话实际上是可以相互调用的,这个其实特别实用
default_platform :ios
platform :ios do
lane :prepare do
cocoapods
match
end
desc 'fastlane build' 'fastlane build type:adhoc'
lane :build do |options|
# 调用上面的 prepare 任务
prepare
case options[:type]
when 'adhoc'
adhoc
else
appstore
end
end
lane : adhoc do
···
end
lane : appstore do
···
end
end
利用目前支持的工具可以做所有包含自动化和可持续化构建的每个环节,例如:
scan 自动化测试工具,很好的封装了 Unit Test
sigh 针对于 ios 项目开发证书和 Provision file 的下载工具
match 同步团队每个人的证书和 Provision file 的超赞工具
gym 针对于 iOS 编译打包生成 ipa 文件
deliver 用于上传应用的二进制代码,应用截屏和元数据到 App Store
snapshot 可以自动化iOS应用在每个设备上的本地化截屏过程
3 执行
打开终端,切换到项目的根目录:执行fastlane lane'name
就可以了。成功之后会在相应的路径下生成ipa文件,如果报错的话就根据错误信息好好查看文档。
为了实现一键打包的方案,需要将gym和fir结合到一起,这里利用了一个脚本文件,在使用时直接执行这个脚本文件即可,文件内容如下:
4 一键自动化打包
#!/bin/bash
#设置超时
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120
#计时
SECONDS=0
#假设脚本放置在与项目相同的路径下
project_path=$(pwd)
#取当前时间字符串添加到文件结尾
now=$(date +"%Y_%m_%d_%H_%M_%S")
#指定项目的scheme名称
scheme="Demo"
#指定要打包的配置名
configuration="Adhoc"
#指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method参数
export_method='ad-hoc'
#指定项目地址
workspace_path="$project_path/Demo.xcworkspace"
#指定输出路径
output_path="$project_path/IPA"
#指定输出归档文件地址
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 "XXX_YOUR_API_TOKEN_XXX" -c "${commit_msg}"
#输出总用时
echo "===Finished. Total time: ${SECONDS}s==="
(1、使用该文件需要项目支持CocoaPods;2、本项目的项目名称是Demo,在实际使用时需要将Demo替换成自己的项目名称;3、需要将XXX_YOUR_API_TOKEN_XXX 换成自己的fir token)
如文件名文AutoPack.sh,打包时只需要在cd到项目文件下,执行:
./AutoPack.sh
ps:
1、写好自己的 脚本,比如aa.sh
2、打开终端 执行,方法一: 输入命令 ./aa.sh ,
方法二:直接把 aa.sh 拖入到终端里面。
注意事项:
如果 没有成功报出问题::
Permission denied。就是没有权限。
解决办法:
修改该文件aa.sh 的权限 :使用命令:
chmod 777 aa.sh 。
然后再执行 上面第二步的操作 就 OK .
参考资料
http://blog.csdn.net/u013282507/article/details/72884789
http://blog.csdn.net/zhuweideng/article/details/72547957