Continuous Integration for iOS (iOS User Group Berlin)

Post on 20-Oct-2014

2,353 views 2 download

Tags:

description

In this talk at the iOS User Group Berlin, Mattes Groeger shows how Continuous Integration for iOS is realized at Wooga. It covers topics ranging from setup over configuration, testing to distribution. You can follow him on Twitter: https://twitter.com/MattesGroeger

transcript

Continuous Integration at Wooga

I’m lazy!

I hate repetitive work!

I make mistakes!

Deploying iPhone App?

Let someone else do it...

Continuous Integration

Continuous IntegrationAutomate the build

Build every commit

Make build self-testing

Everyone can see the results of the latest build

Automate the build

Build every commit

Make build self-testing

Everyone can see the results of the latest build

Automate the build

Continuous Integration

http://xcloud.me/

http://jenkins-ci.org/

Automate the build

Build every commit

Make build self-testing

Everyone can see the results of the latest build

Build every commit

Snapshot / Releaseon every commit

manually

... requires di!erent bundle identifier ...

PlistBuddy

$ /usr/libexec/PlistBuddy \-c "Set :CFBundleIdentifier net.wooga.XXX.snapshot"

$ /usr/libexec/PlistBuddy \-c "Set :CFBundleIdentifier net.wooga.XXX.release"

... now we need individual certificates ...

Configurations

... update Jenkins ...

Snapshot

Automate the build

Build every commit

Make build self-testing

Everyone can see the results of the latest build

Make build self-testing

$ xcodebuild \ -project ./Game/PocketUniverse.xcodeproj \ -target ***Tests \ -configuration Debug -sdk iphonesimulator \ | ./ocunit2junit.rb

Running Unit Tests

$ xcodebuild \ -project ./Game/PocketUniverse.xcodeproj \ -target ***Tests \ -configuration Debug -sdk iphonesimulator \ | ./ocunit2junit.rb

https://github.com/MattesGroeger/OCUnit2JUnit

Testing with Kiwi

Validation

$ /usr/bin/rake validate_config

Error: element decl. 'xpLevel', attribute 'type': The QName value 'xpLevelDefinition' does not resolve to a(n) type definition. at Schema.xsd:71.

Finished: FAILURE

Automate the build

Build every commit

Make build self-testing

Everyone can see the results of the latest buildEveryone can see the results of the latest build

www.hockeyapp.net

Over-The-Air Distribution

Live Crash Reports

Analytics

Upload new version

curl \ -F "status=2" \ -F "notify=0" \ -F "notes=New version!" \ -F "notes_type=0" \ -F "ipa=@XXX-InHouseSnapshot-${BUILD_NUMBER}.ipa" \ -F "dsym=@XXX.app.dSYM.zip" \ -H "X-HockeyAppToken: ***" \ https://rink.hockeyapp.net/api/2/apps/***/app_versions

Jenkins Remote Access API

Automate the build

Build every commit

Make build self-testing

Everyone can see the results of the latest build

Now we have more time ...

Section

Questions?MattesGroegerjobs.wooga.com