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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Flávio Caetano
April 05, 2018
Programming
60
0
Share
Tailored Fastlane
Learn how to customize Fastlane creating your own actions
https://github.com/fjcaetano/talks
Flávio Caetano
April 05, 2018
More Decks by Flávio Caetano
See All by Flávio Caetano
Siri Suggestions & Shortcuts
fjcaetano
1
200
Animations: Swift vs React Native
fjcaetano
2
470
Fastlane Sob Medida
fjcaetano
1
150
React Native 4 Dummies
fjcaetano
0
64
Bugreport 101
fjcaetano
0
47
Other Decks in Programming
See All in Programming
へんな働き方
yusukebe
6
2.9k
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
150
The Monolith Strikes Back: Why AI Agents ❤️ Rails Monoliths
serradura
0
290
KagglerがMixSeekを触ってみた
morim
0
370
PHPで TLSのプロトコルを実装してみる
higaki_program
0
750
Kubernetes上でAgentを動かすための最新動向と押さえるべき概念まとめ
sotamaki0421
3
450
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
230
ふりがな Deep Dive try! Swift Tokyo 2026
watura
0
170
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
890
의존성 주입과 모듈화
fornewid
0
120
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
440
Coding at the Speed of Thought: The New Era of Symfony Docker
dunglas
0
4.7k
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1k
Deep Space Network (abreviated)
tonyrice
0
110
The agentic SEO stack - context over prompts
schlessera
0
740
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
690
Prompt Engineering for Job Search
mfonobong
0
260
Visualization
eitanlees
150
17k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
250
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
180
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
How to Think Like a Performance Engineer
csswizardry
28
2.5k
Between Models and Reality
mayunak
3
260
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