<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[NativeScript Brasil]]></title><description><![CDATA[Comunidade brasileira sobre NativeScript]]></description><link>https://nativescriptbrasil.github.io</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Jul 2017 18:01:48 GMT</lastBuildDate><atom:link href="https://nativescriptbrasil.github.io/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[O que é NativeScript e a comparação com Xamarin, Ionic e React]]></title><description><![CDATA[<div class="paragraph">
<p>Video introdutório sobre NativeScript e as principais diferenças entre Xamarin, Ionic e React.</p>
</div>
<div class="videoblock">
<div class="content">
<iframe src="https://www.youtube.com/embed/_cWfz1d2XLw?rel=0" frameborder="0" allowfullscreen></iframe>
</div>
</div>]]></description><link>https://nativescriptbrasil.github.io/2017/07/14/O-que-e-Native-Script-e-a-comparacao-com-Xamarin-Ionic-e-React.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/07/14/O-que-e-Native-Script-e-a-comparacao-com-Xamarin-Ionic-e-React.html</guid><dc:creator><![CDATA[Douglas Franco]]></dc:creator><pubDate>Fri, 14 Jul 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[Quão facil é criar um plugin para NativeScript]]></title><description><![CDATA[<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>É notório a crescente quantidade de plugins disponíveis para NativeScript desenvolvidos pela comunidade, e o motivo disso não é apenas a boa vontade e senso de contribuição por parte de quem desenvolve, e sim, inclusive, a <strong>facilidade que é desenvolver um plugin para NativeScript</strong>, principalmente depois da versão 3.0.</p>
</div>
<div class="paragraph">
<p>Neste artigo, irei demonstrar como desenvolvi o <strong><a href="https://github.com/dzfweb/nativescript-emoji">NativeScript Emoji</a></strong>, meu primeiro  UI Plugin para NativeScript. Ao termino da leitura deste artigo, espero despertar em você o interesse em desenvolver também um plugin e contribuir para a comunidade de desenvolvedores NativeScript, quem ganha com isso somos nós mesmos.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_por_onde_come_ar">Por onde começar?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Não vou entrar em detalhes sobre toda a estrutura necessaria para desenvolver um plugin para NativeScript pois isso não vai ser necessário para este artigo. Vou demonstrar o basico que você precisa saber para começar, mas caso prefira, a documentação completa você pode acessar <a href="https://docs.nativescript.org/plugins/plugins">clicando aqui</a>.</p>
</div>
<div class="paragraph">
<p>A maneira mais facil de começar um plugin para NativeScript, é utilizando o  <strong><a href="https://github.com/NathanWalker/nativescript-plugin-seed">NativeScript Plugin Seed</a></strong>, criado por NathanWalker. Esta biblioteca fará todo o trabalho árduo de criação da estrutura de um plugin NativeScript, e isso é realmente incrível. Veja como é facil:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>git clone <a href="https://github.com/NathanWalker/nativescript-plugin-seed.git" class="bare">https://github.com/NathanWalker/nativescript-plugin-seed.git</a> myplugin</p>
</li>
<li>
<p>cd myplugin</p>
</li>
<li>
<p>npm run postclone</p>
</li>
<li>
<p>npm run setup</p>
</li>
</ol>
</div>
<div class="paragraph">
<p>Pronto, com apenas estas etapas você terá criado toda estrutura necessária para desenvolver, testar e publicar seu plugin, mas antes de por a mão na massa, vamos fazer uma breve introdução sobre o plugin que vamos desenvolver juntos neste artigo.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_o_plugin_nativescript_emoji">O plugin NativeScript Emoji</h2>
<div class="sectionbody">
<div class="paragraph">
<p>O objetivo deste plugin é entregar um elemento para a interface para exibir Emojis de forma amigavel. A minha ideia inicial era ter um elemento TextView onde ao definir o valor unicode ou hexadecimal do emoji na propriedade correspondente:</p>
</div>
<div class="paragraph">
<p><code>&lt;Emoji:Emoji icon="128514"&gt;</code> <strong>exibir</strong> :😂</p>
</div>
<div class="paragraph">
<p>O plugin faria a conversão para Emoji, e aqui eu deixo um destaque novamente para a comunidade NativeScript no Slack (se você ainda não participa, faça sua inscrição agora <a href="http://developer.telerik.com/wp-login.php?action=slack-invitation">clicando aqui</a>), que me fizeram uma excelente sugestão de substituir a propriedade unicode por um valor amigavel e mais facil de lembrar, ficando então:</p>
</div>
<div class="paragraph">
<p><code>&lt;Emoji:Emoji name="joy"&gt;</code> <strong>exibir</strong> :😂</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_implementa_o_para_android_e_ios">Implementação para Android e iOS</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Agora que já temos a definição do plugin e a estrutura criada, é hora de por a mão na massa. A primeira coisa que precisamos fazer é definir a implementação comum entre as plataformas, sabemos que iremos ter uma propriedade <strong>name</strong> que servirá tanto para Android como para iOS, esta definição é feita no arquivo common que foi gerado na primeira etapa deste artigo.</p>
</div>
<div class="paragraph">
<p><strong>emoji.common.ts</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>import { View, Property } from "ui/core/view";

export class EmojiCommon extends View {
  name: string;
}

export const nameProperty = new Property&lt;EmojiCommon, string&gt;(
  {
    name: "name",
    defaultValue: ""
  });
nameProperty.register(EmojiCommon);</code></pre>
</div>
</div>
<div class="paragraph">
<p>Como se trata de um plugin para interface, precisamos extender a classe <strong>View</strong>. Os atributos do elemento que iremos criar, definimos criando um novo objeto do tipo <strong>Property</strong>, a propriedade <strong>name</strong> definimos o nome do atributo e o valor padrão, como o próprio nome sugere, definimos na propriedade <strong>defaultValue</strong>. Se o valor deste atributo fosse diferente do tipo <strong>string</strong>, que não é o nosso caso, seria necessário definir o valor para a propriedade <strong>valueConverter</strong>.</p>
</div>
<div class="paragraph">
<p>A codificação dos emojis são distintas para cada plataforma, por tanto precisamos ter uma base de dados para armazenar esses valores para consultarmos durante a execução do plugin.</p>
</div>
<div class="paragraph">
<p><strong>emoji.database.ts</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>export class EmojiDatabase {
    public static list(): Array&lt;any&gt; {
      return [
    {
        "name": "FACE WITH TEARS OF JOY",
        "unicode": "😂",
        "hexcode": "1F602",
        "codepoint": [
            128514
        ],
        "shortname": "joy"
    }];
}</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="_implementa_o_para_android">Implementação para Android</h3>
<div class="paragraph">
<p>Agora que ja temos os atributos do elemento que iremos criar, precisamos implementar o codigo responsável por gerar o elemento correspondente a cada plataforma. O NativeScript interpretará em tempo de execução o codigo específico para Android atravéz do seguinte arquivo.</p>
</div>
<div class="paragraph">
<p><strong>emoji.android.ts</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>import { nameProperty, EmojiCommon } from "./emoji.common";
import { EmojiDatabase } from "./emoji.database";
import * as utils from "tns-core-modules/utils/utils";
declare var java: any;

global.moduleMerge(EmojiCommon, exports);

export class Emoji extends EmojiCommon {
  [nameProperty.getDefault](): string {
    return '';
  }
  [nameProperty.setNative](value: string) {
    let emoji = EmojiDatabase.list().find((el) =&gt; el.shortname === value).codepoint[0];
    this.nativeView.setText(new java.lang.String(java.lang.Character.toChars(emoji)));
  }

  private _android: android.widget.TextView;

  get android() {
    return this.nativeView;
  }

  public createNativeView() {
    this._android = new android.widget.TextView(utils.ad.getApplicationContext());
    return this._android;
  }
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>O primeiro passo é extender a classe common criada anteriormente. Por se tratar de um plugin para interface, é necessário implementarmos o método <strong>createNativeView</strong>, que fará com que o o NativeScript entenda que algum elemento tem de ser criado na View. No nosso caso criaremos um <a href="https://developer.android.com/reference/android/widget/TextView.html">TextView</a>.</p>
</div>
<div class="paragraph">
<p>E novamente aqui temos outra grande ajuda do framework, a equipe do NativeScript mapeou todas as propriedades e métodos nativos de cada plataforma e gerou as definições em TypeScript, o que nos da a possibilidade de navegar por todas estas definições nativas diretamente no editor.</p>
</div>
<div class="paragraph">
<p>Temos que definir também o que o plugin fará quando receber o atributo <strong>name</strong>, isso é definido implementando o método <strong>setNative</strong>, que no nosso caso irá consultar o nome do emoji na base de dados, e com base no codigo correspondente, definira o valor para o TextView criado anteriormente. O metodo <strong>getDefault</strong> é para casos em que nenhum valor seja definido.</p>
</div>
</div>
<div class="sect2">
<h3 id="_implementa_o_para_ios">Implementação para iOS</h3>
<div class="paragraph">
<p>Podemos copiar a mesma implementação feita para o Android, e alterar somente as partes onde é criado e definido o valor para o elemento nativo, que no caso do iOS será  o <a href="https://developer.apple.com/reference/uikit/uilabel">UILabel</a> ficando da seguinte maneira.</p>
</div>
<div class="paragraph">
<p><strong>emoji.ios.ts</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>import { nameProperty, EmojiCommon } from "./emoji.common";
import { EmojiDatabase } from "./emoji.database";

global.moduleMerge(EmojiCommon, exports);

export class Emoji extends EmojiCommon {
  [nameProperty.getDefault](): number {
    return 0;
  }
  [nameProperty.setNative](value: string) {
    let emoji = EmojiDatabase.list().find((el) =&gt; el.shortname === value).unicode;
    let nsString = NSString.stringWithString(emoji);
    this.nativeView.text = nsString;
  }

  private _ios: UILabel;

  get ios() {
    return this.nativeView;
  }

  public createNativeView() {
    this._ios = UILabel.alloc().init();
    return this._ios;
  }
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>Novamente aqui será possivel acessar a definição dos metodos nativos para iOS, no metodo <strong>createNativeView</strong> é criado um UILabel e no método <strong>setNative</strong> é definido o valor para o elemento criado.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_testando_o_plugin">Testando o plugin</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Sim, terminamos a implementação do plugin e o que resta agora é apenas testarmos. Rapido não? Para testarmos precisamos adicionar o plugin ao projeto <strong>demo</strong> criado nas etapas iniciais deste artigo. Para isso, é necessário executar o comando:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>npm run preparedemo</code></pre>
</div>
</div>
<div class="paragraph">
<p>Adicionar a referencia do elemento no elemento <strong>Page</strong> do arquivo <strong>main-page.xml</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>xmlns:Emoji="nativescript-emoji"</code></pre>
</div>
</div>
<div class="paragraph">
<p>e então adicionar o elemento no dentro do <strong>StackLayout</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>&lt;Emoji:Emoji name="joy" /&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>Ficando da seguinte maneira.</p>
</div>
<div class="paragraph">
<p><strong>main-page.xml</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>&lt;Page xmlns="http://schemas.nativescript.org/tns.xsd" xmlns:Emoji="nativescript-emoji" navigatingTo="navigatingTo" class="page"&gt;

    &lt;Page.actionBar&gt;
        &lt;ActionBar title="NativeScript Emoji" icon="" class="action-bar"&gt;
        &lt;/ActionBar&gt;
    &lt;/Page.actionBar&gt;
    &lt;StackLayout orientation="horizontal"&gt;
        &lt;Label text="I'm happy "&gt; &lt;/Label&gt;
        &lt;Emoji:Emoji name="joy" /&gt;
        &lt;Emoji:Emoji name="joy" /&gt;
        &lt;Emoji:Emoji name="joy" /&gt;
    &lt;/StackLayout&gt;
&lt;/Page&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>Agora resta executar o projeto de demonstração nos emuladores de cada plataforma executando os seguintes comandos.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code>nmm run demo.ios
npm run demo.android</code></pre>
</div>
</div>
<div class="paragraph">
<p><span class="image"><img src="https://raw.githubusercontent.com/dzfweb/nativescript-emoji/master/emojiprintscreen.png" alt="emojiprintscreen.png"></span></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_conclus_o">Conclusão</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Podemos ver como é facil e rapido desenvolver um plugin para NativeScript, destaco alguns pontos como a comunidade de desenvolvedores NativeScript que são bem participativos, a equipe da Telerik que a procura entregar a cada versão ferramentas que visão tornar nosso trabalho como desenvolvedor muito mais produtivo e lanço o convite para você desenvolvedor que está lendo este artigo. Você desenvolveu algo customizado em algum projeto? Tem alguma ideia sobre alguma ferramenta que possa ser util? Contribua conosco também.</p>
</div>
</div>
</div>]]></description><link>https://nativescriptbrasil.github.io/2017/05/22/Quao-Facil-e-criar-um-plugin-para-Native-Script.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/05/22/Quao-Facil-e-criar-um-plugin-para-Native-Script.html</guid><category><![CDATA[NativeScript]]></category><category><![CDATA[ plugin]]></category><dc:creator><![CDATA[Douglas Franco]]></dc:creator><pubDate>Mon, 22 May 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[Navegação com TabView]]></title><description><![CDATA[<div class="paragraph">
<p>Hoje vou mostrar um pouco como fazer uma navegação usando TabView.
TabView é aquela navegação por abas que no iOS, por padrão, fica na parte inferior da view, enquanto no Android fica na parte superior.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="https://docs.nativescript.org/angular/code-samples/ui/img/tab-view-image.png" alt="tab view image.png">
</div>
</div>
<div class="paragraph">
<p>Aplicativos como o Twitter, Instagram e Facebook usam esse tipo de navegação. É bastante útil quando você quer uma navegação rápida e sempre visível.</p>
</div>
<div class="paragraph">
<p>A TabView é criada usando as tags <strong>&lt;TabView&gt;&lt;/TabView&gt;</strong>. Dentro dela vão os itens, ou seja, as abas.
Veja nesse exemplo como é simples:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>&lt;TabView&gt;
    &lt;StackLayout *tabItem="{title: 'Aba A', iconSource: '~/icone_a.png'}"&gt;
        &lt;Label text="Conteúdo Aba A" color="green"&gt;&lt;/Label&gt;
    &lt;/StackLayout&gt;
    &lt;StackLayout *tabItem="{title: 'Aba B', iconSource: '~/icone_b.png'}"&gt;
        &lt;Label text="Conteúdo Aba B" color="green"&gt;&lt;/Label&gt;
    &lt;/StackLayout&gt;
&lt;/TabView&gt;</pre>
</div>
</div>
<div class="paragraph">
<p>O StackLayout foi só um exemplo, no lugar você pode usar qualquer um dos <a href="https://nativescriptbrasil.github.io/2017/03/19/ui-layouts-no-nativescript.html">tipos de layouts do NativeScript</a>. O importante é ele ter o atributo que fala que aquele conteúdo é um item do TabView, o <em>tabItem</em>. Esse atributo recebe como valor um objeto, sendo que ele pode ter um título (<em>title</em>) e uma imagem (<em>iconSource</em>) como propriedades.
A imagem referente ao iconSource só é exibida no iOS, no Android só o texto fica visível.</p>
</div>
<div class="paragraph">
<p>Como podem ter percebido, a aba que vem selecionada por padrão, é sempre a primeira, o que não impede você mudar esse comportamento. Para fazer isso, é só usar o atributo <em>selectedIndex</em>, na tag &lt;TabView&gt;, especificando o index da aba que você quer que venha selecionada. Vale lembrar que o index começa no zero.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>&lt;TabView selectedIndex="1"&gt;
  ...
&lt;/TabView&gt;</pre>
</div>
</div>
<div class="paragraph">
<p>E se você quiser mudar a cor de seleção da aba? Não é nada complicado, usando o atributo <em>selectedColor</em> você consegue fazer isso.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>&lt;TabView selectedIndex="1" selectedColor="#00FF00"&gt;
  ...
&lt;/TabView&gt;</pre>
</div>
</div>
<div class="paragraph">
<p>Você pode querer executar uma ação quando o usuário seleciona uma das abas. Isso é feito usando o evento <em>selectedIndexChanged</em>, também na &lt;TabView&gt;.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>&lt;TabView selectedIndex="1" selectedColor="#00FF00" (selectedIndexChanged)="alterarAba($event)"&gt;
  ...
&lt;/TabView&gt;</pre>
</div>
</div>
<div class="paragraph">
<p>E no .ts:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>public alterarAba(e: any) {
    console.log(e);
}</pre>
</div>
</div>
<div class="paragraph">
<p>Para páginas (abas) com pouco conteúdo, esse código simples pode ser facilmente usado. O problema é quando o conteúdo das páginas começam a ficar grades, a ter listas, formulários etc. Nesses casos, usar o TabView desse jeito vai deixar o seu código muito difícil de dar manutenções. Vai chegar uma hora que você não vai mais entender o funcionamento das coisas.
O ideal é deixar a página com a tabView o mais simples possível e separar as páginas que vão abrir em componentes. Sabendo que no Angular você define um seletor quando cria um componente, a sua TabView poderia ficar assim:</p>
</div>
<div class="paragraph">
<p>Arquivo aba-a.component.ts</p>
</div>
<div class="listingblock">
<div class="content">
<pre>@Component({
    selector: "aba-a",
    moduleId: module.id,
    templateUrl: "./aba-a.component.html",
})
export class AbaAComponent {}</pre>
</div>
</div>
<div class="paragraph">
<p>Página com a tabView</p>
</div>
<div class="listingblock">
<div class="content">
<pre>&lt;TabView&gt;
    &lt;StackLayout *tabItem="{title: 'Aba A'}"&gt;
        &lt;aba-a&gt;&lt;/aba-a&gt;
    &lt;/StackLayout&gt;
    &lt;StackLayout *tabItem="{title: 'Aba B' }"&gt;
        &lt;Label text="Conteúdo Aba B" color="green"&gt;&lt;/Label&gt;
    &lt;/StackLayout&gt;
&lt;/TabView&gt;</pre>
</div>
</div>
<div class="paragraph">
<p>Repare que eu posso tanto usar um conteúdo de compomente, como também posso usar o conteúdo direto na página, vai depender de como você quer organizar o seu código.
Eu acho mais organizado deixar tudo em arquivos separados, mesmo quando o conteúdo é pequeno.</p>
</div>
<div class="paragraph">
<p>Por hoje é isso. O código é simples mas bastante útil.</p>
</div>]]></description><link>https://nativescriptbrasil.github.io/2017/05/01/navegacao-com-tabview.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/05/01/navegacao-com-tabview.html</guid><category><![CDATA[UI]]></category><category><![CDATA[ Navegação]]></category><category><![CDATA[ Layout]]></category><dc:creator><![CDATA[Alex Hiroshi]]></dc:creator><pubDate>Mon, 01 May 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[Imersão NativeScript #2 - Criando um novo projeto NativeScript com Angular 2]]></title><description><![CDATA[<div class="paragraph">
<p>Fala pessoal, compartilho com vocês uma video aula parte do curso NativeScript com Angular 2 que estou gravando.</p>
</div>
<div class="videoblock">
<div class="content">
<iframe src="https://www.youtube.com/embed/2yZAKoMIv3Y?rel=0" frameborder="0" allowfullscreen></iframe>
</div>
</div>
<div class="paragraph">
<p>O curso completo contará com aproximadamente 20 aulas, em breve trarei mais informações. Deixe seu comentario com sugestão, duvidas e temas que você gostaria que fosse discutido nas aulas.</p>
</div>]]></description><link>https://nativescriptbrasil.github.io/2017/04/21/criando-novo-projeto-nativescript-com-angular-2.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/04/21/criando-novo-projeto-nativescript-com-angular-2.html</guid><category><![CDATA[NativeScript]]></category><category><![CDATA[ Angular2]]></category><dc:creator><![CDATA[Douglas Franco]]></dc:creator><pubDate>Fri, 21 Apr 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[UI Layouts no NativeScript]]></title><description><![CDATA[<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Se você está começando agora a mexer com NativeScript, é bom entender o que é possível fazer na parte visual, no UI do aplicativo.</p>
</div>
<div class="paragraph">
<p>Aproveitando, não deixe de ler o primeiro artigo de <a href="https://nativescriptbrasil.github.io/2017/03/14/instalando-nativescript.html">Imersão NativeScript</a> que o Douglas está escrevendo.</p>
</div>
<div class="paragraph">
<p>O NativeScript possui 6 tipos de layouts predefinidos que vai ajudar a organizar o visual do seu aplicativo. Esses layouts, na verdade, são marcações inseridas no html dos componentes de um aplicativo, e também podem ser criados usando os módulos de cada um diretamente no componente (no arquivo js ou ts).</p>
</div>
<div class="paragraph">
<p>Aqui vou mostrar exemplos de escrita no HTML, que é mais comum.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_stacklayout">StackLayout</h3>
<div class="paragraph">
<p>Talvez esse seja o que layout que será mais usado. Ele faz o básico, que é colocar em pilha (stack) os elementos na view, ou seja, se você precisa mostrar elementos um embaixo do outro, como campos de formulário, esse é o layout que deverá ser utilizado.</p>
</div>
<div class="paragraph">
<p>Para quem vem do HTML e CSS, podemos dizer que é como deixar todos os elementos dentro do container com um <strong>display:block</strong>.
É possível usar um atributo <em>orientation</em> para organizar os elementos na horizontal. Basta atribuir o valor do atributo para <em>horizontal</em>.
Um exemplo:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>&lt;StackLayout&gt;
    &lt;Label text="Nome" /&gt;
    &lt;TextField hint="Digite o nome" /&gt;
    &lt;Label text="E-mail" /&gt;
    &lt;TextField hint="Digite o e-mail" /&gt;
&lt;/StackLayout&gt;</pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_gridlayout">GridLayout</h3>
<div class="paragraph">
<p>Define áreas em colunas e linhas, ou seja, na tag GridLayout você define <em>columns</em> e <em>rows</em> em que os elementos internos irão se posicionar. Em cada elemento, é adicionado um atributo <em>col</em> e/ou <em>row</em> para deixar o elemento no lugar certo.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>&lt;GridLayout columns="60, auto" rows="auto, *" &gt;
    &lt;Label text="Coluna 0 - Linha 0" col="0" /&gt;
    &lt;Label text="Coluna 1 - Linha 0" col="1" /&gt;
    &lt;Label text="Coluna 0 - Linha 1" col="0" row="1" /&gt;
    &lt;Label text="Coluna 1 - Linha 1" col="1" row="1" /&gt;
&lt;/GridLayout&gt;</pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_wraplayout">WrapLayout</h3>
<div class="paragraph">
<p>Esse layout posiciona os elementos internos em colunas ou linhas, dependendo da definição da propriedade orientation, que pode ser <em>vertical</em> ou <em>horizontal</em>, por padrão o valor é <em>horizontal</em>.</p>
</div>
<div class="paragraph">
<p>O WrapLayout lembra um pouco o StackLayout, posicionando elementos na horizontal ou vertical. A diferença é que o StackLayout não faz quebras de linhas ou colunas. O WrapLayout, quando tem a propriedade <em>orientation</em> como <em>horizontal</em>, quebra a linha quando o elemento não cabe mais na tela. Se a propriedade estiver com o valor <em>vertical</em>, ele cria colunas quando o elemento chega no final da tela.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>&lt;WrapLayout orientation="vertical"&gt;
    &lt;Label text="Elemento 1" /&gt;
    &lt;Label text="Elemento 2" /&gt;
    &lt;Label text="Elemento 3" /&gt;
    &lt;Label text="Elemento 4" /&gt;
    &lt;Label text="Elemento 5" /&gt;
    &lt;Label text="Elemento 6" /&gt;
    &lt;Label text="Elemento 7" /&gt;
    &lt;Label text="Elemento 8" /&gt;
    &lt;Label text="Elemento 9" /&gt;
&lt;/WrapLayout&gt;</pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_docklayout">DockLayout</h3>
<div class="paragraph">
<p>Esse layout posiciona os elementos internos nas bordas do DockLayout. Para isso, cada elemento recebe um atributo dock, que pode ter os valores <em>top, right, bottom e left</em>. Você pode adicionar um elemento sem o atributo dock e ele ficará posicionado no espaço que sobrar no meio do layout.</p>
</div>
<div class="paragraph">
<p>Caso queira que o último elemento ocupe todo o espaço restante, existe a propriedade <em>stretchLastChild</em> para a tag DockLayout. Essa propriedade recebe um valor true/false. Se true, ele vai pegar o último elemento e esticar até ocupar o espaço vazio.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>&lt;DockLayout stretchLastChild="true"&gt;
    &lt;Button dock="left" text="1" style="background-color: red; margin: 5;" /&gt;
    &lt;Button dock="top" text="2" style="background-color: green; margin: 5;" /&gt;
    &lt;Button dock="right" text="3" style="background-color: blue; margin: 5;" /&gt;
    &lt;Button dock="bottom" text="4" style="background-color: yellow; margin: 5;" /&gt;
    &lt;Button text="ocupa espaço" style="background-color: black; margin: 5;" /&gt;
&lt;/DockLayout&gt;</pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_absolutelayout">AbsoluteLayout</h3>
<div class="paragraph">
<p>Fazendo uma analogia com o CSS, é como fosse usado o <strong>position:absolute</strong> nos elementos internos. Bem simples, cada elemento interno recebe os atributos <em>left</em> e <em>top</em>.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>&lt;AbsoluteLayout&gt;
    &lt;Label text="Posição 0 left e 70 top" left="0" top="70" /&gt;
    &lt;Label text="Posição 10 left e 100 top" left="10" top="100" /&gt;
&lt;/AbsoluteLayout&gt;</pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_flexboxlayout">FlexboxLayout</h3>
<div class="paragraph">
<p>O layout FlexboxLayout merece um post para falar sobre ele. Basicamente, ele funciona como o <a href="https://css-tricks.com/snippets/css/a-guide-to-flexbox/">CSS flexbox</a>. A documentação no NativeScript deixar até como referência <a href="https://css-tricks.com/snippets/css/a-guide-to-flexbox/">esse link</a>, porque eles traduzem as propriedades do CSS para propriedades que funcionam em um código xml ou js do NativeScript.</p>
</div>
<div class="paragraph">
<p>A tag FlexboxLayout é como se fosse um div com <strong>display:flex</strong>. Então, nos elementos internos, você precisa definir os espaços, as colunas, o posicionamento, como se fosse no css.</p>
</div>
</div>
<div class="sect1">
<h2 id="_propriedades">Propriedades</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Para finalizar, todas essas tags de layouts possuem algumas propriedades:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>width</p>
</li>
<li>
<p>height</p>
</li>
<li>
<p>minWidth</p>
</li>
<li>
<p>minHeight</p>
</li>
<li>
<p>visibility</p>
</li>
<li>
<p>marginTop</p>
</li>
<li>
<p>marginRight</p>
</li>
<li>
<p>marginBottom</p>
</li>
<li>
<p>marginLeft</p>
</li>
<li>
<p>horizontalAlignment</p>
</li>
<li>
<p>verticalAlignment</p>
</li>
</ul>
</div>
</div>
</div>]]></description><link>https://nativescriptbrasil.github.io/2017/03/19/ui-layouts-no-nativescript.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/03/19/ui-layouts-no-nativescript.html</guid><category><![CDATA[Layout]]></category><category><![CDATA[ UI]]></category><dc:creator><![CDATA[Alex Hiroshi]]></dc:creator><pubDate>Sun, 19 Mar 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[Imersão NativeScript #1 - Instalando o NativeScript]]></title><description><![CDATA[<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Este é o primeiro de uma série de artigos que irei lançar nas próximas semanas onde irei abordar a criação de um projeto em NativeScript com Angular 2 desde o inicio, desde a instalação, criação, melhores práticas e muito mais.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_instalando_nativescript">Instalando NativeScript</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_windows">Windows</h3>
<div class="paragraph">
<p>Se você estiver no Windows, você pode optar por utilizar o instalador oficial do <strong>NativeScript</strong> atravéz o seguinte link:
<a href="https://docs.nativescript.org/start/ns-setup-installer" class="bare">https://docs.nativescript.org/start/ns-setup-installer</a></p>
</div>
<div class="paragraph">
<p>O instalador irá realizar toda a configuração do ambiente necessária para desenvolvimento com Android (já que para desenvolver para iOS você precisa de um Mac). Se preferir, você pode acessar o guia avançado de instalação para Windows <a href="https://docs.nativescript.org/start/ns-setup-win">clicando aqui</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="_mac">Mac</h3>
<div class="ulist">
<ul>
<li>
<p>Instale o Node:</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>brew install node</pre>
</div>
</div>
<div class="ulist">
<ul>
<li>
<p>Instale o NativeScript:</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>npm install -g nativescript</pre>
</div>
</div>
<div class="ulist">
<ul>
<li>
<p>Configurar o Android e iOS SDK</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Agora precisamos configurar o ambiente para desenvolver para Android e iOS. Existe um script oficial da Telerik onde é realizada a instalação completa executando o seguinte comando:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>ruby -e "$(curl -fsSL https://www.nativescript.org/setup/mac)"</pre>
</div>
</div>
<div class="paragraph">
<p>O processo de instalação pode demorar alguns minutos, seja paciente. Se preferir, você pode consultar o <a href="https://docs.nativescript.org/start/ns-setup-os-x">manual de instalação completo para macOS clicando aqui.</a></p>
</div>
</div>
<div class="sect2">
<h3 id="_linux">Linux</h3>
<div class="ulist">
<ul>
<li>
<p>Instale o node:</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 libstdc++6:i386</pre>
</div>
</div>
<div class="paragraph">
<p>se o comando anterior estourar o erro <code>Unable to locate package lib32bz2-1.0</code>, então use este comando:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>sudo apt-get install lib32z1 lib32ncurses5 libbz2-1.0:i386 libstdc++6:i386</pre>
</div>
</div>
<div class="ulist">
<ul>
<li>
<p>Instale o G++ compiler:</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>sudo apt-get install g++</pre>
</div>
</div>
<div class="ulist">
<ul>
<li>
<p>Instale o JDK 8:</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer</pre>
</div>
</div>
<div class="ulist">
<ul>
<li>
<p>Configure o JAVA:</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>sudo update-alternatives --config java</pre>
</div>
</div>
<div class="ulist">
<ul>
<li>
<p>Configure a variavel de ambiente <strong>JAVA_HOME</strong></p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>export JAVA_HOME=$(update-alternatives --query javac | sed -n -e 's/Best: *\(.*\)\/bin\/javac/\1/p')</pre>
</div>
</div>
<div class="ulist">
<ul>
<li>
<p>Instale o Android SDK
Acesse o link abaixo, navegue até a seção de downloads para linux e realize o download:
<a href="https://developer.android.com/sdk/index.html#Other" class="bare">https://developer.android.com/sdk/index.html#Other</a></p>
</li>
<li>
<p>Configure a variavel de ambiente <strong>ANDROID_HOME</strong>
Após a instalação do Android SDK, execute o comando:</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>export ANDROID_HOME=Path to Android installation directory</pre>
</div>
</div>
<div class="ulist">
<ul>
<li>
<p>Instale os pacotes necessarios para o ambiente de desenvolvimento Android:</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>sudo $ANDROID_HOME/tools/android update sdk --filter tools,platform-tools,android-23,build-tools-23.0.3,extra-android-m2repository,extra-google-m2repository,extra-android-support --all --no-ui</pre>
</div>
</div>
<div class="ulist">
<ul>
<li>
<p>Instale o CLI do NativeScript</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre>sudo npm install nativescript -g --unsafe-perm</pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_verificando_o_status_da_instala_o">Verificando o status da Instalação</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Após a instalação do NativeScript, você terá acesso ao CLI (command line interface). Confira se tudo esta certo executando o seguinte comando:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>tns doctor</pre>
</div>
</div>
<div class="paragraph">
<p>o resultado deverá ser o seguinte:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>λ tns doctor

┌──────────────┬─────────────────┬────────────────┬──────────────────┐
│ Component    │ Current version │ Latest version │ Information      │
│ nativescript │ 2.5.1           │ 2.5.2          │ Update available │
└──────────────┴─────────────────┴────────────────┴──────────────────┘</pre>
</div>
</div>
<div class="sect2">
<h3 id="_pr_ximos_passos">Próximos passos</h3>
<div class="paragraph">
<p>Agora que você tem um ambiente configurado, você está apto a desenvolver em NativeScript utilizando JavaScript, TypeScript ou Angular 2.
Na próximo artigo irei iniciar um projeto do zero em Angular 2 e iremos abordar diversos temas sobre o <strong>NativeScript</strong>.</p>
</div>
</div>
</div>
</div>]]></description><link>https://nativescriptbrasil.github.io/2017/03/14/instalando-nativescript.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/03/14/instalando-nativescript.html</guid><category><![CDATA[Curso]]></category><category><![CDATA[ NativeScript]]></category><dc:creator><![CDATA[Douglas Franco]]></dc:creator><pubDate>Tue, 14 Mar 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[10 motivos para optar por NativeScript]]></title><description><![CDATA[<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Apesar de novo, o <a href="http://nativescript.org/">framework</a> vem demonstrando sua força a cada atualização. Nesse artigo demonstro algumas motivos de porque escolhe-lo.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_1_open_source">1: Open Source</h3>
<div class="paragraph">
<p>Não poderia começar por outro ponto que não este. O <strong>NativeScript</strong> é totalmente open source, o repositório do projeto pode ser acessado atravéz o link <a href="https://github.com/NativeScript" class="bare">https://github.com/NativeScript</a>. O projeto possui uma comunidade muito ativa, por diversas vezes que precisei abrir uma issue, em poucas horas obtive respostas de membros da propria equipe do projeto, bem como demais usuários.</p>
</div>
</div>
<div class="sect2">
<h3 id="_2_mantido_pela_telerik">2: Mantido pela Telerik</h3>
<div class="imageblock">
<div class="content">
<img src="http://lrdnug.org/images/logos/telerik_new-logo.png" alt="telerik new logo.png">
</div>
</div>
<div class="paragraph">
<p>Esse foi um dos motivos que me levou a escolher o <strong>NativeScript</strong> quando estava estudando sobre frameworks para desenvolvimento de aplicativos móveis: <em>Ser mantido pela Telerik</em>. Telerik é uma empresa búlgara criada em 2002 e se destaca por desenvolver ferramentas poderosas para desenvolvedores, como Fiddler, Telerik Reporting, JustCode, Kendo UI, entre outros. Ferramentas estas que não são acessíveis para todos, pois possuem licenças caríssimas, entretanto para o <strong>NativeScript</strong>, eles adotaram uma maneira de monetizar o negócio diferente, a exemplo do que vem fazendo a Microsoft com seus produtos, a Telerik oferece o <strong>NativeScript</strong> totalmente gratuito, e caso você desejar, pode contar com um suporte técnico da empresa e ferramentas exclusivas como o <strong>NativeScript-UI</strong> (componentes extras para interfaces) adquirindo uma licença premium.</p>
</div>
</div>
<div class="sect2">
<h3 id="_3_web_skills_javascript_e_css">3: Web Skills: JavaScript e CSS</h3>
<div class="imageblock">
<div class="content">
<img src="https://image.ibb.co/hcbXwF/Screenshot_90.png" alt="Screenshot 90.png">
</div>
</div>
<div class="paragraph">
<p>Ao iniciar um projeto em <strong>NativeScript</strong> você tem a opção de escolher 3 arquiteturas para o projeto: <strong>JavaScript</strong>, <strong>TypeScript</strong> ou <strong>Angular2</strong>. Além disso, você poderá contar com o <strong>CSS</strong> para a interface. Não são todas as propriedades do CSS que temos ao desenvolver para web, até por que não temos DOM para manipular já que são elementos puramente nativos, você pode acessar a lista completa <a href="https://docs.nativescript.org/ui/styling#supported-css-properties">clicando aqui</a>. De modo geral, você irá reaproveitar todo seu conhecimento em desenvolvimento para web, ao desenvolver com <strong>NativeScript</strong>.</p>
</div>
</div>
<div class="sect2">
<h3 id="_4_multi_plataforma">4: Multi-plataforma</h3>
<div class="imageblock">
<div class="content">
<img src="https://adtmag.com/~/media/ECG/redmondmag/Images/introimages/REDMackie0613AndroidiOS_v2.jpg" alt="REDMackie0613AndroidiOS v2.jpg">
</div>
</div>
<div class="paragraph">
<p>Um dos slogans do <strong>NativeScript</strong> é <em>"write once, run everywhere"</em> (escreva uma vez, rode em qualquer lugar). Com o <strong>NativeScript</strong> você terá um unico projeto escrito em JavaScript servindo diferentes plataformas (Android e iOS).</p>
</div>
</div>
<div class="sect2">
<h3 id="_5_componentes_nativos">5: Componentes nativos</h3>
<div class="imageblock">
<div class="content">
<img src="http://www.hybridtonative.com/images/nativescript-theme.png" alt="nativescript theme.png">
</div>
</div>
<div class="paragraph">
<p>As interfaces do <strong>NativeScript</strong> são escritas em XML, não temos HTML, não há DOM, o NativeScript entrega para você componentes realmente nativos, por conta disso o ganho em performance é elevado em comparação a outros frameworks</p>
</div>
</div>
<div class="sect2">
<h3 id="_6_sem_compila_o">6: Sem compilação</h3>
<div class="imageblock">
<div class="content">
<img src="https://superdevresources.com/wp-content/uploads/2014/06/cross-platform-app-development-telerik-nativescript.png" alt="cross platform app development telerik nativescript.png">
</div>
</div>
<div class="paragraph">
<p>O <strong>NativeScript</strong> não compila nenhum código. O código que você escreve em JavaScript é entregue integralmente no dispositivo. O <strong>NativeScript</strong> lhe da acesso integral a VM JavaScript do dispositivo (V8 no android e JavaScriptCore no iOS). Por conta disso, desenvolver em <strong>NativeScript</strong> se torna muito mais atrativo, pois você tem um ambiente mais fluido, sem pausas para recompilar, e também graças ao <strong>livesync</strong> que você pode utilizar enquanto está desenvolvendo, onde o aplicativo é atualizado automaticamente a cada mudança no código. Falarei mais sobre esse assunto em outra oportunidade.</p>
</div>
</div>
<div class="sect2">
<h3 id="_7_vasta_op_es_de_pacotes">7: Vasta opções de pacotes</h3>
<div class="imageblock">
<div class="content">
<img src="https://image.ibb.co/gHEViv/npmcocoapodgradle.png" alt="npmcocoapodgradle.png">
</div>
</div>
<div class="paragraph">
<p>Você poderá utilizar a maioria dos pacotes NPM que você ja utiliza para desenvolver para web, também no <strong>NativeScript</strong> (desde que este não dependa de DOM). No momento em que escrevo esse artigo existem cerca de 466 pacotes exclusivos para <strong>NativeScript</strong> no <a href="https://www.npmjs.com/search?q=nativescript">repositório NPM</a>. E não é só isso, caso você
deseje, poderá utilizar também pacotes dos repositórios cocoapods e gradle, e reaproveitar pacotes nativos de cada plataforma, também no <strong>NativeScript</strong>. Isso é muito útil para quem ja desenvolve apps em JAVA ou Object-C e já tenha experiência com alguns pacotes em cada plataforma.</p>
</div>
</div>
<div class="sect2">
<h3 id="_8_depura_o_de_c_digo">8: Depuração de Código</h3>
<div class="imageblock">
<div class="content">
<img src="https://i.ytimg.com/vi/KQHJewS3tqA/maxresdefault.jpg" alt="maxresdefault.jpg">
</div>
</div>
<div class="paragraph">
<p>O <strong>NativeScript</strong> possui extensões para o Visual Studio Code, Web Storm para debugar o código durante o desenvolvimento. E na ultima atualização (versão 2.5.0) foi entregue suporte para utilizar o Chrome Developer Tools para debugar também. Isso tornará o ambiente de desenvolvimento mais produtivo.</p>
</div>
</div>
<div class="sect2">
<h3 id="_9_100_de_acesso_as_api_s_nativas">9: 100% de acesso as API&#8217;s nativas</h3>
<div class="imageblock">
<div class="content">
<img src="https://image.slidesharecdn.com/nativescriptlondonmobiledev-150109075452-conversion-gate02/95/native-script-by-sebastian-witalec-8-638.jpg?cb=1420811743" alt="native script by sebastian witalec 8 638.jpg?cb=1420811743">
</div>
</div>
<div class="paragraph">
<p>Esse sem sombra de dúvidas é o que faz com que o <strong>NativeScript</strong> se destaque perante os concorrentes. Tanto no ReactNative como no Xamarin por exemplo, você tem acesso limitado as API&#8217;s nativas, o que esses frameworks fazem é encapsular a API nativa, uma por uma, e te entregar o acesso atravéz o código o framework, como um atalho. No <strong>NativeScript</strong> isso não ocorre, você tem acesso integral a API do dispositivo, como uma ponte direta a engine. Você não precisa escrever JAVA ou Object-C, você tem acesso integral atravéz JavaScript. Outro ponto positivo em ter acesso direto a API do dispositivo, é em questão de atualizações. Se o Android lançar uma SDK nova por exemplo, você poderá utilizar sem maiores dificuldades, bastanto apenas atualizar sua suite de desenvolvimento, no caso do Xamarin ou ReactNative, você teria que esperar sair uma atualização do framework.</p>
</div>
</div>
<div class="sect2">
<h3 id="_10_atualiza_es_frequentes_muita_novidade">10: Atualizações frequentes, muita novidade</h3>
<div class="imageblock">
<div class="content">
<img src="http://www.heliosdesign.co.za/export/sites/helios/blog/images3/update-frequently.jpg" alt="update frequently.jpg">
</div>
</div>
<div class="paragraph">
<p>Se você acompanhar o projeto no <a href="https://github.com/nativescript/">github</a> verá que a equipe de desenvolvimento não para. É atualização atraz de atualização, a versão <a href="https://www.nativescript.org/blog/nativescript-25-is-now-available">2.5.0</a> mal foi entregue, recheada de recursos novos e melhorias, e a Telerik já soltou notícias de um <a href="https://www.nativescript.org/blog/sneak-preview-of-nativescript-3.0"><em>major update</em> para 3.0</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="_destaques_da_ltima_vers_o">Destaques da última versão</h3>
<div class="ulist">
<ul>
<li>
<p>Suporte para o Chrome Developer Tools</p>
</li>
<li>
<p>Melhorias no CLI</p>
</li>
<li>
<p>Atualização na extensão para Visual Studio Code</p>
</li>
<li>
<p><a href="http://www.telerik.com/nativescript-ui">Novos componentes no NativeScript UI</a></p>
</li>
<li>
<p><a href="https://webpack.github.io/">Suporte ao Webpack Module Bundler</a></p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_o_que_vem_por_ai">O que vem por ai</h3>
<div class="paragraph">
<p>Muito rumor ainda paira sobre a versão 3.0, mas a equipe Telerik já deu algumas dicas de que vem coisa grande por ai. Estão reestruturando a arquitetura do NativeScript para torna-lo ainda mais rapido, em alguns testes <a href="https://www.nativescript.org/blog/sneak-preview-of-nativescript-3.0">resultaram em um ganho de performance de até 400%</a>, e não é só isso, estão ampliando o acesso as funcionalidades do Chrome Dev Tools, melhorias no minificador WebPack e um instalador novo para quem não se sentir confortavel em usar linha de comando.</p>
</div>
</div>
<div class="sect2">
<h3 id="_conclus_o">Conclusão</h3>
<div class="paragraph">
<p>O objetivo desse artigo foi fazer um panorama sobre o NativeScript e seus benefícios. A curva de aprendizado é baixíssima, visto que você reaproveitará grande parte do seu conhecimento em desenvolvimento para Web.
Nas próximas semanas irei lançar conteúdos sobre o <strong>NativeScript</strong> e espero que possamos juntos enriquecer esse portal com material de qualidade para todos os níveis.</p>
</div>
</div>]]></description><link>https://nativescriptbrasil.github.io/2017/03/11/Por-que-escolher-Native-Script.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/03/11/Por-que-escolher-Native-Script.html</guid><category><![CDATA[Blog]]></category><dc:creator><![CDATA[Douglas Franco]]></dc:creator><pubDate>Sat, 11 Mar 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[NativeScript Brasil]]></title><description><![CDATA[<div class="sect2">
<h3 id="_comunidade_brasileira_sobre_nativescript">Comunidade brasileira sobre NativeScript.</h3>
<div class="paragraph">
<p>Grupo criado com o intuito de reunir artigos, materiais e projetos sobre NativeScript para a comunicade de desenvolvedores brasileiros.</p>
</div>
<div class="paragraph">
<p>Em breve novidades, acompanhe-nos nas redes sociais:</p>
</div>
<div class="paragraph">
<p><a href="https://www.facebook.com/groups/nativescriptbrasil/?ref=br_rs">Facebook</a></p>
</div>
<div class="paragraph">
<p><a href="https://www.youtube.com/channel/UChXJEo5jpog58CvymfAJgMQ">Youtube</a></p>
</div>
<div class="paragraph">
<p><a href="https://github.com/NativeScriptBrasil">Github</a></p>
</div>
</div>]]></description><link>https://nativescriptbrasil.github.io/2017/03/10/Native-Script-Brasil.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/03/10/Native-Script-Brasil.html</guid><category><![CDATA[NativeScript]]></category><category><![CDATA[ Blog]]></category><category><![CDATA[ Novidades]]></category><dc:creator><![CDATA[Douglas Franco]]></dc:creator><pubDate>Fri, 10 Mar 2017 00:00:00 GMT</pubDate></item></channel></rss>