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
Otemachi.swift x Kyobashi.swift #01: 「fastlane ...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Takeshi Ihara
August 03, 2017
Programming
1
1.6k
Otemachi.swift x Kyobashi.swift #01: 「fastlane x Jenkins」でアプリ配布を自動化してみた
https://nikkei.connpass.com/event/62123/
Takeshi Ihara
August 03, 2017
Tweet
Share
More Decks by Takeshi Ihara
See All by Takeshi Ihara
iOSDC20200921: Feature Flagを適切に分類することでA/Bテストの運用コストを下げる
nonchalant
3
1.4k
iOSDC 20190906: 動画アプリの投げ銭機能における 消耗型課金の仕組みと実装
nonchalant
3
6.2k
iOSDC 20190906: 動画アプリの投げ銭機能における 消耗型課金の仕組みと実装 with 発表ノート
nonchalant
2
610
Sign In with Apple
nonchalant
1
2.4k
iOSDC RejectCon 20180915: Factoryの自動生成によりテストを書きやすくする
nonchalant
1
730
iOSDC 20180902: 小さくはじめる端末管理
nonchalant
2
990
devsap 20180728: コード生成のススメ
nonchalant
0
130
potatotips #50: iOSは自動生成の夢を見るか?
nonchalant
0
2k
try! Swift Tokyo 2018: Best Docker Container in Swift
nonchalant
1
1.4k
Other Decks in Programming
See All in Programming
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
180
15年目のiOSアプリを1から作り直す技術
teakun
1
620
株式会社 Sun terras カンパニーデック
sunterras
0
2k
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
3
1.2k
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
780
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
130
Go Conference mini in Sendai 2026 : Goに新機能を提案し実装されるまでのフロー徹底解説
yamatoya
0
550
AIコーディングの理想と現実 2026 | AI Coding: Expectations vs. Reality 2026
tomohisa
0
1.2k
New in Go 1.26 Implementing go fix in product development
sunecosuri
0
400
朝日新聞のデジタル版を支えるGoバックエンド ー価値ある情報をいち早く確実にお届けするために
junkiishida
1
760
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜
kuro_kurorrr
3
1.9k
Go1.26 go fixをプロダクトに適用して困ったこと
kurakura0916
0
350
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
850
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
140
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
120
4 Signs Your Business is Dying
shpigford
187
22k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Designing for Performance
lara
611
70k
GraphQLとの向き合い方2022年版
quramy
50
14k
Crafting Experiences
bethany
1
81
How STYLIGHT went responsive
nonsquared
100
6k
The Pragmatic Product Professional
lauravandoore
37
7.2k
Transcript
ʮfastlane x JenkinsʯͰ ΞϓϦΛࣗಈԽͯ͠Έͨ @nonchalant0303 Otemachi.swift x Kyobashi.swift
ࣗݾհ • Takeshi Ihara • Recruit Marketing Partners • iOS
Engineer • Twitter: @nonchalant0303 • GitHub: Nonchalant
OSS
Kyobashi.swift
ΞϓϦ %FCVH *O)PVTF 3FMFBTF %FW4FSWFS ։ൃ 2" 4UH4FSWFS ։ൃ 2"
1SPE4FSWFS ։ൃ 2" "QQ4UPSF
͜Ε·ͰͷΞϓϦ 1. Archiveͯ͠.ipaϑΝΠϧΛੜ 2. DeployGateʹΞοϓσʔτ
Archiveத͕ ઐ༗͞Εͯ։ൃͰ͖ͳ͍
ͦ͏ͩɺࣗಈԽͩ
None
fastlane iOSɾAndroidΞϓϦͷϏϧυɺςετɺσϓ ϩΠΛߦ͏ͨΊͷRubyͷλεΫϥϯφʔ
Dev Server + InHouse gym( scheme: "Scheme", configuration: "InHouse", derived_data_path:
"./DerivedData", export_method: "enterprise", clean: true, xcargs: "OTHER_SWIFT_FLAGS='$(inherited) -DDEV_SERVER'" ) deploygate( user: ENV["DEPLOYGATE_USER"], api_token: ENV["DEPLOYGATE_API_TOKEN"], distribution_key: DISTRIBUTION_KEY[conf] )
Dev Server + InHouse gym( scheme: "Scheme", configuration: "InHouse", derived_data_path:
"./DerivedData", export_method: "enterprise", clean: true, xcargs: "OTHER_SWIFT_FLAGS='$(inherited) -DDEV_SERVER'" ) deploygate( user: ENV["DEPLOYGATE_USER"], api_token: ENV["DEPLOYGATE_API_TOKEN"], distribution_key: DISTRIBUTION_KEY[conf] )
͜Ε͚ͩʂ
ࣗಈԽग़དྷͨʁ
खݩͰΒͤͨΒ ઐ༗͞Εͯ͠·͏
None
None
Jenkinsͷઃఆ - ϒϥϯνͷࢦఆ - αʔόʔͷ͖ઌΛࢦఆ - ςετͷ࣮ߦՄ൱ ্ͷ3ͭΛઃఆͰ͖ΔΑ͏ʹύϥϝʔλʔΛઃఆ
JenkinsͱGitHubͷ࿈ܞ JenkinsͷGit Plugin - ಛఆͷϒϥϯνͷมߋΛϙʔϦϯάͰࢹ - developϒϥϯνʹมߋ͕͋ͬͨ߹ - Dev Server
+ InHouseΛ
None
͜ΕͰ։ൃޮ㽉
ߋͳΔվળ&ࣗಈԽ
1. ΞϓϦ্͕ॻ͔ΕΔ ผαʔόʔͷ֬ೝ࣌ʹຖճDLͨ͘͠ͳ͍ ↓ αʔόʔຖʹΞϓϦΛׂ͢Δ (Bundle IdentifierΛมߋ͢Δ)
1. ΞϓϦ্͕ॻ͔ΕΔ gym( scheme: "Scheme", configuration: "InHouse", derived_data_path: "./DerivedData", export_method:
"enterprise", clean: true, xcargs: "OTHER_SWIFT_FLAGS='$(inherited) -DSTG_SERVER' PROVISIONING_PROFILE_SPECIFIER='Provisioning'" )
1. ΞϓϦ্͕ॻ͔ΕΔ gym( scheme: "Scheme", configuration: "InHouse", derived_data_path: "./DerivedData", export_method:
"enterprise", clean: true, xcargs: "OTHER_SWIFT_FLAGS='$(inherited) -DSTG_SERVER' PROVISIONING_PROFILE_SPECIFIER='Provisioning'" ) ༻ͷ1SPWJTJPOJOH1SPpMFΛࠩ͠ସ͑Δ
2. αʔόʔͷ͖ઌ͕͔Β ͳ͍ ىಈ͢Δલʹαʔόʔͷ͖ઌΛΓ͍ͨ ↓ ΞΠίϯͰαʔόʔͷ͖ઌ͕͔ΔΑ͏ʹ ࠩ͠ସ͑Δ
2. αʔόʔͷ͖ઌ͕͔Β ͳ͍ last_commit_hash = last_git_commit[:abbreviated_commit_hash] badge( shield: last_commit_hash, custom:
"fastlane/badge/dev_badge_dark.png" )
3. iTunes ConnectͷΞοϓ ϩʔυࣗಈԽ͍ͨ͠ खݩͰArchiveͨ͘͠ͳ͍ ↓ fastlaneͷactionͷpilotͰ࣮ݱ
3. iTunes ConnectͷΞοϓ ϩʔυࣗಈԽ͍ͨ͠ gym( clean: true, configuration: 'Release', scheme:
"Scheme", output_directory: "build", output_name: "SchemeRelease", ) pilot( skip_submission: true, skip_waiting_for_build_processing: true ) +FOLJOTϚγϯ্Ͱ%FWFMPQFSΞΧϯτͰ ͋Β͔͡ΊϩάΠϯ͓ͯ͘͠
4. ਃ߲ࣗಈԽ͍ͨ͠ iTunes ConnectΛ։͖ͨ͘ͳ͍ (ॏ͍) ↓ fastlaneͷactionͷdeliverͰ࣮ݱ
4. ਃ߲ࣗಈԽ͍ͨ͠ - deliver initͰݱࡏͷਃ߲͕ੜ - deliverͰ্ॻ͖
·ͱΊ %FCVH *O)PVTF 3FMFBTF %FW4FSWFS ։ൃ 2" 4UH4FSWFS ։ൃ 2"
1SPE4FSWFS ։ൃ 2" "QQ4UPSF
·ͱΊ • iOSΤϯδχΞҎ֎Ͱࣗ༝ʹͰ͖ΔΑ ͏ʹͳͬͨ • ଞͷνʔϜʹڞ༗ͨ͠ΒࣾͰ·ͬͨ • ࣗಈԽָ͍͠