前言
可以自动执行繁琐的任务,例如生成屏幕截图,处理配置文件和发布应用程序。每天我们可能会打包很多次,传统的打包这时候就显得比较浪费时间,因此我们可以采用自动打包方式来提升我们的效率
官网地址:docs.fastlane.tools/plugins/ava…
文档链接:
插件:docs.fastlane.tools/plugins/ava…
命令:docs.fastlane.tools/actions/
下面我们就来介绍一下自动打包
安装Fastlane
先安装Ruby环境,参考这篇文章Mac配置Ruby环境和安装CocoaPods
1.使用Homebrew安装
brew install fastlane
2.使用Gem安装
sudo gem install fastlane
如果出现如下情况
ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /usr/bin directory.
解决方案:
sudo gem install -n /usr/local/bin fastlane
卸载Fastlane
sudo gem unstall fastlane
更新Fastlane
这里需要看你是通过什么方式安装
1.通过gem方式安装
sudo gem install fastlane
2.通过Homebrew方式安装
brew upgrade fastlane
查看Fastlane位置
先找到Fastlane的位置
which fastlane
位置如下:
/usr/local/bin/fastlane
查看Fastlane版本号
fastlane --version
结果如下:
fastlane installation at path: /Library/Ruby/Gems/2.6.0/gems/fastlane-2.180.1/bin/fastlane ----------------------------- [✔] 🚀 fastlane 2.180.1
安装插件
蒲公英插件
fastlane add_plugin pgyer
配置Fastlane
1.cd 到指定目录
2.下载证书到你的钥匙串,这里需要开发者证书和发布证书
3.初始化fastlane
fastlane init
这里有4种选择供选择,
Automate screenshots: 自动截屏
Automate beta distribution to TestFlight: 自动发布beta版本到testFlight
Automate App Store distribution: 自动发布到App Store
Manual setup: 手动设置
[✔] 🚀 [✔] Looking for iOS and Android projects in current directory... [16:59:49]: Created new folder './fastlane'. [16:59:49]: Detected an iOS/macOS project in the current directory: 'KJTestCategoryDemo.xcworkspace' [16:59:49]: ----------------------------- [16:59:49]: --- Welcome to fastlane 🚀 --- [16:59:49]: ----------------------------- [16:59:49]: fastlane can help you with all kinds of automation for your mobile app [16:59:49]: We recommend automating one task first, and then gradually automating more over time [16:59:49]: 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
输入1
[17:00:43]: ------------------------------------------------------- [17:00:43]: --- Setting up fastlane to automate iOS screenshots --- [17:00:43]: ------------------------------------------------------- [17:00:43]: fastlane uses UI Tests to automate generating localized screenshots of your iOS app [17:00:43]: fastlane will now create 2 helper files that are needed to get the setup running [17:00:43]: For more information on how this works and best practices, check out [17:00:43]: https://docs.fastlane.tools/getting-started/ios/screenshots/
输入2
[17:00:49]: Parsing your local Xcode project to find the available schemes and the app identifier [17:00:49]: Resolving Swift Package Manager dependencies... [17:00:49]: $ xcodebuild -resolvePackageDependencies -workspace KJTestCategoryDemo.xcworkspace -scheme KJTestCategoryDemo [17:00:50]: ▸ Command line invocation: [17:00:50]: ▸ /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -resolvePackageDependencies -workspace KJTestCategoryDemo.xcworkspace -scheme KJTestCategoryDemo [17:00:51]: ▸ resolved source packages: [17:00:51]: $ xcodebuild -showBuildSettings -workspace KJTestCategoryDemo.xcworkspace -scheme KJTestCategoryDemo ✅ Successfully created SnapshotHelper.swift './fastlane/SnapshotHelper.swift' ✅ Successfully created new Snapfile at './fastlane/Snapfile' ------------------------------------------------------- Open your Xcode project and make sure to do the following: 1) Add a new UI Test target to your project 2) Add the ./fastlane/SnapshotHelper.swift to your UI Test target You can move the file anywhere you want 3) Call `setupSnapshot(app)` when launching your app let app = XCUIApplication() setupSnapshot(app) app.launch() 4) Add `snapshot("0Launch")` to wherever you want to trigger screenshots 5) Add a new Xcode scheme for the newly created UITest target 6) Add a Check to enable the `Shared` box of the newly created scheme More information: https://docs.fastlane.tools/getting-started/ios/screenshots/ [17:00:53]: If you want more details on how to setup automatic screenshots, check out [17:00:53]: https://docs.fastlane.tools/getting-started/ios/screenshots/#setting-up-snapshot
输入3,输入Apple账号和密码
[17:02:24]: -------------------------------- [17:02:24]: --- Login with your Apple ID --- [17:02:24]: -------------------------------- [17:02:24]: To use App Store Connect and Apple Developer Portal features as part of fastlane, [17:02:24]: we will ask you for your Apple ID username and password [17:02:24]: This is necessary for certain fastlane features, for example: [17:02:24]: [17:02:24]: - Create and manage your provisioning profiles on the Developer Portal [17:02:24]: - Upload and manage TestFlight and App Store builds on App Store Connect [17:02:24]: - Manage your App Store Connect app metadata and screenshots [17:02:24]: [17:02:24]: Your Apple ID credentials will only be stored in your Keychain, on your local machine [17:02:24]: For more information, check out [17:02:24]: https://github.com/fastlane/fastlane/tree/master/credentials_manager [17:02:24]: [17:02:24]: Please enter your Apple ID developer credentials [17:02:24]: Apple ID Username:
这时我们会发现我们的目录下面多了一个下面的文件夹,
配置Fastfile文件内容
如下配置信息仅供参考,请切换为属于你的专属信息
fastlane_version "2.207.0" default_platform :ios platform :ios do desc "以 development 方式打包并上传到蒲公英" lane :test_beta do puts "以 development 方式打包" gym( # 指定打包所使用的输出方式 (可选: app-store, package, ad-hoc, enterprise, development) export_method: "development", # 指定项目的 scheme 名称 scheme: "xxx", # 指定输出的文件夹地址 output_directory: "./archive/test_beta/" + Time.new.strftime("%Y-%m-%d-%H:%M:%S"), ) puts "上传 ipa 包到蒲公英" pgyer( # 蒲公英 API KEY api_key: "xxx", # 蒲公英 USER KEY user_key: "xxx" ) end desc "以 ad-hoc 方式打包并上传到蒲公英" lane :beta do puts "自动生成 Provisioning Profiles 文件" sigh( # 指定输出的文件夹地址 output_path: "./archive/sign", # 是否为 AdHoc 证书(设为 false 或不写默认为 AppStore 证书) adhoc: true ) puts "以 ad-hoc 方式打包" gym( # 指定打包所使用的输出方式 (可选: app-store, package, ad-hoc, enterprise, development) export_method: "ad-hoc", # 指定项目的 scheme 名称 scheme: "xxx", # 指定输出的文件夹地址 output_directory: "./archive/beta/" + Time.new.strftime("%Y-%m-%d-%H:%M:%S"), # 指定打包方式 (可选: Release, Debug) configuration: "Release" ) puts "上传 ipa 包到蒲公英" pgyer( # 蒲公英 API KEY api_key: "xxx", # 蒲公英 USER KEY user_key: "xxx" ) end desc "以 app-store 方式打包并上传到 iTunes Connect" lane :release do puts "自动生成 Provisioning Profiles 文件" sigh( # 指定输出的文件夹地址 output_path: "./archive/sign" ) puts "以 app-store 方式打包" gym( # 指定打包所使用的输出方式 (可选: app-store, package, ad-hoc, enterprise, development) export_method: "app-store", # 指定项目的 scheme 名称 scheme: "xxx", # 指定输出的文件夹地址 output_directory: "./archive/release/" + Time.new.strftime("%Y-%m-%d-%H:%M:%S"), # 指定打包方式 (可选: Release, Debug) configuration: "Release" ) puts "上传 ipa 包到 iTunes Connect" deliver( # 跳过截图上传 skip_screenshots: true, # 跳过元数据上传 skip_metadata: true, # 跳过审核直接上传 force: true ) end end
- 按上述模式上传至蒲公英
fastlane test_beta
问题总结
缺少插件,解决方案:
2.1 安装bundle install
2.2 安装插件bundle exec fastlane add_plugin fir
成功如下:
正常发布流程,
提示缺乏发布证书,
接下来就是等待打包过程,成功如下:
接下来就是上传到苹果平台,这里会提示你登录苹果账号:
发布成功界面:
总耗时,12分钟