Connect(); 2016

Volumen 31, número 12

Desarrollo de Visual Studio: presentación de Visual Studio para Mac

De Mikayla Hutchinson; 2016

En noviembre, Microsoft lanzará en Connect() una versión preliminar de Visual Studio para Mac. Se trata de un excelente avance en el que el IDE de Xamarin Studio centrado en dispositivos móviles se convierte en una herramienta de desarrollo que da prioridad a los dispositivos móviles y la nube para .NET y C#, y se lleva la experiencia de desarrollo de Visual Studio a Mac.

Un nuevo miembro de la familia de Visual Studio

En su esencia, Visual Studio para Mac es un equivalente para macOS de la versión de Windows de Visual Studio. Si disfruta de la experiencia de desarrollo de Visual Studio, pero necesita o quiere usar macOS, no debería resultarle difícil usar esta versión. Su experiencia de usuario está inspirada en Visual Studio, aunque se ha diseñado para tener una apariencia nativa de macOS. Además, igual que Visual Studio para Windows, se complementa con Visual Studio Code para aquellas veces en las que no necesita un IDE completo, pero quiere un editor de código fuente independiente y avanzado, a la vez que ligero.

Más allá de la interfaz, Visual Studio para Mac también presenta muchos aspectos en común con sus homólogos de la familia de Visual Studio. IntelliSense y la refactorización usan la Plataforma de compilación Roslyn; el sistema del proyecto y el motor de compilación usan MSBuild; y el editor de código fuente admite los conjuntos TextMate. Usa los mismos motores de depuración para las aplicaciones .NET Core y Xamarin y los mismos diseñadores para Xamarin.iOS y Xamarin.Android.

La compatibilidad es un elemento clave de Visual Studio para Mac. Aunque es un nuevo producto y no admite todos los tipos de proyecto de Visual Studio, lo que tiene en común con estos es que usa el mismo formato de proyecto y solución MSBuild. Si los miembros de su equipo usan macOS y Windows, o usted mismo cambia entre ambos sistemas operativos, puede compartir sin problemas sus proyectos entre las plataformas. No hace falta realizar ninguna conversión ni migración.

Desarrollo que da prioridad a los dispositivos móviles y la nube

Las cargas de trabajo principales que admite Visual Studio para Mac son el desarrollo nativo de iOS, Android y Mac a través de Xamarin, y el desarrollo de servidor a través de .NET Core con integración de Azure. Le ofrece todas las herramientas necesarias para desarrollar las experiencias de aplicaciones móviles nativas y completas que los usuarios esperan actualmente, así como back-ends de servidor basados en la nube para promoverlas.

Todas cuentan con tecnología de lenguaje C# que conoce y le apasiona y las mejoras más recientes de productividad de C# 7. Obtiene el rendimiento del código compilado, la productividad de un lenguaje moderno con seguridad de tipos, el acceso a las características únicas de cada plataforma y un ecosistema completo de bibliotecas y herramientas. Puede usar su experiencia existente entre los dominios en la nube y móvil y compartir código entre el cliente y el servidor. Además, con todos sus proyectos en una sola solución, puede aprovechar la navegación de código y la refactorización entre proyectos en toda la solución.

C# no es el único lenguaje que se admite en la versión preliminar de Visual Studio para Mac. Para los programadores funcionales, incluye una compatibilidad excelente con F#, basada en tecnología del mismo compilador F# que se usa en Visual Studio.

iOS, Android y Mac

Dada la fragmentación del mercado móvil actual, es importante poder dirigirse a una amplia gama de dispositivos. Gracias al hecho de que se basa en Xamarin Studio, Visual Studio para Mac ha mejorado la compatibilidad con el desarrollo de iOS, Android y Mac basado en C# con la plataforma Xamarin. Puede aprovechar su experiencia existente en C# y las bibliotecas, y compartir código común entre plataformas, con acceso completo a las API nativas para poder compilar una experiencia de aplicación nativa rápida y perfeccionada.

Para mejorar aún más el uso compartido de código, puede usar la biblioteca de UI de Xamarin.Forms entre plataformas, que ofrece un entorno de desarrollo familiar basado en XAML que puede dirigirse a varias plataformas, incluidas iOS, Android, macOS y la Plataforma universal de Windows (UWP) (aunque el desarrollo de UWP actualmente solo se admite en Visual Studio), y se asigna a la UI nativa en cada plataforma. Cuando necesite más control, puede combinar y hacer coincidir Xamarin.Forms con el acceso directo a los kits de herramientas nativos. También hay un amplio ecosistema de bibliotecas disponible para Xamarin a través de NuGet, que incluye bibliotecas específicas de plataformas, enlaces a código nativo y bibliotecas estándar de .NET portátiles.

Al igual que Visual Studio, Visual Studio para Mac cuenta con diseñadores de arrastrar y soltar para el desarrollo de iOS y Android que le permiten ensamblar y ajustar su UI rápidamente. Para Xamarin.Forms, cuenta con XAML IntelliSense completo y una vista previa dinámica en paralelo, tal y como se muestra en la Figura 1. Tanto el diseñador como la vista previa dinámica usan un simulador para representar su aplicación exactamente como aparecerá en el dispositivo, y esto incluso funciona para los controles personalizados.

Vista previa dinámica de XAML de Xamarin.Forms
Figura 1 Vista previa dinámica de XAML de Xamarin.Forms

Nube de vanguardia

Casi todas las aplicaciones móviles están respaldadas por un servicio y Visual Studio para Mac facilita el desarrollo del servicio de su aplicación gracias a su compatibilidad con la plataforma de desarrollo web de ASP.NET Core más reciente. ASP.NET Core se ejecuta en .NET Core, la evolución más reciente de .NET Framework y el tiempo de ejecución. Se ha ajustado para ofrecer un rendimiento increíblemente rápido, se ha factorizado para admitir tamaños de instalación pequeños y se ha reinventado para ejecutarse en Linux y macOS, así como en Windows.

.NET Core le ofrece un alto grado de flexibilidad en la manera y el lugar en que desarrolla e implementa su aplicación de servidor, ya sea en su propio centro de datos o en una plataforma en la nube como Microsoft Azure. Dado que tanto .NET Core como la plataforma Xamarin son de código abierto, no deberá preocuparse por el bloqueo del proveedor.

La compatibilidad de Visual Studio para Mac con proyectos de .NET Core también le permite escribir bibliotecas estándar de .NET, la nueva forma de compartir código entre plataformas .NET a partir de ahora. Las bibliotecas estándar de .NET reemplazan las bibliotecas de clases portables (PCL) y ofrecen un área expuesta de API mucho más amplia. Dado que .NET Core y la plataforma Xamarin son compatibles con el estándar de .NET, resultan muy útiles para compartir el código, tanto dentro de su solución como a través del Administrador de paquetes NuGet.

Un área de trabajo familiar

El área de trabajo de Visual Studio para Mac debería resultar familiar a los desarrolladores existentes de Visual Studio. Cuando la abre por primera vez, se muestra una página principal con una lista de soluciones abiertas recientemente, una fuente de noticias para desarrolladores y otra información para ayudarle a empezar.

Para crear una nueva solución, vaya al menú File (Archivo) y seleccione New Project (Nuevo proyecto), y verá el área de trabajo que contiene su nueva solución. Tal y como puede ver en la Figura 2, hay un editor de código fuente con pestañas en el centro y varias ventanas acopladas o “paneles” a su alrededor, como Solution (Solución), Output (Resultado), Properties (Propiedades), Document Outline (Esquema del documento) y Toolbox (Cuadro de herramientas). Al igual que Visual Studio, este diseño es muy personalizable y cambia automáticamente en función de si está codificando, depurando o usando el diseñador de arrastrar y colocar.

Área de trabajo de Visual Studio para Mac
Figura 2 Área de trabajo de Visual Studio para Mac

La barra de herramientas también le resultará conocida, pero tiene unas cuantas diferencias notables:

A la izquierda hay el botón Run (Ejecutar), una lista desplegable para seleccionar la configuración activa y otras listas desplegables para seleccionar la configuración de ejecución y el dispositivo de destino. Para el desarrollo móvil multiplataforma, es importante poder cambiar fácilmente el dispositivo o simulador en el que realizan las pruebas o la depuración de la aplicación. La configuración de ejecución es como el proyecto de inicio de Visual Studio, excepto en que además de cambiar el proyecto que se ejecuta, también puede crear conjuntos con nombres personalizados de opciones de ejecución.

En el centro de la barra de tareas, hay un área de notificación, que muestra mensajes sobre varias operaciones, como compilar y restaurar paquetes NuGet. Cuando hay una operación en ejecución, se muestra un botón de cancelación en el área de notificación. Aquí también se muestran las notificaciones sobre las actualizaciones de software. Puede hacer clic en algunas notificaciones, como errores de compilación, y aparecerá un panel con más información.

A la derecha de la barra de herramientas, se encuentra la búsqueda global. Además de ayudarle a buscar cosas, como comandos y archivos en su solución, su sistema de filtrado camelCase resulta muy útil para activar rápidamente comandos o saltar a archivos o tipos de su solución. Incluso puede iniciar una búsqueda en los archivos de su solución o abrir el Administrador de paquetes NuGet para buscar un paquete.

El Panel de solución funciona prácticamente igual que el Explorador de soluciones de Visual Studio, ya que le permite explorar y administrar la estructura de su solución, su proyecto y los archivos que contiene. El menú contextual le proporciona una amplia gama de comandos específicos del contexto para los elementos del árbol de la solución, como agregar o quitar archivos de proyectos, editar referencias de proyectos, abrir ventanas de Terminal en carpetas y compilar o depurar proyectos específicos.

El panel Errors (Errores) muestra todas las advertencias y los errores de la compilación y también incluye el resultado del registro de compilación en una vista En dos paneles. A diferencia de Visual Studio, no hay ningún panel unificado para todos los tipos de resultados. Por ejemplo, el panel Application Output (Resultados de la aplicación) muestra los resultados de su aplicación cuando la ejecuta o la depura, y los registros de las operaciones NuGet se muestran en el panel NuGet Console (Consola de NuGet). El Panel de propiedades muestra contextualmente las propiedades de aquello en que se centre y tenga seleccionado en ese momento, y se puede usar para ver y cambiar la acción de compilación de los archivos en el Panel de solución.

En el centro, se encuentra el núcleo del IDE, el editor de código abierto, que tiene todas las características que cabe esperar de un miembro de la familia de Visual Studio. En la Figura 3 se muestra C# IntelliSense y sintaxis resaltada en un proyecto de .NET Core. También hay plegado de código, subrayado dinámico de errores y sugerencias a medida que escribe, formato automático configurable, comandos de navegación de código y una matriz de herramientas de refactorización eficaces.

IntelliSense en un proyecto de .NET Core
Figura 3 IntelliSense en un proyecto de .NET Core

No todas las funcionalidades del editor se habilitan de manera predeterminada. Puede retocar la configuración de Visual Studio para Mac en el cuadro de diálogo Preferences (Preferencias), al que se puede obtener acceso desde el menú de la aplicación de Mac. Este es equivalente al cuadro de diálogo Opciones del menú de Visual Studio Tools y contiene muchas opciones para ayudarle a personalizar el IDE para que pueda trabajar como quiera.

La prueba unitaria se admite con NUnit y se puede complementar mediante otros ejecutores de pruebas a través de extensiones. Las pruebas detectadas en su ensamblado se muestran en el panel Unit Tests (Pruebas unitarias) al que se puede obtener acceso desde el menú View | Pads (Ver | Paneles). También hay un control de versiones GIT integrado directamente en el editor de código fuente, con una fila de pestañas en la parte inferior del editor para obtener acceso a la vista de cambios y autores del registro del archivo actual.

Si quiere ponerse al día rápidamente con algunas sugerencias y trucos adicionales, le animo a ver mi sesión "Become a Xamarin Studio Expert" ("Convertirse en experto de Xamarin Studio) de Xamarin Evolve 2016 (xmn.io/xs-expert), ya que su contenido se aplica directamente a Visual Studio para Mac.

Núcleo de código abierto

Al igual que Xamarin Studio, Visual Studio para Mac se basa en el IDE MonoDevelop de código abierto, que Microsoft desarrolla de forma activa. Está escrito completamente en C# y tiene un modelo de extensibilidad avanzado que puede usar para agregar funcionalidades que abarcan desde comandos de editor simples hasta tipos de proyectos y lenguajes completamente nuevos. Incluso las características de núcleo como la edición de C#, Xamarin.iOS, Xamarin.Android y ASP.NET Core se implementan como extensiones.

Al igual que Visual Studio y Visual Studio Code, la compatibilidad de C# en Visual Studio para Mac se basa en tecnología de la Plataforma de compilación Roslyn de código abierto. Puede obtener exactamente la misma experiencia de IntelliSense que conoce de Visual Studio, además de compatibilidad con correcciones de código y analizadores dinámicos en el editor. Visual Studio para Mac incluso incluye la colección Refactoring Essentials de correcciones de código y analizadores de manera predeterminada.

Visual Studio para Mac admite la edición de una amplia gama de lenguajes a través del uso de conjuntos TextMate, que proporcionan resaltado de sintaxis y simplifican IntelliSense. Incluye varios conjuntos TextMate de código abierto de Visual Studio Code.

Creación de una aplicación ASP.NET Core

Para mostrar lo fácil que resulta ponerse al día con Visual Studio para Mac, voy a analizar el proceso de creación de un back-end simple de ASP.NET Core. Es para una aplicación móvil hipotética de "Lista de tareas pendientes compartida", que permite a varios usuarios agregar elementos y todos los usuarios ven los elementos que publican los otros.

Tenga en cuenta que escribo este artículo con una versión preliminar de Visual Studio para Mac y es posible que algunos detalles de la UI cambien en su versión. Sin embargo, los enfoques y los conceptos que se tratan en este artículo seguirán siendo aplicables.

Después de instalar y abrir Visual Studio para Mac, hago clic en el botón New Solution (Nueva solución) en la página principal y se abre el cuadro de diálogo New Project (Nuevo proyecto). Navego a la sección Cloud (Nube), elijo la plantilla de aplicación web de ASP.NET Core, hago clic en Next (Siguiente) y luego elijo la plantilla Web API. La plantilla Web API crea un servicio web RESTful que es ideal para un back-end móvil, aunque puede agregar vistas al proyecto más tarde para crear un front-end web.

Finalmente, asigno el nombre HelloVSMac a mi proyecto y hago clic en Create (Crear). Visual Studio para Mac crea los proyectos mediante el motor de plantillas dotnet, lo abre e inicia la restauración de los paquetes NuGet de los que depende. Si abre el archivo del proyecto en el editor mediante el menú contextual Tools | Edit (Herramientas | Editar) del proyecto del Panel de solución, puede ver que se trata de un archivo de proyecto minimalista basado en MSBuild pensado para que sea fácil de comprender. Si lo edita directamente y lo guarda, el IDE recargará automáticamente su versión modificada.

Si mira el proyecto en el Panel de solución, los elementos clave son:

Paquetes: las dependencias de paquetes NuGet de su proyecto. ASP.NET Core, el marco de .NET Core y los destinos de MSBuild que compilan el proyecto se instalan mediante paquetes NuGet.

Program.cs: el punto de entrada de su aplicación web. Las aplicaciones ASP.NET Core son programas, por lo que hay un punto de entrada del método Main que crea, compila y ejecuta WebHost en el núcleo de su aplicación.

Startup.cs: que define una clase de inicio que se pasó a WebHost. Esta clase contiene los métodos de inicialización de su aplicación.

appsettings.json: las opciones de configuración de su aplicación. Es el equivalente en ASP.NET Core de ASP.NET web.config.

Para los fines de este tutorial, dejaré todo esto tal y como está y examinaré el archivo ValuesController.cs de la carpeta Views (Vistas). Contiene una clase ValuesController registrada en la ruta [Route("api/[controller]")]. [controller] es un marcador de posición del nombre de clase, por lo que realmente esta es la ruta api/values.

Para empezar, definiré una clase muy simple ToDoItem y una clase de almacenamiento ToDoList. La clase ToDoList es estática por lo que se puede compartir entre las solicitudes. En una aplicación real, debería usar una base de datos, pero por ahora con esto será suficiente. También cambio el nombre de la clase de controlador por ToDoController (que crea la ruta api/todo), conecto los métodos Get y Post al almacén y borro los otros métodos del controlador que no se usan. Puede ver el resultado en la Figura 4.

Figura 4 El controlador y su almacenamiento simple de la lista compartida de tareas pendientes

[Route("api/[controller]")]
public class ToDoController : Controller
{
  [HttpGet]
  public IEnumerable<ToDoItem> Get()
  {
    return ToDoList.GetAll();
  }
  [HttpPost]
  public void Post([FromBody]ToDoItem item)
  {
    ToDoList.Add(item);
  }
}
public class ToDoItem
{
  public string Title { get; set; }
}
public static class ToDoList
{
  static List<ToDoItem> list = new List<ToDoItem>();
  public static void Add(ToDoItem item)
  {
    lock (list) { list.Add(item); }
  }
  public static IEnumerable<ToDoItem> GetAll()
  {
    lock (list) { return list.ToArray(); }
  }
}

Ahora, aunque muy pequeño, es un servicio web RESTful completo. Vamos a probarlo.

Coloco un punto de interrupción en el método Post e inicio la depuración de la aplicación. En el panel Output (Resultados) se empiezan a mostrar los resultados del servidor web kestrel integrado de ASP.NET Core a medida que se inicia la aplicación (de manera predeterminada en el puerto 5000), pero no hará nada más hasta que reciba una solicitud. Puede abrir su explorador web y comprobar 127.0.0.1:5000/api/todo, pero solo verá una matriz vacía.

Depuración de un proyecto .NET Core
Figura 5 Depuración de un proyecto .NET Core

Dado que aún no hay ningún cliente móvil para este servicio, es el momento de abrir la aplicación Terminal de macOS y usar CURL para enviar una solicitud POST a la aplicación:

$ curl -H "Content-type: application/json" -X POST -d '{ title: "build
  mobile app" }' 127.0.0.1:5000/api/todo

Se desencadena el punto de interrupción en el depurador. Puede inspeccionar el valor que se ha analizado automáticamente en el cuerpo JSON de la solicitud y se ha convertido en el objeto ToDoItem. Podrá ver que Visual Studio para Mac introdujo automáticamente el diseño de depuración y que contiene todos los paneles del depurador que cabe esperar: Stack (Pila), Locals (Variables locales), Threads (Subprocesos), Breakpoints (Puntos de interrupción), etc.

Ahora, vuelva a la terminal, use CURL para obtener acceso al método GET y verá la matriz JSON que contiene el elemento que se agregó:

$ curl 127.0.0.1:5000/api/todo
[{"title":"build mobile app"}]

El siguiente paso consiste en compilar la aplicación móvil, pero esta parte la dejaré para que la explore usted mismo. Para obtener información más detallada sobre ASP.NET Core, le recomiendo que consulte asp.net/get-started, y si quiere obtener más información sobre el desarrollo de Xamarin, hay una gran cantidad de material interesante en developer.xamarin.com. Aunque aún no hay mucha información acerca de Visual Studio para Mac, en la mayoría de los casos se puede aplicar directamente la documentación de Xamarin Studio y, a menudo también, la de Visual Studio.

Resumen

Espero que con esta breve introducción le hayan entrado ganas de probar Visual Studio para Mac y de convertirlo en el IDE de macOS de su elección para el desarrollo móvil y en la nube. Si tiene un Mac, le animo a descargar y probar la versión preliminar en VisualStudio.com y a darnos su opinión. Estaremos encantados de recibir comentarios que nos ayuden a mejorarlo en la versión preliminar y posteriormente.


Mikayla Hutchinson es administradora de programas de la plataforma Xamarin en Microsoft. Anteriormente, desarrolló las herramientas web y para móviles de Xamarin Studio y fue una desarrolladora principal en MonoDevelop. Puede seguirla en Twitter: @mjhutchinson.

Gracias a los siguientes expertos técnicos de Microsoft por revisar este artículo: Larry O’Brien y Lluis Sanchez
Larry O'Brien trabaja en el grupo de documentación de Xamarin en Microsoft. Lleva mucho tiempo activo en el campo de las publicaciones de desarrollo de software tanto como autor como editor.


Discuta sobre este artículo en el foro de MSDN Magazine