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
Travis and Fastlane
Search
Steven Shen
July 10, 2015
Technology
960
3
Share
Travis and Fastlane
A brief introduction of travis and fastlane setup for iOS project in Cocoaheads Taipei
Steven Shen
July 10, 2015
More Decks by Steven Shen
See All by Steven Shen
From Taiwan to Silicon Valley
syshen
0
77
Xing's shareing in Evernote Taiwan Meetup
syshen
0
55
簡單學會 iOS 開發
syshen
3
380
A lightning talk about UICollectionView
syshen
1
100
Other Decks in Technology
See All in Technology
小説執筆のハーネスエンジニアリング
yoshitetsu
0
730
AzureのIaC管理からログ調査まで、随所に役立つSkillsとCustom-Instructions / Boosting IaC and Log Analysis with Skills
aeonpeople
0
240
AI時代における技術的負債への取り組み
codenote
1
1.6k
AI バイブコーティングでキーボード不要?!
samakada
0
590
Rapid Start: Faster Internet Connections, with Ruby's Help
kazuho
2
680
AWS認定資格は本当に意味があるのか?
nrinetcom
PRO
2
280
No Types Needed, Just Callable Method Check
dak2
1
1.4k
AgentCore×VPCでの設計パターンn選と勘所
har1101
3
290
AI時代のガードレールとしてのAPIガバナンス
nagix
0
300
20260428_Product Management Summit_tadokoroyoshiro
tadokoro_yoshiro
4
3.6k
最近の技術系の話題で気になったもの色々(IoT系以外も) / IoTLT 花見予定会(たぶんBBQ) @都立潮風公園バーベキュー広場
you
PRO
1
240
明日からドヤれる!超マニアックなAWSセキュリティTips10連発 / 10 Ultra-Niche AWS Security Tips
yuj1osm
0
600
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
490
The Limits of Empathy - UXLibs8
cassininazir
1
310
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
BBQ
matthewcrist
89
10k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
170
Code Review Best Practice
trishagee
74
20k
Skip the Path - Find Your Career Trail
mkilby
1
110
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
150
Design in an AI World
tapps
1
200
Balancing Empowerment & Direction
lara
6
1.1k
How GitHub (no longer) Works
holman
316
150k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.9k
Transcript
TRAVIS CI
% git add % git commit % git push Service
hook Mac VM Xcode • Build • Test • Deploy • Notify
Setup Availability Speed Easy Manual Cloud Private network Depends Medium
Trouble shooting Hard Easy Cost Free for open source ….. $129/month for private repo
Setup % gem install travis % vim .travis.yml language: objective-c
script: - make notifications: email: false
all: xcodebuild -arch "i386" -configuration "Debug" -sdk "iphonesimulator" build |
xcpretty
Code Sign • Encrypt your keys, certificates, and provisioning profiles.
• Commit encrypted files to github • Decrypt and install before build
% openssl aes-256-cbc -k "foo" -in certs/dist.cer -out certs/dist.cer.enc -a
% openssl aes-256-cbc -k "foo" -in certs/dist.p12 -out certs/dist.p12.enc -a % openssl aes-256-cbc -k "foo" -in certs/dev.cer -out certs/dev.cer.enc -a % openssl aes-256-cbc -k "foo" -in certs/dev.p12 -out certs/dev.p12.enc -a % openssl aes-256-cbc -k “foo” -in certs/AppStore.mobileprovision -out certs/AppStore.mobileprovision.enc -a % openssl aes-256-cbc -k “foo” -in certs/AdHoc.mobileprovision -out certs/AdHoc.mobileprovision.enc -a before_script: - openssl aes-256-cbc -k "$SECRET" -in certs/AdHoc.mobileprovision.enc -d -a -out certs/AdHoc.mobileprovision - openssl aes-256-cbc -k "$SECRET" -in certs/AppStore.mobileprovision.enc -d -a -out certs/AppStore.mobileprovision - openssl aes-256-cbc -k "$SECRET" -in certs/dist.cer.enc -d -a -out certs/dist.cer - openssl aes-256-cbc -k "$SECRET" -in certs/dist.p12.enc -d -a -out certs/dist.p12 - openssl aes-256-cbc -k "$SECRET" -in certs/dist.cer.enc -d -a -out certs/dist.cer - openssl aes-256-cbc -k "$SECRET" -in certs/dist.p12.enc -d -a -out certs/dist.p12 Encrypt Decrypt Export
% travis encrypt “SECRET=foo” --add env: global: - secure: eLo92Sw8KejuadMDTgY
+bMAPow3D4zqkhBqXm8oUDctZn3qOJ5iJgMrNxfhSUx+AX/ jiT07+U0vicHWRjGtkIGBeZJ8FVJL7NZQbIbqa80g0+MT4CNk4bumUphY0 w+OOzsY8V4OKR90mUmzz3bVN8/ROFBZygeYBdiLnmhoQ93E= - secure: fGoTHN29GtCiux/ aGJ2wm3NYtbyIRh0vnfoJafYdzWC6lj0PWrv0KVF31rHA56f7wPVLFnLrx 2UhNzZHfMaavD9QSGVYNOcE2AVXuaRWnMrKmCjAkCW/7qnePwxcgcQTV +zQJTV523G4nDbWQMoQ9wugzTsxhj+Ob+ZF0cGEXUA= Use command line
#!/bin/sh # create keychain security create-keychain -p travis ios-build.keychain security
default-keychain -s ios-build.keychain security unlock-keychain -p travis ios-build.keychain security set-keychain-settings -t 3600 -l ~/Library/Keychains/ios- build.keychain # Certificate & Private key security import ./certs/cert.cer -k ~/Library/Keychains/ios- build.keychain -T /usr/bin/codesign security import ./certs/key.p12 -k ~/Library/Keychains/ios- build.keychain -P "$KEY_PASSWORD" -T /usr/bin/codesign # Provisioning profiles mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles cp "./certs/AppStore.mobileprovision" ~/Library/MobileDevice/ Provisioning\ Profiles/ cp "./certs/AdHoc.mobileprovision" ~/Library/MobileDevice/ Provisioning\ Profiles/
language: objective-c osx_image: xcode6.4 before_install: - gem install fastlane before_script:
- openssl aes-256-cbc -k "$SECRET" -in certs/EMQAppStore.mobileprovision.enc -d -a -out certs/ EMQAppStore.mobileprovision - openssl aes-256-cbc -k "$SECRET" -in certs/EMQDev.mobileprovision.enc -d -a -out certs/ EMQDev.mobileprovision - openssl aes-256-cbc -k "$SECRET" -in certs/cert.cer.enc -d -a -out certs/cert.cer - openssl aes-256-cbc -k "$SECRET" -in certs/dev-cert.cer.enc -d -a -out certs/dev-cert.cer - openssl aes-256-cbc -k "$SECRET" -in certs/key.p12.enc -d -a -out certs/key.p12 - openssl aes-256-cbc -k "$SECRET" -in certs/dev-key.p12.enc -d -a -out certs/dev-key.p12 - sh ./certs/install-keys.sh script: - make podfile: iOSApp/Podfile notifications: email: false slack: emq-inc:kPgGUXItHsgRsNtc77Fz3f3P env: global: - secure: OqyOY/I8QoucKb4uWY9xu9pkXgFoTahqiRl3BLOCJEbgKMKoUyDnk7N/ALktHp2S/NuB4zj5PNA50Lhb/ zAnI7cTgZT0qEDJv2yDIM/j0wQFEHbKQafEHDWj2vAnook8OBpXiiykqWIb1dKgXCjzcEDjxhSo5V6V5IsdFHVAAew= - secure: gAw0juDvfHolj0zg93f2qnCFBxetvFIBTsMCgHMzStk0DyKrsh4IV +1x2CCqSFWo5q4EbXmsKKeyQKqfreIbbQTmZkAmXjIiVg70LDVgsqk5COWUTRgn21pUGWUFosxAkSZZghEf0o3Z62jA6FgeJkCkP cSLszuE0Qlbiq0SFSw= - secure: eLo92Sw8KejuadMDTgY+bMAPow3D4zqkhBqXm8oUDctZn3qOJ5iJgMrNxfhSUx+AX/ jiT07+U0vicHWRjGtkIGBeZJ8FVJL7NZQbIbqa80g0+MT4CNk4bumUphY0w+OOzsY8V4OKR90mUmzz3bVN8/ ROFBZygeYBdiLnmhoQ93E= - secure: fGoTHN29GtCiux/ aGJ2wm3NYtbyIRh0vnfoJafYdzWC6lj0PWrv0KVF31rHA56f7wPVLFnLrx2UhNzZHfMaavD9QSGVYNOcE2AVXuaRWnMrKmCjAkCW /7qnePwxcgcQTV+zQJTV523G4nDbWQMoQ9wugzTsxhj+Ob+ZF0cGEXUA=
None
None
xcodebuild -arch "i386" -configuration "Debug" - sdk "iphonesimulator" build |
xcpretty fastlane build
Setup % sudo gem install fastlane % fastlane init %
vim fastlane/Appfile % vim fastlane/Fastfile
def unit_test xctest( workspace: 'EMQ.xcworkspace', scheme: 'EMQ-Demo', configuration: 'Demo', sdk:
"iphonesimulator", arch: "i386", reports:[{ report: 'html', output: './test-report.html' }] ) slack( message: 'EMQ iOS App Unit Test', channel: '#dev-ios', default_payloads: [:test_result, :git_branch, :git_author, :last_git_commit], ) end before_all do ENV["SLACK_URL"] = "https://hooks.slack.com/services/ABCDEFG/ABCDEFG/ABCDEFG" clean_build_artifacts cocoapods end
lane :deliver_demo do #increment_build_number sigh xcodebuild( workspace: 'EMQ.xcworkspace', configuration: 'Demo',
scheme: 'EMQ-Demo', identity: 'iPhone Distribution: EMQ Limited (28HUT34N52)', clean: true ) unit_test xcarchive( workspace: 'EMQ.xcworkspace', configuration: 'Demo', scheme: 'EMQ-Demo', embed: '../certs/EMQAppStore.mobileprovision', identity: 'iPhone Distribution: EMQ Limited (28HUT34N52)' ) xcexport resign( ipa: 'EMQ-Demo.ipa', signing_identity: 'iPhone Distribution: EMQ Limited (28HUT34N52)', provisioning_profile: '../certs/EMQAppStore.mobileprovision', ) testflight(skip_deploy: true) end
None
all: ifeq ($(TRAVIS_PULL_REQUEST), false) fastlane test else agvtool new-version -all
$(TRAVIS_BUILD_NUMBER) fastlane deliver_demo endif
xcodebuild -arch "i386" -configuration "Debug" -sdk "iphonesimulator" build | xcpretty
fastlane build Trouble shooting
None
• Easy setup • No maintenance • Github integration •
Bad for trouble shooting • Automate your flows • Flexible, customizable • Life saver • Great for CI