SlideShare una empresa de Scribd logo
1 de 46
Descargar para leer sin conexión
Development
tvOS Development DATOS DE CONTACTO
ORADORES
Juliana Caccavo: juliana.caccavo@globant.com / @JulieCaccavo
Daniel Pilla: daniel.pilla@globant.com / @pillade
Matías Fernandez: mr.fernandez@globant.com / @MatiasSF9
Gerónimo Garcia: geronimo.garcia@globant.com / @geronimogarcia
Pablo Vittori: vitto@globant.com / @pablovittori
Matías Burcheri: matias.burcheri@globant.com / @matbur
COMMUNICATIONS
hello@globant.com / @Globant
WANT TO JOIN OUR TEAM?
cv@globant.com
tvOS Development CONTENT
CÓDIGO
Construyendo la app base de tvOS
DESARROLLO CON JS
Frameworks: TVMLJS y TVMLKit
INTRODUCCIÓN
Características, hardware, frameworks y limitaciones
CASOS DE ÉXITO
Demo
El nuevo paradigma de TV
▸ Nuevo sistema operativo para Apple TV (4ta Gen).
▸ Primer SO para Apple TV abierto a terceros para desarrollo.
▸ Basado en iOS: conceptos similares y soporte a frameworks como Metal, UIKit, CloudKit, entre otros.
▸ tvOS SDK 9.0 agrega además nuevos frameworks propios.
▸ Trae al Apple TV un App Store propio y soporte para Siri.
INTRODUCCIÓN
tvOS: El futuro de la TV son las Apps
Objetivo → Proporcionar una experiencia de usuario mucho mas completa, haciendo énfasis en la
interacción, ya sea a través redes sociales, juegos, o nuevos contenidos.
Hardware: Apple TV 4ta Gen
▸ 64-bit A8 processor
▸ 32GB or 64GB of storage
▸ 2GB of RAM
▸ 10/100Mbps Ethernet
▸ WiFi 802.11a/b/g/n/ac
▸ 1080p resolution
▸ HDMI
▸ New Siri Remote / Apple TV Remote
▸ Bluetooth 4.0
INTRODUCCIÓN
El tamaño de una aplicación está limitado a 200 MB.
Una app solo dispone de 500 KB de almacenamiento local para persistencia (NSUserDefaults).
Opciones para manejar estos recursos:
▸ Almacenar y obtener información de usuarios desde iCloud (CloudKit y iCloud KVS).
▸ Descargar la información necesaria a la caché → Mientras la aplicación esté corriendo, la caché no
elimina datos descargados. Usar caché de manera criteriosa.
▸ Acceder a assets de solo lectura a traves de On-demand Resources - Hasta 20 GB. (iOS 9 y tvOS)
Aplicaciones más chicas, Lazy loading de recursos, Almacenamiento remoto de recursos poco frecuentes.
INTRODUCCIÓN
Hardware: Almacenamiento
INTRODUCCIÓN
App Groups
Background Modes
Data Protection
Game Center
Game Controllers
iCloud
In-App Purchase
Keychain Sharing
Address Book
Apple Pay
Calendar
HealthKit
HomeKit
iMessage
Maps
Personal VPN
Photos
Push Notifications
Wallet
tvOS: Capacidades Soportadas
tvOS SDK 9.0: Frameworks
INTRODUCCIÓN
WebKit
HealthKit
HomeKit
Social
Apple TV: Control Remoto
En los países que está disponible Siri, se llama Siri Remote. En el resto, simplemente Apple TV Remote.
INTRODUCCIÓN
Game Controller
INTRODUCCIÓN
Requerimientos para Juegos
▸ Deben soportar el Control Remoto.
▸ Si soportan Game Controllers, deben soportar extended control layout.
▸ Se deben poder jugar usando standalone controllers (conforman con protocolo MFI).
▸ Deben soportar el botón de Pausa.
INTRODUCCIÓN
Apple TV Remote como Game Controller
▸ El touchpad se puede usar como D-pad. Provee datos analógicos como input.
▸ Se puede usar tanto con orientación portrait como landscape.
▸ El touchpad además funciona como botón principal al hacer click (botón A).
▸ El botón de Play/Pause es otro botón digital (botón X).
▸ El botón de Menú funciona como Pausa.
INTRODUCCIÓN
Limitaciones del Simulador
● Acelerometro
● Siri
● MetalKit
→ El control remoto físico se puede conectar al simulador para probar el Acelerómetro y Siri.
INTRODUCCIÓN
UI en tvOS
No Mouse y No Touch
En cambio, el nuevo Control Remoto Siri y los Game Controllers
Macs y dispositivos iOS son generalmente para usuarios individuales
Con el nuevo Apple TV, la experiencia de usuario es mucho más social. Varias personas pueden interactuar
a la misma vez con una aplicación.
→ Es fundamental diseñar aplicaciones que aprovechen al máximo estos cambios ←
INTRODUCCIÓN
UI: Nuevos desafíos
Un nuevo concepto: Foco
▸ Es el efecto que se ve en pantalla cuando un usuario interactúa con la aplicación. En Apple TV esta
interacción se realiza mediante un control remoto.
▸ Estar en foco implica que el usuario puede interactuar con esa vista.
▸ El framework de UIKit solo soporta interfaces orientadas al uso de foco.
▸ Solo las vistas pueden recibir foco
▸ Solo una vista puede estar en foco al mismo tiempo
INTRODUCCIÓN
Focus Engine
▸ Es el encargado de manejar el foco.
▸ Cuando la jerarquía de vistas cambia, el Focus Engine genera un mapa con las vistas que aceptan
foco.
▸ Si un usuario navega en una dirección, el Focus Engine busca vistas en esa dirección chequeando
tamaños y posiciones relativas.
INTRODUCCIÓN
Clases que reciben foco
● UIButton
● UIControl
● UISegmentedControl
● UITabBar
● UITextField
● UISearchBar (Una UISearchBar no es focalizable pero su textField si)
● UIImageView (tiene una propiedad adjustImageWhenAncestorFocused)
● UICollectionViewCell / UITableViewCell son excepciones. El foco se determina en el delegado:
○ collectionView(_:canFocusItemAtIndexPath:)
○ tableView(_:canFocusRowAtIndexPath:)
INTRODUCCIÓN
Foco actual
● Se puede consultar a cualquier vista si está actualmente en foco:
myButton.focused // true o false
● También se puede consultar a una UIScreen cuál es la vista focalizada actualmente (puede no haber
ninguna)
UIScreen.mainScreen().focusedView
● Se puede debuggear una vista para ver porque no está siendo focalizada:
self.myButton.performSelector(Selector("_whyIsThisViewNotFocusable"))
ISSUE: This view has userInteractionEnabled set to NO. Views must allow user interaction to be
focusable.
INTRODUCCIÓN
Actualizando el foco
● Solo el Focus Engine puede actualizar un foco.
● Para interactuar con el Focus Engine existe un protocolo: UIFocusEnvironment
setNeedsFocusUpdate() → El foco va a ser actualizado durante el próximo ciclo
updateFocusIfNeeded() → Fuerza una actualización del foco inmediata
● En cada ciclo, el Focus Engine pregunta por la propiedad preferredFocusedView. Si no es nula y es una
vista focalizable, entonces el Focus Engine va a seleccionar esa vista.
INTRODUCCIÓN
Un problema común
INTRODUCCIÓN
Solución
1. Crear un UIFocusGuide
2. Setear la preferredFocusedView del objeto
3. Agregarla a la vista padre
4. Usar constraints
INTRODUCCIÓN
Top Shelf
● Es el área superior que aparece en el menú
● Muestra contenido particular de una
aplicación y permite la interacción con ellos.
INTRODUCCIÓN
Importante: Como mínimo, cada aplicación tiene que tener una imagen estática que pueda ser mostrada
cuando la aplicación se encuentre en foco y en la fila superior de la pantalla principal.
TV Services
● Permite describir contenido de la aplicación al sistema operativo.
● Qué tenemos que hacer?
● Organizar el contenido que queremos mostrar en una lista simple o en un modelo de jerarquia.
● Crear un objeto de la clase TVContentItem para cada contenido que vamos a mostrar
● Diseñar un algoritmo que devuelva cada TVContentItem con un identificador único.
● Agregar una extension, cuya clase principal implemente el protocolo TVTopShelfProvider
INTRODUCCIÓN
TVContentItem
TVContentItem tiene una propiedad llamada imageShape que permite setear la forma deseada del
contenido.
● None → Sin forma
● Poster → Aspect ratio 2:3
● Square → Aspect ratio 1:1
● HDTV → Aspect ratio 16:9
● SDTV → Aspect ratio 4:3
● Wide → Aspect ratio 8:3
● Extrawide → Aspect ratio 80:27
INTRODUCCIÓN
Desarrollando tvOS con JS
Nuevos frameworks para tvOS
Apple introduce los siguientes frameworks nuevos, específicos para tvOS:
▸ TVMLKit: Provee una manera de incorporar JavaScript y elementos TVML en tu aplicación.
▸ TVJS: Describe la API JavaScript utilizada para cargar las páginas TVML que se utilizan para
mostrar información en aplicaciones cliente-servidor.
▸ TVML: Un lenguaje de markup similar a XML que adhiere a algunos templates de Apple.
DESARROLLO CON JS
¿Qué es TVMLKit?
▸ Framework para aplicaciones nativas
▸ Controla contexto y configuración de la app
▸ Punto de entrada para apps TVJS
▸ Crear elementos custom con TVElementFactory
DESARROLLO CON JS
¿Qué es TVMLKit? (cont.)
▸ Television Markup Language
▸ Lenguaje declarativo basado en XML para templates tvOS
▸ Cada página está construida en base a un template TVML
▸ Hay elementos simples y compuestos
DESARROLLO CON JS
A la fecha hay 18 templates TVML:
DESARROLLO CON JS
DESARROLLO CON JS
Un template TVML se ve así:
¿Qué es TVJS?
▸ Conjunto de APIs para crear aplicaciones cliente-servidor
▸ Incorpora un subset del DOM
▸ Usa el motor JavaScript Nitro
▸ Soporta un poco de la sintaxis ES6:
■ Clases y herencia
■ String templates
■ Symbol
■ Object shorthands
DESARROLLO CON JS
ECMAScript 6 Compatibility Table
OK, copado… ¿Y qué se banca
este TVJS?
DESARROLLO CON JS
Soporte TVJS
TVJS soporta un subset de la API del DOM:
DESARROLLO CON JS
Arquitectura de una app TVMLKit Cliente-Servidor
DESARROLLO CON JS
Arquitectura de una app TVMLKit (cont.)
Flujo de interacción de una app simple Cliente-Servidor:
DESARROLLO CON JS
Algo como esto
DESARROLLO CON JS
DESARROLLO CON JS
Algo como esto
Algo como esto
DESARROLLO CON JS
DESARROLLO CON JS
Algo como esto
Ok, ok, entiendo… veamos algo
más copado
DESARROLLO CON JS
Plex.tv
▸ Fotos, música, streaming de video.
▸ Mix de Native y TVML.
▸ Desarrollado en solo 5 semanas.
▸ Muchos features.
▸ XSLT a TVML (copado!).
▸ Se ve INCREÍBLE.
DESARROLLO CON JS
Hora de una demo!
DESARROLLO CON JS
[Globant Summer Take Over] Apple Tv Development

Más contenido relacionado

La actualidad más candente

La actualidad más candente (7)

Windows 10: One SDK to rule them all
Windows 10: One SDK to rule them allWindows 10: One SDK to rule them all
Windows 10: One SDK to rule them all
 
Reconnect(); Sevilla - Universal Windows Platform
Reconnect(); Sevilla - Universal Windows PlatformReconnect(); Sevilla - Universal Windows Platform
Reconnect(); Sevilla - Universal Windows Platform
 
Xamarin y Microsoft Azure
Xamarin y Microsoft AzureXamarin y Microsoft Azure
Xamarin y Microsoft Azure
 
Introducción a xamarin
Introducción a xamarinIntroducción a xamarin
Introducción a xamarin
 
Android
AndroidAndroid
Android
 
Tutorial j2me
Tutorial j2meTutorial j2me
Tutorial j2me
 
Generación del midlet HolaMundo utilizando EclipseME
Generación del midlet HolaMundo utilizando EclipseMEGeneración del midlet HolaMundo utilizando EclipseME
Generación del midlet HolaMundo utilizando EclipseME
 

Destacado

Apple TV Meet Up Slides
Apple TV Meet Up SlidesApple TV Meet Up Slides
Apple TV Meet Up SlidesGlobant
 
The Baker Family of Cambridgeshire.
The Baker Family of Cambridgeshire.The Baker Family of Cambridgeshire.
The Baker Family of Cambridgeshire.rekab20
 
Cute baby animals of all kindz
Cute baby animals of all kindzCute baby animals of all kindz
Cute baby animals of all kindzSpartaKiss
 
X第4章 struts2入门
X第4章  struts2入门X第4章  struts2入门
X第4章 struts2入门shmily7788
 
Ariyanna my dog book
Ariyanna my dog bookAriyanna my dog book
Ariyanna my dog bookbowenslide
 
Evergreen 2015 power point
Evergreen 2015 power pointEvergreen 2015 power point
Evergreen 2015 power pointMark Rutherford
 
DCM Presentation Multitasking and conncted devices
DCM Presentation Multitasking and conncted devicesDCM Presentation Multitasking and conncted devices
DCM Presentation Multitasking and conncted devicesPietro Lambert
 
Mole nikh
Mole nikhMole nikh
Mole nikhnirap61
 
Luke Sanford " A Closer Look In How Luke Communication" 2010
Luke Sanford " A Closer Look In How Luke Communication" 2010 Luke Sanford " A Closer Look In How Luke Communication" 2010
Luke Sanford " A Closer Look In How Luke Communication" 2010 LukeFinlaySanford
 
スクリプトで文字コード変換
スクリプトで文字コード変換スクリプトで文字コード変換
スクリプトで文字コード変換1000 VICKY
 

Destacado (20)

Apple TV Meet Up Slides
Apple TV Meet Up SlidesApple TV Meet Up Slides
Apple TV Meet Up Slides
 
The Baker Family of Cambridgeshire.
The Baker Family of Cambridgeshire.The Baker Family of Cambridgeshire.
The Baker Family of Cambridgeshire.
 
Informe297
Informe297Informe297
Informe297
 
Cute baby animals of all kindz
Cute baby animals of all kindzCute baby animals of all kindz
Cute baby animals of all kindz
 
Drinking ageeeeee
Drinking ageeeeeeDrinking ageeeeee
Drinking ageeeeee
 
X第4章 struts2入门
X第4章  struts2入门X第4章  struts2入门
X第4章 struts2入门
 
Ariyanna my dog book
Ariyanna my dog bookAriyanna my dog book
Ariyanna my dog book
 
Succesvol content management
Succesvol content managementSuccesvol content management
Succesvol content management
 
Measurement of NY
Measurement of NYMeasurement of NY
Measurement of NY
 
Final powerpoint
Final powerpointFinal powerpoint
Final powerpoint
 
Evergreen 2015 power point
Evergreen 2015 power pointEvergreen 2015 power point
Evergreen 2015 power point
 
DCM Presentation Multitasking and conncted devices
DCM Presentation Multitasking and conncted devicesDCM Presentation Multitasking and conncted devices
DCM Presentation Multitasking and conncted devices
 
B2B seo ian miller
B2B seo ian millerB2B seo ian miller
B2B seo ian miller
 
Mole nikh
Mole nikhMole nikh
Mole nikh
 
Historia de puebla
Historia de pueblaHistoria de puebla
Historia de puebla
 
강의자료8
강의자료8강의자료8
강의자료8
 
Luke Sanford " A Closer Look In How Luke Communication" 2010
Luke Sanford " A Closer Look In How Luke Communication" 2010 Luke Sanford " A Closer Look In How Luke Communication" 2010
Luke Sanford " A Closer Look In How Luke Communication" 2010
 
スクリプトで文字コード変換
スクリプトで文字コード変換スクリプトで文字コード変換
スクリプトで文字コード変換
 
Welcome Book
Welcome BookWelcome Book
Welcome Book
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 

Similar a [Globant Summer Take Over] Apple Tv Development

Apple tv development Meetup - Montevideo Uruguay
Apple tv development Meetup - Montevideo  UruguayApple tv development Meetup - Montevideo  Uruguay
Apple tv development Meetup - Montevideo UruguayGlobant
 
Tv Future is Apps - tvOS vs AndroidTV
Tv Future is Apps - tvOS vs AndroidTVTv Future is Apps - tvOS vs AndroidTV
Tv Future is Apps - tvOS vs AndroidTVPablo Azaña Sánchez
 
PhoneGap !Qué bueno que viniste¡
PhoneGap !Qué bueno que viniste¡PhoneGap !Qué bueno que viniste¡
PhoneGap !Qué bueno que viniste¡Rubén Aguilera
 
Uso de wi di para Android(castellano)
Uso de wi di para Android(castellano)Uso de wi di para Android(castellano)
Uso de wi di para Android(castellano)videos
 
Charla GDG Madrid: Cordova + AngularJS + Ionic
Charla GDG Madrid: Cordova + AngularJS + IonicCharla GDG Madrid: Cordova + AngularJS + Ionic
Charla GDG Madrid: Cordova + AngularJS + IonicRubén Aguilera
 
Presentacion android mistela&tweets
Presentacion android mistela&tweetsPresentacion android mistela&tweets
Presentacion android mistela&tweetsJorge Soro
 
Insertar video
Insertar videoInsertar video
Insertar video0cero
 
WinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOSWinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOSJavier Suárez Ruiz
 
Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas Motorola Mobility - MOTODEV
 
R esume libro el gran libro de android
R esume libro el gran libro de androidR esume libro el gran libro de android
R esume libro el gran libro de androidwiliam lliulli herrera
 
De Windows Phone App Studio a la Store
De Windows Phone App Studio a la StoreDe Windows Phone App Studio a la Store
De Windows Phone App Studio a la StoreJavier Suárez Ruiz
 
Proyect Evenge. Event manager
Proyect Evenge. Event managerProyect Evenge. Event manager
Proyect Evenge. Event managerIvan Ortega
 
Aplicaciones moviles iphone ipad
Aplicaciones moviles iphone ipadAplicaciones moviles iphone ipad
Aplicaciones moviles iphone ipadcatalan21
 
Tutorial windows azure con visual studio 2010
Tutorial windows azure con visual studio 2010Tutorial windows azure con visual studio 2010
Tutorial windows azure con visual studio 2010Naim Jhon Cruzado Paredes
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidAlberto Ruibal
 

Similar a [Globant Summer Take Over] Apple Tv Development (20)

Apple tv development Meetup - Montevideo Uruguay
Apple tv development Meetup - Montevideo  UruguayApple tv development Meetup - Montevideo  Uruguay
Apple tv development Meetup - Montevideo Uruguay
 
Introducción a Windows 10
Introducción a Windows 10Introducción a Windows 10
Introducción a Windows 10
 
Tv Future is Apps - tvOS vs AndroidTV
Tv Future is Apps - tvOS vs AndroidTVTv Future is Apps - tvOS vs AndroidTV
Tv Future is Apps - tvOS vs AndroidTV
 
PhoneGap !Qué bueno que viniste¡
PhoneGap !Qué bueno que viniste¡PhoneGap !Qué bueno que viniste¡
PhoneGap !Qué bueno que viniste¡
 
Uso de wi di para Android(castellano)
Uso de wi di para Android(castellano)Uso de wi di para Android(castellano)
Uso de wi di para Android(castellano)
 
DotNetDom: El futuro de Xamarin
DotNetDom: El futuro de XamarinDotNetDom: El futuro de Xamarin
DotNetDom: El futuro de Xamarin
 
Extendiendo Xamarin.Forms
Extendiendo Xamarin.FormsExtendiendo Xamarin.Forms
Extendiendo Xamarin.Forms
 
Charla GDG Madrid: Cordova + AngularJS + Ionic
Charla GDG Madrid: Cordova + AngularJS + IonicCharla GDG Madrid: Cordova + AngularJS + Ionic
Charla GDG Madrid: Cordova + AngularJS + Ionic
 
Presentacion android mistela&tweets
Presentacion android mistela&tweetsPresentacion android mistela&tweets
Presentacion android mistela&tweets
 
Insertar video
Insertar videoInsertar video
Insertar video
 
WinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOSWinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOS
 
Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas
 
R esume libro el gran libro de android
R esume libro el gran libro de androidR esume libro el gran libro de android
R esume libro el gran libro de android
 
De Windows Phone App Studio a la Store
De Windows Phone App Studio a la StoreDe Windows Phone App Studio a la Store
De Windows Phone App Studio a la Store
 
Preguntas de android
Preguntas  de androidPreguntas  de android
Preguntas de android
 
Preguntas de android
Preguntas  de androidPreguntas  de android
Preguntas de android
 
Proyect Evenge. Event manager
Proyect Evenge. Event managerProyect Evenge. Event manager
Proyect Evenge. Event manager
 
Aplicaciones moviles iphone ipad
Aplicaciones moviles iphone ipadAplicaciones moviles iphone ipad
Aplicaciones moviles iphone ipad
 
Tutorial windows azure con visual studio 2010
Tutorial windows azure con visual studio 2010Tutorial windows azure con visual studio 2010
Tutorial windows azure con visual studio 2010
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a Android
 

Más de Globant

Webinar MLOps: When AA gets serious.
Webinar MLOps: When AA gets serious.Webinar MLOps: When AA gets serious.
Webinar MLOps: When AA gets serious.Globant
 
Google Cloud Spanner y NewSQL
Google Cloud Spanner y NewSQLGoogle Cloud Spanner y NewSQL
Google Cloud Spanner y NewSQLGlobant
 
Eventos Asíncronos como estrategia virtual
Eventos Asíncronos como estrategia virtualEventos Asíncronos como estrategia virtual
Eventos Asíncronos como estrategia virtualGlobant
 
Cultura y valores 4.0 para líderes 4.0
Cultura y valores 4.0 para líderes 4.0Cultura y valores 4.0 para líderes 4.0
Cultura y valores 4.0 para líderes 4.0Globant
 
Tech Insiders Salesforce: SFDX e Integración Continua
Tech Insiders Salesforce: SFDX e Integración ContinuaTech Insiders Salesforce: SFDX e Integración Continua
Tech Insiders Salesforce: SFDX e Integración ContinuaGlobant
 
Como impulsar tu carrera Salesforce
Como impulsar tu carrera SalesforceComo impulsar tu carrera Salesforce
Como impulsar tu carrera SalesforceGlobant
 
3D Programming Basics: WebGL
3D Programming Basics: WebGL3D Programming Basics: WebGL
3D Programming Basics: WebGLGlobant
 
Converge augmented report
Converge augmented reportConverge augmented report
Converge augmented reportGlobant
 
Sistema de recomendación entiempo real usando Delta Lake
Sistema de recomendación entiempo real usando Delta LakeSistema de recomendación entiempo real usando Delta Lake
Sistema de recomendación entiempo real usando Delta LakeGlobant
 
Kubeflow: Machine Learning en Cloud para todos
Kubeflow: Machine Learning en Cloud para todosKubeflow: Machine Learning en Cloud para todos
Kubeflow: Machine Learning en Cloud para todosGlobant
 
Orquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS GlueOrquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS GlueGlobant
 
Apache Beam: Lote portátil y procesamiento de transmisión
Apache Beam: Lote portátil y procesamiento de transmisiónApache Beam: Lote portátil y procesamiento de transmisión
Apache Beam: Lote portátil y procesamiento de transmisiónGlobant
 
Navegando el desafío de transformación digital de los servicios financieros
Navegando el desafío de transformación digital de los servicios financierosNavegando el desafío de transformación digital de los servicios financieros
Navegando el desafío de transformación digital de los servicios financierosGlobant
 
Converge 2020
Converge 2020 Converge 2020
Converge 2020 Globant
 
Converge 2020
Converge 2020Converge 2020
Converge 2020Globant
 
Tendencias de tecnología para el recién egresado
Tendencias de tecnología para el recién egresadoTendencias de tecnología para el recién egresado
Tendencias de tecnología para el recién egresadoGlobant
 
SRE: ¿Qué es y cómo gestionar el Toil?
SRE: ¿Qué es y cómo gestionar el Toil?SRE: ¿Qué es y cómo gestionar el Toil?
SRE: ¿Qué es y cómo gestionar el Toil?Globant
 
Monitoreo en tiempo real para la mejora continua de una aplicación
Monitoreo en tiempo real para la mejora continua de una aplicaciónMonitoreo en tiempo real para la mejora continua de una aplicación
Monitoreo en tiempo real para la mejora continua de una aplicaciónGlobant
 
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?Globant
 
Automatización en AWS con Chatbot Serverless (Amazon Lex)
Automatización en AWS con Chatbot Serverless (Amazon Lex)Automatización en AWS con Chatbot Serverless (Amazon Lex)
Automatización en AWS con Chatbot Serverless (Amazon Lex)Globant
 

Más de Globant (20)

Webinar MLOps: When AA gets serious.
Webinar MLOps: When AA gets serious.Webinar MLOps: When AA gets serious.
Webinar MLOps: When AA gets serious.
 
Google Cloud Spanner y NewSQL
Google Cloud Spanner y NewSQLGoogle Cloud Spanner y NewSQL
Google Cloud Spanner y NewSQL
 
Eventos Asíncronos como estrategia virtual
Eventos Asíncronos como estrategia virtualEventos Asíncronos como estrategia virtual
Eventos Asíncronos como estrategia virtual
 
Cultura y valores 4.0 para líderes 4.0
Cultura y valores 4.0 para líderes 4.0Cultura y valores 4.0 para líderes 4.0
Cultura y valores 4.0 para líderes 4.0
 
Tech Insiders Salesforce: SFDX e Integración Continua
Tech Insiders Salesforce: SFDX e Integración ContinuaTech Insiders Salesforce: SFDX e Integración Continua
Tech Insiders Salesforce: SFDX e Integración Continua
 
Como impulsar tu carrera Salesforce
Como impulsar tu carrera SalesforceComo impulsar tu carrera Salesforce
Como impulsar tu carrera Salesforce
 
3D Programming Basics: WebGL
3D Programming Basics: WebGL3D Programming Basics: WebGL
3D Programming Basics: WebGL
 
Converge augmented report
Converge augmented reportConverge augmented report
Converge augmented report
 
Sistema de recomendación entiempo real usando Delta Lake
Sistema de recomendación entiempo real usando Delta LakeSistema de recomendación entiempo real usando Delta Lake
Sistema de recomendación entiempo real usando Delta Lake
 
Kubeflow: Machine Learning en Cloud para todos
Kubeflow: Machine Learning en Cloud para todosKubeflow: Machine Learning en Cloud para todos
Kubeflow: Machine Learning en Cloud para todos
 
Orquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS GlueOrquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS Glue
 
Apache Beam: Lote portátil y procesamiento de transmisión
Apache Beam: Lote portátil y procesamiento de transmisiónApache Beam: Lote portátil y procesamiento de transmisión
Apache Beam: Lote portátil y procesamiento de transmisión
 
Navegando el desafío de transformación digital de los servicios financieros
Navegando el desafío de transformación digital de los servicios financierosNavegando el desafío de transformación digital de los servicios financieros
Navegando el desafío de transformación digital de los servicios financieros
 
Converge 2020
Converge 2020 Converge 2020
Converge 2020
 
Converge 2020
Converge 2020Converge 2020
Converge 2020
 
Tendencias de tecnología para el recién egresado
Tendencias de tecnología para el recién egresadoTendencias de tecnología para el recién egresado
Tendencias de tecnología para el recién egresado
 
SRE: ¿Qué es y cómo gestionar el Toil?
SRE: ¿Qué es y cómo gestionar el Toil?SRE: ¿Qué es y cómo gestionar el Toil?
SRE: ¿Qué es y cómo gestionar el Toil?
 
Monitoreo en tiempo real para la mejora continua de una aplicación
Monitoreo en tiempo real para la mejora continua de una aplicaciónMonitoreo en tiempo real para la mejora continua de una aplicación
Monitoreo en tiempo real para la mejora continua de una aplicación
 
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
 
Automatización en AWS con Chatbot Serverless (Amazon Lex)
Automatización en AWS con Chatbot Serverless (Amazon Lex)Automatización en AWS con Chatbot Serverless (Amazon Lex)
Automatización en AWS con Chatbot Serverless (Amazon Lex)
 

[Globant Summer Take Over] Apple Tv Development

  • 1.
  • 3. tvOS Development DATOS DE CONTACTO ORADORES Juliana Caccavo: juliana.caccavo@globant.com / @JulieCaccavo Daniel Pilla: daniel.pilla@globant.com / @pillade Matías Fernandez: mr.fernandez@globant.com / @MatiasSF9 Gerónimo Garcia: geronimo.garcia@globant.com / @geronimogarcia Pablo Vittori: vitto@globant.com / @pablovittori Matías Burcheri: matias.burcheri@globant.com / @matbur COMMUNICATIONS hello@globant.com / @Globant WANT TO JOIN OUR TEAM? cv@globant.com
  • 4. tvOS Development CONTENT CÓDIGO Construyendo la app base de tvOS DESARROLLO CON JS Frameworks: TVMLJS y TVMLKit INTRODUCCIÓN Características, hardware, frameworks y limitaciones CASOS DE ÉXITO Demo
  • 6. ▸ Nuevo sistema operativo para Apple TV (4ta Gen). ▸ Primer SO para Apple TV abierto a terceros para desarrollo. ▸ Basado en iOS: conceptos similares y soporte a frameworks como Metal, UIKit, CloudKit, entre otros. ▸ tvOS SDK 9.0 agrega además nuevos frameworks propios. ▸ Trae al Apple TV un App Store propio y soporte para Siri. INTRODUCCIÓN tvOS: El futuro de la TV son las Apps Objetivo → Proporcionar una experiencia de usuario mucho mas completa, haciendo énfasis en la interacción, ya sea a través redes sociales, juegos, o nuevos contenidos.
  • 7. Hardware: Apple TV 4ta Gen ▸ 64-bit A8 processor ▸ 32GB or 64GB of storage ▸ 2GB of RAM ▸ 10/100Mbps Ethernet ▸ WiFi 802.11a/b/g/n/ac ▸ 1080p resolution ▸ HDMI ▸ New Siri Remote / Apple TV Remote ▸ Bluetooth 4.0 INTRODUCCIÓN
  • 8. El tamaño de una aplicación está limitado a 200 MB. Una app solo dispone de 500 KB de almacenamiento local para persistencia (NSUserDefaults). Opciones para manejar estos recursos: ▸ Almacenar y obtener información de usuarios desde iCloud (CloudKit y iCloud KVS). ▸ Descargar la información necesaria a la caché → Mientras la aplicación esté corriendo, la caché no elimina datos descargados. Usar caché de manera criteriosa. ▸ Acceder a assets de solo lectura a traves de On-demand Resources - Hasta 20 GB. (iOS 9 y tvOS) Aplicaciones más chicas, Lazy loading de recursos, Almacenamiento remoto de recursos poco frecuentes. INTRODUCCIÓN Hardware: Almacenamiento
  • 9. INTRODUCCIÓN App Groups Background Modes Data Protection Game Center Game Controllers iCloud In-App Purchase Keychain Sharing Address Book Apple Pay Calendar HealthKit HomeKit iMessage Maps Personal VPN Photos Push Notifications Wallet tvOS: Capacidades Soportadas
  • 10. tvOS SDK 9.0: Frameworks INTRODUCCIÓN WebKit HealthKit HomeKit Social
  • 11. Apple TV: Control Remoto En los países que está disponible Siri, se llama Siri Remote. En el resto, simplemente Apple TV Remote. INTRODUCCIÓN
  • 13. Requerimientos para Juegos ▸ Deben soportar el Control Remoto. ▸ Si soportan Game Controllers, deben soportar extended control layout. ▸ Se deben poder jugar usando standalone controllers (conforman con protocolo MFI). ▸ Deben soportar el botón de Pausa. INTRODUCCIÓN
  • 14. Apple TV Remote como Game Controller ▸ El touchpad se puede usar como D-pad. Provee datos analógicos como input. ▸ Se puede usar tanto con orientación portrait como landscape. ▸ El touchpad además funciona como botón principal al hacer click (botón A). ▸ El botón de Play/Pause es otro botón digital (botón X). ▸ El botón de Menú funciona como Pausa. INTRODUCCIÓN
  • 15. Limitaciones del Simulador ● Acelerometro ● Siri ● MetalKit → El control remoto físico se puede conectar al simulador para probar el Acelerómetro y Siri. INTRODUCCIÓN
  • 17. No Mouse y No Touch En cambio, el nuevo Control Remoto Siri y los Game Controllers Macs y dispositivos iOS son generalmente para usuarios individuales Con el nuevo Apple TV, la experiencia de usuario es mucho más social. Varias personas pueden interactuar a la misma vez con una aplicación. → Es fundamental diseñar aplicaciones que aprovechen al máximo estos cambios ← INTRODUCCIÓN UI: Nuevos desafíos
  • 18. Un nuevo concepto: Foco ▸ Es el efecto que se ve en pantalla cuando un usuario interactúa con la aplicación. En Apple TV esta interacción se realiza mediante un control remoto. ▸ Estar en foco implica que el usuario puede interactuar con esa vista. ▸ El framework de UIKit solo soporta interfaces orientadas al uso de foco. ▸ Solo las vistas pueden recibir foco ▸ Solo una vista puede estar en foco al mismo tiempo INTRODUCCIÓN
  • 19. Focus Engine ▸ Es el encargado de manejar el foco. ▸ Cuando la jerarquía de vistas cambia, el Focus Engine genera un mapa con las vistas que aceptan foco. ▸ Si un usuario navega en una dirección, el Focus Engine busca vistas en esa dirección chequeando tamaños y posiciones relativas. INTRODUCCIÓN
  • 20. Clases que reciben foco ● UIButton ● UIControl ● UISegmentedControl ● UITabBar ● UITextField ● UISearchBar (Una UISearchBar no es focalizable pero su textField si) ● UIImageView (tiene una propiedad adjustImageWhenAncestorFocused) ● UICollectionViewCell / UITableViewCell son excepciones. El foco se determina en el delegado: ○ collectionView(_:canFocusItemAtIndexPath:) ○ tableView(_:canFocusRowAtIndexPath:) INTRODUCCIÓN
  • 21. Foco actual ● Se puede consultar a cualquier vista si está actualmente en foco: myButton.focused // true o false ● También se puede consultar a una UIScreen cuál es la vista focalizada actualmente (puede no haber ninguna) UIScreen.mainScreen().focusedView ● Se puede debuggear una vista para ver porque no está siendo focalizada: self.myButton.performSelector(Selector("_whyIsThisViewNotFocusable")) ISSUE: This view has userInteractionEnabled set to NO. Views must allow user interaction to be focusable. INTRODUCCIÓN
  • 22. Actualizando el foco ● Solo el Focus Engine puede actualizar un foco. ● Para interactuar con el Focus Engine existe un protocolo: UIFocusEnvironment setNeedsFocusUpdate() → El foco va a ser actualizado durante el próximo ciclo updateFocusIfNeeded() → Fuerza una actualización del foco inmediata ● En cada ciclo, el Focus Engine pregunta por la propiedad preferredFocusedView. Si no es nula y es una vista focalizable, entonces el Focus Engine va a seleccionar esa vista. INTRODUCCIÓN
  • 24. Solución 1. Crear un UIFocusGuide 2. Setear la preferredFocusedView del objeto 3. Agregarla a la vista padre 4. Usar constraints INTRODUCCIÓN
  • 25. Top Shelf ● Es el área superior que aparece en el menú ● Muestra contenido particular de una aplicación y permite la interacción con ellos. INTRODUCCIÓN Importante: Como mínimo, cada aplicación tiene que tener una imagen estática que pueda ser mostrada cuando la aplicación se encuentre en foco y en la fila superior de la pantalla principal.
  • 26. TV Services ● Permite describir contenido de la aplicación al sistema operativo. ● Qué tenemos que hacer? ● Organizar el contenido que queremos mostrar en una lista simple o en un modelo de jerarquia. ● Crear un objeto de la clase TVContentItem para cada contenido que vamos a mostrar ● Diseñar un algoritmo que devuelva cada TVContentItem con un identificador único. ● Agregar una extension, cuya clase principal implemente el protocolo TVTopShelfProvider INTRODUCCIÓN
  • 27. TVContentItem TVContentItem tiene una propiedad llamada imageShape que permite setear la forma deseada del contenido. ● None → Sin forma ● Poster → Aspect ratio 2:3 ● Square → Aspect ratio 1:1 ● HDTV → Aspect ratio 16:9 ● SDTV → Aspect ratio 4:3 ● Wide → Aspect ratio 8:3 ● Extrawide → Aspect ratio 80:27 INTRODUCCIÓN
  • 29. Nuevos frameworks para tvOS Apple introduce los siguientes frameworks nuevos, específicos para tvOS: ▸ TVMLKit: Provee una manera de incorporar JavaScript y elementos TVML en tu aplicación. ▸ TVJS: Describe la API JavaScript utilizada para cargar las páginas TVML que se utilizan para mostrar información en aplicaciones cliente-servidor. ▸ TVML: Un lenguaje de markup similar a XML que adhiere a algunos templates de Apple. DESARROLLO CON JS
  • 30. ¿Qué es TVMLKit? ▸ Framework para aplicaciones nativas ▸ Controla contexto y configuración de la app ▸ Punto de entrada para apps TVJS ▸ Crear elementos custom con TVElementFactory DESARROLLO CON JS
  • 31. ¿Qué es TVMLKit? (cont.) ▸ Television Markup Language ▸ Lenguaje declarativo basado en XML para templates tvOS ▸ Cada página está construida en base a un template TVML ▸ Hay elementos simples y compuestos DESARROLLO CON JS
  • 32. A la fecha hay 18 templates TVML: DESARROLLO CON JS
  • 33. DESARROLLO CON JS Un template TVML se ve así:
  • 34. ¿Qué es TVJS? ▸ Conjunto de APIs para crear aplicaciones cliente-servidor ▸ Incorpora un subset del DOM ▸ Usa el motor JavaScript Nitro ▸ Soporta un poco de la sintaxis ES6: ■ Clases y herencia ■ String templates ■ Symbol ■ Object shorthands DESARROLLO CON JS ECMAScript 6 Compatibility Table
  • 35. OK, copado… ¿Y qué se banca este TVJS? DESARROLLO CON JS
  • 36. Soporte TVJS TVJS soporta un subset de la API del DOM: DESARROLLO CON JS
  • 37. Arquitectura de una app TVMLKit Cliente-Servidor DESARROLLO CON JS
  • 38. Arquitectura de una app TVMLKit (cont.) Flujo de interacción de una app simple Cliente-Servidor: DESARROLLO CON JS
  • 43. Ok, ok, entiendo… veamos algo más copado DESARROLLO CON JS
  • 44. Plex.tv ▸ Fotos, música, streaming de video. ▸ Mix de Native y TVML. ▸ Desarrollado en solo 5 semanas. ▸ Muchos features. ▸ XSLT a TVML (copado!). ▸ Se ve INCREÍBLE. DESARROLLO CON JS
  • 45. Hora de una demo! DESARROLLO CON JS