Mobile developments at eXo

Preview:

DESCRIPTION

Tools and processes used at eXo to develop our mobile applications (iOS & Android) including continuous integration and deployment. Tips and tricks to setup all the infrastructure involved in them.

Citation preview

Mobile Development Tools and Practices

Arnaud HéritiereXo Platform@aheritier

Wednesday, December 14, 11

Our Motivation

• Observations

• eXo Mobile division had many difficulties to stabilize applications (build failures, dependencies to the development environment ...),

• Functional and technical feedbacks were very limited because the deployment/update process was complex for testers / early adopters.

Wednesday, December 14, 11

Our Motivation

• Prescription

• Continuous build and deployment of mobile applications (iOS, Android)

• to speedup the feedback loop

• to increase the number of testers / early adopters

• to increase the quality and the stability of these applications.

Wednesday, December 14, 11

Our Motivation

• CI wasn't easy to setup the first time, especially for iOS. The experience is worth being shared.

Wednesday, December 14, 11

Webinar Schedule

• The development environment

• Setup the continuous integration

• Setup the continuous deployment

Wednesday, December 14, 11

Environment overviewWednesday, December 14, 11

The Development Environment for iOS

Wednesday, December 14, 11

iOS Development Toolbox

• Xcode

• http://developer.apple.com/xcode/

Wednesday, December 14, 11

Setup a Development Environment for iOS

• Apple documentation

• http://goo.gl/Ge13t

• The most important part is to register your Apple developer account and to correctly set your code signing identity

Wednesday, December 14, 11

CertificatesWednesday, December 14, 11

ProvisioningWednesday, December 14, 11

Setup a Development

Environment for iOS

The developer can spend the major part of the day in Xcode and the emulator as long as the code is regularly committed in

the SCM

Wednesday, December 14, 11

The Development Environment for

Android

Wednesday, December 14, 11

• Java JDK

• http://www.oracle.com/technetwork/java/javase/downloads/index.html

• Android SDK

• http://developer.android.com/sdk

• Eclipse 3.7 IDE for Java Developers

• http://eclipse.org

• Apache Maven

• http://maven.apache.org/

Android Development Toolbox

Wednesday, December 14, 11

Setup a Development Environment for Android• Installation

• Java JDK

• Android SDK

• Don’t forget to set the ANDROID_HOME environment variable

• Maven 3.0.3 min

• Required by the 3.0 version of the android plugin

• Eclipse

• Use Java Developers edition with its Maven integration (m2e)

• Don’t forget to configure your Maven and ADT paths in eclipse settings.

Wednesday, December 14, 11

Maven installation path to use in eclipse

Wednesday, December 14, 11

ADK installation path to use in eclipse

Wednesday, December 14, 11

Maven POM for an Android Project

• Packaging = apk

• Uses the plugin com.jayway.maven.plugins.android.generation2:android-maven-plugin

• version 3.0.0 min

• manifest-update goal bound to the phase process-resources

Wednesday, December 14, 11

Setup a Development Environment for Android• Just import your Maven/APK project in eclipse with m2e.

• M2e and its market place will automatically install and configure the Android extension in eclipse

• You’ll be able to manage your project dependencies with Apache Maven

• You don’t have to explicitly use Maven in your development process. M2e does the necessary to hide it.

• Manage your Android project with Apache Maven

• http://www.sonatype.com/books/mvnref-book/reference/android-dev.html

• http://code.google.com/p/maven-android-plugin/

Wednesday, December 14, 11

Maven POM for an android

project

Wednesday, December 14, 11

Setup a Development

Environment for Android

The developer can spend the major part of the day in Eclipse and the emulator as long as the code is regularly committed in

the SCM

Wednesday, December 14, 11

Continuous Integration Environment

Wednesday, December 14, 11

Continuous Integration Toolbox

• Jenkins

• http://jenkins-ci.org/

• Java JDK

• http://www.oracle.com/technetwork/java/javase/downloads/index.html

• Android SDK

• http://developer.android.com/sdk

• Apache Maven

• http://maven.apache.org/

• Xcode

• http://developer.apple.com/xcode/

Wednesday, December 14, 11

Continuous Integration for iOS

• Jenkins with the Xcode plugin

• https://wiki.jenkins-ci.org/display/JENKINS/Xcode+Plugin

• Requires a MacOS platform to build (using a Jenkins agent if necessary)

Wednesday, December 14, 11

Continuous Integration for iOS

• Configure the environment where build will be run as a development environment (Xcode + certificates)

• Connect your Jenkins Server to an iOS agent :

• Use a dedicated user account on the agent host,

• Allow Remote Login (Sharing preferences) on the agent to connect to it using SSH,

• Configure an SSH key on the Server that you will authorize on the agent (~/.ssh/authorized_keys)

Wednesday, December 14, 11

Dedicated account for Jenkins agent on Macos X host

Wednesday, December 14, 11

Activate Remote Login (aka SSH)

Wednesday, December 14, 11

Continuous Integration for iOS

• Create a freestyle job in jenkins with an Xcode Build Step

• Ask to build the IPA

• Configure it to unlock the login keychain

• Use build variables to generate a unique technical version

Wednesday, December 14, 11

Continuous Integration for iOS

• “User interaction is not allowed” error returned while signing your binary ?

• Launch one time manually the build on the agent to validate permanently the access to the keychain for the process “codesign”

Wednesday, December 14, 11

Continuous Integration for Android

• Install an Android SDK on all agents where the android job can be launched

• Configure in Jenkins

• JDK 1.6+

• Apache Maven 3.0.3+

• ANDROID_HOME environment variable or define the property android.sdk.path in a profile activated from maven settings.xml configuration file.

Wednesday, December 14, 11

Continuous Integration for Android

• Create a Maven Job

• Use the property “android.manifest.versionCode” to inject a unique version number in the application Manifest

Wednesday, December 14, 11

Continuous Deployment Environment

Wednesday, December 14, 11

Continuous Deployment Toolbox

• Jenkins

• http://jenkins-ci.org/

• Appaloosa Store

• http://appaloosa-store.com

Wednesday, December 14, 11

Private Store

• Appaloosa allow you to manage a private store for Android or iOS devices

• Even if our applications are deployed in public app-stores after the release we rely on a private app-store to easily deploy tests versions to our QA or our early adopters.

Wednesday, December 14, 11

Continuous Deployment with Appaloosa

• Install the appaloosa plugin in Jenkins

• https://wiki.jenkins-ci.org/display/JENKINS/Appaloosa+Plugin

• Get the organization token in the administration panel of your appaloosa store

• Create a private store for each system : One for iOS and one for Android

• Configure in each job a post build task to deploy binaries

• **/*.ipa for the iOS build

• **/target/*(-aligned).apk for the android build

Wednesday, December 14, 11

Continuous Deployment with Appaloosa

• Check your emails and install the Appaloosa Store App or open the website on your mobile.

• Both of them will warn you about the availability of a new version of your application.

• Just install/update it

Wednesday, December 14, 11

FULL SCENARIO

Wednesday, December 14, 11

FULL SCENARIOWednesday, December 14, 11

iOS developmentWednesday, December 14, 11

Jenkins pluginsWednesday, December 14, 11

Xcode build configuration in Jenkins for iOS jobs

Wednesday, December 14, 11

Post-build configuration for iOS Jobs in Jenkins

Wednesday, December 14, 11

Let’s launch the iOS jobbuild

Wednesday, December 14, 11

iOS build outputWednesday, December 14, 11

iOS post-build outputWednesday, December 14, 11

iOS job pageWednesday, December 14, 11

We receive a notification

from Appaloosa(using the private store

application)

Wednesday, December 14, 11

Notification sticker on our Appaloosa

store app

Wednesday, December 14, 11

In the application detail screen we

can see the update

Wednesday, December 14, 11

Application installation or

update

Wednesday, December 14, 11

Application installation or

update

Wednesday, December 14, 11

It’s ready !

Wednesday, December 14, 11

Enjoy

Wednesday, December 14, 11

Q/A ?

Wednesday, December 14, 11

Recommended