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
400
0
Share
Test and distribute an iOS app with Gitlab CI
Cocoaheads Paris, November 2017
Adrien Humilière
November 09, 2017
More Decks by Adrien Humilière
See All by Adrien Humilière
Attention to details
adhumi
0
16
Build an iOS app from an iPad
adhumi
0
74
Something about Xcode ^^
adhumi
0
150
Inside Brut.
adhumi
0
140
Localization done bien
adhumi
1
280
Pushing Forward iOS Notifications
adhumi
0
220
Good practices for iOS releases
adhumi
0
240
What's new in iOS 9
adhumi
0
380
Rebranding an iOS app
adhumi
0
280
Other Decks in Programming
See All in Programming
HTML-Aware ERB: The Path to Reactive Rendering @ RubyKaigi 2026, Hakodate, Japan
marcoroth
0
500
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
1
530
JOAI2026 1st solution - heron0519 -
heron0519
0
160
WebAssembly を読み込むベストプラクティス 2026年春版 / Best Practices for Loading WebAssembly (Spring 2026)
petamoriken
4
950
Liberating Ruby's Parser from Lexer Hacks
ydah
2
2.3k
AWSコミュニティ活動は顧客のクラウド推進に効くのか / Do AWS community activities help customers adopt the cloud?
seike460
PRO
0
160
의존성 주입과 모듈화
fornewid
0
150
セグメントとターゲットを意識するプロポーザルの書き方 〜採択の鍵は、誰に刺すかを見極めるマーケティング戦略にある〜
m3m0r7
PRO
0
650
クラウドネイティブなエンジニアに向ける Raycastの魅力と実際の活用事例
nealle
2
230
SREに優しいTerraform構成 modulesとstateの組み方
hiyanger
2
160
Surviving Black Friday: 329 billion requests with Falcon!
ioquatix
0
2.2k
CursorとClaudeCodeとCodexとOpenCodeを実際に比較してみた
terisuke
1
510
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
720
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
350
Heart Work Chapter 1 - Part 1
lfama
PRO
6
35k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
480
Faster Mobile Websites
deanohume
310
31k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
500
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
270
Believing is Seeing
oripsolob
1
120
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
430
New Earth Scene 8
popppiees
3
2.2k
Balancing Empowerment & Direction
lara
6
1.1k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
500
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