ios, apis e sincronização de dados

37
iOS, APIs, performance e sincronização de dados Maurício Linhares - @mauriciojr http://techbot.me / sábado, 10 de setembro de 2011

Upload: mauricio-linhares

Post on 15-Dec-2014

1.690 views

Category:

Technology


0 download

DESCRIPTION

Apresentaç˜

TRANSCRIPT

Page 1: iOS, APIs e sincronização de dados

iOS, APIs, performance e sincronização de

dadosMaurício Linhares - @mauriciojr

http://techbot.me/

sábado, 10 de setembro de 2011

Page 2: iOS, APIs e sincronização de dados

WHO?

• GUJeiro de raiz - 01/2005

• Ruby, Objective-C, Java e Scala developer na http://officedrop.com/

• Nas horas vagas escreve no blog, grava screencasts e joga boardgames europeus;

sábado, 10 de setembro de 2011

Page 3: iOS, APIs e sincronização de dados

Como entramos no mercado?

• Aplicação pra iPad a época do lançamento do primeiro iPad;

• Aplicação pra Mac á época do lançamento da Mac App Store;

• Aplicação pra iPhone (recente);

sábado, 10 de setembro de 2011

Page 4: iOS, APIs e sincronização de dados

Por que investir em iOS e Mac?

sábado, 10 de setembro de 2011

Page 5: iOS, APIs e sincronização de dados

A vida é injustasábado, 10 de setembro de 2011

Page 6: iOS, APIs e sincronização de dados

Build a Mac app?

sábado, 10 de setembro de 2011

Page 7: iOS, APIs e sincronização de dados

Por investir em iOS e Mac?

sábado, 10 de setembro de 2011

Page 8: iOS, APIs e sincronização de dados

Em números

• Primeiros dois meses da aplicação pra iPad, 45% de crescimento em sign ups a cada mes;

• Primeiros dois meses do ScanDrop for the Mac, 13% de crescimento;

• Primeiros dois meses de aplicação pra Android, 14% de crescimento;

• Primeiros dois meses de lançamento da aplicação pra iPhone, 51% de crescimento;

sábado, 10 de setembro de 2011

Page 9: iOS, APIs e sincronização de dados

E tem mais?

• A mídia americana (nosso mercado principal) adora Macs;

• Todos os reviews das aplicações desktop pra Windows (temos duas) reclamavam da inexistência do Mac;

• Se você tem versão pra Mac e iOS, as pessoas falam de você com mais facilidade;

sábado, 10 de setembro de 2011

Page 10: iOS, APIs e sincronização de dados

Plataforma

• Desenvolvimento usando XCode;

• Em Objective-C, C e C++;

• Ambiente de desenvolvimento exclusivo para o Mac (mas é possível compilar no Linux);

sábado, 10 de setembro de 2011

Page 11: iOS, APIs e sincronização de dados

Objective-C é difícil?sábado, 10 de setembro de 2011

Page 12: iOS, APIs e sincronização de dados

Performance?sábado, 10 de setembro de 2011

Page 13: iOS, APIs e sincronização de dados

Performance real e performance percebida são muito importantes

sábado, 10 de setembro de 2011

Page 14: iOS, APIs e sincronização de dados

Construir uma aplicação performática começa na construção

da sua API

sábado, 10 de setembro de 2011

Page 15: iOS, APIs e sincronização de dados

Dicas de performance de aplicações web

também funcinonam aqui

Far future expires header, caching, conditional get, etagsmas o seu cliente deve suportar isso, como o

ASIHttpRequest

sábado, 10 de setembro de 2011

Page 16: iOS, APIs e sincronização de dados

Se você usa um storage restrito, não faça

redirect, faça proxyingComo S3 com signed URLs

sábado, 10 de setembro de 2011

Page 17: iOS, APIs e sincronização de dados

Exemplo com S3location ~* "^/s3_redirect/(.*)" { resolver 8.8.8.8; internal;

proxy_max_temp_file_size 0; proxy_set_header Authorization '';

# Download the file and send it to client proxy_pass http://s3.amazonaws.com/$1?$args;}

sábado, 10 de setembro de 2011

Page 18: iOS, APIs e sincronização de dados

Evite usar formatos binários

Thrift e Prococol buffer? Tô fora!

sábado, 10 de setembro de 2011

Page 19: iOS, APIs e sincronização de dados

Prefira JSON a XML como formato de

mensagens

E evolua a sua API com bem menos dores de cabeça

sábado, 10 de setembro de 2011

Page 20: iOS, APIs e sincronização de dados

Procure enviar todos os dados necessários

de cada chamada{ activity : { comment : “Objective-C is cool!”, user : { username : “cocoahead”, profile_picture : “/images/cocoahead.jpeg” } } }

sábado, 10 de setembro de 2011

Page 21: iOS, APIs e sincronização de dados

Dados relacionados, como fotos, devem

sempre ter um updated_at

{ artist : { name : “John Doe”, cover_image : “/images/artists/john_doe.jpeg”, cover_updated_at : “2011-09-07T20:36:22Z” } }

sábado, 10 de setembro de 2011

Page 22: iOS, APIs e sincronização de dados

Mantenha um cache dos arquivos relacionados localmente

NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );

sábado, 10 de setembro de 2011

Page 23: iOS, APIs e sincronização de dados

Use SQLite pra gravar os dados relacionados, mas grave os arquivos

em disco

sábado, 10 de setembro de 2011

Page 24: iOS, APIs e sincronização de dados

Crie uma Entity no Core Data com os

atributos sourceType e sourceId

sábado, 10 de setembro de 2011

Page 25: iOS, APIs e sincronização de dados

Buscar imagens NSDate * date = [ NSDate date ]; NSManagedObjectContext * context = self.managedObjectContext; NSPredicate * predicate = [NSPredicate predicateWithFormat: @"( sourceId == %@ ) AND ( sourceType == %@ )", 1, @"Album" ]; NSFetchRequest * request = [[ NSFetchRequest alloc ] init]; NSEntityDescription *entityDescription = [NSEntityDescription entityForName: @"Image" inManagedObjectContext: context]; request.entity = entityDescription; request.predicate = predicate; NSError * error; NSArray * images = [context executeFetchRequest: request error: &error ];

NSManagedObject * object = [images count] == 0 ? nil : [images objectAtIndex: 0]; NSDate * storedDate = [ object valueForKey: @"updatedAt" ]; if ( storedDate == nil || [storedDate compare: date ] == NSOrderedAscending) { // download file here } else { // no need to download } [request release];

sábado, 10 de setembro de 2011

Page 26: iOS, APIs e sincronização de dados

As redes são lentas e não confiáveis

Double submit, alguém?

Y U NO

CONNECT TO SERVER?

sábado, 10 de setembro de 2011

Page 27: iOS, APIs e sincronização de dados

Se falhar, guarde as informações pra tentar

mais tarde

Mas avise ao usuário...

sábado, 10 de setembro de 2011

Page 28: iOS, APIs e sincronização de dados

Não use alerts quando não há solução

sábado, 10 de setembro de 2011

Page 29: iOS, APIs e sincronização de dados

Apenas mostre se falhou ou não

sábado, 10 de setembro de 2011

Page 30: iOS, APIs e sincronização de dados

Sempre abra a aplicação com alguma informação

sábado, 10 de setembro de 2011

Page 31: iOS, APIs e sincronização de dados

Trabalhos que demoram muito tempo pra serem executados?NSOperationQueue and NSOperation to the rescue!

sábado, 10 de setembro de 2011

Page 32: iOS, APIs e sincronização de dados

Criando o FactorialOperation

@implementation FactorialOperation

@synthesize source = _source, result = _result;

- (id) initWithSource:(NSInteger)source { self = [ self init ]; if ( self ) { self.source = source; } return self;}

- (void) main { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; self.result = [ self factorialOf: self.source ]; [pool drain]; }

- (NSInteger) factorialOf: ( NSInteger ) value { if ( value == 1) { return 1; } else { return value * [self factorialOf: value - 1 ] ; }}

@end

sábado, 10 de setembro de 2011

Page 33: iOS, APIs e sincronização de dados

Executando as operações

NSOperationQueue * queue = [[ NSOperationQueue alloc ] init]; FactorialOperation * operationOne = [[ FactorialOperation alloc ] initWithSource: 5 ]; FactorialOperation * operationTwo = [[ FactorialOperation alloc ] initWithSource: 6 ];

[operationOne setQueuePriority: NSOperationQueuePriorityVeryHigh ]; [queue addOperation: operationOne ]; [queue addOperation: operationTwo ]; [operationOne release]; [operationTwo release]; while ( [queue operationCount] != 0 ) { [NSThread sleepForTimeInterval: 1 ]; } [ queue release ];

sábado, 10 de setembro de 2011

Page 34: iOS, APIs e sincronização de dados

Por que não usar NSThread diretamente?Por que o seu código pode fazer uso do Grand Central

Dispatch se ele estiver disponível

sábado, 10 de setembro de 2011

Page 35: iOS, APIs e sincronização de dados

Desenvolvimento de jogos com Cocos2D e

Cocos3DMate a sua vontade de criar o próximo Angry Birds

sábado, 10 de setembro de 2011

Page 36: iOS, APIs e sincronização de dados

Dúvidas?

sábado, 10 de setembro de 2011