SlideShare a Scribd company logo
CONTINUOUS
INTEGRATION
FROM UNIT TESTS
TO HARDWARE
Rémy Virin
Cocoaheads
@remyvirin
WHO AM I ? LIMA ?
• I’m an iOS software engineer at Forget box.
• We’re creating a new way to store your data.
• Backed on kickstarter

• 12,8K backers
• $ 1,2 Millions
BEFORE, 10 YEARS AGO

One User

One device

One Memory
TODAY, MULTIPLE DEVICES,
MULTIPLE MEMORIES

One User

Multiple devices

Divided memories
TODAY, CLOUD SOLUTION IS
JUST A PATCH

One User

Multiple devices

Divided memories
TODAY, CLOUD SOLUTION IS
JUST A PATCH

One User

One Unified Memory
CONTINUOUS
INTEGRATION
FROM UNIT TESTS
TO HARDWARE
WHY ?
Continuous integration by Rémy Virin
SHIP, SHIP, SHIIIIP
SHIP, SHIP, SHIIIIP !!!
!!!
MEASURE QUALITY
• Photo quality
HOW ?
C.I. BASICS
Execute unit
tests
Publish app to
mktg
Continuous
Integration

Fetch sources

Generate
Documentatio
n

Workstations

Generate metrics

Execute functional tests
SAS vs LOCAL
JENKINS
ABOUT JENKINS
• Open Source

• Easy to install
• Best known CI solution
INSTALL JENKINS
ADD PLUGINS
ADD PLUGINS
CREATE A JOB

CREATE A JOB
CREATE A JOB
• Set up Github url and restrict where the job should be run if your
mac is a node of Jenkins.
CREATE A JOB WITH
PLUGINS
CREATE A JOB WITH A
SCRIPT
Build your project, run Unit Tests, compute code coverage, package
your app, deploy it etc…
$ pod install
$ xcodebuild -workspace Lima.xcworkspace -scheme "Lima"
-destination=build -configuration Debug_deploy -sdk
iphoneos7.0 ONLY_ACTIVE_ARCH=YES clean build archive

$ xcodebuild -exportArchive -exportFormat "IPA" archivePath "$NEW_ARCHIVE" -exportPath ./Lima.ipa exportProvisioningProfile "Lima Adhoc Distribution"

# And then upload to testflight via curl
Full script here: https://gist.github.com/rvirin/7796647
PLUGINS vs SCRIPTS
Most of the time, plugins are easier to
use. Sometimes we don’t have other
choices to use plugins

Examples :
• cocoapods plugin if podFile is not in
root folder
• run Unit tests with Xcode plugin
THAT’S IT, YOU CAN ENJOY
NOW…
AND ONE DAY, THE BUILD
FAIL !
WE NEED TO KNOW WHEN
BUILD FAILED
• Basic Alert : Email
• Growl Notification : Hudson-on-cocoa

• Or you can connect Jenkins to your real
life…
YOU’LL NEVER BROKE THE
BUILD AGAIN !

Code source : https://github.com/codedance/Retaliation
BOTS ON iOS
SETUP - REQUIREMENTS

• A mac (at least 10.9)
• OS X Server
• Xcode
SETUP
• Install OS X Server and Xcode on your
mac
• Activate Xcode as a service of your server
• Connect to remote repository
• Create your first bot
ERRORS DURING SETUP
• Error on getting source code -> no error,
big logs for nothing
• Add _teamserver public key to your Github
repository (deploy keys)
ERRORS DURING SETUP
• CodeSign error: code signing is required
for product type 'Application' in SDK 'iOS
7.0’  just trying to build the app !

•  Get your provisionning profile on the
mac server (Add your account to Xcode)
SETUP
• If you have to install your pods before
building your app :
• $ sudo visudo -f /etc/sudoers
• Add this line :
# Same thing without a password
# %wheel
ALL=(ALL) NOPASSWD: ALL
%_teamsserver ALL=(ALL) NOPASSWD: ALL
• v

Source : Cocoapods mailing list
PODS IN XCODE
•
PODS IN XCODE
•
COOL THINGS ON BOTS
• Bots Can be created and monitored from
Xcode.
• Integrate with Xcode
• UI and UX rocks.
BAD THINGS ON BOTS
• Lots of bugs
• Fetching pods before building app is painfull
• No 3rd party integration (Testflight, hockeyapp
etc…)
• Can’t Archive an app
• Need to create a specific scheme
SONAR
An open source platform for
Continuous Inspection of code
quality
SONARQUBE
•
SONARQUBE
• Issues with OCLint are powerfull
• Generate Documentation, Count lines of
code, analyze code duplication and run Unit
Tests !
• https://github.com/octo-technology/sonarobjective-c
NEXT STEP : HARDWARE
NEXT STEP : HARDWARE
CONCLUSION
IMPROVEMENTS

• « Thanks to Jenkins I’m able
to test the last version of our
app just by pressing a button,
it’s awesome ! » Alex Product
Guy at Lima
IMPROVEMENTS

• « Each day at 4pm, we get a
new build of our app, it’s really
efficient to reduce the amount
of bugs » Tester at Meetic
(Dating website)
COST : 8 to 10 % of the project
THANKS !

More Related Content

PDF
Accessors Vs Direct access to properties & Design Pattern
CocoaHeads France
 
PDF
What's new in ios 7.0
CocoaHeads France
 
PDF
CocoaHeads Rennes #13 : CocoaPods
CocoaHeadsRNS
 
PDF
Spec et test agile sur mobile @airfrance #at lille & cocoaheads tls
ekito
 
PDF
Parse par Nicolas Lauquin
CocoaHeads France
 
PDF
Framework dynamic par Simone Sivetta
CocoaHeads France
 
PDF
Multitasking in iOS 7
Mickaël Rémond
 
PDF
Travis and fastlane
Steven Shen
 
Accessors Vs Direct access to properties & Design Pattern
CocoaHeads France
 
What's new in ios 7.0
CocoaHeads France
 
CocoaHeads Rennes #13 : CocoaPods
CocoaHeadsRNS
 
Spec et test agile sur mobile @airfrance #at lille & cocoaheads tls
ekito
 
Parse par Nicolas Lauquin
CocoaHeads France
 
Framework dynamic par Simone Sivetta
CocoaHeads France
 
Multitasking in iOS 7
Mickaël Rémond
 
Travis and fastlane
Steven Shen
 

What's hot (20)

PDF
Fastlane - Automation and Continuous Delivery for iOS Apps
Sarath C
 
PDF
Build a lego app with CocoaPods
CocoaHeads France
 
PDF
LLVM Internal Architecture par Michel Guillet
CocoaHeads France
 
PDF
Deploy your app with one Slack command
Fabio Milano
 
PPTX
React native development with expo
SangSun Park
 
PDF
IBM Think Session 8598 Domino and JavaScript Development MasterClass
Paul Withers
 
PDF
"I have a framework idea" - Repeat less, share more.
Fabio Milano
 
PPTX
Bootstrapping a simple enterprise application with Java EE successor, Jakarta...
Buhake Sindi
 
PDF
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
Troublemaker Khunpech
 
PPTX
PhoneGap Day 2016 EU: Creating the Ideal Cordova Dev Environment
Ryan J. Salva
 
PDF
BlaBlaCar et la mise en place d'une fonctionnalité FlagFeature
CocoaHeads France
 
PPTX
Docker for .NET Developers
Taswar Bhatti
 
PPTX
Setup a Dev environment that feels like $HOME on Windows 10
Stefan Scherer
 
PDF
Deliver Python Apps with Docker
Anton Egorov
 
PPTX
Introduction to jenkins
Abe Diaz
 
PPTX
Debugging IE Performance Issues with xperf, ETW and NavigationTiming
Nicholas Jansma
 
PDF
Java 8 for Tablets, Pis, and Legos
Stephen Chin
 
PDF
Vodafone Mobile Widgets Workshop
Daniel Herzog
 
PDF
Maksym Pugach - Elixir Release and Deploy Utilities
Elixir Club
 
Fastlane - Automation and Continuous Delivery for iOS Apps
Sarath C
 
Build a lego app with CocoaPods
CocoaHeads France
 
LLVM Internal Architecture par Michel Guillet
CocoaHeads France
 
Deploy your app with one Slack command
Fabio Milano
 
React native development with expo
SangSun Park
 
IBM Think Session 8598 Domino and JavaScript Development MasterClass
Paul Withers
 
"I have a framework idea" - Repeat less, share more.
Fabio Milano
 
Bootstrapping a simple enterprise application with Java EE successor, Jakarta...
Buhake Sindi
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
Troublemaker Khunpech
 
PhoneGap Day 2016 EU: Creating the Ideal Cordova Dev Environment
Ryan J. Salva
 
BlaBlaCar et la mise en place d'une fonctionnalité FlagFeature
CocoaHeads France
 
Docker for .NET Developers
Taswar Bhatti
 
Setup a Dev environment that feels like $HOME on Windows 10
Stefan Scherer
 
Deliver Python Apps with Docker
Anton Egorov
 
Introduction to jenkins
Abe Diaz
 
Debugging IE Performance Issues with xperf, ETW and NavigationTiming
Nicholas Jansma
 
Java 8 for Tablets, Pis, and Legos
Stephen Chin
 
Vodafone Mobile Widgets Workshop
Daniel Herzog
 
Maksym Pugach - Elixir Release and Deploy Utilities
Elixir Club
 
Ad

Similar to Continuous integration by Rémy Virin (20)

PPTX
Philly CocoaHeads 20160414 - Building Your App SDK With Swift
Jordan Yaker
 
PPTX
DockerCon 15 Keynote - Day 2
Docker, Inc.
 
PPTX
Continous Integration for iOS Projects
Ciprian Redinciuc
 
PDF
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
Howard Greenberg
 
PDF
Kinect Workshop Part 1/2
Seiya Konno
 
PPTX
Appcelerator Titanium Intro
Nicholas Jansma
 
PDF
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Indrajit Poddar
 
PDF
Droidcon Spain 2105 - One app to rule them all: Methodologies, Tools & Tricks...
Daniel Gallego Vico
 
PDF
Selenium Camp 2016 - Kiev, Ukraine
Justin Ison
 
PDF
DCAST Meetup - Washington, DC Feb 2016
Justin Ison
 
PPT
State ofappdevelopment
gillygize
 
PDF
Ci for i-os-codemash-01.2013
Kevin Munc
 
KEY
Enterprise Strength Mobile JavaScript
Troy Miles
 
PDF
ITB 2023 Creating and managing a QA focused production-replicating environmen...
Ortus Solutions, Corp
 
PPTX
NCDevCon 2017 - Cross Platform Mobile Apps
John M. Wargo
 
PPTX
Reactive summit 2020 microsoft orleans the easy way
John Azariah
 
PDF
OCCIware Project at EclipseCon France 2016, by Marc Dutoo, Open Wide
OCCIware
 
PDF
EclipseCon 2016 - OCCIware : one Cloud API to rule them all
Marc Dutoo
 
PPTX
habitat at docker bud
Mandi Walls
 
PDF
ConcourseCi overview
Gwenn Etourneau
 
Philly CocoaHeads 20160414 - Building Your App SDK With Swift
Jordan Yaker
 
DockerCon 15 Keynote - Day 2
Docker, Inc.
 
Continous Integration for iOS Projects
Ciprian Redinciuc
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
Howard Greenberg
 
Kinect Workshop Part 1/2
Seiya Konno
 
Appcelerator Titanium Intro
Nicholas Jansma
 
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Indrajit Poddar
 
Droidcon Spain 2105 - One app to rule them all: Methodologies, Tools & Tricks...
Daniel Gallego Vico
 
Selenium Camp 2016 - Kiev, Ukraine
Justin Ison
 
DCAST Meetup - Washington, DC Feb 2016
Justin Ison
 
State ofappdevelopment
gillygize
 
Ci for i-os-codemash-01.2013
Kevin Munc
 
Enterprise Strength Mobile JavaScript
Troy Miles
 
ITB 2023 Creating and managing a QA focused production-replicating environmen...
Ortus Solutions, Corp
 
NCDevCon 2017 - Cross Platform Mobile Apps
John M. Wargo
 
Reactive summit 2020 microsoft orleans the easy way
John Azariah
 
OCCIware Project at EclipseCon France 2016, by Marc Dutoo, Open Wide
OCCIware
 
EclipseCon 2016 - OCCIware : one Cloud API to rule them all
Marc Dutoo
 
habitat at docker bud
Mandi Walls
 
ConcourseCi overview
Gwenn Etourneau
 
Ad

More from CocoaHeads France (20)

PDF
Mutation testing for a safer Future
CocoaHeads France
 
PDF
iOS App Group for Debugging
CocoaHeads France
 
PDF
Asynchronous swift
CocoaHeads France
 
PDF
Visual accessibility in iOS11
CocoaHeads France
 
PDF
My script - One year of CocoaHeads
CocoaHeads France
 
PDF
Ui testing dealing with push notifications
CocoaHeads France
 
PDF
CONTINUOUS DELIVERY WITH FASTLANE
CocoaHeads France
 
PDF
L'intégration continue avec Bitrise
CocoaHeads France
 
PDF
Super combinators
CocoaHeads France
 
PDF
Design like a developer
CocoaHeads France
 
PDF
Handle the error
CocoaHeads France
 
PDF
Quoi de neuf dans iOS 10.3
CocoaHeads France
 
PDF
IoT Best practices
CocoaHeads France
 
PDF
SwiftyGPIO
CocoaHeads France
 
PDF
Présentation de HomeKit
CocoaHeads France
 
PDF
Programme MFI retour d'expérience
CocoaHeads France
 
PDF
How to communicate with Smart things?
CocoaHeads France
 
PDF
Let's migrate to Swift 3.0
CocoaHeads France
 
PDF
Project Entourage
CocoaHeads France
 
PDF
What's new in iOS9
CocoaHeads France
 
Mutation testing for a safer Future
CocoaHeads France
 
iOS App Group for Debugging
CocoaHeads France
 
Asynchronous swift
CocoaHeads France
 
Visual accessibility in iOS11
CocoaHeads France
 
My script - One year of CocoaHeads
CocoaHeads France
 
Ui testing dealing with push notifications
CocoaHeads France
 
CONTINUOUS DELIVERY WITH FASTLANE
CocoaHeads France
 
L'intégration continue avec Bitrise
CocoaHeads France
 
Super combinators
CocoaHeads France
 
Design like a developer
CocoaHeads France
 
Handle the error
CocoaHeads France
 
Quoi de neuf dans iOS 10.3
CocoaHeads France
 
IoT Best practices
CocoaHeads France
 
SwiftyGPIO
CocoaHeads France
 
Présentation de HomeKit
CocoaHeads France
 
Programme MFI retour d'expérience
CocoaHeads France
 
How to communicate with Smart things?
CocoaHeads France
 
Let's migrate to Swift 3.0
CocoaHeads France
 
Project Entourage
CocoaHeads France
 
What's new in iOS9
CocoaHeads France
 

Recently uploaded (20)

PDF
Doc9.....................................
SofiaCollazos
 
PDF
Advances in Ultra High Voltage (UHV) Transmission and Distribution Systems.pdf
Nabajyoti Banik
 
PDF
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
PDF
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
 
PDF
The Evolution of KM Roles (Presented at Knowledge Summit Dublin 2025)
Enterprise Knowledge
 
PPTX
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
PPTX
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PDF
Software Development Methodologies in 2025
KodekX
 
PDF
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PDF
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
PDF
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
PDF
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
PDF
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
PDF
Event Presentation Google Cloud Next Extended 2025
minhtrietgect
 
PPTX
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
PDF
A Day in the Life of Location Data - Turning Where into How.pdf
Precisely
 
PDF
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 
Doc9.....................................
SofiaCollazos
 
Advances in Ultra High Voltage (UHV) Transmission and Distribution Systems.pdf
Nabajyoti Banik
 
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
 
The Evolution of KM Roles (Presented at Knowledge Summit Dublin 2025)
Enterprise Knowledge
 
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
Software Development Methodologies in 2025
KodekX
 
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
Event Presentation Google Cloud Next Extended 2025
minhtrietgect
 
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
A Day in the Life of Location Data - Turning Where into How.pdf
Precisely
 
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 

Continuous integration by Rémy Virin

  • 1. CONTINUOUS INTEGRATION FROM UNIT TESTS TO HARDWARE Rémy Virin Cocoaheads @remyvirin
  • 2. WHO AM I ? LIMA ? • I’m an iOS software engineer at Forget box. • We’re creating a new way to store your data. • Backed on kickstarter • 12,8K backers • $ 1,2 Millions
  • 3. BEFORE, 10 YEARS AGO One User One device One Memory
  • 4. TODAY, MULTIPLE DEVICES, MULTIPLE MEMORIES One User Multiple devices Divided memories
  • 5. TODAY, CLOUD SOLUTION IS JUST A PATCH One User Multiple devices Divided memories
  • 6. TODAY, CLOUD SOLUTION IS JUST A PATCH One User One Unified Memory
  • 10. SHIP, SHIP, SHIIIIP SHIP, SHIP, SHIIIIP !!! !!!
  • 12. HOW ?
  • 13. C.I. BASICS Execute unit tests Publish app to mktg Continuous Integration Fetch sources Generate Documentatio n Workstations Generate metrics Execute functional tests
  • 16. ABOUT JENKINS • Open Source • Easy to install • Best known CI solution
  • 21. CREATE A JOB • Set up Github url and restrict where the job should be run if your mac is a node of Jenkins.
  • 22. CREATE A JOB WITH PLUGINS
  • 23. CREATE A JOB WITH A SCRIPT Build your project, run Unit Tests, compute code coverage, package your app, deploy it etc… $ pod install $ xcodebuild -workspace Lima.xcworkspace -scheme "Lima" -destination=build -configuration Debug_deploy -sdk iphoneos7.0 ONLY_ACTIVE_ARCH=YES clean build archive $ xcodebuild -exportArchive -exportFormat "IPA" archivePath "$NEW_ARCHIVE" -exportPath ./Lima.ipa exportProvisioningProfile "Lima Adhoc Distribution" # And then upload to testflight via curl Full script here: https://gist.github.com/rvirin/7796647
  • 24. PLUGINS vs SCRIPTS Most of the time, plugins are easier to use. Sometimes we don’t have other choices to use plugins Examples : • cocoapods plugin if podFile is not in root folder • run Unit tests with Xcode plugin
  • 25. THAT’S IT, YOU CAN ENJOY NOW…
  • 26. AND ONE DAY, THE BUILD FAIL !
  • 27. WE NEED TO KNOW WHEN BUILD FAILED • Basic Alert : Email • Growl Notification : Hudson-on-cocoa • Or you can connect Jenkins to your real life…
  • 28. YOU’LL NEVER BROKE THE BUILD AGAIN ! Code source : https://github.com/codedance/Retaliation
  • 30. SETUP - REQUIREMENTS • A mac (at least 10.9) • OS X Server • Xcode
  • 31. SETUP • Install OS X Server and Xcode on your mac • Activate Xcode as a service of your server • Connect to remote repository • Create your first bot
  • 32. ERRORS DURING SETUP • Error on getting source code -> no error, big logs for nothing • Add _teamserver public key to your Github repository (deploy keys)
  • 33. ERRORS DURING SETUP • CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 7.0’  just trying to build the app ! •  Get your provisionning profile on the mac server (Add your account to Xcode)
  • 34. SETUP • If you have to install your pods before building your app : • $ sudo visudo -f /etc/sudoers • Add this line : # Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL %_teamsserver ALL=(ALL) NOPASSWD: ALL
  • 35. • v Source : Cocoapods mailing list
  • 38. COOL THINGS ON BOTS • Bots Can be created and monitored from Xcode. • Integrate with Xcode • UI and UX rocks.
  • 39. BAD THINGS ON BOTS • Lots of bugs • Fetching pods before building app is painfull • No 3rd party integration (Testflight, hockeyapp etc…) • Can’t Archive an app • Need to create a specific scheme
  • 40. SONAR An open source platform for Continuous Inspection of code quality
  • 42. SONARQUBE • Issues with OCLint are powerfull • Generate Documentation, Count lines of code, analyze code duplication and run Unit Tests ! • https://github.com/octo-technology/sonarobjective-c
  • 43. NEXT STEP : HARDWARE NEXT STEP : HARDWARE
  • 45. IMPROVEMENTS • « Thanks to Jenkins I’m able to test the last version of our app just by pressing a button, it’s awesome ! » Alex Product Guy at Lima
  • 46. IMPROVEMENTS • « Each day at 4pm, we get a new build of our app, it’s really efficient to reduce the amount of bugs » Tester at Meetic (Dating website)
  • 47. COST : 8 to 10 % of the project