bang88 / blog Goto Github PK
View Code? Open in Web Editor NEWdev notes
Home Page: https://domybest.dev
License: MIT License
dev notes
Home Page: https://domybest.dev
License: MIT License
开发过程中经常遇到多个环境切换的问题,手动切换比较麻烦,使用 fastlane 可以快速切换到不同的 env,打包发布的时候可以有时间来上一杯 ☕️,解放这无处安放的 👋
官方有一个例子可以结合使用,但是不喜欢分别在不同的目录初始化一个 fastlane,我喜欢放到一个地方后面方便管理 envs
这里来一个完整版的、之前折腾过很多遍经常会遇到各种各样的问题。
brew install rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
rbenv install 2.6.0
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
output
Checking for `rbenv' in PATH: /usr/local/bin/rbenv
Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: /usr/local/bin/rbenv-install (ruby-build 20181225)
Counting installed Ruby versions: 1 versions
Checking RubyGems settings: OK
Auditing installed plugins: OK
激活 shell 全局使用的 ruby 版本 rbenv global 2.6.0
关闭 terminal 重新打开就可以正常使用了
安装 fastlane、bundle、cocoapods
gem install fastlane -NV
gem install bundler
gem install cocoapods
flutter create flutter_fastlane_example
➜ flutter_fastlane_example tree -d -L 2
.
├── android
│ ├── app
│ └── gradle
├── ios
│ ├── Flutter
│ ├── Runner
│ ├── Runner.xcodeproj
│ └── Runner.xcworkspace
├── lib
└── test
10 directories
默认情况 fastlane 会去查找 ios 目录,如果没有会提示,此时创建了一个 fastlane 的目录不用理会直接进入到 fastlane 目录再执行一遍
fastlane init
� 现在必须进入到 fastlane 目录才能执行fastlane xxx
有点麻烦,把 fastlane 里面的文件 copy 出来到根目录,这样就可以在根目录执行 fastlane xxx
命令了。现在的目录结构应该是这样
传说可以使用bundle exec fastlane
执行速度更快...
fastlane 初始化完成了,下面主要关注 Fastfile
以及 --env=dev
我们这里只准备两个环境一个测试环境、一个生产环境,默认是开发环境,开发环境一般所有配置都是写死项目里面。
我们使用 dotenv
来管理不同环境下的环境变量,在 Fastfile
里面加载文件:
.env
文件相当于一个公共环境所有环境都可以获取到里面的值,有一些公共的属性我们就可以放到这个文件
fastlane_require 'dotenv'
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane
before_all do |_lane, _options|
Dotenv.load(".env.#{ENV['ENV']}.secret")
end
default_platform(:ios)
platform :ios do
desc 'Description of what the lane does'
lane :custom_lane do
# add actions here: https://docs.fastlane.tools/actions
puts (ENV['ENV']).to_s
puts (ENV['IOS_APP_ID']).to_s
puts "#{ENV['P12_PASSWORD']}"
end
end
每当我们执行 lane
的时候提供不同的 env 参数就可以随意切换到不同的环境里面了。 例如下面的命令表示执行 ios
平台 下面的 custom_lane
并且 env
设置为 dev
,这个 env
的参数请跟文件名保持一致,因为目前就是根据这个 env
的值去加载文件
bundle exec fastlane ios custom_lane --env=dev
bundle exec fastlane ios custom_lane --env=prod
现在可以正常切换到不同环境了,接下来就是配置平台打包生成对应的可执行文件,打包之前的注意事项:
# 使用fastlane自带的命令生成apk文件
platform :android do
desc 'Build android project'
lane :build do
sh 'cd ../;flutter clean; flutter build apk --release;cd fastlane;'
dist = "#{ENV['ANDROID_OUTPUT_PATH']}/#{ENV['ENV']}/"
sh "mkdir -p #{dist}"
sh "cp ../#{ENV['ANDROID_APK_PATH']} #{dist}"
end
end
.env
添加相应的环境变量### ANDROID PROJECT ###
ANDROID_PROJECT_DIR='android'
ANDROID_APK_PATH='build/app/outputs/apk/release/app-release.apk'
ANDROID_VERSION_CODE='0'
ANDROID_VERSION_NAME='1.0.0'
ANDROID_OUTPUT_PATH='../dist/android'
配置好以后执行 bundle exec fastlane android build --env=dev
将会把 apk
文件复制到 ANDROID_OUTPUT_PATH
目录,这样就算是完成了,看起来是不是很简单,而且如果只是这点操作的话我们可以完全不用 fastlane 随便写几行 shell 就搞定了。但是
但是我们打包的时候需要升级版本号,以及将不同的配置文件或者安全 key、推送通知等等的配置文件都同时修改的话就有点工作量了。所以接下来就是完善配置使其可以根据不同的环境修改我们代码里面的一些配置文件然后再打包,打包完成之后再把这些文件还原回去。
每次执行 build 之前先根据 env 设置请求数据的 API 地址、apikey 等基础信息
lane :set_build_env do |_options|
backup_file(path: 'lib/env.dart')
environments = %(
/// Api key
const apiKey = '#{ENV['API_KEY']}';
/// Http base url
const baseUrl = '#{ENV['API_BASE_URL']}';
)
File.write('../lib/env.dart', environments)
end
lane :restore_build_env do
restore_file(path: 'lib/env.dart') if File.exist?('../lib/env.dart.back')
end
after_all do |_lane, _options|
restore_build_env
end
error do |_lane, _exception, _options|
restore_build_env
end
这里一共包含4
个lane
,set_build_env
在build
的时候手动调用执行一次,还原配置就通过 after_all
这个全局的配置自动还原了,如果build
的过程中出现错误也自动还原配置。
这里的 lib/env.dart
配置文件只是一个例子你可以使用你自己喜欢的命名,然后对应修改Fastfile
里面的路径就可以了。
To be continued
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.