Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Tailored Fastlane
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Flávio Caetano
April 05, 2018
Programming
0
55
Tailored Fastlane
Learn how to customize Fastlane creating your own actions
https://github.com/fjcaetano/talks
Flávio Caetano
April 05, 2018
Tweet
Share
More Decks by Flávio Caetano
See All by Flávio Caetano
Siri Suggestions & Shortcuts
fjcaetano
1
190
Animations: Swift vs React Native
fjcaetano
2
470
Fastlane Sob Medida
fjcaetano
1
150
React Native 4 Dummies
fjcaetano
0
63
Bugreport 101
fjcaetano
0
44
Other Decks in Programming
See All in Programming
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
300
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
280
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
260
Oxlint JS plugins
kazupon
1
890
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
720
Grafana:建立系統全知視角的捷徑
blueswen
0
330
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
690
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
2.4k
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
130
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
Featured
See All Featured
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
580
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
340
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
190
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
96
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
0
270
New Earth Scene 8
popppiees
1
1.5k
Site-Speed That Sticks
csswizardry
13
1.1k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
180
Abbi's Birthday
coloredviolet
1
4.7k
Designing for Performance
lara
610
70k
Transcript
Tailored Fastlane Flávio Caetano
Fastlane
1. Run tests 2. Select certificates 3. Archive ipa 4.
Capture screenshots 5. Upload to iTunes Connect 6. Notify on Slack
1. Run tests 2. Select certificates 3. Archive ipa 4.
Capture screenshots 5. Upload to iTunes Connect 6. Notify on Slack $ fastlane ios deploy
1. Run tests 2. Select certificates 3. Archive ipa 4.
Capture screenshots 5. Upload to iTunes Connect 6. Notify on Slack $ fastlane ios deploy 1. run_tests(scheme: “Tests”) 2. match(type: “distribution”) 3. build_app(scheme: “App”) 4. capture_screenshots 5. deliver 6. slack(message: “!”)
Fastfile =
Functions
desc "Runs all the tests" lane :test do run_tests( ...
devices: [ "iPhone X (11.2)", "iPhone 7 (10.3)", "iPhone SE (9.0)", ] ... ) end
desc "Runs all the tests" lane :test do run_tests( ...
devices: [ "iPhone X (~> 11.2)", "iPhone 7 (^ 10.3)", "iPhone SE (== 9.0)", ] ... ) end
1. Device List 2. FastlaneCore::Simulator 3. Gem::Version 4. Gem::Requirement
def select_similar_simulator(args) args.map { |device_string| pieces = device_string.split(' (') FastlaneCore::Simulator.all
.select { |s| s.name == pieces.first } .sort_by { |s| Gem::Version.create(s.os_version) } .detect { |s| Gem::Requirement.new(pieces[1].tr('()', '')) .satisfied_by?(Gem::Version.create(s.os_version)) } } .compact .map { |s| "#{s.name} (#{s.ios_version})"} end
desc "Runs all the tests" lane :test do run_tests( ...
devices: self.select_similar_simulator([ "iPhone X (~> 11.2)", "iPhone 7 (~> 10.3)", "iPhone SE (~> 9.0)", ]) ... ) end
Actions
sh(“echo”, “hello world!”) Runs a shell command
sh(“echo”, “\a”) Runs a shell command
sh(“open”, “http://someurl.com”) Runs a shell command
$ fastlane new_action {name}
class MyAction < Action def self.run(params) def self.available_options def self.output
# docs def self.return_value def self.description def self.details def self.authors def self.category def self.is_supported?(platform)
03 SWIFT PACKAGE MANAGER ACTION
class SpmAction < Action def self.run(params) cmd = [“swift”] cmd
<< "--build-path #{params[:build_path]}" if params[:build_path] cmd << "--package-path #{params[:package_path]}" if params[:package_path] cmd << "--configuration #{params[:configuration]}” if params[:configuration] cmd << "--verbose" if params[:verbose] cmd << params[:command] sh(cmd) end
def self.available_options [FastlaneCore::ConfigItem.new(key: :configuration, env_name: “FL_SPM_CONFIGURATION", description: "Build with configuration
(debug|release) [default: debug]”, optional: true, verify_block: proc do |value| UI.user_error!("Please pass a valid configuration: (debug|release)”) unless valid_configurations.include?(value) end), ... ] end def self.valid_configurations [“debug”, “release”] end
03 MANAGING ACTIONS
${PROJ}/fastlane/actions
None
[email protected]
https://github.com/fjcaetano Flávio Caetano