continuous integration for ios (ios user group berlin)

46
Continuous Integration at Wooga

Post on 20-Oct-2014

2.352 views

Category:

Technology


2 download

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

Page 1: Continuous Integration for iOS (iOS User Group Berlin)

Continuous Integration at Wooga

Page 2: Continuous Integration for iOS (iOS User Group Berlin)

I’m lazy!

Page 3: Continuous Integration for iOS (iOS User Group Berlin)

I hate repetitive work!

Page 4: Continuous Integration for iOS (iOS User Group Berlin)

I make mistakes!

Page 5: Continuous Integration for iOS (iOS User Group Berlin)

Deploying iPhone App?

Page 6: Continuous Integration for iOS (iOS User Group Berlin)
Page 7: Continuous Integration for iOS (iOS User Group Berlin)

Let someone else do it...

Page 8: Continuous Integration for iOS (iOS User Group Berlin)

Continuous Integration

Page 9: Continuous Integration for iOS (iOS User Group Berlin)

Continuous IntegrationAutomate the build

Build every commit

Make build self-testing

Everyone can see the results of the latest build

Page 10: Continuous Integration for iOS (iOS User Group Berlin)

Automate the build

Build every commit

Make build self-testing

Everyone can see the results of the latest build

Automate the build

Continuous Integration

Page 11: Continuous Integration for iOS (iOS User Group Berlin)
Page 12: Continuous Integration for iOS (iOS User Group Berlin)
Page 13: Continuous Integration for iOS (iOS User Group Berlin)

http://xcloud.me/

Page 14: Continuous Integration for iOS (iOS User Group Berlin)

http://jenkins-ci.org/

Page 15: Continuous Integration for iOS (iOS User Group Berlin)

Automate the build

Build every commit

Make build self-testing

Everyone can see the results of the latest build

Build every commit

Page 16: Continuous Integration for iOS (iOS User Group Berlin)
Page 17: Continuous Integration for iOS (iOS User Group Berlin)
Page 18: Continuous Integration for iOS (iOS User Group Berlin)

Snapshot / Releaseon every commit

manually

Page 19: Continuous Integration for iOS (iOS User Group Berlin)

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

Page 20: Continuous Integration for iOS (iOS User Group Berlin)

PlistBuddy

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

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

Page 21: Continuous Integration for iOS (iOS User Group Berlin)

... now we need individual certificates ...

Page 22: Continuous Integration for iOS (iOS User Group Berlin)

Configurations

Page 23: Continuous Integration for iOS (iOS User Group Berlin)

... update Jenkins ...

Page 24: Continuous Integration for iOS (iOS User Group Berlin)

Snapshot

Page 25: Continuous Integration for iOS (iOS User Group Berlin)

Automate the build

Build every commit

Make build self-testing

Everyone can see the results of the latest build

Make build self-testing

Page 26: Continuous Integration for iOS (iOS User Group Berlin)

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

Running Unit Tests

Page 27: Continuous Integration for iOS (iOS User Group Berlin)

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

Page 28: Continuous Integration for iOS (iOS User Group Berlin)
Page 29: Continuous Integration for iOS (iOS User Group Berlin)

https://github.com/MattesGroeger/OCUnit2JUnit

Testing with Kiwi

Page 30: Continuous Integration for iOS (iOS User Group Berlin)

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

Page 31: Continuous Integration for iOS (iOS User Group Berlin)

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

Page 32: Continuous Integration for iOS (iOS User Group Berlin)

www.hockeyapp.net

Over-The-Air Distribution

Live Crash Reports

Analytics

Page 33: Continuous Integration for iOS (iOS User Group Berlin)
Page 34: Continuous Integration for iOS (iOS User Group Berlin)

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 "[email protected]" \ -H "X-HockeyAppToken: ***" \ https://rink.hockeyapp.net/api/2/apps/***/app_versions

Page 35: Continuous Integration for iOS (iOS User Group Berlin)
Page 36: Continuous Integration for iOS (iOS User Group Berlin)
Page 37: Continuous Integration for iOS (iOS User Group Berlin)

Jenkins Remote Access API

Page 40: Continuous Integration for iOS (iOS User Group Berlin)
Page 41: Continuous Integration for iOS (iOS User Group Berlin)

Automate the build

Build every commit

Make build self-testing

Everyone can see the results of the latest build

Page 42: Continuous Integration for iOS (iOS User Group Berlin)

Now we have more time ...

Page 43: Continuous Integration for iOS (iOS User Group Berlin)
Page 44: Continuous Integration for iOS (iOS User Group Berlin)
Page 45: Continuous Integration for iOS (iOS User Group Berlin)

Section

Page 46: Continuous Integration for iOS (iOS User Group Berlin)

Questions?MattesGroegerjobs.wooga.com