fastlane自动打包脚本
Fastlane是麻省理工学院批准的开源项目,可以将Mac、iOS、android项目的自动打包、发布等一系列繁琐的任务自动化。
使用 fastlane 可以极大的节约打包上架的时间。
准备工作
关于 fastlane 的安装初始化,就不做说明了,网上很容易搜索到。当环境搭建完成后,我们可以在自己的项目工程中会看到多出来一个 fastlane 的文件。关于打包的配置在这个文件夹里面都可以进行配置。
首先,我们需要使用 fastlane 来完成我们的打包工作,我们需要弄清楚我们脚本的工作流程,简单整理一下需求。
我们需要执行一个脚本,脚本填写我们的项目路径,输入我们想要修改的版本号。然后用时间戳设置项目的build号。在脚本的当前路径创建一个build文件夹,并且在里面创建一个 archive 文件夹用来放置 .xcarive 文件。在 build 文件夹下将打包出来的 ipa 文件放置在以自己 scheme 名命名的文件夹中。
简单总结下:
输入: 项目路径、版本号。
生成:build 号、xcarchive 文件 和 ipa 文件。
上传:自动上传 ipa 文件到 fir。
编写脚本
创建一个 .sh 文件,第一次执行 .sh 文件的时候可能会报 zsh: permission denied:
警告。这需要我们允许一下脚本执行权限 chmod -R 777 XXX.sh
。再次执行不会报错。
我们需要接受第一个参数为路径地址,和第二个参数为版本号。
1 | # 参数传递目标工程 和 版本号 |
然后处理一下当前时间作为 build 号,并获取一下工程文件夹的名称
1 | # 工程名默认与文件夹同名 |
如果需要打包不同的 scheme 可以再对脚本做修改。
接下来需要指定打包输出文件的位置
1 | # 指定项目地址 |
修改 版本号、build号
由于我们用到了 fastlan 进行打包,这里就有2个思路来解决修改版本号的问题。第一种就是直接在脚本上找到工程的 Info.plist 文件修改 CFBundleShortVersionString
和 CFBundleVersion
的值。第二种就是使用 fastlane 的插件修改,在 Fastfile 中安装 versioning 插件来修改。工程目录下执行 fastlane add_plugin versioning
安装。注:之前使用 fastlane 自带的修改方法,由于苹果有设置,所以修改不了,使用插件才可以。
直接修改 Info.plist 文件
需要找到 Info.plist 位置直接进行修改。可能每个工程的 Info.plist 文件位置不同,所以需要指定一下文件位置
1 | # Info.plist 文件路径 |
在 Fastfile 修改
插件安装成功后,可以使用插件的方法来修改。
1 | # 修改版本号和build号函数 例: version:1.1.1 build:123 |
这样调用的时候只需要将 version 和 bild 作为参数传递过去就可以。
打包成 ipa 文件
打包使用 fastlane 很方便,需要自定义 lane,将参数传递过去就可以。
在 Fastfile 文件中编写
1 | desc "打包上传到 Fir" |
在脚本中只需要将关键信息传递过去就可以了调用了
1 | echo "============================ 开始打包 ipa 文件 ============================" |
至此,打包的流程就可以实现了,我们会在脚本的根目录下看到一个 build 文件夹,其中包括一个 archive 文件夹,用来存放 .xcarchive 文件。还有一个以 scheme 命名的文件夹,其中放置我们上传需要的 ipa 文件。
上传 ipa 文件到
很多时候需要将打包出来的 ipa 文件进行发布测试,这些工作脚本也可以替我们完成。这里还是有2个方法来处理,第一种还是使用 fir 提供的脚本指令直径进行上传。第二种就是使用 fastlane 的插件来完成。注:安装指令为 fastlane add_plugin firim
。
sh 指令上传
指令很简单,安装好 fir 的脚本环境后,直接使用。
1 | 上传到fir |
fastlane 指令
在 fastfile 文件中直接在打包完成后添加指令即可。
1 | firim(firim_api_token:"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX") |
如果需要上传到 testflight,大概的思路也差不多,不过 fastlane 已经提供了对应的方法,不需要在导入插件了。
最后
至此,打包测试脚本就可以使用了。fastlane 还有很多功能需要慢慢去学习掌握,后面如果用到了,再来做一些更新吧。完整的 sh 文件在这里。