最近体验实践了一遍自动打包工具 fastlane,记录一下基本过程及碰到的问题。(纯记录贴,没有实践过的能够看看碰到的问题部分,有经验的前辈能够瞅一眼疑问部分指点一下:)html
按文档,在终端中依次运行如下命令:ios
安装最新版本的 Xcode 命令行工具git
xcode-select --installgithub
安装 fastlanexcode
# 使用 RubyGems sudo gem install fastlane -NV # 或者使用 Homebrew brew cask install fastlanebash
导航至项目目录并运行app
fastlane initide
成功后输出: 函数
查看项目目录能够看到如终端数据的提示,生成了 fastlane 目录,包含两个文件:Fastfile、Appfile。以及 Gemfile 和 Gemfile.lock。工具
主要为配置 Appfile 及 Fastfile。
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 大体如:
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 时报错
参考 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' 步骤发生错误
1. fastlane 中有 slack 的 Action 能够在执行完成后自动发送通知消息,没有找到 QQ/Wechat 的 Action,自定 QQ/Wechat Action 是否具备可行性?