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
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
6k
iOSDC 20190906: 動画アプリの投げ銭機能における 消耗型課金の仕組みと実装 with 発表ノート
nonchalant
2
600
Sign In with Apple
nonchalant
1
2.3k
iOSDC RejectCon 20180915: Factoryの自動生成によりテストを書きやすくする
nonchalant
1
710
iOSDC 20180902: 小さくはじめる端末管理
nonchalant
2
950
devsap 20180728: コード生成のススメ
nonchalant
0
130
potatotips #50: iOSは自動生成の夢を見るか?
nonchalant
0
1.9k
try! Swift Tokyo 2018: Best Docker Container in Swift
nonchalant
1
1.3k
Other Decks in Programming
See All in Programming
はじめてのDSPy - 言語モデルを『プロンプト』ではなく『プログラミング』するための仕組み
masahiro_nishimi
4
18k
Node-REDのノードの開発・活用事例とコミュニティとの関わり(Node-RED Con Nagoya 2025)
404background
0
110
AsyncSequenceとAsyncStreamのプロポーザルを全部読む!!
s_shimotori
1
230
Swift Concurrency 年表クイズ
omochi
3
220
SwiftDataを使って10万件のデータを読み書きする
akidon0000
0
250
AI Agent 時代的開發者生存指南
eddie
4
2.3k
Reactive Thinking with Signals and the Resource API
manfredsteyer
PRO
0
120
ドメイン駆動設計のエッセンス
masuda220
PRO
15
7.4k
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
750
20251016_Rails News ~Rails 8.1の足音を聴く~
morimorihoge
3
910
Kotlin 2.2が切り拓く: コンテキストパラメータで書く関数型DSLと新しい依存管理のかたち
knih
0
280
エンジニアに事業やプロダクトを理解してもらうためにやってること
murabayashi
0
120
Featured
See All Featured
Context Engineering - Making Every Token Count
addyosmani
8
330
Navigating Team Friction
lara
190
15k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Mobile First: as difficult as doing things right
swwweet
225
10k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
640
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
10
910
The Invisible Side of Design
smashingmag
302
51k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
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ΤϯδχΞҎ֎Ͱࣗ༝ʹͰ͖ΔΑ ͏ʹͳͬͨ • ଞͷνʔϜʹڞ༗ͨ͠ΒࣾͰ·ͬͨ • ࣗಈԽָ͍͠