53
@BlaBlaCarTech CocoaHeads https://github.com/blablacar http://blablatech.com

BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Embed Size (px)

Citation preview

Page 1: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

@BlaBlaCarTech 👐

CocoaHeads

https://github.com/blablacar http://blablatech.com

Page 2: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature
Page 3: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Erwann Robin iOS Developer

@Diwann

iOS Developer

Page 4: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

30€ 30€30€ 30€

120 €

Page 5: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

30€ 30€30€ 30€

120 €

Page 6: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature
Page 7: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature
Page 8: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

15M

10M

5M

2009 2010 2011 2012 2013 2014 2015

Page 9: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

20M

15M

10M

5M

2009 2010 2011 2012 2013 2014 2015

20 millionmembers in 2015

Page 10: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

...in 19 countries

Page 11: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

...with 14 offices

Page 12: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

@BlaBlaCarTech

Manage Apps at Home

Page 13: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

2009

Page 14: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

NOW

Page 15: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

From webview to native! Keep the webview flexibility:

○ update strings without

submission

○ easily deploy features at a

specific time

Page 16: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature
Page 17: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature
Page 18: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature
Page 19: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

CloudFront

CloudFront

Page 20: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

CloudFront

CloudFront

10-17M requests / day 99.9%0.1%

Page 21: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Why this solution?

API

○ server traffic○ distribution impact

! S3/Cloudfront○ nothing to do○ distribution

Page 22: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

User sideEN

FR

ES

...

Page 23: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

User sideEN

FR

ES

...

Page 24: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

User sideEN

FR

ES

...

CloudFront

Page 25: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Tech sideEN

FR

ES

...

CloudFront1

2015-11-13 14:03:05

Page 26: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Tech sideEN

FR

ES

...

CloudFront

CloudFront

304Not modified

1

2

2015-11-13 14:03:05

Page 27: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

User sideEN

FR

ES

...

CloudFront

CloudFront

304Not modified

1

2

2015-11-13 14:03:05

10-17M requests / day

File Transfer : 16%= 1.5-2.6 To saved

Page 28: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Dev sideBBS3DownloaderManager : downloadFileIfModifiedSince

NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];

NSDate *lastModifiedDate = [fileAttributes fileModificationDate];

NSString *lastModifiedString = [[BBS3DownloaderManager aws3DateFormatter] stringFromDate:lastModifiedDate];

if (lastModifiedString) { [(NSMutableURLRequest*)req setAllHTTPHeaderFields:@{@"If-Modified-Since" : lastModifiedString}]; }

Page 29: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Dev sideBBS3DownloaderManager : downloadFileSucceed

NSString *lastModifiedString = operation.response.allHeaderFields[@"Last-Modified"];

NSDate *lastModifiedDate = [[BBS3DownloaderManager aws3DateFormatter] dateFromString:lastModifiedString];

NSDictionary *modificationDateAttr = [NSDictionary dictionaryWithObjectsAndKeys: lastModifiedDate, NSFileModificationDate, nil];

[[NSFileManager defaultManager] setAttributes:modificationDateAttr ofItemAtPath:filePath error:nil];

Page 30: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Dev sideBBLocalization :

- Find the right locale- Check if there is already a downloaded file

- Load local locale file ;-)- Try to refresh this file from the network and reload it

Page 31: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

OpenLocalization

Page 32: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

openL10n.io

Page 33: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Create and push new trads

Translate and distribute

Page 34: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

WhatAbout

Features?

Page 35: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature
Page 36: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature
Page 37: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

BBS3DownloaderManager BBLocalization

BBConfiguration / BBConfigurationManager

Page 38: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

BBConfigurationManager

- Find the right country

- Check if there is already a downloaded config file- Load local config file

- Try to refresh this file from the network and reload it

Page 39: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature
Page 40: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Exemple

{ “use_regular_trip” : false, ...}

Page 41: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Activate a feature

{ “use_regular_trip” : false, ...}

true

Page 42: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Dev side

if ([BBConfigurationManager sharedManager].configuration.isRegular) { // ... }

Page 43: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature
Page 44: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Exemple - Activate a countrylanguage: pt

regional format: pt_BR

02/11/15

Page 45: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Activate a countrylanguage: pt

regional format: pt_BR

{ “fr” : {...}, “pt” : { “default”:”portugal”

}, ... }

02/11/15

Page 46: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Illustration - Add new countrylanguage: pt

regional format: pt_BR

{ “fr” : {...}, “pt” : { “default”:”portugal”

}, ... }

{ “france”: {...}, “portugal” : {...}, ... }

02/11/15

Page 47: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Illustration - Add new countrylanguage: pt

regional format: pt_BR

{ “fr” : {...}, “pt” : { “default”:”portugal”

}, ... }

{ “fr” : {...}, “pt” : { “default”:”portugal”, “pt_BR”:”brazil”

}, ... }

02/11/15

{ “france”: {...}, “portugal” : {...}, ... }

Page 48: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Illustration - Add new countrylanguage: pt

regional format: pt_BR

{ “fr” : {...}, “pt” : { “default”:”portugal”

}, ... }

{ “fr” : {...}, “pt” : { “default”:”portugal”, “pt_BR”:”brazil”

}, ... }

{ “france”: {...}, “portugal” : {...}, “brazil”: {...} ... }

02/11/15

{ “france”: {...}, “portugal” : {...}, ... }

Page 49: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

RolloutOctoberSeptemberAugustJulyJune

Page 50: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

Unexpected benefit …

Page 51: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

! Cache application

! Request handler

! iOS version killer

Page 52: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

➔Web based configuration tool➔App version killer➔Feature Release Date➔bare NSURLSession➔OpenSource ?

Page 53: BlaBlaCar et la mise en place dune fonctionnalité FlagFeature

What’s next?Thanks!