SlideShare a Scribd company logo
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
DependsMedium
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=
Travis and fastlane
Travis and fastlane
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
Travis and fastlane
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
Travis and fastlane
• Easy setup
• No maintenance
• Github integration
• Bad for trouble shooting
• Automate your flows
• Flexible, customizable
• Life saver
• Great for CI

More Related Content

PDF
How we integrate & deploy Mobile Apps with Travis CI
PDF
Fastlane - Automation and Continuous Delivery for iOS Apps
PPTX
Continuous integration by Rémy Virin
PDF
Revue des annonces WWDC2015
PDF
HotPush with Ionic 2 and CodePush
PDF
What's new in ios 7.0
PDF
Parse par Nicolas Lauquin
PDF
Jazoon12 355 aleksandra_gavrilovska-1
How we integrate & deploy Mobile Apps with Travis CI
Fastlane - Automation and Continuous Delivery for iOS Apps
Continuous integration by Rémy Virin
Revue des annonces WWDC2015
HotPush with Ionic 2 and CodePush
What's new in ios 7.0
Parse par Nicolas Lauquin
Jazoon12 355 aleksandra_gavrilovska-1

What's hot (20)

PDF
Dockerize node.js application
PPTX
PhoneGap Day 2016 EU: Creating the Ideal Cordova Dev Environment
PDF
ApppiumDoc_version2015
PDF
Multitasking in iOS 7
PDF
Kadecot APIs overview
PDF
React Native in Production
PPTX
Javascript Essentials - Cisco Live Barcelona 2019
PDF
Webex Devices xAPI - DEVNET_2071 - Cisco Live - San Diego 2019
PDF
Breaking iOS Apps using Cycript
PPTX
Banfootguns devseccon 2019
PDF
Formacion en movilidad: Conceptos de desarrollo en iOS (I)
PPT
iOS Application Penetration Testing for Beginners
PDF
A Hacker's perspective on AEM applications security
PDF
IOS 11 setup with appium latest
PDF
The Hookshot: Runtime Exploitation
PDF
Pentesting iOS Apps
PDF
Hardening Your Config Management - Security and Attack Vectors in Config Mana...
PPTX
Selenium Automation at Incapsula
PPTX
Web components Introduction
PPTX
PhoneGap day 2016 EU: Simulating Cordova Plugins in the Browser
Dockerize node.js application
PhoneGap Day 2016 EU: Creating the Ideal Cordova Dev Environment
ApppiumDoc_version2015
Multitasking in iOS 7
Kadecot APIs overview
React Native in Production
Javascript Essentials - Cisco Live Barcelona 2019
Webex Devices xAPI - DEVNET_2071 - Cisco Live - San Diego 2019
Breaking iOS Apps using Cycript
Banfootguns devseccon 2019
Formacion en movilidad: Conceptos de desarrollo en iOS (I)
iOS Application Penetration Testing for Beginners
A Hacker's perspective on AEM applications security
IOS 11 setup with appium latest
The Hookshot: Runtime Exploitation
Pentesting iOS Apps
Hardening Your Config Management - Security and Attack Vectors in Config Mana...
Selenium Automation at Incapsula
Web components Introduction
PhoneGap day 2016 EU: Simulating Cordova Plugins in the Browser
Ad

Viewers also liked (15)

PDF
利用 iOS App 技術創業的 13 個方法
PDF
Developer sharing about xing
PDF
Deploy your app with one Slack command
PDF
Análisis lectura ¿qué es una constitución?
PPTX
The Mobile ToolChain with Fastlane - Code Red Talk at RedBlackTree
PPT
IBM Innovate DevOps for Mobile Apps
PDF
DevOps for the Mobile Enterprise: Test and Deploy
PDF
Exercising and Scaling Up Mobile DevOps in the Enterprise
PDF
你的程式開發初體驗 (以Swift為例)
PPTX
Best Practices for DevOps in Mobile App Testing
PDF
iOS 入門教學
PDF
Continuous Delivery with fastlane
PDF
React-Native for multi-platform mobile applications @ Codemotion Rome 2017
PDF
Lean Startup for Agile Product Management
PDF
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
利用 iOS App 技術創業的 13 個方法
Developer sharing about xing
Deploy your app with one Slack command
Análisis lectura ¿qué es una constitución?
The Mobile ToolChain with Fastlane - Code Red Talk at RedBlackTree
IBM Innovate DevOps for Mobile Apps
DevOps for the Mobile Enterprise: Test and Deploy
Exercising and Scaling Up Mobile DevOps in the Enterprise
你的程式開發初體驗 (以Swift為例)
Best Practices for DevOps in Mobile App Testing
iOS 入門教學
Continuous Delivery with fastlane
React-Native for multi-platform mobile applications @ Codemotion Rome 2017
Lean Startup for Agile Product Management
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Ad

Similar to Travis and fastlane (20)

PDF
Dependencies Managers in C/C++. Using stdcpp 2014
PDF
OpenCloudDay 2014: Deploying trusted developer sandboxes in Amazon's cloud
PPTX
Docker Security workshop slides
PDF
OpenSource ToolChain for the Hybrid Cloud
PPTX
Running Docker in Development & Production (#ndcoslo 2015)
PPTX
How we integrate & deploy Mobile Apps with Travis CI part 2
PDF
Open SSL and MS Crypto API EKON21
PDF
Codetainer: a Docker-based browser code 'sandbox'
PDF
NetDevOps Developer Environments with Vagrant @ SCALE16x
PDF
Docker remote-api
PDF
Continuous Delivery: The Next Frontier
PDF
Composer, putting dependencies on the score
PDF
Atmosphere Conference 2015: Taming the Modern Datacenter
PPTX
Assembling an Open Source Toolchain to Manage Public, Private and Hybrid Clou...
PDF
Burn down the silos! Helping dev and ops gel on high availability websites
PDF
Kubernetes security
PPTX
Introduction to InSpec and 1.0 release update
PPTX
drupal ci cd concept cornel univercity.pptx
PDF
Commcon 2018
PDF
Continuous Integration/Deployment with Docker and Jenkins
Dependencies Managers in C/C++. Using stdcpp 2014
OpenCloudDay 2014: Deploying trusted developer sandboxes in Amazon's cloud
Docker Security workshop slides
OpenSource ToolChain for the Hybrid Cloud
Running Docker in Development & Production (#ndcoslo 2015)
How we integrate & deploy Mobile Apps with Travis CI part 2
Open SSL and MS Crypto API EKON21
Codetainer: a Docker-based browser code 'sandbox'
NetDevOps Developer Environments with Vagrant @ SCALE16x
Docker remote-api
Continuous Delivery: The Next Frontier
Composer, putting dependencies on the score
Atmosphere Conference 2015: Taming the Modern Datacenter
Assembling an Open Source Toolchain to Manage Public, Private and Hybrid Clou...
Burn down the silos! Helping dev and ops gel on high availability websites
Kubernetes security
Introduction to InSpec and 1.0 release update
drupal ci cd concept cornel univercity.pptx
Commcon 2018
Continuous Integration/Deployment with Docker and Jenkins

Recently uploaded (20)

PPTX
CHAPTER 12 - CYBER SECURITY AND FUTURE SKILLS (1) (1).pptx
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PPTX
ai tools demonstartion for schools and inter college
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
Digital Strategies for Manufacturing Companies
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PPTX
Odoo POS Development Services by CandidRoot Solutions
PPTX
ManageIQ - Sprint 268 Review - Slide Deck
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PDF
Nekopoi APK 2025 free lastest update
PDF
System and Network Administration Chapter 2
PDF
How Creative Agencies Leverage Project Management Software.pdf
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PPTX
Online Work Permit System for Fast Permit Processing
CHAPTER 12 - CYBER SECURITY AND FUTURE SKILLS (1) (1).pptx
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
ai tools demonstartion for schools and inter college
How to Migrate SBCGlobal Email to Yahoo Easily
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
Design an Analysis of Algorithms I-SECS-1021-03
Digital Strategies for Manufacturing Companies
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
Odoo POS Development Services by CandidRoot Solutions
ManageIQ - Sprint 268 Review - Slide Deck
Design an Analysis of Algorithms II-SECS-1021-03
Nekopoi APK 2025 free lastest update
System and Network Administration Chapter 2
How Creative Agencies Leverage Project Management Software.pdf
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
Softaken Excel to vCard Converter Software.pdf
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Online Work Permit System for Fast Permit Processing

Travis and fastlane

  • 2. % git add % git commit % git push Service hook Mac VM Xcode • Build • Test • Deploy • Notify
  • 3. Setup Availability Speed Easy Manual Cloud Private network DependsMedium Trouble shooting Hard Easy Cost Free for open source …..$129/month for private repo
  • 4. Setup % gem install travis % vim .travis.yml language: objective-c script: - make notifications: email: false
  • 5. all: xcodebuild -arch "i386" -configuration "Debug" -sdk "iphonesimulator" build | xcpretty
  • 6. Code Sign • Encrypt your keys, certificates, and provisioning profiles. • Commit encrypted files to github • Decrypt and install before build
  • 7. % 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
  • 8. % 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
  • 9. #!/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/
  • 10. 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=
  • 13. xcodebuild -arch "i386" -configuration "Debug" - sdk "iphonesimulator" build | xcpretty fastlane build
  • 14. Setup % sudo gem install fastlane % fastlane init % vim fastlane/Appfile % vim fastlane/Fastfile
  • 15. 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
  • 16. 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
  • 18. all: ifeq ($(TRAVIS_PULL_REQUEST), false) fastlane test else agvtool new-version -all $(TRAVIS_BUILD_NUMBER) fastlane deliver_demo endif
  • 19. xcodebuild -arch "i386" -configuration "Debug" -sdk "iphonesimulator" build | xcpretty fastlane build Trouble shooting
  • 21. • Easy setup • No maintenance • Github integration • Bad for trouble shooting • Automate your flows • Flexible, customizable • Life saver • Great for CI