# NativeScript

NativeScript est un framework open-source pour développer des applications sur les plateformes iOS d'Apple et Android. Il a été conçu et développé à l'origine par Progress. Les applications NativeScript sont construites en utilisant JavaScript, ou en utilisant tout langage qui se transpose à JavaScript, comme TypeScript. NativeScript prend en charge les frameworks JavaScript Angular et Vue. Les applications mobiles construites avec NativeScript donnent des applications entièrement natives, qui utilisent les mêmes API que si elles étaient développées dans Xcode ou Android Studio. En outre, les développeurs de logiciels peuvent réutiliser des bibliothèques tierces de CocoaPods, Maven et npm.js dans leurs applications mobiles sans avoir besoin de wrappers.

## Développement

NativeScript a d'abord été rendu public en mars 2015. La version 1.0.0 a suivi deux mois plus tard. Le cadre a rapidement gagné en popularité, atteignant 3000 github-stars et plus de 1500 adeptes sur Twitter peu après la publication. Dans l'intervalle, plus de 700 plugins sont disponibles, qui sont soit officiellement pris en charge par Progress, soit issus de la communauté open source. L'utilisation d'Angular est une approche de développement optionnelle qui permet de partager le code source d'une application entre la plateforme web et la plateforme mobile.

## Structure

Le NativeScript et tous les plugins nécessaires sont installés à l'aide du gestionnaire de packages npm. Les projets sont créés, configurés et compilés via la ligne de commande ou un outil d'interface graphique appelé NativeScript Sidekick. Les interfaces utilisateur indépendantes de la plate-forme sont définies à l'aide de fichiers XML. NativeScript utilise ensuite les abstractions décrites dans les fichiers XML pour appeler les éléments d'interface utilisateur natifs de chaque plateforme. La logique d'application développée en Angular et TypeScript peut également être développée indépendamment de la plate-forme cible. Une application mobile NativeScript est construite en utilisant le runtime et l'outillage de node.js. Progress vise un ratio de 90 % de code commun entre les plateformes iOS et Android.

## Accès direct aux API et contrôles des plates-formes natives

Les interfaces utilisateurs indépendantes de la plate-forme sont définies à l'aide de fichiers XML. NativeScript utilise les structures de données XML représentant l'abstraction inter-plateforme pour déclencher un code spécifique à la plateforme qui interagit directement avec les éléments natifs du système d'exploitation cible. Cela signifie qu'un appel à l'API NativeScript Button fournit une abstraction d'interface utilisateur pour Button, qui appelle directement UIButton sur iOS ou com.android.widget.Button sur Android.
Bien que le code source des applications soit écrit en JavaScript, TypeScript, Angular, ou Vue.js, le code source n'est pas compilé ou muté. Le code source tel quel s'exécute directement sur l'appareil. Ce choix architectural élimine le besoin de compilation croisée ou de transpilation. De plus, alors que le code source de l'application est écrit dans des langues couramment rencontrées dans un navigateur (ou dans une application mobile contenant WebView), les applications NativeScript s'exécutent directement sur l'appareil natif. Il n'y a aucune manipulation DOM ni aucune interaction obligatoire avec le navigateur.

## Caractéristiques notables
### Réflexion sur les API natives

Une autre caractéristique notable est l'utilisation de la réflexion pour traiter les paramètres API natifs. Plutôt que d'exiger des couches de liaison séparées entre NativeScript et chaque API de plate-forme mobile, NativeScript utilise la réflexion pour obtenir des informations et des métadonnées sur les API de plate-forme natives. Les nouvelles fonctionnalités ajoutées à toute API de plate-forme native sont disponibles immédiatement.
Une autre façon d'utiliser la fonction de réflexion est de travailler avec des bibliothèques tierces. Comme JavaScript (ou TypeScript/Angular) peut parler directement au code natif, il n'est pas nécessaire d'écrire des couches de liaison en Objective-C, Swift, Java ou Kotlin$^,$.

### Intégration de Angular

Avec le lancement de NativeScript 2.0, il est possible d'utiliser Angular pour créer des applications mobiles multiplateformes. De plus, en utilisant Angular avec NativeScript, vous avez la possibilité de partager de grandes parties de code entre vos applications web et mobiles.

### Intégration de Vue.js

Le framework Vue.js est pris en charge en NativeScript via le plugin nativescript-vue.

## Outils et services de soutien

* NativeScript Sidekick est une interface utilisateur graphique qui s'appuie sur les capacités fournies par le NativeScript CLI. Avec Sidekick, un développeur peut exploiter des modèles d'applications, des constructions en nuage pour iOS et Android, et publier des applications dans les boutiques d'applications publiques. NativeScript Playground permet aux développeurs d'expérimenter NativeScript dans un environnement web et de prévisualiser les applications sur des appareils physiques. NativeScript Marketplace est une source de plugins NativeScript, de modèles d'applications préconstruits et d'exemples d'applications exécutables.