Uno Platform
Tags: xaml, csharp, unoplatform, webassembly
Published: 2020-01-26 00:53:01

---
title: Uno Platform
published: true
date: 2019-12-05 22:52:14 UTC
tags: xaml,csharp,uno-platform,webassembly
canonical_url: https://medium.com/@alexmarket/uno-platform-9dae28a8d9fc
---

El mundo de del desarrollo de software, web y de aplicaciones móviles, estamos saturados de herramientas, plataformas y frameworks.

El que ser emprendedor valiente o un experimentado developer no significa que nunca vayas a tener o experimentar miedo y/o preocupaciones sobre lo que viene o te piden implementar; simplemente quiere decir que reconoces esas emociones y que tienes la **confianza** que serás capaz de superar los obstáculo y alcanzar las y metas y/o tu visión. Con esto dicho vamos a platicar un poco de la Plataforma Uno ¿que ofrece? ¿ ventajas? ¿desventajas? etc, etc..

Echemos un vistazo ahora a la plataforma Uno.

![](https://cdn-images-1.medium.com/max/1024/1*tycunI8mEytBTy3UzPxc5g.png)<figcaption>Build Mobile, Desktop and WebAssembly apps with C# and XAML.</figcaption>

#### Breve historia

La version inicial fue lanzada en mayo 7 del 2018, liberada bajo la licencia [Apache 2.0](https://en.wikipedia.org/wiki/Apache_2.0) , creada por Richard Campbell and Carl Franklin, pueden ver lo joven que es el proyecto. Originalmente solo se centraba en la creación de aplicaciones móviles Universal Windows Platform (UWP), la plataforma [**Uno Platform**](https://platform.uno/) fue descrita como un puente UWP que permite UWP-Code correr en iOS, Android y WebAssembly.

Con _Uno Platform_, podemos darle el poder a los equipos .NET para crear aplicaciones no solo agradables, sino con buen performance y con un solo código base, multi plataforma, para dispositivos móviles, web y escritorio.

![](https://cdn-images-1.medium.com/max/1024/1*CmePzu_H04VZHNGa65cTLQ.png)<figcaption>Diagrama</figcaption>

> Uno is a UWP bridge for iOS, Android and WebAssembly

Algo que ya hemos escuchado eso muchas veces ¿correcto? Peroooo, esta dice que es la única plataforma que puede ser usada para construir aplicaciones móviles, de escritorio y aplicaciones **WebAssembly** con C# y XAML desde un solo código base.

#### ¿Que es WebAssembly?

![](https://cdn-images-1.medium.com/max/880/1*UTRRw50iQFe6Se0LYs0kCA.png)<figcaption><em>Image de : </em><a href="https://blog.logrocket.com/webassembly-how-and-why-559b7f96cd71/"><em>https://blog.logrocket.com/webassembly-how-and-why-559b7f96cd71/</em></a></figcaption>

Ya hemos escrito en otros artículos al respecto pero en resumen WebAssembly operates on a stack-based machine that allows web applications to run near-native speed by using a binary format. It can be generated by higher level programming languages like C++ or C#. The idea is that it runs a lot faster than JavaScript.

Regresando al hilo principal. L a plataforma Uno enables you to write the UI once, then, using native controls, deploys native UI look and feel to each of your platforms. This means, you write the same code for a button regardless of the platform the button is for, and the user will see the native button for their platform.

![](https://cdn-images-1.medium.com/max/804/1*pvd9qcNszso4VfRpfaiIhQ.png)<figcaption>Ay! Papantla tus hijos vuelan.</figcaption>

[**WebAssembly**](https://webassembly.org/), que respalda el proyecto de Microsoft [**Blazor**](https://visualstudiomagazine.com/articles/2019/09/18/blazor-webassembly.aspx), provee un ensamble de bajo nivel como lenguaje de compilación objetivo para lenguajes de programación de lato nivel como C/C++, C#,Rust, etc) así que pueden ser usados para Desarrollo Web en lugar de JavaScript, el lenguaje que actualmente domina el desarrollo basado en web.

El administrador comercial del proyecto de código abierto Uno project, inventive Inc., el 19 de septiembre anunció una nueva integración con Xamarins Forms que provee que los renders de WebAssembly permitan a los desarrolladores extender las apps de los formularios (Xamarin _Xamarins.Forms-based_ apps) a la Web simplemente ejecutando una simple linea en la linea de comandos de Visual Studio.

### Arquitectura

En iOS y Android, la Plataforma Uno Platform recae exhaustivamente en el stack nativo de Xamarin. En WebAssembly, la plataforma recae directamente en el runtime de Mono WASM. Al final, la plataforma nos provee con la habilidad de correr un solo código fuente, C#y aplicaciones XAML en todas estas plataformas.

### El Stack de Uno

Uno es un framework UI multi plataforma. Tu escribes tu app in C# y un marcado [UWP-flavoured XAML](https://docs.microsoft.com/en-us/windows/uwp/xaml-platform/). Este corre en Windows por que es una UWP app. Con Uno, esta corre en Android, iOS, y (para los valientes) en el navegadores también a través de WebAssembly.

El siguiente esquema es muy ilustrativo.

![](https://cdn-images-1.medium.com/max/1024/1*CyZG65nXFRhlKwsdjUWJvQ.png)<figcaption>Muy ilustrativo ¿no? (Imagen propiedad de Uno Platform)</figcaption>

En iOS y Android, la plataforma Uno usa [Xamarin](https://visualstudio.microsoft.com/xamarin/) para acceder las frameworks nativos de la plataforma. En la versión web esta corriendo directamente arriba de [Mono](https://github.com/mono/mono), el cual resulta esta corriendo arriba de [WebAssembly](https://webassembly.org/).

### Debugging C# en WebAssembly

El equipo Mono ha estado invirtiendo bastante tiempo en la experiencia de debugging y las recientes mejoras han hecho mucho más fácil trabajar con este. Aún es experimental, pero aún así es de gran ayuda en la depuración de los proyectos WebAssembly.

Por ahora solo existe una importante restricción: la depuración solo trabaja en Chrome. Esta utilizando el protocolo de las [herramientas de desarrollo de Chrome](https://chromedevtools.github.io/devtools-protocol/).

Para ser honestos, la experiencia de depuración es un dolor de muelas, eñ debugger falla frecuentemente (con el Chrome diciendo que un se desconecto un WebSocket) entendamos que aún hay muchos escenarios sin mucha luz que digamos que no han sido probados aún. Esto significa que tal vez no podrás poner puto de interrupción (breakpoints) , pasos dentro o fuera de algunas secciones de código (ej. métodos parciales).

#### ¡Gracias! Nos seguimos leyendo.

[Aquí les dejo el enlace](https://docs.google.com/presentation/d/1gvCczOGNhO101wKZWIFPMbaKs_N71G0CLHLKgGlHaLg/edit?usp=sharing) la presentación que tuve oportunidad de dar del 5 de diciembre de este año en [KMMX](http://kmmx.mx/).

#### Algunos enlaces de interes

[Casos de éxito](https://platform.uno/showcases/), algunas apps hechas con esta plataforma.

[El primer tutorial](https://platform.uno/docs/articles/get-started.html)

[Playground](https://playground.platform.uno/#wasm-start)