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
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
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.9k
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
110
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.5k
AI時代の認知負荷との向き合い方
optfit
0
160
CSC307 Lecture 08
javiergs
PRO
0
670
Architectural Extensions
denyspoltorak
0
280
Fragmented Architectures
denyspoltorak
0
150
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
170
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
3.9k
Patterns of Patterns
denyspoltorak
0
1.4k
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
190
組織で育むオブザーバビリティ
ryota_hnk
0
170
Featured
See All Featured
A Tale of Four Properties
chriscoyier
162
24k
Designing for humans not robots
tammielis
254
26k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
210
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Agile that works and the tools we love
rasmusluckow
331
21k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
410
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
84
[SF Ruby Conf 2025] Rails X
palkan
1
750
Paper Plane (Part 1)
katiecoart
PRO
0
4.1k
Ruling the World: When Life Gets Gamed
codingconduct
0
140
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
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