Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Hands-On iOS Developments with
Jenkins
Arnaud Héritier
eXo Platf...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Polls
•  English or french ?
•  Who is already doing iOS develop...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Arnaud Héritier
"   Jenkins
–  Committer since 2010
–  Maven int...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Mathieu Hausherr
"   iOS
–  Developer since 2008
"   Other mobil...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Slide legend
http://goo.gl/XWGDy 5
"   If you have a mac with XC...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Hands-On iOS Developments with Jenkins
"   Concepts
–  iOS speci...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
CONCEPTS
Goals of Jenkins-CI on iOS
7http://goo.gl/XWGDy
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Reminder: Apple application
provisioning strategy
Validity
Limit...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Certificate management pitfalls
•  Certificate with the same nam...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Why automatic distribution is useful for?
•  Speedup the feedbac...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Continuous integration concepts
Developer
Developer
Source code
...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Continuous deployment concepts
Publish
Building
application
Jenk...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Appaloosa concept
13http://goo.gl/XWGDy
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Getting your device
UDID
We need your device UDID to
be able to ...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
HOW TO
Step by step guide for Jenkins-CI on iOS
15http://goo.gl/...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Plugins installation
Ø  Home
Ø  Manage Jenkins
Ø  Manage Plug...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Plugins configuration
•  By default Xcode plugin
settings should...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
What if I soon have a Jenkins on a non
Mac server?
•  Why use a ...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Node creation
•  To create an agent
dedicated for xcode builds
y...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Affect job to a node
•  Create a “MacOSX” label
•  Force job to ...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Xcode bug for iOS unit
testing
Source: http://
www.raingrove.com...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Configure your project
for Unit Tests
•  Check run action for yo...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Add Xcode unit testing
build phase
•  Commit your scheme on GIT
...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Write a test
-  (void)test_parseRoomsFromDictionary_!
returnObje...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Add clang static
analysis build phase
•  Configure your target
2...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Appaloosa jenkins’
integration
•  Check IPA generation
•  Add Ap...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Publish to the App Store
•  Apple doesn’t provide API
•  Need ma...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Generate Apple Doc
•  Install Apple Doc
https://github.com/tomaz...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
HANDS ON … LET’S GO
Jenkins set-up, from GitHub to your device
2...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Fork on github the
sample project
http://goo.gl/alKgW
And then c...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Setup a continuous
integration job
Setup Git
http://goo.gl/XWGDy...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Setup a continuous
integration job
Add a Clang Scan-Build Phase
...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Setup a continuous
integration job
Add an Xcode build step to
ex...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Setup a continuous
integration job
Activate Clang and unit tests...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Fix the test
In
JUC ParisTests/JUC_ParisTests.m
Comment the fail...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Change your Bundle
Id
In
Project Properties > JUC Paris
Target >...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Add a deployment
Job
Same github settings
Create an Xcode build ...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Appaloosa installation
on your device
http://goo.gl/hQ2Ue
http:/...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Appaloosa installation
on your device
Account information
•  Log...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Add a deployment
Job
Setup Appaloosa with this token :
igjrz4w70...
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Enjoy
41http://goo.gl/XWGDy
Jenkins User Conference Paris, 17 April 2012 #jenkinsconf
Thank You To Our Sponsors
Platinum Sponsor
Silver Sponsor
Gold S...
Upcoming SlideShare
Loading in …5
×

Hands on iOS developments with Jenkins

931 views

Published on

This workshop from Arnaud Heritier explains how to setup an environment to build/test/deploy iOS applications using Jenkins CI server and an AppAloosa private store

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
931
On SlideShare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
11
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Hands on iOS developments with Jenkins

  1. 1. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Hands-On iOS Developments with Jenkins Arnaud Héritier eXo Platform http://www.exoplatform.com Mathieu Hausherr Octo Technology http://www.octo.com http://goo.gl/XWGDy 1
  2. 2. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Polls •  English or french ? •  Who is already doing iOS developments ? •  Who is already using JenkinsCI ? •  Who is already using JenkinsCI to manage iOS developments ? http://goo.gl/XWGDy 2
  3. 3. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Arnaud Héritier "   Jenkins –  Committer since 2010 –  Maven integration –  Xcode, Appaloosa plugins … "   Apache Maven –  Committer since 2004 and member of the Project Management Committee –  Coauthor of « Apache Maven » •  published by Pearson (in French) " eXo platform –  Software Factory Manager –  In charge of tools and methods "   Contact me –  http://aheritier.net –  Twitter : @aheritier –  Skype : aheritier 3http://goo.gl/XWGDy
  4. 4. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Mathieu Hausherr "   iOS –  Developer since 2008 "   Other mobile platforms –  Android, Bada, Blackberry, Windows Phone 7... "   Octo Technology –  Mobile Expert –  Installation of software factories for customers "   Contact me –  Mail: mha@octo.com –  Twitter : @mhausherr 4http://goo.gl/XWGDy
  5. 5. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Slide legend http://goo.gl/XWGDy 5 "   If you have a mac with XCode, follow us. "   In this slide you have something to do. "   In this slide we explain a workaround. Don’t be afraid by this explanation. You only need it tomorrow at home for your own Software factory. "   Find these slides here
  6. 6. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Hands-On iOS Developments with Jenkins "   Concepts –  iOS specificities –  Continuous integration –  Continuous deployment "   How to –  Step by step Jenkins server setup –  Tips & Tricks to deals with Apple’s bug "   Hands on –  Prepare the Sample App –  Setup your Jenkins jobs –  Deploy your app on your device 6http://goo.gl/XWGDy
  7. 7. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf CONCEPTS Goals of Jenkins-CI on iOS 7http://goo.gl/XWGDy
  8. 8. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Reminder: Apple application provisioning strategy Validity Limite of devices Apple validation Availability Ad Hoc 1 year 100 NO Everybody In House 1 year ∞ NO Only for companies App Store For life ∞ YES Everybody 8http://goo.gl/XWGDy
  9. 9. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Certificate management pitfalls •  Certificate with the same name doesn’t work •  Create specific keychains per project –  Never use default keychain •  “security set-default” command isn’t thread safe –  Allow only one executor per server 9http://goo.gl/XWGDy
  10. 10. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Why automatic distribution is useful for? •  Speedup the feedback loop with early adopters and QA Teams •  Improve time to market –  Spend time to develop instead of distribute •  Resign apps for certificates expiration –  Ad Hoc and In House certificates expire after one year –  Rebuild all your app safely 10http://goo.gl/XWGDy
  11. 11. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Continuous integration concepts Developer Developer Source code + tests Unit tests SenTesting Source code + tests1 1 2 3 Software Factory Building application Jenkins Code versionning Git Static analysis Clang 11http://goo.gl/XWGDy
  12. 12. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Continuous deployment concepts Publish Building application Jenkins Private store Appaloosa Download Documentation generation Apple doc 1 2 4 Code versionning Git Push 5 6 User devices Software Factory Archive4 Archive Public store App Store Submit 5 6 Download 12http://goo.gl/XWGDy
  13. 13. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Appaloosa concept 13http://goo.gl/XWGDy
  14. 14. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Getting your device UDID We need your device UDID to be able to push apps to your device 1.  Download “UDID sender” on the App Store 2.  Send UDID via E-Mail to mha@octo.com http://goo.gl/XWGDy 14
  15. 15. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf HOW TO Step by step guide for Jenkins-CI on iOS 15http://goo.gl/XWGDy
  16. 16. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Plugins installation Ø  Home Ø  Manage Jenkins Ø  Manage Plugins Ø  Install these plugins •  Appaloosa •  Clang Scan-Build •  Git •  Xcode 16http://goo.gl/XWGDy
  17. 17. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Plugins configuration •  By default Xcode plugin settings should be good for a standard installation •  Clang Static Analyzer binaries have to be downloaded from http://clang- analyzer.llvm.org/ and extracted on the server or agent where they’ll be used •  In “System settings” (Clang Scan-Build Plugin part) you need to add at least one installation. 17http://goo.gl/XWGDy
  18. 18. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf What if I soon have a Jenkins on a non Mac server? •  Why use a non Mac Jenkins? –  Regroup all your jobs –  Maintain only one instance of Jenkins –  Create dependencies between mobile and not mobile projects •  How use a non Mac Jenkins? –  Create Mac OS node –  Only need a SSH connection http://goo.gl/XWGDy 18 Master Node Scheduling build Jenkins Code versionning Git MacOS Node Building application XCode
  19. 19. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Node creation •  To create an agent dedicated for xcode builds you need to create a node with : •  A label to select jobs for which you’ll use it •  A SSH connection with a password less private key •  The path for Clang checker binaries 19http://goo.gl/XWGDy
  20. 20. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Affect job to a node •  Create a “MacOSX” label •  Force job to run on “MacOSX”-labeled nodes 20http://goo.gl/XWGDy
  21. 21. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Xcode bug for iOS unit testing Source: http:// www.raingrove.com/ 2012/03/28/running-ocunit-and- specta-tests-from-command- line.html •  Edit your RunPlatformUnitTests sudo vim `xcode-select -print-path`/ Platforms/iPhoneSimulator.platform/ Developer/Tools/RunPlatformUnitTests Replace Warning ${LINENO} "Skipping tests; the iPhoneSimulator platform does not currently support application-hosted tests (TEST_HOST set)." By: export CFFIXED_USER_HOME="$ {BUILT_PRODUCTS_DIR}/UserHome/" mkdir -p "${CFFIXED_USER_HOME}" mkdir -p "${CFFIXED_USER_HOME}/Library/ Caches" mkdir "${CFFIXED_USER_HOME}/Library/ Preferences" mkdir "${CFFIXED_USER_HOME}/Documents" export OTHER_TEST_FLAGS="$ {OTHER_TEST_FLAGS} - RegisterForSystemEvents" RunTestsForApplication "${TEST_HOST}" "$ {TEST_BUNDLE_PATH}" 21http://goo.gl/XWGDy
  22. 22. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Configure your project for Unit Tests •  Check run action for your Test target •  Share your Scheme 22http://goo.gl/XWGDy
  23. 23. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Add Xcode unit testing build phase •  Commit your scheme on GIT •  Use Scheme instead of target for testing. Use target only for building. •  Set SDK to iphonesimulator •  Set Configuration to Debug •  Add TEST_AFTER_BUILD=YES in Custom xcodebuild arguments 23http://goo.gl/XWGDy
  24. 24. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Write a test -  (void)test_parseRoomsFromDictionary_! returnObjectsArrayForCorrectDictionnary! {! // Given! NSDictionary *dictionnary = [NSDictionary dictionaryWithObject: [NSArray array] forKey:KEY_ROOMS];! ! // When! NSArray* rooms = [JUCEventsService parseRoomsFromDictionary:dictionnary];! ! // Then! STAssertTrue([rooms isKindOfClass: [NSArray class]],nil);! } •  Use SenTestKit Framework •  Add Mock With OCMock 24http://goo.gl/XWGDy
  25. 25. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Add clang static analysis build phase •  Configure your target 25http://goo.gl/XWGDy
  26. 26. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Appaloosa jenkins’ integration •  Check IPA generation •  Add Appaloosa step to your project •  Receive Push Notification Token: igjrz4w701ynrkzd2zwh2u450ilg00dg 26http://goo.gl/XWGDy
  27. 27. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Publish to the App Store •  Apple doesn’t provide API •  Need manual actions –  On a Mac –  Without proxy 27http://goo.gl/XWGDy
  28. 28. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Generate Apple Doc •  Install Apple Doc https://github.com/tomaz/ appledoc •  Command line appledoc conf.plist <outfile> •  Add an “aggregate” target to the project Perform automatic doc generation locally 28http://goo.gl/XWGDy
  29. 29. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf HANDS ON … LET’S GO Jenkins set-up, from GitHub to your device 29http://goo.gl/XWGDy
  30. 30. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Fork on github the sample project http://goo.gl/alKgW And then clone your fork git clone git:// github.com/XXXX/ JenkinsSample.git 30http://goo.gl/XWGDy
  31. 31. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Setup a continuous integration job Setup Git http://goo.gl/XWGDy 31
  32. 32. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Setup a continuous integration job Add a Clang Scan-Build Phase http://goo.gl/XWGDy 32
  33. 33. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Setup a continuous integration job Add an Xcode build step to execute tests •  Use a schema (JUC Paris) •  SDK = iphonesimulator •  Config = Debug •  Args = TEST_AFTER_BUILD=YES •  Clean test reports http://goo.gl/XWGDy 33
  34. 34. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Setup a continuous integration job Activate Clang and unit tests reports http://goo.gl/XWGDy 34
  35. 35. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Fix the test In JUC ParisTests/JUC_ParisTests.m Comment the failling test Commit and push on github git add . git commit git push Relaunch your build http://goo.gl/XWGDy 35
  36. 36. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Change your Bundle Id In Project Properties > JUC Paris Target > Summary Change Bundle identifier to com.jenkins.juc- paris.app.yourname Commit and push on github git add . git commit git push http://goo.gl/XWGDy 36
  37. 37. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Add a deployment Job Same github settings Create an Xcode build step •  Target = JUC Paris •  Config = Release •  Setup versions •  Build IPA •  Embedded profile http://goo.gl/XWGDy 37
  38. 38. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Appaloosa installation on your device http://goo.gl/hQ2Ue http://goo.gl/XWGDy 38
  39. 39. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Appaloosa installation on your device Account information •  Login: mha+juc@octo.com •  Password: jenkins  http://goo.gl/XWGDy 39
  40. 40. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Add a deployment Job Setup Appaloosa with this token : igjrz4w701ynrkzd2zwh2u450ilg00dg http://goo.gl/XWGDy 40
  41. 41. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Enjoy 41http://goo.gl/XWGDy
  42. 42. Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Thank You To Our Sponsors Platinum Sponsor Silver Sponsor Gold Sponsor 42http://goo.gl/XWGDy

×