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
Test and distribute an iOS app with Gitlab CI
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Adrien Humilière
November 09, 2017
Programming
0
390
Test and distribute an iOS app with Gitlab CI
Cocoaheads Paris, November 2017
Adrien Humilière
November 09, 2017
Tweet
Share
More Decks by Adrien Humilière
See All by Adrien Humilière
Attention to details
adhumi
0
13
Build an iOS app from an iPad
adhumi
0
66
Something about Xcode ^^
adhumi
0
140
Inside Brut.
adhumi
0
130
Localization done bien
adhumi
1
280
Pushing Forward iOS Notifications
adhumi
0
210
Good practices for iOS releases
adhumi
0
240
What's new in iOS 9
adhumi
0
370
Rebranding an iOS app
adhumi
0
270
Other Decks in Programming
See All in Programming
Apache Iceberg V3 and migration to V3
tomtanaka
0
220
2026/02/04 AIキャラクター人格の実装論 口 調の模倣から、コンテキスト制御による 『思想』と『行動』の創発へ
sr2mg4
0
610
米国のサイバーセキュリティタイムラインと見る Goの暗号パッケージの進化
tomtwinkle
1
220
浮動小数の比較について
kishikawakatsumi
0
340
CSC307 Lecture 10
javiergs
PRO
1
690
文字コードの話
qnighy
41
15k
朝日新聞のデジタル版を支えるGoバックエンド ー価値ある情報をいち早く確実にお届けするために
junkiishida
1
260
Claude Code、ちょっとした工夫で開発体験が変わる
tigertora7571
0
180
Claude Codeと2つの巻き戻し戦略 / Two Rewind Strategies with Claude Code
fruitriin
0
190
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
360
DSPy入門 Pythonで実現する自動プロンプト最適化 〜人手によるプロンプト調整からの卒業〜
seaturt1e
1
260
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜 / Understanding nil in Go Interface Representation and Why nil != nil
kuro_kurorrr
2
1.2k
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
9.7k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
170
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
320
Speed Design
sergeychernyshev
33
1.6k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
290
SEO for Brand Visibility & Recognition
aleyda
0
4.3k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Deep Space Network (abreviated)
tonyrice
0
76
sira's awesome portfolio website redesign presentation
elsirapls
0
160
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
930
How GitHub (no longer) Works
holman
316
140k
Transcript
Test and distribute an iOS app with Gitlab CI @adhumi
Cocoaheads Paris, November 2017
100% FASTLANE FREE Disclaimer
None
6 developers product business analyst designer QA 2-3 developers product
designer (shared with multiple teams)
Write code Merge Request QA Release candidate Submission & release
master dev Git workflow
+
None
Open source Source control & CI in the same place
CI config versionned with Git .gitlab-ci.yml
brew install gitlab-runner + register the runner in Gitlab
1 commit == 1 pipeline
1 commit ~= 1 pipeline
1 pipeline == n stages
stages: - build - test - archive
1 stage == n jobs
test:UI: stage: test script: - make test
1 pipeline == stages × jobs
None
How do we use it at Trainline?
On each Merge Request: Static analysis Unit tests Linter
stages: - build - test
build:static_analysis: stage: build script: - xcodebuild -scheme "$DEBUG_SCHEME" -destination "$SIMULATOR_DEVICE"
analyze only: - branches
test:unit_tests: stage: test script: - xcodebuild -scheme "$DEBUG_SCHEME" -destination "$SIMULATOR_DEVICE"
test only: - branches
test:lint: stage: test script: - ./Scripts/lint.sh allow_failure: true only: -
branches
None
Distribute
Production Debug
master dev
stages: - archive - package - deploy
archive:debug: stage: archive script: - agvtool new-version -all $(agvtool vers
-terse). $CI_PIPELINE_ID - xcodebuild -scheme "$DEBUG_SCHEME" -archivePath build/CapitaineTrain-${CI_COMMIT_SHA} archive only: - dev@capitainetrain/ios dev branch
archive:release: stage: archive script: - xcodebuild -scheme "$RELEASE_SCHEME" -archivePath build/CapitaineTrain-${CI_COMMIT_SHA}
archive only: - dev@capitainetrain/ios master branch
package: stage: package script: - xcodebuild -exportArchive -archivePath $ARCHIVE -
exportOptionsPlist export-options.plist -exportPath build only: - dev@capitainetrain/ios - master@capitainetrain/ios
deploy:itunes_connect: stage: deploy script: - altool --upload-app -f "${IPA}" -u
"${CAT_ITC_USERNAME}" -p "${CAT_ITC_PASSWORD}" only: - dev@capitainetrain/ios - master@capitainetrain/ios
None
None
None
None
Thanks! On recrute (des devs Android) @adhumi