SlideShare una empresa de Scribd logo
WinObjc
Windows Bridge para iOS
Javier Suárez Ruiz
Agenda
1. Universal Windows Platform
2. Windows Bridge para iOS
3. Herramientas
4. Proyecciones
5. Roadmap
6. Preguntas
Universal Windows Platform
El viaje de la convergencia
IoT
HoloLens
Surface Hub
Windows Desktop
Windows Phone
Xbox
ONE CORE OS
ONE APP PLATFORM
ONE STOREWindows 10
El viaje de la convergencia
Phone
Tablet
Pequeña
2-in-1s
(Tablet or Laptop)
PC
& All-in-OnesPhablet Tablet Grande
Portátil
Xbox
IoT
Surface Hub
Holografías
Windows 10
Universal Windows Platform
De donde venga tu código, puedes llevarlo a Windows
XboxIoT
Universal
Windows Platform
Middleware
Middleware Partners (e.g., Xamarin)
Game Engine Partners (e.g., Unity)
Plataforma Windows
Universal Windows 8 Apps (C++/C#/JS)
Universal Windows 10 Apps (C++/C#/JS)
Project Centennial (Classic Apps)
Plataforma Web
Microsoft Edge HTML Engine
Cordova Tooling (HTML/JS)
Hosted Web Apps (HTML/JS)
Otras plataformas móviles
Project Islandwood (Objective C/C++)
¿Qué es el Windows Bridge para
iOS?
Añade funcionalidad, no la reemplaza
No es un “sandbox”
Añade acceso a herramientas Windows y APIs
Implementa APIs iOS
Promover la reutilización de código
Fácil de extender
Open Source
Abierto a comunidad
Objetivos
Herramientas
Antiguamente 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?
¿Qué es?
Se soporta Objective-C
• Compilador y Runtime
APIs
• iOS API (reducida)
Herramientas
• Editor / Workflow
• Importador de proyectos
¿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
• 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?
DEMODEMODEMO
Descargando la herramienta
App Analysis Tool
App Analysis Tool
Herramienta que permite obtener
un informe detallado de
compatibilidad de un paquete con
el Bridge.
Herramienta web, no require ni
descargas ni instalaciones.
App Analysis Tool
El 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.
DEMODEMODEMO
Analizando un paquete con
App Analysis Tool
Más Herramientas
Herramientas
Desarrollo integrado en Visual Studio
Proyectos Xcode
importados a
Visual Studio
Lenguaje
soportado:
colores,
autocompletad
o
Debugging:
breakpoints,
stack traces, …
Universal API
Interop
Herramientas
Proyecto Xcode
projects importado a
Visual Studio
Configuración del
Proyecto compartida
importada desde
Xcode
DEMODEMODEMO
Primer vistazo a las
herramientas
Es un “Puente”, no un emulador o
máquina virtual
Las Apps Bridge son UWP Apps
NO 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.
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
VSImporter
Utilizar VSImporter
1. Acceder a la ruta del Proyecto Xcode.
2. Abrir línea de comandos.
3. En la línea de commandos ejecutar vsimporter.exe.
c:ProjectsMyApp> ....binvsimporter.exe
c:ProjectsMyApp> ....binvsimporter.exe
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.
DEMODEMODEMO
De Xcode a Visual Studio
Gestión de UI
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.
Gestión de UI
Magnification
Escala la aplicación por la cantidad especificada.
Auto-Magnification
Establece el valor del factor de magnificación a tamaño adecuado de la ventana.
FixedWidth
Establece el ancho de la aplicación. Un valor de 0 significa que el ancho
corresponde al ancho de la ventana.
FixedHeight
Establece el alto de la aplicación. Un valor de 0 significa que el ancho corresponde al
alto de la ventana.
Gestión de UI
SizeWindowToFit
Se 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.
Storyboards y
AutoLayout
Partimos de XCode
Nuestra aplicación
La interfaz se implementa en
Main.storyboard, utilizando un Storyboard
definiendo la lógica en el controlador
asociado, ViewController.m.
Utilizando VSImporter
VSImporter 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.
Repasamos el concepto de Storyboards
Un 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.
Xib2Nib
Esta 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.
Partimos de XCode
SizeWindowToFit
Se 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.
Ejecutar y redimensionar la App
Si 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.
DEMODEMODEMO
App utilizando Storyboard y
AutoLayout
Depuración
Breakpoints
El 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).
Inspección de objetos
Objetos de clases
Objective-C pueden
inspeccionarse (1)
además de poder ver
variables y propiedades
(2).
NSNumber, NSString, NSArray y NSDictionary
Las clases
NSNumber,
NSString, NSArray
y NSDictionary se
pueden ver desde
las ventanas de
Locals y Watch.
DEMODEMODEMO
Depurando App iOS desde
Visual Studio
Proyecciones
¿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
¿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).
Usando proyecciones: Live Tiles
Para 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.
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];
Usando proyecciones: Live Tiles
A 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
DEMODEMODEMO
Veamos varias proyecciones
Roadmap
¿Es oro todo lo que reluce?
Roadmap
Recientemente (últimos meses) añadido soporte a:
• Storyboard/XIB
• ARM
• Añadidas máquinas virtuales Azure con todo preparado para usar el Bridge.
Roadmap
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.
Soporte a librerías de terceros
Librerías de terceros soportadas
KeyChainItemWrapper
• Soportada
OAuthConsumer
• Soportada
AFNetworking
• 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.
Librerías de terceros soportadas
OpenAL
• Parcialmente soportado.
OpenUDID
• Parcialmente soportado.
Reachability
• Parcialmente soportado. No funciona UI si la funcionalidad principal.
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.
Preguntas y respuestas.
¿Dudas?
&
WinObjc
Javier Suárez Ruiz

Más contenido relacionado

PPTX
Introducción a Xamarin
PPTX
Extendiendo Xamarin.Forms
PPTX
Reconnect(); Sevilla - Keynote
PPTX
Servicios Xamarin
PPTX
re-Connect Madrid: Novedades Xamarin
PPTX
Novedades de Xamarin 4
PPTX
dotNetMálaga 2017 - Trucos y consejos rendimiento Xamarin.Forms
PPTX
Integración Continua con Apps Xamarin
Introducción a Xamarin
Extendiendo Xamarin.Forms
Reconnect(); Sevilla - Keynote
Servicios Xamarin
re-Connect Madrid: Novedades Xamarin
Novedades de Xamarin 4
dotNetMálaga 2017 - Trucos y consejos rendimiento Xamarin.Forms
Integración Continua con Apps Xamarin

La actualidad más candente (20)

PPTX
Xamarin Dev Days Málaga 2017 - Apps conectadas con Azure
PPTX
Reconnect(); Sevilla - Introducción a Xamarin 4
PPTX
.Net Conf Sevilla 2018
PPTX
Xamarin REvolve 2016
PPTX
Interfaces nativas Cross-Platform con Xamarin.Forms
PPTX
Desktop App Converter
PPTX
Microsoft Tech Summit - Taller Xamarin
PPTX
Introducción a Xamarin.Forms
PPTX
Introduccion a Xamarin
PPTX
Taller Xamarin Monkey Conf 2018
PPTX
DotNet2018: Xamarin.Forms Everywhere!
PPTX
Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin
PPTX
OpenSouthCode 2018: Taller Xamarin
PPTX
Introducción al desarrollo de apps móviles multiplataforma con Xamarin.Forms
PPTX
Codemotion 2015: UI Tests, Test Cloud y CI con Apps Xamarin
PPTX
Novedades en Visual Studio Online
PPTX
Introducción a Xamarin utilizando MVVMCross
PPTX
Universal Windows Platform Bridges
PDF
Arquitectura xamarin - Nuestra primera app
PDF
Introducción a Xamarin Forms con XAML
Xamarin Dev Days Málaga 2017 - Apps conectadas con Azure
Reconnect(); Sevilla - Introducción a Xamarin 4
.Net Conf Sevilla 2018
Xamarin REvolve 2016
Interfaces nativas Cross-Platform con Xamarin.Forms
Desktop App Converter
Microsoft Tech Summit - Taller Xamarin
Introducción a Xamarin.Forms
Introduccion a Xamarin
Taller Xamarin Monkey Conf 2018
DotNet2018: Xamarin.Forms Everywhere!
Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin
OpenSouthCode 2018: Taller Xamarin
Introducción al desarrollo de apps móviles multiplataforma con Xamarin.Forms
Codemotion 2015: UI Tests, Test Cloud y CI con Apps Xamarin
Novedades en Visual Studio Online
Introducción a Xamarin utilizando MVVMCross
Universal Windows Platform Bridges
Arquitectura xamarin - Nuestra primera app
Introducción a Xamarin Forms con XAML
Publicidad

Destacado (17)

PPTX
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...
PPTX
Trucos y consejos rendimiento Xamarin.Forms
PPTX
Xamarin Dev Days Madrid 2017 - Xamarin.Forms
PPTX
[Evento WPSUG] Universal Windows Platform Bridges
PPTX
Windows 10: One SDK to rule them all
PPTX
Talks4Kids 2015 - Consejos Heisenberg para conseguir Apps Windows 10 con 99% ...
PPTX
Windows 10: Novedades en XAML
PPTX
Reconnect(); Sevilla - Universal Windows Platform
PPTX
Regreso al futuro, la proposición indecente de Microsoft
PPTX
Introducción al desarrollo de Apps en Windows 10
PPTX
Windows 10 Developer Readiness. Interfaces Adaptativas
PPTX
Taller Windows 10 TLP Innova
PPTX
Windows 10: Hel10 World! - Novedades XAML
PPTX
Interfaces Adaptativas en Windows 10
PPTX
Novedades en XAML
PPTX
Tus aplicaciones en pantalla grande con Xbox One
PPTX
Creando Aplicaciones UWP para Xbox One
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...
Trucos y consejos rendimiento Xamarin.Forms
Xamarin Dev Days Madrid 2017 - Xamarin.Forms
[Evento WPSUG] Universal Windows Platform Bridges
Windows 10: One SDK to rule them all
Talks4Kids 2015 - Consejos Heisenberg para conseguir Apps Windows 10 con 99% ...
Windows 10: Novedades en XAML
Reconnect(); Sevilla - Universal Windows Platform
Regreso al futuro, la proposición indecente de Microsoft
Introducción al desarrollo de Apps en Windows 10
Windows 10 Developer Readiness. Interfaces Adaptativas
Taller Windows 10 TLP Innova
Windows 10: Hel10 World! - Novedades XAML
Interfaces Adaptativas en Windows 10
Novedades en XAML
Tus aplicaciones en pantalla grande con Xbox One
Creando Aplicaciones UWP para Xbox One
Publicidad

Similar a WinObjC: Windows Bridge para iOS (20)

PPTX
Entornos de desarrollo para móviles
DOCX
Articulo tipos de ide y ajax control toolkit
PPTX
App inventor
DOCX
Estructuras sdk
PPTX
Azure Tech Frogs La vida despues de Xamarin NET MAUI y el desarrollo de apps....
PPTX
Desarrollando apps multiplataforma con Xamarin y MVVMCross
PPTX
Desarrollo de apps multiplataforma Movil
PPTX
Microsoft Visual Studio Universidad OYM Seccion 0435
PPTX
DotNetDom: El futuro de Xamarin
PPTX
Framework .NET 3.5 02 Entorno de desarrollo (ide)
ODP
Programación Android | 00. Introducción
PDF
Material rap1
PPTX
Novedades visual studio 2015
PDF
Ios
PPTX
Tech Club Asturias: Un vistazo al presente y futuro de Xamarin.Forms
PDF
App inventor
DOCX
Herramientas de desarrollo de android
PPTX
Investigacion 2
PPTX
Investigacion 1
PPTX
Investigacion 1
Entornos de desarrollo para móviles
Articulo tipos de ide y ajax control toolkit
App inventor
Estructuras sdk
Azure Tech Frogs La vida despues de Xamarin NET MAUI y el desarrollo de apps....
Desarrollando apps multiplataforma con Xamarin y MVVMCross
Desarrollo de apps multiplataforma Movil
Microsoft Visual Studio Universidad OYM Seccion 0435
DotNetDom: El futuro de Xamarin
Framework .NET 3.5 02 Entorno de desarrollo (ide)
Programación Android | 00. Introducción
Material rap1
Novedades visual studio 2015
Ios
Tech Club Asturias: Un vistazo al presente y futuro de Xamarin.Forms
App inventor
Herramientas de desarrollo de android
Investigacion 2
Investigacion 1
Investigacion 1

Más de Javier Suárez Ruiz (20)

PPTX
Cape Town MS Developer User Group: Xamarin Community Toolkit
PPTX
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
PPTX
Monkey Conf 2020: .NET MAUI Handlers
PPTX
Creando controles para Xamarin.Forms
PPTX
Monkey Conf 2019: Presente y futuro de Xamarin.Forms
PPTX
Crear interfaces de usuario atractivas con Xamarin.Forms
PPTX
#XamarinUIJuly Summary
PPTX
DotNet 2019: Optimizando Apps con Xamarin.Forms
PPTX
Monkey Conf 2018: Conociendo Xamarin.Forms Shell
PPTX
Analizando interfaces de usuario avanzadas con Xamarin.Forms
PPTX
Novedades Xamarin 3.0 Preview
PPTX
Desarrollo Xamarin, más allá del desarrollo
PPTX
Introducción a Xamarin.Forms
PPTX
Introducción a Xamarin
PPTX
Aumento de productividad, herramientas Xamarin
PPTX
Plain Concepts Tech Day: Desarrollo de aplicaciones multiplataforma con Xamarin
PPTX
Novedades Xamarin Connect(); 2017
PPTX
Codemotion 2017 - Taller Xamarin
PPTX
SVQXDG - Introducción a Embeddinator-4000
PPTX
dotNetMálaga 2017 - Taller Hololens con Wave Engine
Cape Town MS Developer User Group: Xamarin Community Toolkit
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: .NET MAUI Handlers
Creando controles para Xamarin.Forms
Monkey Conf 2019: Presente y futuro de Xamarin.Forms
Crear interfaces de usuario atractivas con Xamarin.Forms
#XamarinUIJuly Summary
DotNet 2019: Optimizando Apps con Xamarin.Forms
Monkey Conf 2018: Conociendo Xamarin.Forms Shell
Analizando interfaces de usuario avanzadas con Xamarin.Forms
Novedades Xamarin 3.0 Preview
Desarrollo Xamarin, más allá del desarrollo
Introducción a Xamarin.Forms
Introducción a Xamarin
Aumento de productividad, herramientas Xamarin
Plain Concepts Tech Day: Desarrollo de aplicaciones multiplataforma con Xamarin
Novedades Xamarin Connect(); 2017
Codemotion 2017 - Taller Xamarin
SVQXDG - Introducción a Embeddinator-4000
dotNetMálaga 2017 - Taller Hololens con Wave Engine

Último (14)

PPTX
Curso Protección Auditiva Trabajo (1).pptx
PPT
USO_Y_MANTENIMIENTO_DE_EPP PARA EL TRABAJADOR.ppt
DOCX
646686699-SESION-Nº-7-SE-COMUNICA-ORALMENTE-EN-SU-LENGUA-MATERNA.docx
PPTX
MANUAL DE BIOSEGURIDAD MYT SALUD IPS TAME.pptx
PPTX
La-Problematica-de-la-Pobreza-a-Nivel-Mundial-Un-Desafio-Urgente.pptx
DOCX
ACTIV. DE AP. 30 DE JUNIO 2025 PLANIFIC PROYECTO.docx
PPTX
Conceptos Basicos de construccion concreto
DOCX
SESIÓN DE CLASE ACTIV. DE AP. 30 DE JUNIO 2025 PLANIFIC PROYECTO.docx
PPTX
Proyectos de Inversión y sus requerimientos
DOCX
SESIÓN DE CLASE ACTIV. AP 27 DE JUNIO PLANTAS PARA LA TOS.docx
PDF
Tratado Arias-Roosevelt de la República de Panamá
PPTX
INDUCCIOfgfgfgfgfgfgfgedgerrrrrrrrrrrrrr.pptx
PDF
Materialismo Dialéctico y su aplicacion aen la epistemología de las Ciencias ...
PDF
LA TIC en la vida cotidiana y en la sociedad.pdf
Curso Protección Auditiva Trabajo (1).pptx
USO_Y_MANTENIMIENTO_DE_EPP PARA EL TRABAJADOR.ppt
646686699-SESION-Nº-7-SE-COMUNICA-ORALMENTE-EN-SU-LENGUA-MATERNA.docx
MANUAL DE BIOSEGURIDAD MYT SALUD IPS TAME.pptx
La-Problematica-de-la-Pobreza-a-Nivel-Mundial-Un-Desafio-Urgente.pptx
ACTIV. DE AP. 30 DE JUNIO 2025 PLANIFIC PROYECTO.docx
Conceptos Basicos de construccion concreto
SESIÓN DE CLASE ACTIV. DE AP. 30 DE JUNIO 2025 PLANIFIC PROYECTO.docx
Proyectos de Inversión y sus requerimientos
SESIÓN DE CLASE ACTIV. AP 27 DE JUNIO PLANTAS PARA LA TOS.docx
Tratado Arias-Roosevelt de la República de Panamá
INDUCCIOfgfgfgfgfgfgfgedgerrrrrrrrrrrrrr.pptx
Materialismo Dialéctico y su aplicacion aen la epistemología de las Ciencias ...
LA TIC en la vida cotidiana y en la sociedad.pdf

WinObjC: Windows Bridge para iOS

  • 1. WinObjc Windows Bridge para iOS Javier Suárez Ruiz
  • 2. Agenda 1. Universal Windows Platform 2. Windows Bridge para iOS 3. Herramientas 4. Proyecciones 5. Roadmap 6. Preguntas
  • 4. El viaje de la convergencia IoT HoloLens Surface Hub Windows Desktop Windows Phone Xbox ONE CORE OS ONE APP PLATFORM ONE STOREWindows 10
  • 5. El viaje de la convergencia Phone Tablet Pequeña 2-in-1s (Tablet or Laptop) PC & All-in-OnesPhablet Tablet Grande Portátil Xbox IoT Surface Hub Holografías Windows 10
  • 6. Universal Windows Platform De donde venga tu código, puedes llevarlo a Windows XboxIoT Universal Windows Platform Middleware Middleware Partners (e.g., Xamarin) Game Engine Partners (e.g., Unity) Plataforma Windows Universal Windows 8 Apps (C++/C#/JS) Universal Windows 10 Apps (C++/C#/JS) Project Centennial (Classic Apps) Plataforma Web Microsoft Edge HTML Engine Cordova Tooling (HTML/JS) Hosted Web Apps (HTML/JS) Otras plataformas móviles Project Islandwood (Objective C/C++)
  • 7. ¿Qué es el Windows Bridge para iOS?
  • 8. Añade funcionalidad, no la reemplaza No es un “sandbox” Añade acceso a herramientas Windows y APIs Implementa APIs iOS Promover la reutilización de código Fácil de extender Open Source Abierto a comunidad Objetivos
  • 9. Herramientas Antiguamente 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?
  • 10. ¿Qué es? Se soporta Objective-C • Compilador y Runtime APIs • iOS API (reducida) Herramientas • Editor / Workflow • Importador de proyectos
  • 11. ¿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
  • 12. • 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?
  • 15. App Analysis Tool Herramienta que permite obtener un informe detallado de compatibilidad de un paquete con el Bridge. Herramienta web, no require ni descargas ni instalaciones.
  • 16. App Analysis Tool El 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.
  • 17. DEMODEMODEMO Analizando un paquete con App Analysis Tool
  • 19. Herramientas Desarrollo integrado en Visual Studio Proyectos Xcode importados a Visual Studio Lenguaje soportado: colores, autocompletad o Debugging: breakpoints, stack traces, … Universal API Interop
  • 20. Herramientas Proyecto Xcode projects importado a Visual Studio Configuración del Proyecto compartida importada desde Xcode
  • 21. DEMODEMODEMO Primer vistazo a las herramientas
  • 22. Es un “Puente”, no un emulador o máquina virtual
  • 23. Las Apps Bridge son UWP Apps NO 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.
  • 24. 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
  • 26. Utilizar VSImporter 1. Acceder a la ruta del Proyecto Xcode. 2. Abrir línea de comandos. 3. En la línea de commandos ejecutar vsimporter.exe. c:ProjectsMyApp> ....binvsimporter.exe c:ProjectsMyApp> ....binvsimporter.exe
  • 27. 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.
  • 28. DEMODEMODEMO De Xcode a Visual Studio
  • 30. 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.
  • 31. Gestión de UI Magnification Escala la aplicación por la cantidad especificada. Auto-Magnification Establece el valor del factor de magnificación a tamaño adecuado de la ventana. FixedWidth Establece el ancho de la aplicación. Un valor de 0 significa que el ancho corresponde al ancho de la ventana. FixedHeight Establece el alto de la aplicación. Un valor de 0 significa que el ancho corresponde al alto de la ventana.
  • 32. Gestión de UI SizeWindowToFit Se 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.
  • 34. Partimos de XCode Nuestra aplicación La interfaz se implementa en Main.storyboard, utilizando un Storyboard definiendo la lógica en el controlador asociado, ViewController.m.
  • 35. Utilizando VSImporter VSImporter 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.
  • 36. Repasamos el concepto de Storyboards Un 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.
  • 37. Xib2Nib Esta 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.
  • 38. Partimos de XCode SizeWindowToFit Se 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.
  • 39. Ejecutar y redimensionar la App Si 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.
  • 42. Breakpoints El 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).
  • 43. Inspección de objetos Objetos de clases Objective-C pueden inspeccionarse (1) además de poder ver variables y propiedades (2).
  • 44. NSNumber, NSString, NSArray y NSDictionary Las clases NSNumber, NSString, NSArray y NSDictionary se pueden ver desde las ventanas de Locals y Watch.
  • 45. DEMODEMODEMO Depurando App iOS desde Visual Studio
  • 47. ¿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
  • 48. ¿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).
  • 49. Usando proyecciones: Live Tiles Para 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.
  • 50. 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];
  • 51. Usando proyecciones: Live Tiles A 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
  • 54. ¿Es oro todo lo que reluce?
  • 55. Roadmap Recientemente (últimos meses) añadido soporte a: • Storyboard/XIB • ARM • Añadidas máquinas virtuales Azure con todo preparado para usar el Bridge.
  • 57. 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.
  • 58. Soporte a librerías de terceros
  • 59. Librerías de terceros soportadas KeyChainItemWrapper • Soportada OAuthConsumer • Soportada AFNetworking • 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.
  • 60. Librerías de terceros soportadas OpenAL • Parcialmente soportado. OpenUDID • Parcialmente soportado. Reachability • Parcialmente soportado. No funciona UI si la funcionalidad principal.
  • 61. 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.