fastlane 初体验 01

最近体验实践了一遍自动打包工具 fastlane,记录一下基本过程及碰到的问题。(纯记录贴,没有实践过的能够看看碰到的问题部分,有经验的前辈能够瞅一眼疑问部分指点一下:)html

安装及初始化

按文档,在终端中依次运行如下命令:ios

  1. 安装最新版本的 Xcode 命令行工具git

    xcode-select --installgithub

  2. 安装 fastlanexcode

    # 使用 RubyGems sudo gem install fastlane -NV # 或者使用 Homebrew brew cask install fastlanebash

  3. 导航至项目目录并运行app

    fastlane initide

成功后输出: 函数

fastlane init 执行成功

查看项目目录能够看到如终端数据的提示,生成了 fastlane 目录,包含两个文件:FastfileAppfile。以及 GemfileGemfile.lock工具

配置

主要为配置 AppfileFastfile

Appfile 主要为配置一些通用信息,例如 app_identifier(Bundle Identifier)apple_id(Apple ID)。若是不配置,在执行命令时须要相关信息终端会提示并等待用户输入。若是开发者帐号归属于多个 team,须要指定 team_name 及 team_id,若是须要上传到 App Store Connect,须要配置 itc_team_name 及 itc_team_id。还能够为不一样的 lane(一个 lane 即为一个打包动做命令集合)复写为不一样的值,例如针对测试版本与生产版本作不一样配置。

更多关于 Appfile 的配置可参考 Appfile 说明文档

Fastfile 即为具体配置不一样 lane 行为的地方。Ruby 不太熟,直观理解起来,感受像是 fastlane 内置了一些脚本函数(称为 Action),各自完成不一样的特定事务,例如最经常使用的 build_app - 见名知意为编译打包应用,也有如 get_certificates(获取证书)/get_provisioning_profile(获取配置文件)/get_push_certificate(获取推送证书)等等。而后咱们在每个 lane 中按须要组合这些 Actions,也能够在 lane 中调用其余 lane。各 Action 有不一样参数配置自定义行为,例如 build_app 能够配置 scheme/workspace/output_directory/output_name 等。

更多关于 Fastfile 的配置可参考 Fastfile 说明文档

至于 lane 具体怎么写,如上面提到的像堆积木同样组合各 Action。做为一个 Ruby 塑料选手,大致上依葫芦画瓢。

Fastfile 大体如:

Fastfile 文件

Tip: 最终在 fastlane 文件夹下会生成一个 README.md 文件,至关因而 doc 文档,记录着各 lanes 名称及描述,还有对应的 fastlane 命令,能够直接 copy 对应的到终端中执行便可。

最后在终端中导航至项目所在目录后执行相应 fastlane 命令便可。

目前基本能达到自动打包发布到蒲公英及提交到 App Store Connect 的预期效果,还有更多进阶使用方式,例如配置环境变量(只试过配置 FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD,由于不想明文写在配置文件里),以及使用插件(只在上传到蒲公英时使用了 fastlane add_plugin pgyer ), 还有自定义 Action 还没有实践过,最后还有持续集成工具的配合,有缘时 有业务须要时实践后再整理记录。

碰到的问题

1. 安装 fastlane 时提示错误 Failed to build gem native extension

错误提示:

ERROR:  Error installing fastlane:
	ERROR: Failed to build gem native extension.

    Building has failed. See above output for more information on the failure.
extconf failed, exit code 1

Gem files will remain installed in /Library/Ruby/Gems/2.3.0/gems/unf_ext-0.0.7.6 for inspection.
Results logged to /Library/Ruby/Gems/2.3.0/extensions/universal-darwin-18/2.3.0/unf_ext-0.0.7.6/gem_make.out
复制代码

查找到类似的 issue 338。这个 issue 是安装 nokogiri 有问题,推断个人是与 universal-darwin-18 有关?在 issue 里检索一下,发现一个被自动关闭的 issue 13647,然而并无提出解决方法,彷佛与 macOS Mojave 系统有关,最后一个评论是建议完善文档说明这个问题并说他已经放弃使用 fastlane 了,能够说是给 newbie 当头一棒。笑着活下去.jpg

再看看剩与几个相关 issue,终于在这个 issue 12905 找到可行方法,原来是须要手动指定 Xcode 使用的 Command Line Tools 版本。

2. 使用 Action: get_build_number 时报错

fastlane_get_build_number报错

参考 QA1827 提示配置 Xcode Build Settings 中的 Current Project Version & Versioning System,及 info.plist 中的 CFBundleVersion & CFBundleShortVersionString,以使 agvtool 正常工做。

3. 使用 Action get_info_plist_value path 参数无效

在配置 output_name 时想自定义名字后加上 version 及 build 号方便区分。get_build_number 不像 get_version_number 能够指定 target,转而使用经过Action get_info_plist_value(path: value, key: value) 获取对应 Info.plist 中的 CFBundleVersion。 结果提示参数无效,原来是需传入文件相对路径(不能像文档中只写 plist 文件名,若是 plist 不是放在项目根目录下须要写相对路径),客户端开发思惟:为何 fastlane 不是提示文件找不到,直接提示参数无效。

4. Running script 'Run Script' 步骤发生错误

这个问题反复尝试后发现手动 clean 一下,再执行就 OK 了。有点诡异:)

疑问

1. fastlane 中有 slack 的 Action 能够在执行完成后自动发送通知消息,没有找到 QQ/Wechat 的 Action,自定 QQ/Wechat Action 是否具备可行性?

NeXT STEP

参考

  1. Getting started with fastlane for iOS
  2. 使用 Fastlane 上传 App 到蒲公英
相关文章
相关标签/搜索