# NativeScript

O NativeScript é um framework de código aberto para desenvolver aplicativos móveis nas plataformas iOS e Android. Ele foi originalmente concebido e desenvolvido pela Progress. No final de 2019, a responsabilidade pelo projeto NativeScript foi assumido pela nStudio, um parceiro de longa data da Progress. Em dezembro de 2020, a nStudio também supervisionou a integração do NativeScript na OpenJS Foundation como um Projeto incubado. Os aplicativos NativeScript são construídos usando JavaScript ou qualquer linguagem de programação que seja transpilada para JavaScript, como TypeScript. O NativeScript Oferece suporte aos frameworks JavaScript Angular e Vue. Aplicações móveis desenvolvidas com o NativeScript resultam em aplicativos totalmente nativos, que utilizam as mesmas APIs como se tivessem sido desenvolvidos no Xcode ou Android Studio. Além disso, os desenvolvedores de software podem reutilizar bibliotecas de terceiros do CocoaPods, Maven e npm.js em seus aplicativos móveis sem a necessidade de wrappers.

## Desenvolvimento

O NativeScript foi lançado publicamente pela primeira vez em março de 2015. A versão 1.0.0 foi lançada dois meses depois. O framework rapidamente ganhou popularidade, atingindo 3000 estrelas no GitHub e mais de 1500 seguidores no Twitter logo após o lançamento público. Nesse meio tempo, mais de 700 plugins estão disponíveis, sendo oficialmente suportados pela Progress ou provenientes da comunidade de código aberto. O uso do Angular é uma abordagem de desenvolvimento opcional que permite que o código-fonte da aplicação seja compartilhado entre a plataforma web e a plataforma móvel.

## Estrutura

O NativeScript e todos os plugins necessários são instalados usando o gerenciador de pacotes npm. Projetos são criados, configurados e compilados via linha de comando ou uma ferramenta gráfica chamada NativeScript Sidekick. Interfaces de usuário independentes de plataforma são definidas usando arquivos XML. O NativeScript utiliza as abstrações descritas nos arquivos XML para chamar os elementos de interface do usuário nativos de cada plataforma. A lógica da aplicação desenvolvida em Angular e TypeScript pode ser desenvolvida de forma independente da plataforma de destino também. Um aplicativo móvel NativeScript é construído usando o runtime e ferramentas do node.js. A Progress tem como objetivo uma proporção de 90% de código comum entre as plataformas iOS e Android.

## Acesso direto às APIs e controles nativos da plataforma

Interfaces de usuário independentes de plataforma são definidas usando arquivos XML. O NativeScript utiliza as estruturas de dados XML que representam a abstração multiplataforma para acionar código específico da plataforma que interage diretamente com os elementos nativos do sistema operacional de destino. Isso significa que uma chamada à API de botão do NativeScript fornece uma abstração de interface do usuário para o botão, que chama diretamente UIButton no iOS ou com.android.widget.Button no Android.
Embora o código-fonte da aplicação seja escrito em JavaScript, TypeScript, Angular ou Vue.js, o código-fonte não é compilado ou de outra forma alterado. O código-fonte, como está, é executado diretamente no dispositivo. Essa escolha arquitetônica elimina a necessidade de compilação cruzada ou transpilação. Além disso, embora o código-fonte da aplicação seja escrito em linguagens comumente encontradas em um navegador (ou em uma aplicação móvel contida em WebView), as aplicações NativeScript são executadas diretamente no dispositivo nativo. Não há manipulação do DOM ou qualquer interação obrigatória com o navegador.

## Características notáveis
### Reflexão da API nativa

Outra característica notável é o uso de reflexão para lidar com pontos de extremidade da API nativa. Em vez de exigir camadas de ligação separadas entre o NativeScript e cada API de plataforma móvel, o NativeScript utiliza reflexão para obter informações e metadados sobre as APIs de plataforma nativa. Novos recursos adicionados a qualquer API de plataforma nativa estão imediatamente disponíveis.
Outra maneira pela qual a funcionalidade de reflexão é usada é ao trabalhar com bibliotecas de terceiros. Como o JavaScript (ou TypeScript/Angular) pode se comunicar diretamente com o código nativo, não há necessidade de escrever camadas de ligação em Objective-C, Swift, Java ou Kotlin.

### Integração com o Angular

Com o lançamento do NativeScript 2.0, é possível usar o Angular para criar aplicativos móveis multiplataforma. Além disso, ao usar o Angular com o NativeScript, você tem a capacidade de compartilhar grandes partes de código entre seus aplicativos web e móveis.

### Integração com o Vue.js

O framework Vue.js é suportado no NativeScript por meio do plugin nativescript-vue.

## Ferramentas e serviços de suporte

* O NativeScript Sidekick é uma interface gráfica que se baseia nas capacidades fornecidas pelo NativeScript CLI. Com o Sidekick, um desenvolvedor pode aproveitar modelos de aplicativos, compilações baseadas em nuvem para iOS e Android, e publicar aplicativos nas lojas de aplicativos públicas.
* O NativeScript Playground permite que os desenvolvedores experimentem o NativeScript em um ambiente baseado na web e visualizem aplicativos em dispositivos físicos.
* O NativeScript Marketplace é uma fonte selecionada de plugins do NativeScript, modelos de aplicativos pré-construídos e aplicativos de exemplo executáveis.