78
Compartilhando dados entre aplicativos

Sharing data between iOS apps

Embed Size (px)

Citation preview

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

• NSExtensionPrincipalClasshttps://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

KeychainCompartilhando 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 rideMaps

iMessageMap Reservation

VOIP

Notification