<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>ionic Archives - Hiago Silva Souza</title>
	<atom:link href="https://www.hiago.me/tag/ionic/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.hiago.me/tag/ionic/</link>
	<description></description>
	<lastBuildDate>Wed, 28 Nov 2018 01:50:12 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.5</generator>

<image>
	<url>https://www.hiago.me/wp-content/uploads/2019/01/cropped-icon-hiagus-2-32x32.png</url>
	<title>ionic Archives - Hiago Silva Souza</title>
	<link>https://www.hiago.me/tag/ionic/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">147457425</site>	<item>
		<title>Ionic &#038; Angular: Fazendo o CORS seu amigo</title>
		<link>https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/</link>
					<comments>https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/#comments</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Sat, 08 Sep 2018 18:03:07 +0000</pubDate>
				<category><![CDATA[Infraestrutura]]></category>
		<category><![CDATA[Ionic]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PWA]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[angular]]></category>
		<category><![CDATA[cors]]></category>
		<category><![CDATA[ionic]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[técnicas]]></category>
		<guid isPermaLink="false">https://www.hiago.me/?p=418</guid>

					<description><![CDATA[<p>Se esse post chamou sua atenção, com certeza você já teve ou ainda tem problemas com o CORS. Meu objetivo aqui é mostrar a importância desse mecanismo de segurança e como fazer o seu uso de forma consciente e clara. Antes de criticarmos ou falar que algo é ruim, é bom entendermos o motivo pelo &#8230;</p>
<p>The post <a href="https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/">Ionic &#038; Angular: Fazendo o CORS seu amigo</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Se esse post chamou sua atenção, com certeza você já teve ou ainda tem problemas com o CORS. Meu objetivo aqui é mostrar a importância desse mecanismo de <em><strong>segurança</strong></em> e como fazer o seu uso de forma consciente e clara.</p>
<p>Antes de criticarmos ou falar que algo é ruim, é bom entendermos o motivo pelo qual aquilo existe.</p>
<h1>Porque o CORS existe?</h1>
<p>O CORS (do inglês cross-origin resource sharing) é um mecanismo que permite que os conteúdos de domínios diferentes sejam compartilhados. Ele existe para evitar que o conteúdo de um determinado domínio seja utilizado por outro sem a autorização do mesmo.</p>
<p>Exemplo: supondo que eu queira exibir os conteúdos do youtube em meu site, faço uma análise das requisições HTTP&#8217;s feitas pelo youtube, obtendo os parâmetros da chamada criaria uma UI para usar as informações do youtube, tirando assim proveiro dos dados deles. O CORS impediria que essa ação fosse executada na <em>camada do navegador</em>, ou seja é uma segurança para você!</p>
<h1>Como funcionar o CORS?</h1>
<p>O CORS vai analisar se o recurso que você tenta carregar está sob o mesmo domínio e porta. Com isso mesmo que você tenha sua API rodando no endereço &#8220;http://localhost:8080&#8221; e sua aplicação ionic/angular rodando em suas respectivas portas (8100/4200) ao chamar a API com toda certeza vai ter sua requisição bloqueada e vai receber a mensagem de CORS.</p>
<p>Quando você não está sob o mesmo domínio você vai notar na parte de redes que uma requisição http gera 2 outras chamadas. A primeira chamada usa o verbo http OPTIONS, ele é utilizado pelo navegador para perguntar ao  seu servidor/aplicação quais os tipos de requisição sua aplicação permite e é no OPTIONS que você deve informar suas configurações do CORS através de Headers.</p>
<h2>Opções para o CORS</h2>
<ol>
<li><strong>Access-Control-Allow-Origin: </strong>Header utilizado para informar quais domínios você <em><strong>permite</strong></em> que use o seu conteúdo.</li>
<li><strong>Access-Control-Allow-Methods:</strong> Header utilizado para informar quais verbos http você <em><strong>permite</strong></em> a partir dos <em><strong>domínios</strong></em> liberados.</li>
<li><strong>Access-Control-Allow-Headers:</strong> Header utilizado para informar quais &#8220;Headers&#8221; os domínios liberados podem enviar para você.</li>
<li><strong>Access-Control-Max-Age:</strong> Header utilizado para informar quanto tempo é válido essas configurações de CORS.</li>
</ol>
<h1>O que não devo fazer?</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_3]</span></p>
<p>Bom acho que a primeira coisa que você deve se questionar é: Preciso realmente liberar o CORS em seu ambiente? Mesmo em aplicações ionic a liberação não é necessária. O mesmo para Angular, vendo que em produção o domínio será o mesmo (ou não rs).</p>
<p>Mas vamos lá, supondo que você chegou a conclusão que liberar o CORS é realmente necessário, não faça isso &#8220;<strong>Access-Control-Allow-Origin: *</strong>&#8221; ao fazer isso você está simplesmente tirando uma camada de segurança que foi criada para você. Caso você esteja rodando uma aplicação ionic (já compilada), não é necessário liberar o CORS mas caso queira liberar é necessário apenas  permitir o endereço http://localhost:8080/ que é o endereço que o ionic utiliza para carregar sua aplicação compilada ou seja a liberação correta (caso deseje fazer) é &#8220;<strong>Access-Control-Allow-Origin: http://localhost:8080</strong>&#8220;.</p>
<p>Outra coisa bem importante é o <strong>Access-Control-Max-Age </strong>geralmente nos tutoriais ninguém comenta sobre ele. Lembra aquela segunda requisição? A do tipo OPTIONS, então ela é feita quando expira o <strong>Access-Control-Max-Age </strong>então se você não falar para o navegador que essas definições só mudam de X em X tempos todo e qualquer request que você fizer o seu servidor vai receber duas requisições (cada browser tem seu tempo padrão). Em ambiente de desenvolvimento, geralmente desabilitamos os cache&#8217;s e com isso o <strong>Access-Control-Max-Age</strong> não vai fazer efeito. Mas em ambiente de produção é algo muito importante.</p>
<h1>Como assim não preciso liberar o CORS para o ionic?</h1>
<p>Sim é isso mesmo, não precisa! E já vou explicar o motivo. Quando você desenvolve seu aplicativo, você geralmente testa seu projeto seu navegador e ele implementa o Same-Origin-Policy por isso que você tem problemas com CORS e acaba fazendo tudo quanto é tipo de liberação. Porém quando o seu aplicativo é compilado para APK ou IPA o ionic de forma nativa consegue desabilitar o CORS da WebView (e eles já fazem isso).</p>
<p>Vale lembrar que para o iOS o ionic sempre usou o <em><strong>UIWebView</strong></em> só que agora eles migraram para o <em><strong>MKWebView</strong></em> e no iOS eles não conseguem desabilitar o CORS nessa webview em especifico =/. Então ou você faz um downgrade da webview, ou você libera o CORS para a origem &#8220;<strong>http://localhost:8080</strong>&#8221; ai é uma decisão pessoal, basta acessar a <a href="https://ionicframework.com/docs/wkwebview/">documentação</a> com as melhorias propostas pela <em><strong>MKWebView</strong></em> e colocar na balança.</p>
<p>Para fazer o downgrade da WebView basta colocar o conteúdo abaixo em seu config.xml para a plataforma iOS:</p>
<pre class="brush: xml; title: ; notranslate">

&lt;preference name=&quot;CordovaWebViewEngine&quot; value=&quot;CDVUIWebViewEngine&quot; /&gt;

</pre>
<h1>E meu ambiente de desenvolvimento, como faço?</h1>
<p>Então para você desabilitar a checagem do CORS em seu ambiente de desenvolvimento você pode fazer uso de uma <a href="https://chrome.google.com/webstore/detail/moesif-origin-cors-change/digfbfaphojjndkpccljibejjbppifbc">extensão do google chrome </a>mas eu não recomendo, tive muitos problemas com essa extensão. Ela liberou o CORS mas sempre me trouxe problema com encodings em outros sites que eu acessava.</p>
<h2>Não quer usar a extensão?</h2>
<p>Então vamos lá, o ionic e o angular tem um recurso bem interessante e muito pouco conhecido que tem exatamente essa função (impedir problemas com CORS) são os proxies.  É algo bem simples, mas eles são apenas para ambientes de desenvolvimento. Então não se esqueça de criar uma configuração para seu endpoint  🙂</p>
<h2>O que é um proxy? Como ele funciona?</h2>
<p>Um proxy basicamente é um serviço intermediário entre você e seu servidor de aplicação, ele recebe sua requisição e repassa ela para o servidor original.</p>
<p>Vamos criar o seguinte cenário: Tenho a url (http://localhost:8888/) rodando um backend, então vamos criar um mapeamento para informar que tudo que for chamado na uri <strong>/api </strong>seja passado para o backend.</p>
<p>Vamos supor que você esteja desenvolvendo em uma aplicação ionic, ao digitar o endereço http://localhost:8100/api/criar-usuario ele vai redirecionar internamente no processo do ionic serve a requisição para http://localhost:8888/criar-usuario então sua aplicação vai estar chamando uma URL que está no mesmo <strong>domínio</strong> e na mesma <strong>porta </strong>assim a Same-Origin-Policy não vai ser aplicada e você pode seguir seu desenvolvimento sem necessidade de liberar o CORS para desenvolver.</p>
<h1>Configurando o proxy no ionic</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_2]</span></p>
<p>Para configurar o proxy no ionic basta abrir o arquivo <strong>ionic.config.json </strong>e criar uma nova propriedade chamada <strong>proxies</strong> e nela definir seus paths.</p>
<p>Exemplo:</p>
<pre class="brush: jscript; title: ; notranslate">
{
	&quot;name&quot;: &quot;app-meuapp&quot;,
	&quot;app_id&quot;: &quot;&quot;,
	&quot;type&quot;: &quot;ionic-angular&quot;,
	&quot;proxies&quot;: &#x5B;{
		&quot;path&quot;: &quot;/api&quot;,
		&quot;proxyUrl&quot;: &quot;http://localhost:8888/&quot;
	}],
	&quot;integrations&quot;: {
		&quot;cordova&quot;: {}
	}
}
</pre>
<h1>Configurando o proxy no Angular</h1>
<p>Para fazer a configuração de seu proxy no Angular o processo é semelhante. Para isso é necessário criar um arquivo JSON com as configurações os paths desejados. Então vamos criar o arquivo <strong>proxy.conf.json </strong>e vamos colocar o conteúdo abaixo. Após isso basta você inicializar seu projeto com o comando <strong>ng serve &#8211;proxy-config proxy.conf.json.</strong></p>
<p>Observação: Recomendo que coloque esse comando na chave start do <strong>package.json</strong> assim você só vai precisar rodar o comando <strong>npm start</strong></p>
<p>Conteúdo para o proxy.conf.json</p>
<pre class="brush: jscript; title: ; notranslate">
{
  &quot;/api&quot;: {
    &quot;target&quot;: &quot;http://localhost:8888&quot;,
    &quot;secure&quot;: false
  }
}
</pre>
<h1>Conclusão</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_1]</span></p>
<p>O CORS é um recurso de segurança muito importante e precisamos gerenciar ele de acordo com as necessidades do nosso projeto, fazendo o uso das técnicas mencionadas nesse post é possível trabalhar sem dor de cabeça e claro ter um desenvolvimento saudável e seguro.</p>
<p>The post <a href="https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/">Ionic &#038; Angular: Fazendo o CORS seu amigo</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/feed/</wfw:commentRss>
			<slash:comments>28</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">418</post-id>	</item>
		<item>
		<title>Gulp + Ionic: Automatizando Release no Android</title>
		<link>https://www.hiago.me/2018/08/18/gulp-ionic-automatizando-release-no-android/</link>
					<comments>https://www.hiago.me/2018/08/18/gulp-ionic-automatizando-release-no-android/#comments</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Sat, 18 Aug 2018 21:48:54 +0000</pubDate>
				<category><![CDATA[Ionic]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[automatizando]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[gulp]]></category>
		<category><![CDATA[ionic]]></category>
		<guid isPermaLink="false">https://www.hiago.me/?p=368</guid>

					<description><![CDATA[<p>Todos que já finalizaram um projeto em ionic, tiveram que passar pelo &#8220;Publishing your app&#8221; e quando você tem que lançar suas atualizações constantemente fica chato ter que ficar repetindo esses procedimentos, por isso resolvi fazer esse post para mostrar como vocês podem automatizar não só esse, como qualquer outro processo usando o Gulp + &#8230;</p>
<p>The post <a href="https://www.hiago.me/2018/08/18/gulp-ionic-automatizando-release-no-android/">Gulp + Ionic: Automatizando Release no Android</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Todos que já finalizaram um projeto em ionic, tiveram que passar pelo &#8220;<a href="https://ionicframework.com/docs/v1/guide/publishing.html">Publishing your app</a>&#8221; e quando você tem que lançar suas atualizações constantemente fica chato ter que ficar repetindo esses procedimentos, por isso resolvi fazer esse post para mostrar como vocês podem automatizar não só esse, como qualquer outro processo usando o Gulp + Ionic.</p>
<h1>Gulp</h1>
<p>O Gulp é um kit de ferramentas para automatizar tarefas massantes/demoradas no fluxo de trabalho do desenvolvimento, com ele é possível automatizar essas tarefas de maneira simples e confiável.</p>
<h1>Preparando o ambiente</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_3]</span></p>
<p>Primeiro você deve instalar em seu projeto ionic as dev-dependencies abaixo:</p>
<pre class="brush: plain; title: ; notranslate">

npm install --save-dev gulp run-sequence shelljs

</pre>
<h1>Criando sua KeyStore</h1>
<p>A keystore é única, ela é quem garante que você e somente você consiga fornecer uma atualização segura para seus usuários.</p>
<p>Como a KeyStore é gerada uma única vez, não vejo motivos para automatizar no processo do Gulp. A Keystore é o segundo passo do &#8220;<a href="https://ionicframework.com/docs/v1/guide/publishing.html">Publishing your app</a>&#8220;. Entre no diretório de sua aplicação e na mesma pasta de seu package.json, execute o comando abaixo informando os seus dados e criando uma senha que você vai usar depois na nossa tarefa do Gulp. Mantenha a mesma senha, tanto para o keystore quanto para o alias.</p>
<pre class="brush: plain; title: ; notranslate">
keytool -genkey -v -keystore chave-distribuicao.keystore -alias ID_DO_SEU_CONFIG_XML -keyalg RSA -keysize 2048 -validity 10000
</pre>
<p>Note que no comando acima tem a informação <em><strong>ID_DO_SEU_CONFIG_XML</strong></em> essa informação deve ser substituída pelo id que você colocou no seu config.xml, o padrão para os id do config.xml é <em><strong>br.com.seuappsite.app</strong></em>.</p>
<h1>Package.Json</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_2]</span></p>
<p>Agora vamos editar nosso package.json, e vamos adicionar um novo valor dentro dos scripts. Crie uma nova chave com o nome &#8220;<strong>build:release</strong>&#8221; com o valor &#8220;<strong>gulp release</strong>&#8220;.</p>
<h1>Gulpfile</h1>
<p>Agora precisamos criar um arquivo chamado gulpfile.js no mesmo diretório do seu package.json ele é quem vai fazer todo o trabalho de executar o &#8220;ionic cordova build &#8211;prod &#8211;release&#8221;, e os outros passos para assinar e alinhar o seu aplicativo. E o resultado final vai ser o seu APK pronto para distribuição na pasta dist.</p>
<p>Conteúdo do Gulpfile.js:</p>
<pre class="brush: plain; title: ; notranslate">
const gulp = require('gulp'),
      fs = require('fs'),
      path = require('path'),
      runSequence = require('run-sequence'),
      shelljs = require('shelljs'),
      config = {
           pwd: &quot;SENHA_ESCOLHIDA_NA_CHAVE&quot;,
           alias: &quot;ID_DO_SEU_CONFIG_XML&quot;,
           keystore: &quot;chave-distribuicao.keystore&quot;
      };

gulp.task('release', function () {

    const apks = fs.readdirSync('./dist');
    for(apk of apks) {
        // verificando apks não assinados
        if(apk.indexOf('.apk') &gt; -1) {
            fs.unlinkSync(`./dist/${apk}`);
        }
    }

    if(config.pwd === 'keystore_password' || config.pwd === '') {
        console.error('Edite o gulpfile.js e informe a senha de sua keystore.');
        return shelljs.exit(1);
    }

    runSequence('compilar-release', 'assinar-apk', 'alinhar-apk', function () {

    });
});

/**
 * Compilo com a flag --prod e --release no ionic
 */
gulp.task('compilar-release', function () {
    const out = shelljs.exec('ionic cordova build android --release --prod --no-interactive', {silent:true}).stdout;
    const buildReturn = out.split('Built the following apk(s):');

    // verifico se o build deu certo
    if(buildReturn.length &gt; 1) {
        const apks = buildReturn&#x5B;1].replace(/\r/, '').replace(/\t/, '').split('\n'),
              realApks = &#x5B;];
        for(apk of apks) {
            // recupero os apks releases gerados
            if(apk.indexOf('release-unsigned.apk') &gt; -1) {
                realApks.push(apk);
            }
        }

        // verificando se a pasta dist existe.
        if(!fs.existsSync('./dist')) {
            fs.mkdirSync('./dist');
        }

        // movendo apks para a dist
        for(apk of realApks) {
            let splitter = &quot;/&quot;;
            if(apk.indexOf(&quot;\\&quot;) &gt; -1) {
                splitter = &quot;\\&quot;;
            }

            let fileName = apk.split(splitter);
            fileName = fileName&#x5B;fileName.length - 1];

            fs.copyFileSync(apk, './dist/' + fileName);
            fs.unlinkSync(apk);
        }
    } else {
        // erro no build
        shelljs.exit(1);
    }
});

/**
 * Assina o APK com release
 */
gulp.task('assinar-apk', function () {
    const apks = fs.readdirSync('./dist');
    for(apk of apks) {
        // verificando apks não assinados
        if(apk.indexOf('release-unsigned.apk') &gt; -1) {
            let signCommand = `jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ${config.keystore} -storepass ${config.pwd} -keypass ${config.pwd} ./dist/${apk} ${config.alias}`;
            const signCommandResult = shelljs.exec(signCommand, {silent:true}).stdout;
            console.log(signCommandResult);
        }
    }
});

/**
 * Assina o APK com release
 */
gulp.task('alinhar-apk', function () {
    let bdtools = process.env.ANDROID_HOME + path.sep + 'build-tools' + path.sep + fs.readdirSync(process.env.ANDROID_HOME + path.sep + 'build-tools')&#x5B;0] + path.sep;
    console.log(bdtools);
    const apks = fs.readdirSync('./dist');
    for(apk of apks) {
        // verificando apks não assinados
        if(apk.indexOf('release-unsigned.apk') &gt; -1) {
            let alignCommand = `&quot;${bdtools}zipalign&quot; -v 4 ./dist/${apk} ./dist/${apk.replace('-release-unsigned.apk', '')}.apk`;
            const alignCommandResult = shelljs.exec(alignCommand, {silent:true}).stdout;
            fs.unlinkSync(`./dist/${apk}`);
            console.log(alignCommandResult);
        }
    }
});
</pre>
<h1>Testando</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_1]</span></p>
<p>Agora para gerar e assinar seus apks basta você executar o comando abaixo:</p>
<pre class="brush: plain; title: ; notranslate">

npm run build:release

</pre>
<p>Obrigado pessoal, espero que o conteúdo seja útil para vocês.</p>
<p><strong>[27/11/2018] Edição:</strong> Adicionei na linha 32 do Gulpfile.js o parâmetro <strong>&#8211;no-interactive</strong> para corrigir o problema de travar a compilação pelo fato da CLI do ionic perguntar se você deseja fazer a atualização.</p>
<p>The post <a href="https://www.hiago.me/2018/08/18/gulp-ionic-automatizando-release-no-android/">Gulp + Ionic: Automatizando Release no Android</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2018/08/18/gulp-ionic-automatizando-release-no-android/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">368</post-id>	</item>
		<item>
		<title>Depurar uma aplicação ionic no VSCode</title>
		<link>https://www.hiago.me/2018/06/06/depurar-uma-aplicacao-ionic-no-vscode/</link>
					<comments>https://www.hiago.me/2018/06/06/depurar-uma-aplicacao-ionic-no-vscode/#comments</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Thu, 07 Jun 2018 01:53:28 +0000</pubDate>
				<category><![CDATA[Ionic]]></category>
		<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[ionic]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[remote debug]]></category>
		<category><![CDATA[typescript]]></category>
		<category><![CDATA[visual studio code]]></category>
		<category><![CDATA[vscode]]></category>
		<guid isPermaLink="false">https://www.hiago.me/?p=334</guid>

					<description><![CDATA[<p>Boa noite pessoal, sejam bem vindos a mais um post! Hoje vou falar de ionic (2/3) com o Visual Studio Code. Estava trabalhando em um aplicação minha quando eu notei que o Visual Studio Code tem a opção de colocar os breakpoints, inclusive no TypeScript então pensei será que tem como depurar minha aplicação direto &#8230;</p>
<p>The post <a href="https://www.hiago.me/2018/06/06/depurar-uma-aplicacao-ionic-no-vscode/">Depurar uma aplicação ionic no VSCode</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Boa noite pessoal, sejam bem vindos a mais um post! Hoje vou falar de ionic (2/3) com o Visual Studio Code. Estava trabalhando em um aplicação minha quando eu notei que o Visual Studio Code tem a opção de colocar os breakpoints, inclusive no TypeScript então pensei será que tem como depurar minha aplicação direto do VSCode no Dispositivo e no Browser? Então fui atrás, e consegui fazer funcionar e o resultado foi simplesmente sensacional! Então vamos lá, vamos se preparar para Depurar sua aplicação IONIC com o VSCode no aplicativo compilado sem a necessidade do <strong>chrome://inspect</strong>.</p>
<h1>Extensões</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_3]</span></p>
<p>Vamos preparar para que você possa depurar tanto a aplicação no <strong>ionic serve </strong>(testando em seu browser), como no <strong>ionic cordova run android </strong>(com a aplicação compilada no Android ou iOS).</p>
<p>Para isso vamos precisar de duas extensões do VSCode para nos ajudar, são elas:</p>
<ol>
<li>Debugger for Chrome (distribuído pela própria Microsoft)<br />
<img decoding="async" class="alignnone size-medium wp-image-335" src="https://www.hiago.me/wp-content/uploads/2018/06/debugger-for-chrome-300x109.png" alt="" width="300" height="109" srcset="https://www.hiago.me/wp-content/uploads/2018/06/debugger-for-chrome-300x109.png 300w, https://www.hiago.me/wp-content/uploads/2018/06/debugger-for-chrome.png 417w" sizes="(max-width: 300px) 100vw, 300px" /></li>
<li>Cordova Tools<br />
<img decoding="async" class="alignnone size-medium wp-image-336" src="https://www.hiago.me/wp-content/uploads/2018/06/cordova-tools-300x92.png" alt="" width="300" height="92" srcset="https://www.hiago.me/wp-content/uploads/2018/06/cordova-tools-300x92.png 300w, https://www.hiago.me/wp-content/uploads/2018/06/cordova-tools.png 490w" sizes="(max-width: 300px) 100vw, 300px" /></li>
</ol>
<h1>Configurando o VSCode</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_2]</span></p>
<p>Após instalar as extensões você pode ir na sessão de debug do vscode (4º ícone da barra lateral esquerda). Lá você clica na engrenagem que fica após o combobox e escolha a opção <strong>Cordova</strong>.</p>
<p><img fetchpriority="high" decoding="async" class="alignnone wp-image-339" src="https://www.hiago.me/wp-content/uploads/2018/06/passo-a-passo-vscode-300x162.png" alt="" width="783" height="423" srcset="https://www.hiago.me/wp-content/uploads/2018/06/passo-a-passo-vscode-300x162.png 300w, https://www.hiago.me/wp-content/uploads/2018/06/passo-a-passo-vscode-768x416.png 768w, https://www.hiago.me/wp-content/uploads/2018/06/passo-a-passo-vscode-1024x554.png 1024w, https://www.hiago.me/wp-content/uploads/2018/06/passo-a-passo-vscode.png 1096w" sizes="(max-width: 783px) 100vw, 783px" /></p>
<p>Logo após isso vai ser criado o arquivo launch.json com diversas opções de debug disponíveis. Porém vamos apagar o conteúdo atual do arquivo e colocar o conteúdo abaixo no lugar.</p>
<pre class="brush: jscript; title: ; notranslate">
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    &quot;version&quot;: &quot;0.2.0&quot;,
    &quot;configurations&quot;: &#x5B;
        {
            &quot;name&quot;: &quot;Depurar no Chrome&quot;,
            &quot;type&quot;: &quot;chrome&quot;,
            &quot;request&quot;: &quot;launch&quot;,
            &quot;url&quot;: &quot;http://localhost:8100&quot;,
            &quot;sourceMaps&quot;: true,
            &quot;webRoot&quot;: &quot;${workspaceRoot}/www&quot;
        },
        {
            &quot;name&quot;: &quot;Depurar no Android&quot;,
            &quot;type&quot;: &quot;cordova&quot;,
            &quot;request&quot;: &quot;attach&quot;,
            &quot;platform&quot;: &quot;android&quot;,
            &quot;target&quot;: &quot;device&quot;,
            &quot;port&quot;: 9222,
            &quot;sourceMaps&quot;: true,
            &quot;cwd&quot;: &quot;${workspaceRoot}&quot;
        },
        {
            &quot;name&quot;: &quot;Depurar no iOS&quot;,
            &quot;type&quot;: &quot;cordova&quot;,
            &quot;request&quot;: &quot;attach&quot;,
            &quot;platform&quot;: &quot;ios&quot;,
            &quot;target&quot;: &quot;device&quot;,
            &quot;port&quot;: 9220,
            &quot;sourceMaps&quot;: true,
            &quot;cwd&quot;: &quot;${workspaceRoot}&quot;
        }
    ]
}
</pre>
<p>Ao colocar esse código e salvar feche e abra o seu Visual Studio Code e na sessão de debug você já terá disponível o &#8220;Depurar no Chrome&#8221;, &#8220;Depurar no Android&#8221; e <span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">&#8220;Depurar no iOS&#8221;</span>.</p>
<h1>Vamos testar?</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_1]</span></p>
<p>Agora é a hora que todos estavam esperando não é mesmo? Vamos fazer 2 testes, o primeiro é depurando usando o próprio google chrome, e o segundo é fazendo a depuração usando o próprio dispositivo.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-344" src="https://www.hiago.me/wp-content/uploads/2018/06/opcoes-disponiveis-300x216.png" alt="" width="774" height="557" srcset="https://www.hiago.me/wp-content/uploads/2018/06/opcoes-disponiveis-300x216.png 300w, https://www.hiago.me/wp-content/uploads/2018/06/opcoes-disponiveis-768x552.png 768w, https://www.hiago.me/wp-content/uploads/2018/06/opcoes-disponiveis.png 782w" sizes="(max-width: 774px) 100vw, 774px" /></p>
<ul>
<li>Obs: Na imagem não contém o depurar no iOS pois como não tenho um Mac eu removi a opção, mas na empresa eu testei e vai rolar na maçã 😉</li>
</ul>
<h2>Depurando no Browser</h2>
<p>Para fazer o debug tanto na aplicação compilada quando no browser primeiro é necessário rodar o comando do ionic responsável pela plataforma desejada. No browser vamos no terminal e executar o comando &#8220;<strong>ionic serve &#8211;nobrowser</strong>&#8220;. Assim que finalizar o processo de compilação, vá até a opção de debug selecione a opção &#8220;<strong>Depurar no Chrome</strong>&#8220;. Assim que o navegador for aberto e o rodapé do seu VSCode estiver laranja, você já está depurando sua aplicação.</p>
<p>Vai fundo, coloque um breakpoint em uma de suas rotinas e seja feliz!</p>
<h2>Depurando no Dispositivo</h2>
<p>O processo de depuração no dispositivo é bem semelhante ao do browser. Você precisa executar a usando o comando desejado no meu caso &#8220;<strong>ionic cordova run android -l</strong>&#8220;. No meu caso vou colocar o -l para fazer o uso do live reload dentro do dispositivo.</p>
<p>Assim que compilar e o aplicativo estiver aberto em seu dispositivo, basta você selecionar a opção <span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">&#8220;</span><strong>Depurar no Android</strong><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">&#8221; ou &#8220;<strong>Depurar no iOS</strong>&#8221; e aguardar a barra ficar laranja. Após isso é a mesmo processo do browser! Coloque seus breakpoints e seja mais produtivo no seu trabalho.</span></p>
<p><img loading="lazy" decoding="async" class="alignnone  wp-image-350" src="https://www.hiago.me/wp-content/uploads/2018/06/imagem-debug-funcionando-android-300x153.png" alt="" width="778" height="397" srcset="https://www.hiago.me/wp-content/uploads/2018/06/imagem-debug-funcionando-android-300x153.png 300w, https://www.hiago.me/wp-content/uploads/2018/06/imagem-debug-funcionando-android-768x391.png 768w, https://www.hiago.me/wp-content/uploads/2018/06/imagem-debug-funcionando-android-1024x521.png 1024w, https://www.hiago.me/wp-content/uploads/2018/06/imagem-debug-funcionando-android.png 1366w" sizes="(max-width: 778px) 100vw, 778px" /></p>
<p>Obrigado e espero que tenha gostado! Caso tenha alguma dúvida ou sugestão, pode deixar um comentário informando seu e-mail (não envio spams rs). Valeu!</p>
<p>The post <a href="https://www.hiago.me/2018/06/06/depurar-uma-aplicacao-ionic-no-vscode/">Depurar uma aplicação ionic no VSCode</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2018/06/06/depurar-uma-aplicacao-ionic-no-vscode/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">334</post-id>	</item>
	</channel>
</rss>
