Compartilhando dados entre
aplicativos
2
twitter: @dchohfi
github: @dchohfi
facebook: @dchohfi
vida: @dchohfi
Diego Chohfi Turini
Miguel Bassila
3
twitter: @miguelbassila
github: @miguelbassila
facebook: @miguelbassila
vida: @miguelbassila
Nubank
4
• Maio de 2013
• Investidores de peso
• Fila de espera gigantesca
• Atendimento++
• Tudo pelo aplicativo
• Cresceu
http://bit.ly/tdc-nubank
6
Cresceu muito
7
• Comunicação entre
apps limitada
• Integração com
sistema mais limitada
ainda
Apps para iOS eram teoricamente simples
8
Briga entre grandes empresas
Trocada por: Briga entre fanboys
9
• Teclado
• Controle de armazenamento
• Home screen customizável
• Aplicativos sem integração
Limitações da plataforma
10
App Extensions
Solução da Apple para os problemas
Preencher gaps da plataforma e aumentar as funcionalidades sem
comprometer segurança e usabilidade
11
App Extensions: a partir do iOS8
diversas funcionalidades adicionadas para a plataforma
Actions
Share
12
Photo editing
App Extensions: a partir do iOS8
diversas funcionalidades adicionadas para a plataforma
13
Keyboard
App Extensions: a partir do iOS8
diversas funcionalidades adicionadas para a plataforma
14
Today extension
App Extensions: a partir do iOS8
diversas funcionalidades adicionadas para a plataforma
15
Vamos fazer uma extension o/
E agora? Como
fazer
17
Novo target
18
Today Extension
19
• Novo target
• ViewController
• Storyboard
• Plist configuração
20
Quem aqui gosta de storyboard?
O @diogot adora
Customizando o comportamento padrão de uma extension
21
• Bundle display name
• NSExtensionMainStoryboard
• NSExtensionPrincipalClass
https://developer.apple.com/library/ios/documentation/General/Reference/
InfoPlistKeyReference/Articles/SystemExtensionKeys.html
com.apple.widget-extension
22
Extension é apenas uma UIViewController
23
Acabou, vocês já sabem como fazer,
flw t+
24
Brinqs rsrs, ainda tem coisa pra fazê
25
Como um objeto ganha
comportamento?
Sua UIViewController precisa implementar um protocolo
para se tornar um widget
26
<NCWidgetProviding>
Sua UIViewController ganha dois métodos opcionais
27
widgetMarginInsetsForProposedMarginInsets:
widgetPerformUpdateWithCompletionHandler:
Cuidados com o ciclo de vida de um widget
28
É parecido com uma UIViewController mas é diferente
:(
NS_EXTENSION_UNAVAILABLE_IOS
29
30
Montar a tela é ok, mas e os dados
vem da onde?
Como acessar os
dados dentro de
uma extension?
32
33
Onde normalmente guardamos os
dados importantes do usuário?
Formas de compartilhar dados entre aplicações
Keychain
Compartilhando informações seguras
35
• Pode compartilhar informações
entre diversos targets
• Não está atrelado a apenas uma
aplicação
Keychain
36
Entitlements
Habilitando Keychain Sharing
37
Habilitando Keychain Sharing
Trabalhar com keychain não é fácil
38
[UICKeyChainStore keyChainStoreWithService:@"br.com.nubank"
accessGroup:@""];
UICKeyChainStore
39
AccessGroup?
UICKeyChainStore
<Bundle Seed ID>.<Bundle Identifier>
>.< que fofo
40
AccessGroup?
UICKeyChainStore
Bundle Identifier: configurado no entitlements
41
Bundle Seed ID
UICKeyChainStore
ABCD12345
42
Agora todos os apps podem
compartilhar os dados sensíveis do
usuário
Keychain
43
E o que não é sensível?
fica onde?
Formas de compartilhar dados entre aplicações
44
Lembra do bambu?
Brincadeira
45
Onde escrevemos dados no app?
Formas de compartilhar dados entre aplicações
AppGroups
47
Entitlements
Habilitando App Groups
48
Agora podemos compartilhar dados :D
NSUserDefault
NSFileManager
49
NSUserDefaults
[[NSUserDefaults alloc] initWithSuiteName:appGroupName];
50
[[NSFileManager defaultManager]
containerURLForSecurityApplicationGroupIdentifier:
appGroupName];
NSFileManager
Agora que compartilhamos os
dados, como compartilhar o
código?
52
Copiar e colar, que
tal?
53
Não né zé
Frameworks
55
Um novo target
56
Um novo target
57
Um novo target
Tipos de frameworks
58
Dynamic Static
• Pode conter assets
• Apenas após iOS8
• Linkado em tempo de
execução
• Mais rápido para compilar
e carregar
• Assets apenas com bundle
• Suporta versões anteriores
ao iOS8
• Precisa recompilar o target
principal a cada mudança
https://pewpewthespells.com/blog/static_and_dynamic_libraries.html
59
Criar o frameworks depois foi uma dor
de cabeça
61
Single Responsibility Principle
62
Trabalhamos com MVC
63
MVC é um cancer, por conter apenas 3
letras
64
Seu modelo é maior do que você
imagina
65
Independente da arquitetura, sempre
vá além das siglas mágicas
Tipos de frameworks
66
O que podemos incluir num Framework?
• Modelos
• Requests
• Armazenamento
• Classes utilitárias
• Categories
O que vimos até agora?
67
Como criar uma extension
Como compartilhar keychain
App groups
Framework para classes compartilhadas
Single responsibility principle
68
Widgets são legais, mas ninguém usa.
iOS 10
70
Foco enorme em
widgets
iOS 10
71
Widgets iOS10
Tamanho único para
compressed
72
Exibido no 3D touch
Notificações
75
Mais extensions
76
Dois novos frameworks/extensions
Texto
grande
UserNotifications.framework
UserNotificationsUI.framework
77
Book a ride
Maps
iMessage
Map Reservation
VOIP
Notification
Sharing data between iOS apps

Sharing data between iOS apps