# NativeScript

NativeScript es un framework de código abierto para desarrollar aplicaciones en iOS y Android. Fue ideado y desarrollado por Progress. Las aplicaciones NativeScript se construyen utilizando lenguajes de programación independientes del dispositivo y sistema operativo como JavaScript o TypeScript. NativeScript soporta directamente el desarrollo con Angular y soporta también Vue mediante un complemento desarrollado por la comunidad. Las aplicaciones móviles creadas con NativeScript son aplicaciones plenamente nativas, utilizando las mismas APIs que las desarrollados en Xcode o Android Studio. Además, los desarrolladores pueden reutilizar bibliotecas de terceros como Cocoapods, Android Arsenal, Maven, y npm.js en sus aplicaciones móviles.

## Desarrollo

NativeScript fue lanzado al público por primera vez en marzo de 2015. La versión 1.0.0 apareció dos meses después. El framework rápidamente ganó popularidad llegando a 3000 estrellas en github y más de 1500 seguidores en Twitter poco después del lanzamiento público. Junto a esto, hay más de 600 complementos disponibles, que son oficialmente desarrollados por Progress o provienen de la comunidad de código abierto. El uso de Angular es un enfoque de desarrollo opcional que permite que el código fuente de la aplicación se comparta entre la plataforma web y la plataforma móvil.

## Estructura

NativeScript y todos los complementos necesarios se instalan utilizando el gestor de paquetes npm. Los proyectos se crean, configuran y compilan a través de la línea de comandos o una herramienta gráfica llamada NativeScript Sidekick. Las interfaces de usuario independientes de la plataforma se definen utilizando archivos XML. NativeScript luego usa las abstracciones descritas en los archivos XML para llamar a los elementos de interfaz nativos de cada plataforma. La lógica de la aplicación desarrollada en Angular y TypeScript también se puede desarrollar independientemente de la plataforma objetivo. Una aplicación móvil NativeScript se crea utilizando node.js. Progress apunta a una proporción del 90% de código común entre las plataformas iOS y Android.

## Acceso directo a las APIs y controles de la plataforma nativa

Las interfaces de usuario independientes de la plataforma se definen utilizando archivos XML. NativeScript utiliza las estructuras de datos XML que representan la abstracción multiplataforma para activar el código específico de la plataforma que interactúa directamente con los elementos nativos del sistema operativo objetivo. Esto significa que una llamada a un elemento del API de NativeScript proporciona una abstracción de la interfaz de usuario para el elemento, que llama directamente a su similar en iOS o Android.
Dado que el código fuente de la aplicación está escrito en JavaScript, TypeScript o Angular, el código fuente no se compila sino se ejecuta directamente en el dispositivo. Esta elección arquitectónica elimina la necesidad de compilación cruzada o transpilación. Además, mientras el código fuente de la aplicación está escrito en lenguajes generalmente encontrados en un navegador (o en una aplicación web móvil contenida) las aplicaciones NativeScript se ejecutan directamente en el dispositivo nativo. No hay manipulación de DOM o interacción obligatoria con el navegador

## Características notables
### Reflexión de API Nativa (Acceso de Día 0)

Otra característica notable es el uso de la reflexión para manejar endpoints de API nativos. En lugar de requerir capas de enlace separadas entre NativeScript y cada API de la plataforma móvil, NativeScript utiliza la reflexión para obtener información y metadatos sobre las API de la plataforma nativa. Las nuevas funciones agregadas a cualquier API de la plataforma nativa están disponibles de inmediato.
Otra mecanismo de reflexión se usa en las bibliotecas de terceros. Javascript (o TypeScript / Angular) puede llamar directamente a un código nativo, sin necesidad de escribir capas obligatorias en Objetive-C, Swift, Java o Kotlin.

### Integración con Angular

Con el lanzamiento de NativeScript 2.0, es posible utilizar Angular para construir aplicaciones móviles multiplataforma.

### Integración con Vue

El framework Vue es soportado en NativeScript gracias a los esfuerzos de la comunidad para desarrollar un plugin que permite su compatibilidad.