winobjc: windows bridge para ios

63
WinObjc Windows Bridge para iOS Javier Suárez Ruiz

Upload: javier-suarez-ruiz

Post on 12-Jan-2017

2.001 views

Category:

Presentations & Public Speaking


2 download

TRANSCRIPT

Page 1: WinObjC: Windows Bridge para iOS

WinObjcWindows Bridge para iOS

Javier Suárez Ruiz

Page 2: WinObjC: Windows Bridge para iOS

Agenda1. Universal Windows Platform2. Windows Bridge para iOS3. Herramientas4. Proyecciones5. Roadmap6. Preguntas

Page 3: WinObjC: Windows Bridge para iOS

Universal Windows Platform

Page 4: WinObjC: Windows Bridge para iOS

El viaje de la convergencia

IoTHoloLens

Surface Hub

Windows Desktop

Windows Phone

Xbox

ONE CORE OSONE APP PLATFORMONE STOREWindows 10

Page 5: WinObjC: Windows Bridge para iOS

El viaje de la convergencia

Phone Tablet Pequeña

2-in-1s(Tablet or Laptop)

PC& All-in-OnesPhablet Tablet Grande

Portátil

XboxIoT

Surface Hub

Holografías

Windows 10

Page 6: WinObjC: Windows Bridge para iOS

Universal Windows PlatformDe donde venga tu código, puedes llevarlo a Windows

Desktop

Mobile

XboxIoT

Holographic

Surface Hub

Universal Windows Platform

MiddlewareMiddleware Partners (e.g., Xamarin)Game Engine Partners (e.g., Unity)

Plataforma WindowsUniversal Windows 8 Apps (C++/C#/JS)

Universal Windows 10 Apps (C++/C#/JS)

Project Centennial (Classic Apps)

Plataforma WebMicrosoft Edge HTML Engine

Cordova Tooling (HTML/JS)

Hosted Web Apps (HTML/JS)

Otras plataformas móvilesProject Islandwood (Objective C/C++)

Page 7: WinObjC: Windows Bridge para iOS

¿Qué es el Windows Bridge para iOS?

Page 8: WinObjC: Windows Bridge para iOS

Añade funcionalidad, no la reemplazaNo es un “sandbox”

Añade acceso a herramientas Windows y APIs

Implementa APIs iOSPromover la reutilización de código

Fácil de extenderOpen Source

Abierto a comunidad

Objetivos

Page 9: WinObjC: Windows Bridge para iOS

HerramientasAntiguamente conocido como “Project Islandwood”.

Ahora llamado WinObjC.

Es un conjunto de herramientas que permiten migrar aplicaciones iOS a Windows 10.

Proyecto Open Source

https://github.com/Microsoft/WinObjC/

¿Qué es?

Page 10: WinObjC: Windows Bridge para iOS

¿Qué es?Se soporta Objective-C• Compilador y Runtime

APIs• iOS API (reducida)

Herramientas• Editor / Workflow• Importador de proyectos

Page 11: WinObjC: Windows Bridge para iOS

¿Cómo funciona?

UWP

ARM32 / x86 libobjc2

Objective-C Compiler and Runtime

iOS APIs Storyboards y XIBs Interoperatibilidad XAML

Proyecciones APIs WinRT

iOS Frameworks y herramientas Integración Visual Studio y herramientas

Page 12: WinObjC: Windows Bridge para iOS

• VSImporter, herramienta que permite crear una solución .sln a partir de un Proyecto Xcode

• Añadido Soporte a APIs principals de Foundation y Cocoa Touch

• Visual Studio utiliza el compilador CLANG para compilar código Objective-C

• Posibilidad de depuración integrada en el IDE• Proyecciones permiten añadir funcionalidades

nativas de Windows 10

¿Cómo funciona?

Page 13: WinObjC: Windows Bridge para iOS

DEMODEMODEMO

Descargando la herramienta

Page 14: WinObjC: Windows Bridge para iOS

App Analysis Tool

Page 15: WinObjC: Windows Bridge para iOS

App Analysis ToolHerramienta que permite obtener un informe detallado de compatibilidad de un paquete con el Bridge.

Herramienta web, no require ni descargas ni instalaciones.

Page 16: WinObjC: Windows Bridge para iOS

App Analysis ToolEl informe indica feedback sobre elementos soportados, parcialmente soportados y aquellos que no se soportan.

Ante elementos no soportados, la herramienta facilita recomendaciones. Por ejemplo: MapKit no esta soportado, si Bing Maps y control XAML.

Page 17: WinObjC: Windows Bridge para iOS

DEMODEMODEMO

Analizando un paquete con App Analysis Tool

Page 18: WinObjC: Windows Bridge para iOS

Más Herramientas

Page 19: WinObjC: Windows Bridge para iOS

HerramientasDesarrollo integrado en Visual Studio

Proyectos Xcode importados a Visual Studio

Lenguaje soportado: colores, autocompletado

Debugging: breakpoints, stack traces, …

Universal API Interop

Page 20: WinObjC: Windows Bridge para iOS

Herramientas

Proyecto Xcode projects importado a Visual Studio

Configuración del Proyecto compartida importada desde Xcode

Page 21: WinObjC: Windows Bridge para iOS

DEMODEMODEMO

Primer vistazo a las herramientas

Page 22: WinObjC: Windows Bridge para iOS

Es un “Puente”, no un emulador o máquina virtual

Page 23: WinObjC: Windows Bridge para iOS

Las Apps Bridge son UWP AppsNO es una máquina virtual o emulador.

• Se tiene runtime de Objective-C propio.• Reimplementadas librerías como Foundation y

Cocoa Touch.• CLANG integrado en Visual Studio permite

compilar código Objective-C.

Page 24: WinObjC: Windows Bridge para iOS

Las Apps Bridge son UWP Apps• Compilado a aplicación nativa UWP.• Se puede distribuir vía Windows Store.• Corre en distintas familias de dispositivos Windows

10.• Se pueden consumer APIs Windows directamente

desde Objective-C• Mapas• Live Tiles• Cortana• Etc

Page 25: WinObjC: Windows Bridge para iOS

VSImporter

Page 26: WinObjC: Windows Bridge para iOS

Utilizar VSImporter1. Acceder a la ruta del Proyecto Xcode.

2. Abrir línea de comandos.3. En la línea de commandos ejecutar vsimporter.exe.c:\Projects\MyApp> ..\..\bin\vsimporter.exe

c:\Projects\MyApp> ..\..\bin\vsimporter.exe

Page 27: WinObjC: Windows Bridge para iOS

Utilizar VSImporter• Se puede utilizer la opción –i para utilizer el modo

interactivo. El modo interactivo permite seleccionar la configuración específica del Proyecto Xcode que se desea importer.

• Utilizando –format podemos especificar el tipo de solución a crear winstore8.1, winphone8.1, o winstore10.

Page 28: WinObjC: Windows Bridge para iOS

DEMODEMODEMO

De Xcode a Visual Studio

Page 29: WinObjC: Windows Bridge para iOS

Gestión de UI

Page 30: WinObjC: Windows Bridge para iOS

Gestión de UI• El Bride Windows de iOS permite

controlar como se muestra la aplicación.

• Incluye propiedades básicas que permiten gestionar el tamaño de la pantalla, la forma de la adaptación de la UI, etc.

Page 31: WinObjC: Windows Bridge para iOS

Gestión de UIMagnificationEscala la aplicación por la cantidad especificada.

Auto-MagnificationEstablece el valor del factor de magnificación a tamaño adecuado de la ventana.

FixedWidthEstablece el ancho de la aplicación. Un valor de 0 significa que el ancho corresponde al ancho de la ventana.

FixedHeightEstablece el alto de la aplicación. Un valor de 0 significa que el ancho corresponde al alto de la ventana.

Page 32: WinObjC: Windows Bridge para iOS

Gestión de UISizeWindowToFitSe establece esta propiedad a TRUE si se quiere que WinObjC automáticamente cambie el tamaño de UIWindow para coincidir con el tamaño de la aplicación. Necesario si la aplicación usa Auto Layout.

Page 33: WinObjC: Windows Bridge para iOS

Storyboards y AutoLayout

Page 34: WinObjC: Windows Bridge para iOS

Partimos de XCodeNuestra aplicaciónLa interfaz se implementa en Main.storyboard, utilizando un Storyboard definiendo la lógica en el controlador asociado, ViewController.m.

Page 35: WinObjC: Windows Bridge para iOS

Utilizando VSImporterVSImporter crea una solución Visual Studio desde el Proyecto original Xcode preservando assets, headers y código.

La “magia” se encuentra en el importador y en el runtime.

Page 36: WinObjC: Windows Bridge para iOS

Repasamos el concepto de StoryboardsUn Storyboard en Xcode es un contenedor de escenas que corresponden con las vistas y objetos usadas en la UI de la App.

El Storyboard permite representar desde una vista individual a multiples escenas conectadas por segues.

Un archivo NIB es el binario compilado del XIB. El importador, para crear y configurar el Proyecto Visual Studio utiliza una herramienta llamada Xib2Nib encargada de tomar los archivos XIB para generar los NIB.

Page 37: WinObjC: Windows Bridge para iOS

Xib2NibEsta herramienta añade Soporte permitiendo importer Storyboards y NIBs.

Toa los archivos XIB, itera sobre los XML y construye nuevos plist/NIB por cada Storyboard encontrado en el Proyecto.

Page 38: WinObjC: Windows Bridge para iOS

Partimos de XCodeSizeWindowToFitSe establece esta propiedad a TRUE si se quiere que WinObjC automáticamente cambie el tamaño de UIWindow para coincidir con el tamaño de la aplicación. Necesario si la aplicación usa Auto Layout.

Page 39: WinObjC: Windows Bridge para iOS

Ejecutar y redimensionar la AppSi ejecutamos la aplicación se visualizará la misma UI mostrada en el simulador de Xcode.

Si se redimensiona la App, se puede observer como responde de forma adaptativa.

Page 40: WinObjC: Windows Bridge para iOS

DEMODEMODEMO

App utilizando Storyboard y AutoLayout

Page 41: WinObjC: Windows Bridge para iOS

Depuración

Page 42: WinObjC: Windows Bridge para iOS

BreakpointsEl Bride soporta depuración en tiempo de ejecución con el uso de breakpoints.

Podemos añadir puntos de rupture (1), cuando estamos parados en el mismo podemos continuar (2), o utilizar las opciones Step Into (3), Step Over(4) y Step Out (5).

Page 43: WinObjC: Windows Bridge para iOS

Inspección de objetosObjetos de clases Objective-C pueden inspeccionarse (1) además de poder ver variables y propiedades (2).

Page 44: WinObjC: Windows Bridge para iOS

NSNumber, NSString, NSArray y NSDictionaryLas clases NSNumber, NSString, NSArray y NSDictionary se pueden ver desde las ventanas de Locals y Watch.

Page 45: WinObjC: Windows Bridge para iOS

DEMODEMODEMO

Depurando App iOS desde Visual Studio

Page 46: WinObjC: Windows Bridge para iOS

Proyecciones

Page 47: WinObjC: Windows Bridge para iOS

¿Qué son las proyecciones?WinRT es una API C++ basada en COM. Windows define lo que conocemos como proyecciones para permitir usar la API desde diferentes lenguajes de Desarrollo:• .NET (C# / VB.NET)• JavaScript

Page 48: WinObjC: Windows Bridge para iOS

¿Qué son las proyecciones?• El Bridge de iOS añade una proyección para poder

usar APIs de Windows 10 desde Objective-C.

• Se utilizan los ficheros de cabecera para poder utilizar proyecciones.

• No solo nos permiten añadir características de plataforma (Live Tiles o Cortana por ejemplo) sino además reemplazar partes no disponibles (Mapas por ejemplo).

Page 49: WinObjC: Windows Bridge para iOS

Usando proyecciones: Live TilesPara crear Live Tiles se debe:1.Crear payload XML que describa el tile.2.Crear objecto de notificación del Tile y

pasar el XML.3.Crear objeto que permita actualizar el

Tile.4.Pasar el objeto de notificación del Tile al

que actualiza el Tile.

Page 50: WinObjC: Windows Bridge para iOS

Usando proyecciones: Live Tiles// Create an XML payload that describes the tile - https://msdn.microsoft.com/windows/uwp/controls-and-patterns/tiles-and-notifications-creating-tiles WDXDXmlDocument* tileXml = [WDXDXmlDocument make];

// Build the XML structure NSString *xmlDocument = @"<tile><visual>\n";

// Small Tile xmlDocument = [xmlDocument stringByAppendingString:@"<binding template=\"TileSmall\"><group><subgroup><text>Button!</text></subgroup></group></binding>\n"];

// Medium Tile xmlDocument = [xmlDocument stringByAppendingString:[NSString stringWithFormat:@"<binding template=\"TileMedium\"><group><subgroup><text hint-style=\"subtitle\">Pressed at:</text><text hint-style=\"captionSubtle\">%@</text></subgroup></group></binding>\n", timeDateString]];

// Large Tile xmlDocument = [xmlDocument stringByAppendingString:[NSString stringWithFormat:@"<binding template=\"TileWide\"><group><subgroup><text hint-style=\"subtitle\">Button pressed at:</text><text hint-style=\"captionSubtle\">%@</text></subgroup></group></binding>\n", timeDateString]];

// Cleanup on XML xmlDocument = [xmlDocument stringByAppendingString:@"</visual></tile>\n"]; [tileXml loadXml:xmlDocument]; WUNTileNotification *notification = [WUNTileNotification makeTileNotification: tileXml];

// Notify the user via live tile WUNTileUpdater* tileUpdater = [WUNTileUpdateManager createTileUpdaterForApplication]; [tileUpdater update:notification];

Page 51: WinObjC: Windows Bridge para iOS

Usando proyecciones: Live TilesA tener en cuenta:• Windows.UI.Notifications.TileUpdateManager

becomes WUNTileUpdateManager• Windows.Data.Xml.Dom.XmlDocument becomes

WDXDXmlDocument

Debemos añadir cabeceras:#ifdef WINOBJC #import <UWP/WindowsUINotifications.h> #import <UWP/WindowsDataXmlDom.h> #endif

Page 52: WinObjC: Windows Bridge para iOS

DEMODEMODEMO

Veamos varias proyecciones

Page 53: WinObjC: Windows Bridge para iOS

Roadmap

Page 54: WinObjC: Windows Bridge para iOS

¿Es oro todo lo que reluce?

Page 55: WinObjC: Windows Bridge para iOS

RoadmapRecientemente (últimos meses) añadido soporte a:• Storyboard/XIB• ARM• Añadidas máquinas virtuales Azure con todo preparado para usar el Bridge.

Page 56: WinObjC: Windows Bridge para iOS

Roadmap

Page 57: WinObjC: Windows Bridge para iOS

Roadmap (Próximamente)En el Roadmap:• Mejorar Soporte UIKit.• Mejoras en KVO/KVC.• Mejorar soporte CoreAnimation.• Mejorar soporte CoreGraphics.• Mejorar soporte seguridad.• Soporte a frameworks de terceros muy usados como AFNetworking, SDK de

Facebook, Bolts, etc.• Soporte para MediaCapture.• Soporte mapas.• Browser de APIs soportadas. Así poder ver de un vistazo que se soporta y que no.• Anotaciones Objective-C en Visual Studio.• Etc.

Page 58: WinObjC: Windows Bridge para iOS

Soporte a librerías de terceros

Page 59: WinObjC: Windows Bridge para iOS

Librerías de terceros soportadasKeyChainItemWrapper• SoportadaOAuthConsumer• SoportadaAFNetworking• Versión 2 parcialmente soportada.Bolts• Parcialmente soportado. Facebook iOS SDK• Escenarios básicos como Login funcionan. Parcialmente soportado. Alta prioridad.GTMLogger• Parcialmente soportado.JSONKit• Parcialmente soportado.

Page 60: WinObjC: Windows Bridge para iOS

Librerías de terceros soportadasOpenAL• Parcialmente soportado.OpenUDID • Parcialmente soportado.Reachability • Parcialmente soportado. No funciona UI si la funcionalidad principal.

Page 61: WinObjC: Windows Bridge para iOS

iOS Bridge, mejores prácticas• Encapsular código específico del Sistema

utilizando patrones de diseño.• Utilizar APIs Windows 10 utilizando el Bridge.• Actualizar con frecuencia.• Permanecer al día con respect al GitHub del

Bridge.

Page 62: WinObjC: Windows Bridge para iOS

Preguntas y respuestas.

¿Dudas?

P&R

Page 63: WinObjC: Windows Bridge para iOS

WinObjcJavier Suárez Ruiz