fastlane感悟
目标:使用fastlane自动打包上传appStore
一、 安装fastlane
fastlane要求Ruby版本,当前最新版本要求ruby版本>=2.1,在安装前有几个准备步骤:
-
先查看ruby版本:
ruby -v
-
检查Xcode的CLT是否安装:
xcode-select --install(如果没有安装,终端会自行安装CLT)
满足以上条件之后,则输入命令安装fastlane
sudo gem install fastlane
简要介绍一下fastlane的工具链:
- produce 创建可用于 iTunes Connect 和 Apple Developer
- Portal 的 ios app。
- cert 自动创建和维护 ios 代码签名证书。
- sigh 创建、更新、下载和修复 provisioning profiles。
- snapshot 自动将 App 屏幕截图本地化到每种设备上。
- frameit 将屏幕截图适配到适当的设备屏幕大小。
- gym 创建和打包 ios app。
- deliver 上传屏幕截图、元数据和 App 到 App 商店。
- pem 自动创建和更新 Push 通知的 profile。
二、初始化fastlane
进入项目目录之后,输入命令:
fastlane init
初始化时,会出现4个选项:
- Automate screenshots(自动化截图)
- Automate beta distribution to TestFlight(TestFlight)
- Automate App Store distribution(appStore发布版本)
- Manual setup - manually setup your project to automate your tasks(自定义)
初始化完成后,会出现fastlane文件夹,包含:
- Appfile,用于存放app ID和开发者的Apple ID
- Fastfile,用于管理创建的lane,lane则可以调用各个action(即fastlane的工具链)
- Snapfile,用于指定需要进行屏幕截图的设备类型(根据选项生成,可自己创建文件用于配置)
- Deliverfile,用于配置发布至appStore的文件(根据选项生成,可自己创建文件用于配置)
配置到处文件的编码格式为UTF-8
在/.bashrc,/.bash_profile,~/.zshrc文件中,编辑添加
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
在fastlane文件夹同级的目录下,新建Gemfile文件,加入配置:
source "https://rubygems.org"
gem "fastlane"
然后在命令行中执行
[sudo] bundle update
通过Gemfile和Gemfile.lock进行版本控制,之后则可以开始配置Fastfile了,配置完成之后,执行
bundle exec fastlane [lane]
三、配置fastlane
附上官网链接: https://docs.fastlane.tools/actions/
所有的配置都可以写在Fastfile文件里,工具链可以自行生成文件进行,在Fastfile里调用一下即可,例如:Deliverfile里面写了配置上传appStore的一些配置项,在Fastfile中,lane调用一下deliver则引用了
Deliverfile中的配置
当已有Fastfile需要导入时,输入命令
import './path/to/other/Fastfile'
fastlane配置很多,可以通过官网查看文档,每个aciton都有相应的参数配置,接下来列举一下常用的action的插件以及相应的工具链:
Testing 测试
-
scan run_tests的别名
-
slather 使用slather来生成一个代码覆盖率报告
-
swiftlint 使用SwiftLint运行swift代码验证
-
xcov 写的不错的代码的覆盖率报告
-
sonar 以编程方式调用sonar-scanner分析SonarQube
-
oclint 通过OCLint进行Lints的实现
-
gcovr Xcode项目运行测试覆盖率报告
-
lcov 使用lcov生成覆盖率数据
-
appium Appium用RSpec运行UI测试
-
xctool 使用xctool运行测试
-
xcode_server _get _assets 下载Xcode Bot的xcarchive和日志
-
run_tests 简单地运行你的iOS应用程序(通过scan)
Building 打包
-
gym build_ios _app的别名
-
cocoapods 相当于pod install
-
gradle 所有相关的action,包括构建和测试Android应用
-
clear_derived _data 删除 Xcode Derived 缓存
-
adb Run ADB Actions
-
xcversion 选择一个Xcode来使用版本说明符
-
xcodebuild 使用xcodebuild命令来构建和签名应用程序
-
carthage Runs carthage for your project
-
xcode_select 更改使用的Xcode路径。用于Xcode的beta版本
-
ensure_xcode _version 确保选中的Xcode版本与Xcode select匹配一个值
-
clean_cocoapods _cache 删除pods的缓存
-
verify_xcode 验证Xcode的安装是否正确
-
xcode_install 确保安装了Xcode的某个版本
-
verify_pod _keys 验证从podFile中引用的所有键都是非空的
-
build_android _app gradle分级的别名
-
xcarchive 使用xcodebuild归档项目
-
xcclean 使用xcodebuild清理项目
-
build_app build_ios _app的别名
-
xcbuild 使用xcodebuild构建项目
-
spm 在项目中运行Swift包管理器
-
build_ios _app 简单地构建和签署应用程序(gym的别名)
-
xcexport 使用xcodebuild导出项目
-
xctest 在给定的模拟器上运行测试
Screenshots 截图
-
snapshot capture_ios _screenshots的别名
-
screengrab capture_android _screenshots的别名
-
frameit frame_screenshots的别名
-
frame_screenshots Adds device frames around all screenshots (via frameit)
-
capture_android _screenshots Automated localized screenshots of your Android app (via screengrab)
-
capture_ios _screenshots Generate new localized screenshots on multiple devices (via snapshot)
-
capture_screenshots capture_ios_screenshots的别名
Project 项目配置
-
increment_build _number 项目的build number自增
-
set_info _plist _value Sets value to Info.plist of your project as native Ruby data structures
-
get_version _number Get the version number of your project
-
get_info _plist _value Returns value from Info.plist of your project as native Ruby data structures
-
update_info _plist Update a Info.plist file with bundle identifier and display name
-
update_app _identifier Update the project's bundle identifier
-
get_build _number Get the build number of your project
-
increment_version _number Increment the version number of your project
-
update_project _team Update Xcode Development Team ID
-
update_app _group _identifiers This action changes the app group identifiers in the entitlements file
-
get_ipa _info _plist _value Returns a value from Info.plist inside a .ipa file
-
recreate_schemes Recreate not shared Xcode project schemes
-
update_url _schemes Updates the URL schemes in the given Info.plist
-
set_build _number _repository Set the build number from the current repository
-
set_pod _key Sets a value for a key with cocoapods-keys
Releasing your app 发布
-
deliver Alias for the upload_to_app_store action
-
supply Alias for the upload_to_play_store action
-
appstore Alias for the upload_to_app_store action
-
upload_to_play_store Upload metadata, screenshots and binaries to Google Play (via supply)
-
upload_to_app_store Upload metadata and binary to iTunes Connect (via deliver)
四、运行时报错
当出现类似fastlane gym produces error: method `to_plist' not defined in Array的报错情况时,建议移除fastlane,重新安装fastlane
rvm @global do gem uninstall fastlane
rvm all do gem uninstall fastlane
gem uninstall fastlane
gem install fastlane
网友评论
另外,建议使用 rvm 来安装 ruby,使用系统的 ruby 权限能烦死人!
[✔] 🚀
[✔] Looking for iOS and Android projects in current directory...
[10:36:57]: Created new folder './fastlane'.
[10:36:57]: Detected an iOS/macOS project in the current directory: 'MinTeMatch.xcworkspace'
[10:36:57]: -----------------------------
[10:36:57]: --- Welcome to fastlane 🚀 ---
[10:36:57]: -----------------------------
[10:36:57]: fastlane can help you with all kinds of automation for your mobile app
[10:36:57]: We recommend automating one task first, and then gradually automating more over time
[10:36:57]: What would you like to use fastlane for?
1. 📸 Automate screenshots
2. 👩✈️ Automate beta distribution to TestFlight
3. 🚀 Automate App Store distribution
4. 🛠 Manual setup - manually setup your project to automate your tasks
? 4
[10:36:59]: ------------------------------------------------------------
[10:36:59]: --- Setting up fastlane so you can manually configure it ---
[10:36:59]: ------------------------------------------------------------
[10:36:59]: Installing dependencies for you...
[10:36:59]: $ bundle update
跟着这个配置一下!