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
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
Jenkins User Conference                     Paris, 17 April 2012       #jenkinsconf



   Arnaud Héritier
   "   Jenkins                                       "   eXo platform
       –  Committer since 2010                            –  Software Factory
       –  Maven integration                                  Manager
       –  Xcode, Appaloosa plugins …                      –  In charge of tools
                                                             and methods
   "   Apache Maven                                  "   Contact me
       –  Committer since 2004 and
                                                          –  http://aheritier.net
          member of the Project
          Management Committee                            –  Twitter : @aheritier
       –  Coauthor of « Apache                            –  Skype : aheritier
          Maven »
           •  published by Pearson (in
              French)




                               http://goo.gl/XWGDy                                    3
Jenkins User Conference                  Paris, 17 April 2012   #jenkinsconf



   Mathieu Hausherr
   "   iOS                                 "   Octo Technology
       –  Developer since 2008                  –  Mobile Expert
                                                –  Installation of software
                                                   factories for customers
   "   Other mobile platforms
       –  Android, Bada, Blackberry,
          Windows Phone 7...               "   Contact me
                                                –  Mail: mha@octo.com
                                                –  Twitter : @mhausherr




                            http://goo.gl/XWGDy                                4
Jenkins User Conference                Paris, 17 April 2012   #jenkinsconf



   Slide legend
   "   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
                          http://goo.gl/XWGDy                                5
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
                          http://goo.gl/XWGDy                                6
Jenkins User Conference                Paris, 17 April 2012   #jenkinsconf




  Goals of Jenkins-CI on iOS

  CONCEPTS


                          http://goo.gl/XWGDy                                7
Jenkins User Conference                Paris, 17 April 2012    #jenkinsconf



Reminder: Apple application
provisioning strategy

                              Limite of           Apple
              Validity                                        Availability
                              devices           validation


  Ad Hoc      1 year             100                 NO       Everybody


                                                               Only for
  In House    1 year             ∞                   NO
                                                              companies


 App Store    For life           ∞                   YES      Everybody


                          http://goo.gl/XWGDy                                 8
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
                          http://goo.gl/XWGDy                                9
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
                          http://goo.gl/XWGDy                                10
Jenkins User Conference                               Paris, 17 April 2012    #jenkinsconf




Continuous integration concepts
                                     SenTesting    Clang
                                                                   Software
                                                                    Factory

                  Source code            Unit       Static
              1      + tests            tests      analysis


  Developer
                                         3
                      Git             Jenkins


                                 2
                      Code            Building
                   versionning       application



              1   Source code
                     + tests
  Developer




                                     http://goo.gl/XWGDy                                     11
Jenkins User Conference                                 Paris, 17 April 2012    #jenkinsconf




Continuous deployment concepts
                    Apple doc
                                                    Software
                                                     Factory


                    Documentation
                      generation                                               App Store
                                                                      Submit
                         2                                              5
     Git              Jenkins
                                      4             Archive                      Public
                                                                                  store
                1                   Archive


                      Building
                                                                                  6       Download
     Code
  versionning        application


                                      Appaloosa
                                                                  Push
                             4
                        Publish
                                                                  5
                                                                  6
                                          Private      Download
                                           store

                                                                                 User
                                                                                devices
                                       http://goo.gl/XWGDy                                      12
Jenkins User Conference                Paris, 17 April 2012   #jenkinsconf




Appaloosa concept




                          http://goo.gl/XWGDy                                13
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
Jenkins User Conference                Paris, 17 April 2012   #jenkinsconf




  Step by step guide for Jenkins-CI on iOS

  HOW TO


                          http://goo.gl/XWGDy                                15
Jenkins User Conference                      Paris, 17 April 2012   #jenkinsconf




Plugins installation
Ø    Home
Ø    Manage Jenkins
Ø    Manage Plugins
Ø    Install these plugins
        •    Appaloosa
        •    Clang Scan-Build
        •    Git
        •    Xcode




                                http://goo.gl/XWGDy                                16
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.




                                     http://goo.gl/XWGDy                                17
Jenkins User Conference                Paris, 17 April 2012     #jenkinsconf



What if I soon have a Jenkins on a non
Mac server?                                           Git
•     Why use a non Mac
     Jenkins?
     –  Regroup all your jobs                        Code
                                                  versionning
     –  Maintain only one
        instance of Jenkins
                                                                 Master Node
     –  Create dependencies                        Jenkins
        between mobile and not
        mobile projects
                                                  Scheduling
                                                     build

•  How use a non Mac
   Jenkins?
                                                                 MacOS Node
     –  Create Mac OS node                         XCode

     –  Only need a SSH
        connection
                                                   Building
                                                  application



                          http://goo.gl/XWGDy                                  18
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




                                        http://goo.gl/XWGDy                                19
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




                               http://goo.gl/XWGDy                                20
Jenkins User Conference                             Paris, 17 April 2012   #jenkinsconf

                                      sudo vim `xcode-select -print-path`/
                                      Platforms/iPhoneSimulator.platform/
                                      Developer/Tools/RunPlatformUnitTests
Xcode bug for iOS unit
testing                               Replace
                                      Warning ${LINENO} "Skipping tests; the
Source: http://                       iPhoneSimulator platform does not currently
www.raingrove.com/                    support application-hosted tests (TEST_HOST
2012/03/28/running-ocunit-and-        set)."
specta-tests-from-command-            By:
line.html                             export CFFIXED_USER_HOME="$
                                      {BUILT_PRODUCTS_DIR}/UserHome/"
•    Edit your RunPlatformUnitTests   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}"




                                       http://goo.gl/XWGDy                                21
Jenkins User Conference                       Paris, 17 April 2012   #jenkinsconf




Configure your project
for Unit Tests
•    Check run action for your
     Test target

•    Share your Scheme




                                 http://goo.gl/XWGDy                                22
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




                                        http://goo.gl/XWGDy                                23
Jenkins User Conference                      Paris, 17 April 2012   #jenkinsconf


                                -  (void)test_parseRoomsFromDictionary_!
                                returnObjectsArrayForCorrectDictionnary!
                                {!
Write a test                        // Given!
•    Use SenTestKit Framework       NSDictionary *dictionnary =
                                [NSDictionary dictionaryWithObject:
•    Add Mock With OCMock       [NSArray array] forKey:KEY_ROOMS];!
                                    !
                                    // When!
                                    NSArray* rooms = [JUCEventsService
                                parseRoomsFromDictionary:dictionnary];!
                                      !
                                    // Then!
                                    STAssertTrue([rooms isKindOfClass:
                                [NSArray class]],nil);!
                                }




                                http://goo.gl/XWGDy                                24
Jenkins User Conference                   Paris, 17 April 2012   #jenkinsconf




Add clang static
analysis build phase
•    Configure your target




                             http://goo.gl/XWGDy                                25
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


                                  http://goo.gl/XWGDy                                26
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




                          http://goo.gl/XWGDy                                27
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




                               http://goo.gl/XWGDy                                28
Jenkins User Conference                Paris, 17 April 2012   #jenkinsconf




  Jenkins set-up, from GitHub to your device

  HANDS ON … LET’S GO


                          http://goo.gl/XWGDy                                29
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




                          http://goo.gl/XWGDy                                30
Jenkins User Conference                Paris, 17 April 2012   #jenkinsconf




Setup a continuous
integration job
Setup Git




                          http://goo.gl/XWGDy                                31
Jenkins User Conference                     Paris, 17 April 2012   #jenkinsconf




Setup a continuous
integration job
Add a Clang Scan-Build Phase




                               http://goo.gl/XWGDy                                32
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
Jenkins User Conference                      Paris, 17 April 2012   #jenkinsconf




Setup a continuous
integration job
Activate Clang and unit tests
reports




                                http://goo.gl/XWGDy                                34
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
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
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
Jenkins User Conference                Paris, 17 April 2012   #jenkinsconf




Appaloosa installation
on your device




 http://goo.gl/hQ2Ue




                          http://goo.gl/XWGDy                                38
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
Jenkins User Conference                          Paris, 17 April 2012   #jenkinsconf




Add a deployment
Job
Setup Appaloosa with this token :
igjrz4w701ynrkzd2zwh2u450ilg00dg




                                    http://goo.gl/XWGDy                                40
Jenkins User Conference                Paris, 17 April 2012   #jenkinsconf




Enjoy




                          http://goo.gl/XWGDy                                41
Jenkins User Conference                Paris, 17 April 2012   #jenkinsconf



   Thank You To Our Sponsors

   Platinum Sponsor




   Gold Sponsor




   Silver Sponsor




                          http://goo.gl/XWGDy                                42

Hands on iOS developments with jenkins

  • 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.
    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.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Arnaud Héritier "   Jenkins " eXo platform –  Committer since 2010 –  Software Factory –  Maven integration Manager –  Xcode, Appaloosa plugins … –  In charge of tools and methods "   Apache Maven "   Contact me –  Committer since 2004 and –  http://aheritier.net member of the Project Management Committee –  Twitter : @aheritier –  Coauthor of « Apache –  Skype : aheritier Maven » •  published by Pearson (in French) http://goo.gl/XWGDy 3
  • 4.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Mathieu Hausherr "   iOS "   Octo Technology –  Developer since 2008 –  Mobile Expert –  Installation of software factories for customers "   Other mobile platforms –  Android, Bada, Blackberry, Windows Phone 7... "   Contact me –  Mail: mha@octo.com –  Twitter : @mhausherr http://goo.gl/XWGDy 4
  • 5.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Slide legend "   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 http://goo.gl/XWGDy 5
  • 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 http://goo.gl/XWGDy 6
  • 7.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Goals of Jenkins-CI on iOS CONCEPTS http://goo.gl/XWGDy 7
  • 8.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Reminder: Apple application provisioning strategy Limite of Apple Validity Availability devices validation Ad Hoc 1 year 100 NO Everybody Only for In House 1 year ∞ NO companies App Store For life ∞ YES Everybody http://goo.gl/XWGDy 8
  • 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 http://goo.gl/XWGDy 9
  • 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 http://goo.gl/XWGDy 10
  • 11.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Continuous integration concepts SenTesting Clang Software Factory Source code Unit Static 1 + tests tests analysis Developer 3 Git Jenkins 2 Code Building versionning application 1 Source code + tests Developer http://goo.gl/XWGDy 11
  • 12.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Continuous deployment concepts Apple doc Software Factory Documentation generation App Store Submit 2 5 Git Jenkins 4 Archive Public store 1 Archive Building 6 Download Code versionning application Appaloosa Push 4 Publish 5 6 Private Download store User devices http://goo.gl/XWGDy 12
  • 13.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Appaloosa concept http://goo.gl/XWGDy 13
  • 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.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Step by step guide for Jenkins-CI on iOS HOW TO http://goo.gl/XWGDy 15
  • 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 http://goo.gl/XWGDy 16
  • 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. http://goo.gl/XWGDy 17
  • 18.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf What if I soon have a Jenkins on a non Mac server? Git •  Why use a non Mac Jenkins? –  Regroup all your jobs Code versionning –  Maintain only one instance of Jenkins Master Node –  Create dependencies Jenkins between mobile and not mobile projects Scheduling build •  How use a non Mac Jenkins? MacOS Node –  Create Mac OS node XCode –  Only need a SSH connection Building application http://goo.gl/XWGDy 18
  • 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 http://goo.gl/XWGDy 19
  • 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 http://goo.gl/XWGDy 20
  • 21.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf sudo vim `xcode-select -print-path`/ Platforms/iPhoneSimulator.platform/ Developer/Tools/RunPlatformUnitTests Xcode bug for iOS unit testing Replace Warning ${LINENO} "Skipping tests; the Source: http:// iPhoneSimulator platform does not currently www.raingrove.com/ support application-hosted tests (TEST_HOST 2012/03/28/running-ocunit-and- set)." specta-tests-from-command- By: line.html export CFFIXED_USER_HOME="$ {BUILT_PRODUCTS_DIR}/UserHome/" •  Edit your RunPlatformUnitTests 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}" http://goo.gl/XWGDy 21
  • 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 http://goo.gl/XWGDy 22
  • 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 http://goo.gl/XWGDy 23
  • 24.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf -  (void)test_parseRoomsFromDictionary_! returnObjectsArrayForCorrectDictionnary! {! Write a test // Given! •  Use SenTestKit Framework NSDictionary *dictionnary = [NSDictionary dictionaryWithObject: •  Add Mock With OCMock [NSArray array] forKey:KEY_ROOMS];! ! // When! NSArray* rooms = [JUCEventsService parseRoomsFromDictionary:dictionnary];! ! // Then! STAssertTrue([rooms isKindOfClass: [NSArray class]],nil);! } http://goo.gl/XWGDy 24
  • 25.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Add clang static analysis build phase •  Configure your target http://goo.gl/XWGDy 25
  • 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 http://goo.gl/XWGDy 26
  • 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 http://goo.gl/XWGDy 27
  • 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 http://goo.gl/XWGDy 28
  • 29.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Jenkins set-up, from GitHub to your device HANDS ON … LET’S GO http://goo.gl/XWGDy 29
  • 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 http://goo.gl/XWGDy 30
  • 31.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Setup a continuous integration job Setup Git http://goo.gl/XWGDy 31
  • 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.
    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.
    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.
    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.
    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.
    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.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Appaloosa installation on your device http://goo.gl/hQ2Ue http://goo.gl/XWGDy 38
  • 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.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Add a deployment Job Setup Appaloosa with this token : igjrz4w701ynrkzd2zwh2u450ilg00dg http://goo.gl/XWGDy 40
  • 41.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Enjoy http://goo.gl/XWGDy 41
  • 42.
    Jenkins User Conference Paris, 17 April 2012 #jenkinsconf Thank You To Our Sponsors Platinum Sponsor Gold Sponsor Silver Sponsor http://goo.gl/XWGDy 42