Do Mobile ao DesktopComo portar seu app do iOS para o Mac
• Introdução
• Semelhanças
• Diferenças
• Estratégia
• Mercado
História do AppKit
Cocoa
Foundation
CoreData
AppKit
Cocoa Touch
Foundation
CoreData
UIKit
Foundation• NSDate • NSJSONSerialization • NSURLSession • NSUserDefaults • NSFileManager • E muito mais...
Core OS• Keychain
• Accelerate
• Quartz
• AVFoundation
• AVKit
• CloudKit
• CoreAudio
• CoreData
• CoreText
• Metal
• SpriteKit
• Muito, MUITO mais...
Componentes, Controles e Views
• NSApplication • App delegate • View controllers • Table view • Collection view
Padrões
• MVC
• MVVM
• MVP
• VIPER
• ...
UIWindow X NSWindow
UIWindow
• Um tipo de view (subclasse de UIView)
• Uma janela por app (geralmente)
• Gerenciada pelo sistema
NSWindow
• Subclasse de NSResponder (não NSView)
• Várias janelas por app
• Precisam ser gerenciadas
NSWindow
NSWindow NSWindow
UIViewController X NSViewController
NSWindowController
Uma subclasse de NSWindowController para cada tipo de janela
sendAction(#selector(copy:), to: nil, from: self)
NSWindow
NSWindowController
NSViewController
NSTextField
copy(sender: ...)
X
X
X
✓
window.firstResponder
window.firstResponder
button.addTarget(self, action: #selector(...), for: .touchUpInside) button.addTarget(self, action: #selector(...), for: .touchUpOutside)
iOS
button.target = self button.action = #selector(...)
macOS
Apps na barra de menus
UIAlertController X NSAlert
view.wantsLayer = true
Layer Backed View
view.wantsLayer = true view.layer = CALayer() view.layer.borderWidth = 4.0 // ...
Layer Hosting View
UIAppearance X NSAppearance
NSAppearanceNameAqua
NSAppearanceNameVibrantDark
Vantagens Exclusivas
NSDistributedNotificationCenter
Tipos básicos de app
• Utilitário (Calculadora)
• "Caixa de sapato" (iTunes)
• Baseado em documentos (Editor de Texto)
TMDBCore BingeUI
APP
Arquitetura
Trabalho paralelo
Gerenciador de dependências
MVVMModel view view-model
#if os(...) e
typealias
Mercados de Nicho
AppStore X Venda Direta
Vantagens de vender fora da AppStore
• AppStore: 30% / FastSpring: 9%
• Contato direto com o usuário
• Updates imediatos
• Sandboxing opcional
OBRIGADO!
Guilherme Rambo github.com/insidegui
Faça como o Obama! Siga no Twitter: @_inside