SlideShare una empresa de Scribd logo
1 de 66
OTA DISTRIBUTION
        &
BUILD AUTOMATION




       Jay Graves
      Double Encore

                      © 2011 Double Encore, Inc.
© 2011 Double Encore, Inc.
© 2011 Double Encore, Inc.
© 2011 Double Encore, Inc.
© 2011 Double Encore, Inc.
© 2011 Double Encore, Inc.
What is OTA Distribution?




            © 2011 Double Encore, Inc.
What is OTA Distribution?




            © 2011 Double Encore, Inc.
What is OTA Distribution?




            © 2011 Double Encore, Inc.
XCODE




        © 2011 Double Encore, Inc.
XCODE




        © 2011 Double Encore, Inc.
DEMO


 © 2011 Double Encore, Inc.
THE HARD WAY




       © 2011 Double Encore, Inc.
THE HARD WAY
 1. Build and Archive

 2. Share Archive

 3. Use .ipa + Provision profile

 4. Name the .ipa

 5. Save for “Enterprise”

 6. Upload files

 7. Use the magic URL



                             © 2011 Double Encore, Inc.
© 2011 Double Encore, Inc.
AUTOMATE IT!




       © 2011 Double Encore, Inc.
AUTOMATE IT!


 /usr/bin/xcodebuild




                   © 2011 Double Encore, Inc.
HELP!
 © 2011 Double Encore, Inc.
BUILD IT


 xcodebuild -target MyApp -configuration Release




                      © 2011 Double Encore, Inc.
WHAT IS THE “ENTERPRISE” SWITCH?




                © 2011 Double Encore, Inc.
WHAT IS THE “ENTERPRISE” SWITCH?




                © 2011 Double Encore, Inc.
BUILD OUR OWN




       © 2011 Double Encore, Inc.
BUILD OUR OWN



      ?
       © 2011 Double Encore, Inc.
BUILD OUR OWN



                                           ?
1. A .ipa
file
2. A .plist
file


              © 2011 Double Encore, Inc.
CREATE A .IPA FILE


    MyApp.
         ipa

         © 2011 Double Encore, Inc.
CREATE A .IPA FILE


         zip
    MyApp.

         © 2011 Double Encore, Inc.
© 2011 Double Encore, Inc.
SCRIPT IT




            © 2011 Double Encore, Inc.
SCRIPT IT

# Create the .ipa
APPFILE=$(find . -name MyApp.app)
mkdir Payload
cp -r *.app Payload/
zip -r MyApp.ipa Payload/




                    © 2011 Double Encore, Inc.
PROPERTY LIST




        © 2011 Double Encore, Inc.
PROPERTY LIST




        © 2011 Double Encore, Inc.
SCRIPT IT

 l
y
n


                 © 2011 Double Encore, Inc.
SCRIPT IT



            ?
 l
y
n


                 © 2011 Double Encore, Inc.
SCRIPT IT



                                         ?
 Perl
 Ruby
 Python


            © 2011 Double Encore, Inc.
© 2011 Double Encore, Inc.
© 2011 Double Encore, Inc.
PLISTBUDD

    © 2011 Double Encore, Inc.
PLISTBUDD
 /usr/libexec/PlistBuddy


          © 2011 Double Encore, Inc.
© 2011 Double Encore, Inc.
TO THE INTERNET!




        © 2011 Double Encore, Inc.
TO THE INTERNET!

s3cmd --acl-public put ${ipa_name} s3://my-builds/
s3cmd --acl-public put ${distro_plist_name} s3://my-builds/




                              © 2011 Double Encore, Inc.
POSSIBILITIES




         © 2011 Double Encore, Inc.
POSSIBILITIES
    1.   Archive your .dSYM
    2.   Send out an email
    3.   Tag your source code
    4.   Post to Twitter
    5.   >say “Build Complete”


              © 2011 Double Encore, Inc.
FOUR STEPS




        © 2011 Double Encore, Inc.
FOUR STEPS

    1.   Compile the .app
    2.   Create the .ipa
    3.   Create the .plist
    4.   Upload the files



              © 2011 Double Encore, Inc.
SHOW FULL SCRIPT


      © 2011 Double Encore, Inc.
AUTOMATE IT

)




           © 2011 Double Encore, Inc.
AUTOMATE IT

)




           © 2011 Double Encore, Inc.
AUTOMATE IT
#!/bin/sh
git remote update
local=$(git rev-list --max-count=1 master)
origin=$(git rev-list --max-count=1 origin/master)

if [ "$local" != "$origin" ]
then
    git pull origin master
    echo "Lets build it :)"
else
    echo "No changes :("
fi




                         © 2011 Double Encore, Inc.
CRON JOB

* * * * * sh /usr/local/bin/build_project.sh > /dev/null




                            © 2011 Double Encore, Inc.
DEMO


 © 2011 Double Encore, Inc.
THE STORY SO




       © 2011 Double Encore, Inc.
THE STORY SO


 •Entirely manual workflow
 •Completely automated solution

             © 2011 Double Encore, Inc.
DO YOU WANT
     © 2011 Double Encore, Inc.
JENKINS




          © 2011 Double Encore, Inc.
JENKINS




          © 2011 Double Encore, Inc.
© 2011 Double Encore, Inc.
INSTALL & RUN




        © 2011 Double Encore, Inc.
INSTALL & RUN

     > brew install jenkins




                © 2011 Double Encore, Inc.
INSTALL & RUN

                  > brew install jenkins


java -jar /usr/local/Cellar/jenkins/1.428/lib/jenkins.war




                              © 2011 Double Encore, Inc.
INSTALL & RUN

                     > brew install jenkins


java -jar /usr/local/Cellar/jenkins/1.428/lib/jenkins.war

 launchctl load -w ~/Library/LaunchAgents/org.jenkins-ci.plist




                                   © 2011 Double Encore, Inc.
DEMO


 © 2011 Double Encore, Inc.
VENDING MACHINE




       © 2011 Double Encore, Inc.
VENDING MACHINE




       © 2011 Double Encore, Inc.
THANKS!




          © 2011 Double Encore, Inc.
THANKS!
   Jay Graves
Jay@skabber.com
    @skabber




                  © 2011 Double Encore, Inc.

Más contenido relacionado

Similar a 360iDev OTA Distribution and Build Automation

BP207 - Apps, apps, apps and more apps: Meet the very best open source apps f...
BP207 - Apps, apps, apps and more apps: Meet the very best open source apps f...BP207 - Apps, apps, apps and more apps: Meet the very best open source apps f...
BP207 - Apps, apps, apps and more apps: Meet the very best open source apps f...Bruce Elgort
 
An Introduction to Spring Data
An Introduction to Spring DataAn Introduction to Spring Data
An Introduction to Spring DataOliver Gierke
 
Hubbub health-i phone-test-automation
Hubbub health-i phone-test-automationHubbub health-i phone-test-automation
Hubbub health-i phone-test-automationJames Eisenhauer
 
Running Apache Zeppelin production
Running Apache Zeppelin productionRunning Apache Zeppelin production
Running Apache Zeppelin productionVinay Shukla
 
Running Zeppelin in Enterprise
Running Zeppelin in EnterpriseRunning Zeppelin in Enterprise
Running Zeppelin in EnterpriseDataWorks Summit
 
Adobe AIR Mobile development for Android and PlayBook
Adobe AIR Mobile development for Android and PlayBookAdobe AIR Mobile development for Android and PlayBook
Adobe AIR Mobile development for Android and PlayBookMihai Corlan
 
Development mobile app cross device
Development mobile app cross deviceDevelopment mobile app cross device
Development mobile app cross devicePhuong Nguyen
 
Android Development with Flash Platform
Android Development with Flash PlatformAndroid Development with Flash Platform
Android Development with Flash PlatformMihai Corlan
 
Reasons for Flash: Flash Development in an HTML5 and App Store World
Reasons for Flash: Flash Development in an HTML5 and App Store WorldReasons for Flash: Flash Development in an HTML5 and App Store World
Reasons for Flash: Flash Development in an HTML5 and App Store WorldEffectiveUI
 
Flex presentation for Paris Android User group PAUG
Flex presentation for Paris Android User group PAUGFlex presentation for Paris Android User group PAUG
Flex presentation for Paris Android User group PAUGMichael Chaize
 
Converge SE 2011 Building a Strong Foundation
Converge SE 2011 Building a Strong FoundationConverge SE 2011 Building a Strong Foundation
Converge SE 2011 Building a Strong FoundationAaron Quinn
 
Making cloud portability a practical reality (i pad)
Making cloud portability a practical reality (i pad)Making cloud portability a practical reality (i pad)
Making cloud portability a practical reality (i pad)Nati Shalom
 
Cordova + Ionic + MobileFirst
Cordova + Ionic + MobileFirstCordova + Ionic + MobileFirst
Cordova + Ionic + MobileFirstRaymond Camden
 
Une infrastructure de stockage et sa suite analytique : Le duo gagnant du Dat...
Une infrastructure de stockage et sa suite analytique : Le duo gagnant du Dat...Une infrastructure de stockage et sa suite analytique : Le duo gagnant du Dat...
Une infrastructure de stockage et sa suite analytique : Le duo gagnant du Dat...RSD
 
Breaking the monolith (an example)
Breaking the monolith (an example)Breaking the monolith (an example)
Breaking the monolith (an example)Massimo Ferre'
 
Opening opensource : The Jenkins Way
Opening opensource : The Jenkins WayOpening opensource : The Jenkins Way
Opening opensource : The Jenkins WayNicolas De Loof
 
Red Hat Developer Day London: Advanced Java & JBoss in the Cloud
Red Hat Developer Day London: Advanced Java & JBoss in the Cloud Red Hat Developer Day London: Advanced Java & JBoss in the Cloud
Red Hat Developer Day London: Advanced Java & JBoss in the Cloud Eric D. Schabell
 

Similar a 360iDev OTA Distribution and Build Automation (20)

BP207 - Apps, apps, apps and more apps: Meet the very best open source apps f...
BP207 - Apps, apps, apps and more apps: Meet the very best open source apps f...BP207 - Apps, apps, apps and more apps: Meet the very best open source apps f...
BP207 - Apps, apps, apps and more apps: Meet the very best open source apps f...
 
An Introduction to Spring Data
An Introduction to Spring DataAn Introduction to Spring Data
An Introduction to Spring Data
 
Hubbub health-i phone-test-automation
Hubbub health-i phone-test-automationHubbub health-i phone-test-automation
Hubbub health-i phone-test-automation
 
Running Apache Zeppelin production
Running Apache Zeppelin productionRunning Apache Zeppelin production
Running Apache Zeppelin production
 
Running Zeppelin in Enterprise
Running Zeppelin in EnterpriseRunning Zeppelin in Enterprise
Running Zeppelin in Enterprise
 
Adobe AIR Mobile development for Android and PlayBook
Adobe AIR Mobile development for Android and PlayBookAdobe AIR Mobile development for Android and PlayBook
Adobe AIR Mobile development for Android and PlayBook
 
Development mobile app cross device
Development mobile app cross deviceDevelopment mobile app cross device
Development mobile app cross device
 
Android Development with Flash Platform
Android Development with Flash PlatformAndroid Development with Flash Platform
Android Development with Flash Platform
 
Reasons for Flash: Flash Development in an HTML5 and App Store World
Reasons for Flash: Flash Development in an HTML5 and App Store WorldReasons for Flash: Flash Development in an HTML5 and App Store World
Reasons for Flash: Flash Development in an HTML5 and App Store World
 
Flex presentation for Paris Android User group PAUG
Flex presentation for Paris Android User group PAUGFlex presentation for Paris Android User group PAUG
Flex presentation for Paris Android User group PAUG
 
Flexpaug 111207121300-phpapp01
Flexpaug 111207121300-phpapp01Flexpaug 111207121300-phpapp01
Flexpaug 111207121300-phpapp01
 
Converge SE 2011 Building a Strong Foundation
Converge SE 2011 Building a Strong FoundationConverge SE 2011 Building a Strong Foundation
Converge SE 2011 Building a Strong Foundation
 
Making cloud portability a practical reality (i pad)
Making cloud portability a practical reality (i pad)Making cloud portability a practical reality (i pad)
Making cloud portability a practical reality (i pad)
 
The future is hybrid
The future is hybridThe future is hybrid
The future is hybrid
 
Cordova + Ionic + MobileFirst
Cordova + Ionic + MobileFirstCordova + Ionic + MobileFirst
Cordova + Ionic + MobileFirst
 
Une infrastructure de stockage et sa suite analytique : Le duo gagnant du Dat...
Une infrastructure de stockage et sa suite analytique : Le duo gagnant du Dat...Une infrastructure de stockage et sa suite analytique : Le duo gagnant du Dat...
Une infrastructure de stockage et sa suite analytique : Le duo gagnant du Dat...
 
Breaking the monolith (an example)
Breaking the monolith (an example)Breaking the monolith (an example)
Breaking the monolith (an example)
 
Opening opensource : The Jenkins Way
Opening opensource : The Jenkins WayOpening opensource : The Jenkins Way
Opening opensource : The Jenkins Way
 
Android Internals
Android InternalsAndroid Internals
Android Internals
 
Red Hat Developer Day London: Advanced Java & JBoss in the Cloud
Red Hat Developer Day London: Advanced Java & JBoss in the Cloud Red Hat Developer Day London: Advanced Java & JBoss in the Cloud
Red Hat Developer Day London: Advanced Java & JBoss in the Cloud
 

Último

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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
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
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
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
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
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
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
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
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
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
 

Último (20)

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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
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
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
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
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
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
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
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...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
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
 

360iDev OTA Distribution and Build Automation

Notas del editor

  1. Hello and welcome to Over the Air Distribution and Build Automation.\nI will be showing a fair amount of code during this presentation. You don’t need to type it out.\nAll code will be available online after the presentation at http://skabber.com\n
  2. My name is Jay Graves and you may recognize me from Sky Mall, Maxim, etc.\nBut when I am not jetsetting around the world as an International Male Model...\nI am the CTO of Double Encore (This is our website here)\n
  3. My name is Jay Graves and you may recognize me from Sky Mall, Maxim, etc.\nBut when I am not jetsetting around the world as an International Male Model...\nI am the CTO of Double Encore (This is our website here)\n
  4. My name is Jay Graves and you may recognize me from Sky Mall, Maxim, etc.\nBut when I am not jetsetting around the world as an International Male Model...\nI am the CTO of Double Encore (This is our website here)\n
  5. My name is Jay Graves and you may recognize me from Sky Mall, Maxim, etc.\nBut when I am not jetsetting around the world as an International Male Model...\nI am the CTO of Double Encore (This is our website here)\n
  6. What is OTA distribution?\nIn the old days you would have to ship a build to a customer, walk them through dragging and dropping into iTunes, syncing their device. It was very problematic.\nNow we have the ability to install an app...\nWithout tethering and syncing with iTunes. The user simply taps on a link and the app is installed wirelessly.\n
  7. What is OTA distribution?\nIn the old days you would have to ship a build to a customer, walk them through dragging and dropping into iTunes, syncing their device. It was very problematic.\nNow we have the ability to install an app...\nWithout tethering and syncing with iTunes. The user simply taps on a link and the app is installed wirelessly.\n
  8. What is OTA distribution?\nIn the old days you would have to ship a build to a customer, walk them through dragging and dropping into iTunes, syncing their device. It was very problematic.\nNow we have the ability to install an app...\nWithout tethering and syncing with iTunes. The user simply taps on a link and the app is installed wirelessly.\n
  9. Xcode comes with the ability to save builds that deliver OTA already.\nThey just hide it under the word “Enterprise”\n
  10. I will show you how all this works now.\n
  11. This is a lot of steps!\nIt is a pain to do over and over again when you are rapidly developing an app and want to get the latest version on many devices.\nWhat do we do when something is a pain to do over and over again.\n
  12. This is a lot of steps!\nIt is a pain to do over and over again when you are rapidly developing an app and want to get the latest version on many devices.\nWhat do we do when something is a pain to do over and over again.\n
  13. This is a lot of steps!\nIt is a pain to do over and over again when you are rapidly developing an app and want to get the latest version on many devices.\nWhat do we do when something is a pain to do over and over again.\n
  14. This is a lot of steps!\nIt is a pain to do over and over again when you are rapidly developing an app and want to get the latest version on many devices.\nWhat do we do when something is a pain to do over and over again.\n
  15. This is a lot of steps!\nIt is a pain to do over and over again when you are rapidly developing an app and want to get the latest version on many devices.\nWhat do we do when something is a pain to do over and over again.\n
  16. This is a lot of steps!\nIt is a pain to do over and over again when you are rapidly developing an app and want to get the latest version on many devices.\nWhat do we do when something is a pain to do over and over again.\n
  17. This is a lot of steps!\nIt is a pain to do over and over again when you are rapidly developing an app and want to get the latest version on many devices.\nWhat do we do when something is a pain to do over and over again.\n
  18. This is a lot of steps!\nIt is a pain to do over and over again when you are rapidly developing an app and want to get the latest version on many devices.\nWhat do we do when something is a pain to do over and over again.\n
  19. This is a lot of steps!\nIt is a pain to do over and over again when you are rapidly developing an app and want to get the latest version on many devices.\nWhat do we do when something is a pain to do over and over again.\n
  20. This is a lot of steps!\nIt is a pain to do over and over again when you are rapidly developing an app and want to get the latest version on many devices.\nWhat do we do when something is a pain to do over and over again.\n
  21. This is a lot of steps!\nIt is a pain to do over and over again when you are rapidly developing an app and want to get the latest version on many devices.\nWhat do we do when something is a pain to do over and over again.\n
  22. Automate it.\nXcode is a big IDE with lots of bells and whistles in order to automate it were probably going to want to use shell scripting.\nLuckily Apple thought of that and gave us /usr/bin/xcodebuild\n
  23. Using xcodebuild from the command line you can build any Xcode project/scheme/workspace/configuration/target for whatever architecture and SDK your machine supports.\nIt’s very powerful.\nThere is a lot here.\n
  24. But it is also very easy to simply build app.\nJust give it the Target name and Configuration name.\nYou may not even have to do that if you only have one Target and a default Configuration set in your Xcode Project.\n
  25. So if we can do all that from the command line what is the switch to save for "Enterprise"?\nThere isn't one :(\n\n
  26. So if we are going to create our own build for "Enterprise" script we need to know more about what those files that are created.\n
  27. So if we are going to create our own build for "Enterprise" script we need to know more about what those files that are created.\n
  28. So if we are going to create our own build for "Enterprise" script we need to know more about what those files that are created.\n
  29. Lets start with the .ipa What is an .ipa file?\nIt is just a .zip file with a Payload directory that contains your .app\n\n
  30. Lets start with the .ipa What is an .ipa file?\nIt is just a .zip file with a Payload directory that contains your .app\n\n
  31. Here you can see GroupA.zip\nIt has a root directory name “Payload”\nInside that is our .app\n
  32. Find the compiled .app\nCreate the Payload directory\nCopy recursively the .app into Payload\n Zip the Payload directory into our new .ipa file.\n--\nThat was easy, ok what about this .plist file?\nLets see what it contains\n\n
  33. Next is the property list.\nThe property list outlines the URL location of the .ipa along with app icons and some meta data about the app.\nOf course we all know that property lists are just XML files\n
  34. So how shall we script the building of this .plist file?\nPython? Ruby? Perl? \nYou could use any of those but Xcode comes with its own plist command line tool.\n\n
  35. So how shall we script the building of this .plist file?\nPython? Ruby? Perl? \nYou could use any of those but Xcode comes with its own plist command line tool.\n\n
  36. So how shall we script the building of this .plist file?\nPython? Ruby? Perl? \nYou could use any of those but Xcode comes with its own plist command line tool.\n\n
  37. So how shall we script the building of this .plist file?\nPython? Ruby? Perl? \nYou could use any of those but Xcode comes with its own plist command line tool.\n\n
  38. So how shall we script the building of this .plist file?\nPython? Ruby? Perl? \nYou could use any of those but Xcode comes with its own plist command line tool.\n\n
  39. So how shall we script the building of this .plist file?\nPython? Ruby? Perl? \nYou could use any of those but Xcode comes with its own plist command line tool.\n\n
  40. So how shall we script the building of this .plist file?\nPython? Ruby? Perl? \nYou could use any of those but Xcode comes with its own plist command line tool.\n\n
  41. So how shall we script the building of this .plist file?\nPython? Ruby? Perl? \nYou could use any of those but Xcode comes with its own plist command line tool.\n\n
  42. So how shall we script the building of this .plist file?\nPython? Ruby? Perl? \nYou could use any of those but Xcode comes with its own plist command line tool.\n\n
  43. So how shall we script the building of this .plist file?\nPython? Ruby? Perl? \nYou could use any of those but Xcode comes with its own plist command line tool.\n\n
  44. PlistBuddy to the rescue!\nPlistBuddy can be found at /usr/libexec/PlistBuddy\nIt be run as an interactive .plist editor or be scripted with individual commands.\n\n
  45. PlistBuddy to the rescue!\nPlistBuddy can be found at /usr/libexec/PlistBuddy\nIt be run as an interactive .plist editor or be scripted with individual commands.\n\n
  46. Variables will be defined at the top of the script.\nI have the script available online and after the talk for everyone.\n
  47. Once we have the .ipa and the .plist creaged we need to get them uploaded somewhere\nAmazon S3, FTP, SCP, ???\n
  48. Think of all the other things you could do at this point.\n
  49. Think of all the other things you could do at this point.\n
  50. Think of all the other things you could do at this point.\n
  51. Think of all the other things you could do at this point.\n
  52. Think of all the other things you could do at this point.\n
  53. Think of all the other things you could do at this point.\n
  54. Lets quickly recap where we are at.\n\nThis gives us that scriptable “Enterprise” switch we were looking for.\n
  55. Lets quickly recap where we are at.\n\nThis gives us that scriptable “Enterprise” switch we were looking for.\n
  56. Lets quickly recap where we are at.\n\nThis gives us that scriptable “Enterprise” switch we were looking for.\n
  57. Lets quickly recap where we are at.\n\nThis gives us that scriptable “Enterprise” switch we were looking for.\n
  58. Thats great, but how do we get this to run when there is new code to be distributed?\nGet the final url in here. Gist?\n--\nSo this is great, but we are still running this command line build every time we want to distribute an OTA build...\nSo what are we going to do.\n
  59. Git to the rescue!\nUse git to check the local revision of master to remotes version of master\nthen pull & build if they are different.\n\n
  60. Git to the rescue!\nUse git to check the local revision of master to remotes version of master\nthen pull & build if they are different.\n\n
  61. Git to the rescue!\nUse git to check the local revision of master to remotes version of master\nthen pull & build if they are different.\n\n
  62. Git to the rescue!\nUse git to check the local revision of master to remotes version of master\nthen pull & build if they are different.\n\n
  63. Set that up via a cron job to run every min and you have a really simple automated build server.\n
  64. Demo the cron job building when a commit happens.\n
  65. We have gone from an entirely manual & tedious build for “Enterprise” workflow,\nto a completely automated system that once you have set up you don’t even have to think about it.\n\n
  66. We have gone from an entirely manual & tedious build for “Enterprise” workflow,\nto a completely automated system that once you have set up you don’t even have to think about it.\n\n
  67. \n
  68. Jenkins is a Continuous Integration Server.\nIt is really powerful.\nJenkins can help you build and monitor multiple projects\ndistribute builds across multiple machines\narchive your build products .ipa dSYM files\nrun unit tests\nshow CLANG static analysis results\n
  69. This is the DE Jenkins server\nWe have 45 Builds being monitored.\nJenkins makes it really easy to set up a farm of machines.\nYou can see here that we have 1 Master and 3 Slaves\n
  70. Super easy to install using Brew.\nA quick note about Brew. Similar to MacPorts. Install Open Source Software the “Mac Way”\nReally easy to start\nor\nYou can use launchctl\n
  71. Super easy to install using Brew.\nA quick note about Brew. Similar to MacPorts. Install Open Source Software the “Mac Way”\nReally easy to start\nor\nYou can use launchctl\n
  72. Super easy to install using Brew.\nA quick note about Brew. Similar to MacPorts. Install Open Source Software the “Mac Way”\nReally easy to start\nor\nYou can use launchctl\n
  73. \n
  74. Double Encore has built or own internal front end App that lists all the available \napps we can install from Jenkins.\n
  75. \n
  76. \n