Continuous, Reproducible Delivery with Fastlane

Post on 09-Jan-2017

245 views 0 download

transcript

@asfalcone

HOW WOULD YOU LIKE 2 EXTRA HOURS EVERY WEEK?

#TapIntoTwitter

@asfalcone

SUPERCHARGING YOUR MOBILE APP RELEASE

WITH FASTLANE

#TapIntoTwitter

Andrea Falcone Senior Software Engineer

Twitter@asfalcone

#TapIntoTwitter

@asfalcone

• “We can’t release, Andrea is currently on vacation” • “The provisioning profiles doesn’t contain all

devices?” • “We can’t release an update, the build is broken” • “We need the latest screenshots for the website” • “Uh, that bug fix is not worth the pain of a new

release”

@asfalcone

Provisioning profiles

Manage deployment alerts

Distribute beta builds

Push to Google Play

Push to App Store

Check for regressions

Manage beta groupsReview in-app events

Monitor app deployment

Debug production issues

Code Signing

Gather feedback

Synchronized buildsKeys

Reproducible builds

QA

Customer email outreach Push certs

Continuous Integration + setup

Testing before release

Screenshots

Build times

@asfalcone

fastlane

@asfalcone

! " ♻Avoid Human

Error Reproducible Reusable

@asfalcone

APP STORE & GOOGLE PLAY

RELEASES

BETA DEPLOYMENT

@asfalcone

BETA DEPLOYMENT

@asfalcone

Beta Deployment1. Version Bump 2. Commit & Push 3. Provisioning Profile 4. Build 5. Export 6. Upload 7. Add Release Notes 8. Distribute

@asfalcone

$ %& 'Code

Signing Certificate

Provisioning Profile

Building & Signing Signed IPA

@asfalcone

Code Signing

Certificate

Provisioning Profile

Building & Signing Signed IPA

@asfalcone

$ cert$ sigh$ gym

@asfalcone

1 Instruction 1

2 Instruction 2

3 Instruction 3

4 Instruction 4

5 Instruction 5

Configure Your Fastfile

@asfalcone

@asfalcone

Beta Deployment1. Version Bump 2. Commit & Push 3. Provisioning Profile 4. Build 5. Export 6. Upload 7. Add Release Notes 8. Distribute

@asfalcone

@asfalcone

@asfalcone

@asfalcone

@asfalcone

$ fastlane beta

@asfalcone

@asfalcone

APP RELEASES

@asfalcone

SCREENSHOTS

@asfalcone

250screenshots

...

button.tap()snapshot(“1LandingScreen")

...

@asfalcone

@asfalcone

...

public void testTakeScreenshot() { onView(withId(R.id.fab)).perform(click());Screengrab.screenshot(“after_fab_click”);

}

...

@asfalcone

@asfalcone

DEPLOYMENT

@asfalcone

?!

@asfalcone

?!

@asfalcone

@asfalcone

?!

@asfalcone

$ fastlane release

@asfalcone

Provisioning profiles

Manage deployment alerts

Distribute beta builds

Push to Google Play

Push to App Store

Check for regressions

Manage beta groupsReview in-app events

Monitor app deployment

Debug production issues

Code Signing

Gather feedback

Synchronized buildsKeys

Reproducible builds

QA

Customer email outreach Push certs

Continuous Integration + setup

Testing before release

Screenshots

Build times

@asfalcone

$ gem install fastlane

@asfalcone

@asfalcone

@asfalcone

https://github.com/fastlane/examples

@asfalcone

fastlanehttps://fastlane.tools

Thank You!

@asfalcone