iOS, APIs e sincronização de dados

  • Published on
    15-Dec-2014

  • View
    1.689

  • Download
    0

Embed Size (px)

DESCRIPTION

Apresenta

Transcript

  • 1. iOS, APIs, performance e sincronizao dedados Maurcio Linhares - @mauriciojrhttp://techbot.me/sbado, 10 de setembro de 2011

2. WHO? GUJeiro de raiz - 01/2005 Ruby, Objective-C, Java e Scala developer na http://ofcedrop.com/ Nas horas vagas escreve no blog, grava screencasts e joga boardgames europeus;sbado, 10 de setembro de 2011 3. Como entramos nomercado? Aplicao pra iPad a poca do lanamento do primeiro iPad; Aplicao pra Mac poca do lanamento da Mac App Store; Aplicao pra iPhone (recente);sbado, 10 de setembro de 2011 4. Por que investir em iOSe Mac?sbado, 10 de setembro de 2011 5. A vida injustasbado, 10 de setembro de 2011 6. Build a Mac app?sbado, 10 de setembro de 2011 7. Por investir em iOS e Mac?sbado, 10 de setembro de 2011 8. Em nmeros Primeiros dois meses da aplicao 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 aplicao pra Android, 14% de crescimento; Primeiros dois meses de lanamento da aplicao pra iPhone, 51% de crescimento;sbado, 10 de setembro de 2011 9. E tem mais? A mdia americana (nosso mercado principal) adora Macs; Todos os reviews das aplicaes desktop pra Windows (temos duas) reclamavam da inexistncia do Mac; Se voc tem verso pra Mac e iOS, as pessoas falam de voc com mais facilidade;sbado, 10 de setembro de 2011 10. Plataforma Desenvolvimento usando XCode; Em Objective-C, C e C++; Ambiente de desenvolvimento exclusivo para o Mac (mas possvel compilar no Linux);sbado, 10 de setembro de 2011 11. Objective-C difcil?sbado, 10 de setembro de 2011 12. Performance?sbado, 10 de setembro de 2011 13. Performance real eperformance percebidaso muito importantessbado, 10 de setembro de 2011 14. Construir umaaplicao performticacomea na construo da sua APIsbado, 10 de setembro de 2011 15. Dicas de performancede aplicaes web tambm funcinonamaqui Far future expires header, caching, conditional get, etagsmas o seu cliente deve suportar isso, como o ASIHttpRequestsbado, 10 de setembro de 2011 16. Se voc usa um storagerestrito, no faaredirect, faa proxying Como S3 com signed URLssbado, 10 de setembro de 2011 17. Exemplo com S3location ~* "^/s3_redirect/(.*)" {resolver 8.8.8.8;internal;proxy_max_temp_le_size 0;proxy_set_header Authorization ;# Download the le and send it to clientproxy_pass http://s3.amazonaws.com/$1?$args;}sbado, 10 de setembro de 2011 18. Evite usar formatosbinrios Thrift e Prococol buffer? T fora!sbado, 10 de setembro de 2011 19. Prera JSON a XML como formato demensagensE evolua a sua API com bem menos dores de cabeasbado, 10 de setembro de 2011 20. Procure enviar todosos dados necessriosde cada chamada{ activity : { comment : Objective-C is cool!, user : {username : cocoahead,prole_picture : /images/cocoahead.jpeg } }}sbado, 10 de setembro de 2011 21. 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 }}sbado, 10 de setembro de 2011 22. Mantenha um cachedos arquivosrelacionados localmenteNSSearchPathForDirectoriesInDomains ( NSDocumentDirectory, NSUserDomainMask,YES );sbado, 10 de setembro de 2011 23. Use SQLite pra gravaros dados relacionados,mas grave os arquivosem discosbado, 10 de setembro de 2011 24. Crie uma Entity no Core Data com os atributos sourceType esourceIdsbado, 10 de setembro de 2011 25. 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 = [NSEntityDescriptionentityForName: @"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];sbado, 10 de setembro de 2011 26. Y U NO CONNECT TO SERVER?As redes so lentas e no conveisDouble submit, algum?sbado, 10 de setembro de 2011 27. Se falhar, guarde as informaes pra tentarmais tarde Mas avise ao usurio...sbado, 10 de setembro de 2011 28. No use alerts quandono h soluosbado, 10 de setembro de 2011 29. Apenas mostre sefalhou ou nosbado, 10 de setembro de 2011 30. Sempre abra a aplicaocom alguma informaosbado, 10 de setembro de 2011 31. Trabalhos quedemoram muito tempopra serem executados? NSOperationQueue and NSOperation to the rescue!sbado, 10 de setembro de 2011 32. 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 ] ; } } @endsbado, 10 de setembro de 2011 33. Executando as operaes 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 ];sbado, 10 de setembro de 2011 34. Por que no usarNSThread diretamente?Por que o seu cdigo pode fazer uso do Grand Central Dispatch se ele estiver disponvelsbado, 10 de setembro de 2011 35. Desenvolvimento dejogos com Cocos2D eCocos3D Mate a sua vontade de criar o prximo Angry Birdssbado, 10 de setembro de 2011 36. Dvidas?sbado, 10 de setembro de 2011 37. Referncias ASIHttpRequest - http://allseeing-i.com/ ASIHTTPRequest/ PullToRefresh - https://github.com/leah/ PullToRefresh Cocos2D - http://cocos2d.org/sbado, 10 de setembro de 2011