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
Flávio Caetano
April 05, 2018
Programming
0
54
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
460
Fastlane Sob Medida
fjcaetano
1
150
React Native 4 Dummies
fjcaetano
0
62
Bugreport 101
fjcaetano
0
43
Other Decks in Programming
See All in Programming
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
330
Java 25, Nuevas características
czelabueno
0
120
Developing static sites with Ruby
okuramasafumi
0
340
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
180
はじめてのカスタムエージェント【GitHub Copilot Agent Mode編】
satoshi256kbyte
0
130
開発に寄りそう自動テストの実現
goyoki
2
1.6k
GoLab2025 Recap
kuro_kurorrr
0
790
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
230
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
7
2.4k
Cap'n Webについて
yusukebe
0
160
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
140
Basic Architectures
denyspoltorak
0
140
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Navigating Weather and Climate Data
rabernat
0
58
Game over? The fight for quality and originality in the time of robots
wayneb77
1
71
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
31
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
110
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
350
Deep Space Network (abreviated)
tonyrice
0
30
What the history of the web can teach us about the future of AI
inesmontani
PRO
0
380
The Language of Interfaces
destraynor
162
26k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
79
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
270
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