SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
How we integrate & deploy
Mobile Apps with Travis CI
Marcio Klepacz, iOS Engineering @ GetYourGuide
CocoaHeads Berlin 2015
Overview
  Who we are
  The Problem
  The Requirements
  The Solution
  Conclusion
Marcio Klepacz, GetYourGuide
Who we are
GetYourGuide Offers the Largest Travel
Activities Inventory Worldwide
Marcio Klepacz, GetYourGuide
800+
10,600+5,300+
800+
4,000+
2,000+
Marcio Klepacz, GetYourGuide
The Problem
  Repetitive
  Manual
  We want to automate that
  Fit our workflow
Developer Happiness
Marcio Klepacz, GetYourGuide
😄
Develop
😊	
  
Run
Tests
😐
Configure
😒	
  
Build
😠	
  
Write
release
notes
😤	
  
Upload,
notify
users,
etc.
The Requirements
Requirements
Marcio Klepacz, GetYourGuide
  Automatically build and test on push
  Fit into gitflow workflow (feature, develop and
release) branch
  Produce binaries that can be tested (downloaded)
Requirements / Gitflow
Marcio Klepacz, GetYourGuide
Requirements / Gitflow
Marcio Klepacz, GetYourGuide
Requirements / Gitflow
Marcio Klepacz, GetYourGuide
Requirements / Summary
Marcio Klepacz, GetYourGuide
  Build an Alpha App for Test Environment
  able to book with fake CC
  Build a Beta App for the Live Environment
  real content
  Build and test on every push
  Distribute app to testers from release and develop branches
  Relieve developers from repetitive manual tasks
Marcio Klepacz, GetYourGuide
Xcode	
  Server	
   Jenkins	
   Ship.io	
   Travis	
  CI	
  
iOS	
  and	
  
Android	
  
❌	
   ✅	
   ✅	
  
	
  
✅	
  
	
  
Ac,ons	
  
specific	
  to	
  
branches	
  
	
  
✅	
  
	
  
	
  
✅	
  
	
  
	
  
✅	
  
	
  
	
  
✅	
  
	
  
Build	
  on	
  
push	
  
✅	
  
	
  
✅	
  
	
  
✅	
  
	
  
✅	
  
	
  
Big	
  
community	
  
✅	
  
	
  
✅	
  
	
  
❌	
  
	
  
✅	
  
	
  
Hosted	
   ❌	
  
	
  
❌	
  
	
  
✅	
  
	
  
✅	
  
	
  
The Solution
Travis
Marcio Klepacz, GetYourGuide
  Hosted Continuous Integration service
  Configuration file in your project (.travis.yml)
  Define SDK, build env and output
  custom scripts
  Connected to Github
  Triggers in every push and pull request
  Available for many platforms
Travis Setup (.travis.yml)
Marcio Klepacz, GetYourGuide
  It’s not using the iPhone SDK
  code signing is needed
  Doesn’t differentiate between branches
  Doesn’t archive
  Doesn’t distribute
language: objective-c
xcode_project: MyNewProject.xcodeproj
xcode_scheme: MyNewProjectSharedScheme
iPhone SDK
custom build per branch
generate .ipa
distribute
Import keys (import-keys.sh)
# 1. Create keychain
security create-keychain -p travis ios-build.keychain
# 2. Make as default
security default-keychain -s ios-build.keychain
# 3. Unlock keychain
security unlock-keychain -p travis ios-build.keychain
# 4. Add certificates to keychain
security import ./ios-travis-ci/certificates/dist.cer -k ios-build.keychain -T /usr/bin/codesign
security import ./ios-travis-ci/certificates/dist.p12 -k ios-build.keychain -P $KEY_DIST_PASSWORD
-T /usr/bin/codesign
# 5. Copying provisioning profile to Travis
mkdir -p ~/Library/MobileDevice/Provisioning Profiles
cp ./ios-travis-ci/profiles/*.mobileprovision ~/Library/MobileDevice/Provisioning Profiles/
Marcio Klepacz, GetYourGuide
iPhone SDK
custom build per branch
generate .ipa
distribute
Import keys (import-keys.sh)
# 1. Create keychain
security create-keychain -p travis ios-build.keychain
# 2. Make as default
security default-keychain -s ios-build.keychain
# 3. Unlock keychain
security unlock-keychain -p travis ios-build.keychain
# 4. Add certificates to keychain
security import ./ios-travis-ci/certificates/dist.cer -k ios-build.keychain -T /usr/bin/codesign
security import ./ios-travis-ci/certificates/dist.p12 -k ios-build.keychain -P $KEY_DIST_PASSWORD
-T /usr/bin/codesign
# 5. Copying provisioning profile to Travis
mkdir -p ~/Library/MobileDevice/Provisioning Profiles
cp ./ios-travis-ci/profiles/*.mobileprovision ~/Library/MobileDevice/Provisioning Profiles/
⛔️️
Marcio Klepacz, GetYourGuide
iPhone SDK
custom build per branch
generate .ipa
distribute
Security
Marcio Klepacz, GetYourGuide
  You can encrypt environment variables using
Travis command line tool on your terminal:
~ $ travis ecrypt ‘KEY_DIST_PASSWORD=abc123’ –add
  Passing the option “--add” will automatically add the secure
key to your .travis.yml
env:
global:
- secure: Pz3cxDffsdafasf34324fdsf232fdsfdsf3fdsf
iPhone SDK
custom build per branch
generate .ipa
distribute
Travis Setup (.travis.yml)
Marcio Klepacz, GetYourGuide
  Use iPhone SDK ✅
  Doesn’t differentiate between branches
  Doesn’t archive
  Doesn’t distribute
language: objective-c
env:
global:
- secure: Pz3cxDffsdafasf34324fdsf232fdsfdsf3fdsf
before_script:
- ./scripts/import-key.sh
script:
- xctool -workspace MyNewProject.xcworkspace -scheme MySharedScheme -sdk iphoneos -configuration Beta
iPhone SDK
custom build per branch
generate .ipa
distribute
Building (build_app.sh)
# 1.
xctool -workspace ${APP_NAME}.xcworkspace 
-scheme ${APP_NAME} 
-sdk iphonesimulator test
…
# 2.
export RELEASE_SUFFIX=".release”
# Bundle Identifier:
# com.getyourguide.mobile.$(PRODUCT_NAME:rfc1034identifier)${BUNDLE_ID_SUFFIX}$
{RELEASE_SUFFIX}
…
# 3
xctool -workspace ${APP_NAME}.xcworkspace -scheme ${APP_NAME} 
-sdk iphoneos 
-configuration Debug 
OBJROOT=$PWD/build 
SYMROOT=$PWD/build
xctool -workspace ${APP_NAME}.xcworkspace -scheme ${APP_NAME} 
-sdk iphoneos 
-configuration Beta 
OBJROOT=$PWD/build 
SYMROOT=$PWD/build
Marcio Klepacz, GetYourGuide
iPhone SDK
custom build per branch
generate .ipa
distribute
Travis Setup (.travis.yml)
Marcio Klepacz, GetYourGuide
  Use iPhone SDK ✅
  Differentiate between branches ✅
  Doesn’t archive
  Doesn’t distribute
language: objective-c
env:
global:
- secure: Pz3cxDffsdafasf34324fdsf232fdsfdsf3fdsf
before_script:
- ./scripts/import-key.sh
script:
- ./scripts/build-app.sh
iPhone SDK
custom build per branch
generate .ipa
distribute
# 1.
xcrun -sdk iphoneos PackageApplication 
-v ”$BUILD_DIR/$APP_NAME.app" 
-o ”$BUILD_DIR/$APP_NAME.ipa" 
--sign "$DEVELOPER_NAME" 
--embed ”$PROVISIONING_PROFILE"
…
# 2.
release_notes=`git log --since=1.week --pretty=format:"%an - %s"`
curl 
-F status="2" 
-F notify="0" 
-F release_type="2" 
-F notes="$release_notes" 
-F notes_type="0" 
-F "ipa=@$outputdir/$APP_NAME.ipa" 
-F "mobileprovision=@$provisioning_profile" 
-H "X-HockeyAppToken: ${HOCKEY_APP_TOKEN}" 
https://rink.hockeyapp.net/api/2/apps/upload # Uploading to HockeyApp
Archiving and uploading
(archive_and_upload.sh)
Marcio Klepacz, GetYourGuide
iPhone SDK
custom build per branch
generate .ipa
distribute
Travis Setup (.travis.yml)
Marcio Klepacz, GetYourGuide
  Use iPhone SDK ✅
  Differentiate between branches ✅
  Archive ✅
  Doesn’t distribute ✅
language: objective-c
env:
global:
- secure: Pz3cxDffsdafasf34324fdsf232fdsfdsf3fdsf
before_script:
- ./scripts/import-key.sh
script:
- ./scripts/build-app.sh
after_success:
- ./scripts/archive_and_upload.sh
iPhone SDK
custom build per branch
generate .ipa
distribute
Move the scripts away from the app
repository (Optional)
Marcio Klepacz, GetYourGuide
  Maintenance 👍
  Reusable 👍
  Slower builds 👎
…
git:
submodules: false
before_install:
- git submodule init ios-travis-ci
- git submodule update --remote --merge ios-travis-ci
(Bonus) Overlaying Icons
Marcio Klepacz, GetYourGuide
  Add icon overlay script on the Build Phase of your target
IconOverlaying (by: Krzysztof Zabłocki)
…
before_install:
…
- brew install imagemagick && brew install ghostscript
Conclusion
Marcio Klepacz, GetYourGuide
  Automate tasks
  App is distributed
  No manual configuration
  Different actions between branches
  5 different apps to test concurrently
(@banaslee’s phone)
Thanks for your time
@marciok and marcio@getyourguide.com
References
Marcio Klepacz, GetYourGuide
Travis CI for iOS (Mattes Groeger)
johanneswuerbach / .travis.yml (Johannes Würbach)
The OS X Build Environment (Travis CI)

Weitere ähnliche Inhalte

Was ist angesagt?

Synack at ShmooCon 2015
Synack at ShmooCon 2015Synack at ShmooCon 2015
Synack at ShmooCon 2015Synack
 
Gatekeeper Exposed
Gatekeeper ExposedGatekeeper Exposed
Gatekeeper ExposedSynack
 
RSA OSX Malware
RSA OSX MalwareRSA OSX Malware
RSA OSX MalwareSynack
 
OS X Malware: Let's Play Doctor
OS X Malware: Let's Play DoctorOS X Malware: Let's Play Doctor
OS X Malware: Let's Play DoctorSynack
 
HotPush with Ionic 2 and CodePush
HotPush with Ionic 2 and CodePushHotPush with Ionic 2 and CodePush
HotPush with Ionic 2 and CodePushEvan Schultz
 
selenium-2-mobile-web-testing
selenium-2-mobile-web-testingselenium-2-mobile-web-testing
selenium-2-mobile-web-testinghugs
 
Cert gen-sql-mirroring
Cert gen-sql-mirroringCert gen-sql-mirroring
Cert gen-sql-mirroringARUN SUNDAR B
 
Cross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic FrameworkCross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic FrameworkTroy Miles
 
Hardening Your Config Management - Security and Attack Vectors in Config Mana...
Hardening Your Config Management - Security and Attack Vectors in Config Mana...Hardening Your Config Management - Security and Attack Vectors in Config Mana...
Hardening Your Config Management - Security and Attack Vectors in Config Mana...Peter Souter
 
CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeadsRNS
 
Angularjs Tutorial for Beginners
Angularjs Tutorial for BeginnersAngularjs Tutorial for Beginners
Angularjs Tutorial for Beginnersrajkamaltibacademy
 
Rhodes mobile Framework
Rhodes mobile FrameworkRhodes mobile Framework
Rhodes mobile FrameworkYoshi Sakai
 
Apache Cordova: Overview and Introduction
Apache Cordova: Overview and IntroductionApache Cordova: Overview and Introduction
Apache Cordova: Overview and IntroductionGabriele Falasca
 
iOS Auto Build
iOS Auto BuildiOS Auto Build
iOS Auto BuildRyan Wu
 
A Hacker's perspective on AEM applications security
A Hacker's perspective on AEM applications securityA Hacker's perspective on AEM applications security
A Hacker's perspective on AEM applications securityMikhail Egorov
 
React native development with expo
React native development with expoReact native development with expo
React native development with expoSangSun Park
 
Microservices, la risposta che (forse) cercavi!
Microservices, la risposta che (forse) cercavi!Microservices, la risposta che (forse) cercavi!
Microservices, la risposta che (forse) cercavi!Commit University
 
Bootiful Development with Spring Boot and React - UberConf 2018
Bootiful Development with Spring Boot and React - UberConf 2018Bootiful Development with Spring Boot and React - UberConf 2018
Bootiful Development with Spring Boot and React - UberConf 2018Matt Raible
 

Was ist angesagt? (20)

Synack at ShmooCon 2015
Synack at ShmooCon 2015Synack at ShmooCon 2015
Synack at ShmooCon 2015
 
Gatekeeper Exposed
Gatekeeper ExposedGatekeeper Exposed
Gatekeeper Exposed
 
RSA OSX Malware
RSA OSX MalwareRSA OSX Malware
RSA OSX Malware
 
OS X Malware: Let's Play Doctor
OS X Malware: Let's Play DoctorOS X Malware: Let's Play Doctor
OS X Malware: Let's Play Doctor
 
HotPush with Ionic 2 and CodePush
HotPush with Ionic 2 and CodePushHotPush with Ionic 2 and CodePush
HotPush with Ionic 2 and CodePush
 
selenium-2-mobile-web-testing
selenium-2-mobile-web-testingselenium-2-mobile-web-testing
selenium-2-mobile-web-testing
 
Cert gen-sql-mirroring
Cert gen-sql-mirroringCert gen-sql-mirroring
Cert gen-sql-mirroring
 
Cross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic FrameworkCross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic Framework
 
Hardening Your Config Management - Security and Attack Vectors in Config Mana...
Hardening Your Config Management - Security and Attack Vectors in Config Mana...Hardening Your Config Management - Security and Attack Vectors in Config Mana...
Hardening Your Config Management - Security and Attack Vectors in Config Mana...
 
CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPods
 
Angularjs Tutorial for Beginners
Angularjs Tutorial for BeginnersAngularjs Tutorial for Beginners
Angularjs Tutorial for Beginners
 
Rhodes mobile Framework
Rhodes mobile FrameworkRhodes mobile Framework
Rhodes mobile Framework
 
Apache Cordova: Overview and Introduction
Apache Cordova: Overview and IntroductionApache Cordova: Overview and Introduction
Apache Cordova: Overview and Introduction
 
iOS Auto Build
iOS Auto BuildiOS Auto Build
iOS Auto Build
 
Getting Your Hooks into Cordova
Getting Your Hooks into CordovaGetting Your Hooks into Cordova
Getting Your Hooks into Cordova
 
A Hacker's perspective on AEM applications security
A Hacker's perspective on AEM applications securityA Hacker's perspective on AEM applications security
A Hacker's perspective on AEM applications security
 
React native development with expo
React native development with expoReact native development with expo
React native development with expo
 
Microservices, la risposta che (forse) cercavi!
Microservices, la risposta che (forse) cercavi!Microservices, la risposta che (forse) cercavi!
Microservices, la risposta che (forse) cercavi!
 
Bootiful Development with Spring Boot and React - UberConf 2018
Bootiful Development with Spring Boot and React - UberConf 2018Bootiful Development with Spring Boot and React - UberConf 2018
Bootiful Development with Spring Boot and React - UberConf 2018
 
ragi_tutorial_v1
ragi_tutorial_v1ragi_tutorial_v1
ragi_tutorial_v1
 

Andere mochten auch

continious-integration-travisci-hockeyapp-android
continious-integration-travisci-hockeyapp-androidcontinious-integration-travisci-hockeyapp-android
continious-integration-travisci-hockeyapp-androidScott Hutchinson
 
#speakgell - Continuous Integration in iconnect360
#speakgell - Continuous Integration in iconnect360#speakgell - Continuous Integration in iconnect360
#speakgell - Continuous Integration in iconnect360Derek Chan
 
HockeyApp for Nokia X
HockeyApp for Nokia XHockeyApp for Nokia X
HockeyApp for Nokia XThomas Dohmke
 
Xamariners: PRISM for Xamarin.Forms
Xamariners: PRISM for Xamarin.FormsXamariners: PRISM for Xamarin.Forms
Xamariners: PRISM for Xamarin.FormsXamariners
 
Portable Class Library Deep Dive
Portable Class Library Deep DivePortable Class Library Deep Dive
Portable Class Library Deep DiveJames Montemagno
 
Xamarin Forms Custom Renderers for the Rescue...
Xamarin Forms Custom Renderers for the Rescue...Xamarin Forms Custom Renderers for the Rescue...
Xamarin Forms Custom Renderers for the Rescue...Udara Alwis
 
Xcode Server & Xcode 7 Bots
Xcode Server & Xcode 7 Bots Xcode Server & Xcode 7 Bots
Xcode Server & Xcode 7 Bots Steven Forbes
 
52 tools for any company to innovate like a Startup /by @nickdemey @boardofinno
52 tools for any company to innovate like a Startup /by @nickdemey @boardofinno52 tools for any company to innovate like a Startup /by @nickdemey @boardofinno
52 tools for any company to innovate like a Startup /by @nickdemey @boardofinnoBoard of Innovation
 

Andere mochten auch (9)

continious-integration-travisci-hockeyapp-android
continious-integration-travisci-hockeyapp-androidcontinious-integration-travisci-hockeyapp-android
continious-integration-travisci-hockeyapp-android
 
#speakgell - Continuous Integration in iconnect360
#speakgell - Continuous Integration in iconnect360#speakgell - Continuous Integration in iconnect360
#speakgell - Continuous Integration in iconnect360
 
HockeyApp for Nokia X
HockeyApp for Nokia XHockeyApp for Nokia X
HockeyApp for Nokia X
 
Continuous deployments mobile apps
Continuous deployments mobile appsContinuous deployments mobile apps
Continuous deployments mobile apps
 
Xamariners: PRISM for Xamarin.Forms
Xamariners: PRISM for Xamarin.FormsXamariners: PRISM for Xamarin.Forms
Xamariners: PRISM for Xamarin.Forms
 
Portable Class Library Deep Dive
Portable Class Library Deep DivePortable Class Library Deep Dive
Portable Class Library Deep Dive
 
Xamarin Forms Custom Renderers for the Rescue...
Xamarin Forms Custom Renderers for the Rescue...Xamarin Forms Custom Renderers for the Rescue...
Xamarin Forms Custom Renderers for the Rescue...
 
Xcode Server & Xcode 7 Bots
Xcode Server & Xcode 7 Bots Xcode Server & Xcode 7 Bots
Xcode Server & Xcode 7 Bots
 
52 tools for any company to innovate like a Startup /by @nickdemey @boardofinno
52 tools for any company to innovate like a Startup /by @nickdemey @boardofinno52 tools for any company to innovate like a Startup /by @nickdemey @boardofinno
52 tools for any company to innovate like a Startup /by @nickdemey @boardofinno
 

Ähnlich wie How we integrate & deploy Mobile Apps with Travis CI

Advanced Mac Software Deployment and Configuration: Just Make It Work!
Advanced Mac Software Deployment and Configuration: Just Make It Work!Advanced Mac Software Deployment and Configuration: Just Make It Work!
Advanced Mac Software Deployment and Configuration: Just Make It Work!Timothy Sutton
 
MobSecCon 2015 - Dynamic Analysis of Android Apps
MobSecCon 2015 - Dynamic Analysis of Android AppsMobSecCon 2015 - Dynamic Analysis of Android Apps
MobSecCon 2015 - Dynamic Analysis of Android AppsRon Munitz
 
Pentesting Android Applications
Pentesting Android ApplicationsPentesting Android Applications
Pentesting Android ApplicationsCláudio André
 
From printed circuit boards to exploits
From printed circuit boards to exploitsFrom printed circuit boards to exploits
From printed circuit boards to exploitsvirtualabs
 
Leveraging Continuous Integration For Fun And Profit!
Leveraging Continuous Integration For Fun And Profit!Leveraging Continuous Integration For Fun And Profit!
Leveraging Continuous Integration For Fun And Profit!Jess Chadwick
 
MOBILE PENTESTING Frida.pdf
MOBILE PENTESTING Frida.pdfMOBILE PENTESTING Frida.pdf
MOBILE PENTESTING Frida.pdfAdityamd4
 
GDGSCL - Docker a jeho provoz v Heroku a AWS
GDGSCL - Docker a jeho provoz v Heroku a AWSGDGSCL - Docker a jeho provoz v Heroku a AWS
GDGSCL - Docker a jeho provoz v Heroku a AWSLadislav Prskavec
 
How dorma+kaba leverages and deploys on CloudFoundry - CloudFoundry Summit Eu...
How dorma+kaba leverages and deploys on CloudFoundry - CloudFoundry Summit Eu...How dorma+kaba leverages and deploys on CloudFoundry - CloudFoundry Summit Eu...
How dorma+kaba leverages and deploys on CloudFoundry - CloudFoundry Summit Eu...Adriano Raiano
 
One Click Provisioning With Enterprise Manager 12c
One Click Provisioning With Enterprise Manager 12cOne Click Provisioning With Enterprise Manager 12c
One Click Provisioning With Enterprise Manager 12cJosh Turner
 
Telerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT ConferenceTelerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT ConferenceJen Looper
 
Fastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS AppsFastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS AppsSarath C
 
The Mobile ToolChain with Fastlane - Code Red Talk at RedBlackTree
The Mobile ToolChain with Fastlane - Code Red Talk at RedBlackTreeThe Mobile ToolChain with Fastlane - Code Red Talk at RedBlackTree
The Mobile ToolChain with Fastlane - Code Red Talk at RedBlackTreeRedBlackTree
 
Making Security Agile
Making Security AgileMaking Security Agile
Making Security AgileOleg Gryb
 
CI CD Jenkins for Swift Deployment
CI CD Jenkins for Swift DeploymentCI CD Jenkins for Swift Deployment
CI CD Jenkins for Swift DeploymentBintang Thunder
 
Pwning mobile apps without root or jailbreak
Pwning mobile apps without root or jailbreakPwning mobile apps without root or jailbreak
Pwning mobile apps without root or jailbreakAbraham Aranguren
 
Configure & send push notification on i os device
Configure & send push notification on i os deviceConfigure & send push notification on i os device
Configure & send push notification on i os deviceShepHertz
 
[Devoxx Morocco 2015] Apache Cordova In Action
[Devoxx Morocco 2015] Apache Cordova In Action[Devoxx Morocco 2015] Apache Cordova In Action
[Devoxx Morocco 2015] Apache Cordova In ActionHazem Saleh
 
Ane for 9ria_cn
Ane for 9ria_cnAne for 9ria_cn
Ane for 9ria_cnsonicxs
 
Deploy your app with one Slack command
Deploy your app with one Slack commandDeploy your app with one Slack command
Deploy your app with one Slack commandFabio Milano
 

Ähnlich wie How we integrate & deploy Mobile Apps with Travis CI (20)

Advanced Mac Software Deployment and Configuration: Just Make It Work!
Advanced Mac Software Deployment and Configuration: Just Make It Work!Advanced Mac Software Deployment and Configuration: Just Make It Work!
Advanced Mac Software Deployment and Configuration: Just Make It Work!
 
MobSecCon 2015 - Dynamic Analysis of Android Apps
MobSecCon 2015 - Dynamic Analysis of Android AppsMobSecCon 2015 - Dynamic Analysis of Android Apps
MobSecCon 2015 - Dynamic Analysis of Android Apps
 
Pentesting Android Applications
Pentesting Android ApplicationsPentesting Android Applications
Pentesting Android Applications
 
From printed circuit boards to exploits
From printed circuit boards to exploitsFrom printed circuit boards to exploits
From printed circuit boards to exploits
 
Leveraging Continuous Integration For Fun And Profit!
Leveraging Continuous Integration For Fun And Profit!Leveraging Continuous Integration For Fun And Profit!
Leveraging Continuous Integration For Fun And Profit!
 
MOBILE PENTESTING Frida.pdf
MOBILE PENTESTING Frida.pdfMOBILE PENTESTING Frida.pdf
MOBILE PENTESTING Frida.pdf
 
GDGSCL - Docker a jeho provoz v Heroku a AWS
GDGSCL - Docker a jeho provoz v Heroku a AWSGDGSCL - Docker a jeho provoz v Heroku a AWS
GDGSCL - Docker a jeho provoz v Heroku a AWS
 
How dorma+kaba leverages and deploys on CloudFoundry - CloudFoundry Summit Eu...
How dorma+kaba leverages and deploys on CloudFoundry - CloudFoundry Summit Eu...How dorma+kaba leverages and deploys on CloudFoundry - CloudFoundry Summit Eu...
How dorma+kaba leverages and deploys on CloudFoundry - CloudFoundry Summit Eu...
 
One Click Provisioning With Enterprise Manager 12c
One Click Provisioning With Enterprise Manager 12cOne Click Provisioning With Enterprise Manager 12c
One Click Provisioning With Enterprise Manager 12c
 
Telerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT ConferenceTelerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT Conference
 
Fastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS AppsFastlane - Automation and Continuous Delivery for iOS Apps
Fastlane - Automation and Continuous Delivery for iOS Apps
 
The Mobile ToolChain with Fastlane - Code Red Talk at RedBlackTree
The Mobile ToolChain with Fastlane - Code Red Talk at RedBlackTreeThe Mobile ToolChain with Fastlane - Code Red Talk at RedBlackTree
The Mobile ToolChain with Fastlane - Code Red Talk at RedBlackTree
 
Making Security Agile
Making Security AgileMaking Security Agile
Making Security Agile
 
CI CD Jenkins for Swift Deployment
CI CD Jenkins for Swift DeploymentCI CD Jenkins for Swift Deployment
CI CD Jenkins for Swift Deployment
 
Nativescript with angular 2
Nativescript with angular 2Nativescript with angular 2
Nativescript with angular 2
 
Pwning mobile apps without root or jailbreak
Pwning mobile apps without root or jailbreakPwning mobile apps without root or jailbreak
Pwning mobile apps without root or jailbreak
 
Configure & send push notification on i os device
Configure & send push notification on i os deviceConfigure & send push notification on i os device
Configure & send push notification on i os device
 
[Devoxx Morocco 2015] Apache Cordova In Action
[Devoxx Morocco 2015] Apache Cordova In Action[Devoxx Morocco 2015] Apache Cordova In Action
[Devoxx Morocco 2015] Apache Cordova In Action
 
Ane for 9ria_cn
Ane for 9ria_cnAne for 9ria_cn
Ane for 9ria_cn
 
Deploy your app with one Slack command
Deploy your app with one Slack commandDeploy your app with one Slack command
Deploy your app with one Slack command
 

Kürzlich hochgeladen

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 

Kürzlich hochgeladen (20)

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 

How we integrate & deploy Mobile Apps with Travis CI

  • 1. How we integrate & deploy Mobile Apps with Travis CI Marcio Klepacz, iOS Engineering @ GetYourGuide CocoaHeads Berlin 2015
  • 2. Overview   Who we are   The Problem   The Requirements   The Solution   Conclusion Marcio Klepacz, GetYourGuide
  • 4. GetYourGuide Offers the Largest Travel Activities Inventory Worldwide Marcio Klepacz, GetYourGuide 800+ 10,600+5,300+ 800+ 4,000+ 2,000+
  • 7.   Repetitive   Manual   We want to automate that   Fit our workflow Developer Happiness Marcio Klepacz, GetYourGuide 😄 Develop 😊   Run Tests 😐 Configure 😒   Build 😠   Write release notes 😤   Upload, notify users, etc.
  • 9. Requirements Marcio Klepacz, GetYourGuide   Automatically build and test on push   Fit into gitflow workflow (feature, develop and release) branch   Produce binaries that can be tested (downloaded)
  • 10. Requirements / Gitflow Marcio Klepacz, GetYourGuide
  • 11. Requirements / Gitflow Marcio Klepacz, GetYourGuide
  • 12. Requirements / Gitflow Marcio Klepacz, GetYourGuide
  • 13. Requirements / Summary Marcio Klepacz, GetYourGuide   Build an Alpha App for Test Environment   able to book with fake CC   Build a Beta App for the Live Environment   real content   Build and test on every push   Distribute app to testers from release and develop branches   Relieve developers from repetitive manual tasks
  • 14. Marcio Klepacz, GetYourGuide Xcode  Server   Jenkins   Ship.io   Travis  CI   iOS  and   Android   ❌   ✅   ✅     ✅     Ac,ons   specific  to   branches     ✅       ✅       ✅       ✅     Build  on   push   ✅     ✅     ✅     ✅     Big   community   ✅     ✅     ❌     ✅     Hosted   ❌     ❌     ✅     ✅    
  • 16. Travis Marcio Klepacz, GetYourGuide   Hosted Continuous Integration service   Configuration file in your project (.travis.yml)   Define SDK, build env and output   custom scripts   Connected to Github   Triggers in every push and pull request   Available for many platforms
  • 17. Travis Setup (.travis.yml) Marcio Klepacz, GetYourGuide   It’s not using the iPhone SDK   code signing is needed   Doesn’t differentiate between branches   Doesn’t archive   Doesn’t distribute language: objective-c xcode_project: MyNewProject.xcodeproj xcode_scheme: MyNewProjectSharedScheme iPhone SDK custom build per branch generate .ipa distribute
  • 18. Import keys (import-keys.sh) # 1. Create keychain security create-keychain -p travis ios-build.keychain # 2. Make as default security default-keychain -s ios-build.keychain # 3. Unlock keychain security unlock-keychain -p travis ios-build.keychain # 4. Add certificates to keychain security import ./ios-travis-ci/certificates/dist.cer -k ios-build.keychain -T /usr/bin/codesign security import ./ios-travis-ci/certificates/dist.p12 -k ios-build.keychain -P $KEY_DIST_PASSWORD -T /usr/bin/codesign # 5. Copying provisioning profile to Travis mkdir -p ~/Library/MobileDevice/Provisioning Profiles cp ./ios-travis-ci/profiles/*.mobileprovision ~/Library/MobileDevice/Provisioning Profiles/ Marcio Klepacz, GetYourGuide iPhone SDK custom build per branch generate .ipa distribute
  • 19. Import keys (import-keys.sh) # 1. Create keychain security create-keychain -p travis ios-build.keychain # 2. Make as default security default-keychain -s ios-build.keychain # 3. Unlock keychain security unlock-keychain -p travis ios-build.keychain # 4. Add certificates to keychain security import ./ios-travis-ci/certificates/dist.cer -k ios-build.keychain -T /usr/bin/codesign security import ./ios-travis-ci/certificates/dist.p12 -k ios-build.keychain -P $KEY_DIST_PASSWORD -T /usr/bin/codesign # 5. Copying provisioning profile to Travis mkdir -p ~/Library/MobileDevice/Provisioning Profiles cp ./ios-travis-ci/profiles/*.mobileprovision ~/Library/MobileDevice/Provisioning Profiles/ ⛔️️ Marcio Klepacz, GetYourGuide iPhone SDK custom build per branch generate .ipa distribute
  • 20. Security Marcio Klepacz, GetYourGuide   You can encrypt environment variables using Travis command line tool on your terminal: ~ $ travis ecrypt ‘KEY_DIST_PASSWORD=abc123’ –add   Passing the option “--add” will automatically add the secure key to your .travis.yml env: global: - secure: Pz3cxDffsdafasf34324fdsf232fdsfdsf3fdsf iPhone SDK custom build per branch generate .ipa distribute
  • 21. Travis Setup (.travis.yml) Marcio Klepacz, GetYourGuide   Use iPhone SDK ✅   Doesn’t differentiate between branches   Doesn’t archive   Doesn’t distribute language: objective-c env: global: - secure: Pz3cxDffsdafasf34324fdsf232fdsfdsf3fdsf before_script: - ./scripts/import-key.sh script: - xctool -workspace MyNewProject.xcworkspace -scheme MySharedScheme -sdk iphoneos -configuration Beta iPhone SDK custom build per branch generate .ipa distribute
  • 22. Building (build_app.sh) # 1. xctool -workspace ${APP_NAME}.xcworkspace -scheme ${APP_NAME} -sdk iphonesimulator test … # 2. export RELEASE_SUFFIX=".release” # Bundle Identifier: # com.getyourguide.mobile.$(PRODUCT_NAME:rfc1034identifier)${BUNDLE_ID_SUFFIX}$ {RELEASE_SUFFIX} … # 3 xctool -workspace ${APP_NAME}.xcworkspace -scheme ${APP_NAME} -sdk iphoneos -configuration Debug OBJROOT=$PWD/build SYMROOT=$PWD/build xctool -workspace ${APP_NAME}.xcworkspace -scheme ${APP_NAME} -sdk iphoneos -configuration Beta OBJROOT=$PWD/build SYMROOT=$PWD/build Marcio Klepacz, GetYourGuide iPhone SDK custom build per branch generate .ipa distribute
  • 23. Travis Setup (.travis.yml) Marcio Klepacz, GetYourGuide   Use iPhone SDK ✅   Differentiate between branches ✅   Doesn’t archive   Doesn’t distribute language: objective-c env: global: - secure: Pz3cxDffsdafasf34324fdsf232fdsfdsf3fdsf before_script: - ./scripts/import-key.sh script: - ./scripts/build-app.sh iPhone SDK custom build per branch generate .ipa distribute
  • 24. # 1. xcrun -sdk iphoneos PackageApplication -v ”$BUILD_DIR/$APP_NAME.app" -o ”$BUILD_DIR/$APP_NAME.ipa" --sign "$DEVELOPER_NAME" --embed ”$PROVISIONING_PROFILE" … # 2. release_notes=`git log --since=1.week --pretty=format:"%an - %s"` curl -F status="2" -F notify="0" -F release_type="2" -F notes="$release_notes" -F notes_type="0" -F "ipa=@$outputdir/$APP_NAME.ipa" -F "mobileprovision=@$provisioning_profile" -H "X-HockeyAppToken: ${HOCKEY_APP_TOKEN}" https://rink.hockeyapp.net/api/2/apps/upload # Uploading to HockeyApp Archiving and uploading (archive_and_upload.sh) Marcio Klepacz, GetYourGuide iPhone SDK custom build per branch generate .ipa distribute
  • 25. Travis Setup (.travis.yml) Marcio Klepacz, GetYourGuide   Use iPhone SDK ✅   Differentiate between branches ✅   Archive ✅   Doesn’t distribute ✅ language: objective-c env: global: - secure: Pz3cxDffsdafasf34324fdsf232fdsfdsf3fdsf before_script: - ./scripts/import-key.sh script: - ./scripts/build-app.sh after_success: - ./scripts/archive_and_upload.sh iPhone SDK custom build per branch generate .ipa distribute
  • 26. Move the scripts away from the app repository (Optional) Marcio Klepacz, GetYourGuide   Maintenance 👍   Reusable 👍   Slower builds 👎 … git: submodules: false before_install: - git submodule init ios-travis-ci - git submodule update --remote --merge ios-travis-ci
  • 27. (Bonus) Overlaying Icons Marcio Klepacz, GetYourGuide   Add icon overlay script on the Build Phase of your target IconOverlaying (by: Krzysztof Zabłocki) … before_install: … - brew install imagemagick && brew install ghostscript
  • 28. Conclusion Marcio Klepacz, GetYourGuide   Automate tasks   App is distributed   No manual configuration   Different actions between branches   5 different apps to test concurrently (@banaslee’s phone)
  • 29. Thanks for your time @marciok and marcio@getyourguide.com
  • 30. References Marcio Klepacz, GetYourGuide Travis CI for iOS (Mattes Groeger) johanneswuerbach / .travis.yml (Johannes Würbach) The OS X Build Environment (Travis CI)