Estudo Comparativo Sobre Ferramentas de Desenvolvimento Multiplataforma para Aplicac¸oes˜ Moveis´

Gabriel da Rosa Muller¨ 1, Inali Wisniewski Soares1

1Departamento de Cienciaˆ da Computac¸ao˜ (DECOMP) Universidade Estadual do Centro Oeste (UNICENTRO) Rua Simeao˜ Varela de Sa,´ 03 – Vila Carli – CEP 85040-080 Guarapuava – PR – Brasil

[email protected], [email protected]

Abstract. The use of cross-platform tools for the development of mobile appli- cations allows developers to reach a bigger number of operational systems with a single code base. There are relevant tools in the market, as well as interesting new tools on the rise with different methods of development. This paper research features a comparison between cross-platform development tools for mobile ap- plications. The tools selected for the comparative are: , PhoneGap, Titanium, and Google .

Resumo. O uso de ferramentas multiplataforma para o desenvolvimento de aplicac¸oes˜ moveis´ permite que os desenvolvedores alcancem o maior numero´ de sistemas operacionais com uma unica´ base de codigo.´ Existem ferramen- tas relevantes e consolidadas no mercado, assim como novas ferramentas inte- ressantes em ascensao˜ com diferentes metodologias de desenvolvimento. Esse trabalho de pesquisa apresenta um comparativo realizado entre ferramentas de desenvolvimento multiplataforma para aplicac¸oes˜ moveis.´ As ferramentas selecionadas para o comparativo foram: Xamarin, PhoneGap, Appcelerator Titanium, React Native e Google Flutter.

1. Introduc¸ao˜ O numero´ crescente de usuarios´ de dispositivos moveis´ exige cada vez mais aplicac¸oes˜ para tais dispositivos. Em alguns dom´ınios de aplicac¸ao,˜ tal como aplicac¸oes˜ moveis,´ o desenvolvimento de software apresenta algumas particularidades e restric¸oes:˜ capaci- dade do dispositivo movel,´ especificac¸oes˜ dos dispositivos, usos de recursos, design e questoes˜ relacionadas a` navegabilidade de interface do usuario´ e seguranc¸a do usuario´ [Mushtaq et al., 2016, El-Kassas et al., 2017]. Existem varios´ sistemas operacionais para dispositivos moveis´ (Android, iOS, Symbian, Firefox OS, entre outros) e uma constante necessidade de disponibilizac¸ao˜ de aplicac¸oes˜ para tais plataformas, assim como, fortes exigenciasˆ de desen- volvimento de produtos de qualidade, em tempo reduzido e com baixo custo [Gavalas e Economou 2011]. Neste sentido e´ interessante, inicialmente, o desenvolvedor optar por um dos tipos de desenvolvimento: multiplataforma ou para uma plataforma. O desenvolvimento movel´ para uma unica´ plataforma utiliza-se de ferramentas e linguagens de programac¸ao˜ espec´ıficas para a plataforma escolhida. Desse modo, as aplicac¸oes˜ executam apenas na plataforma escolhida. Ja´ o desenvolvimento movel´ de uma aplicac¸ao˜ que pode ser executada em multiplas´ plataformas se divide em: web apps - aplicac¸oes˜ que nao˜ sao˜ instaladas no dispositivo e sao˜ executadas diretamente no nave- gador, aplicac¸oes˜ h´ıbridas - web apps empacotadas em uma aplicac¸ao˜ nativa e aplicac¸oes˜ de desempenho nativo [Serrano et al., 2013, El-Kassas et al., 2017]. Alguns estudos foram realizados para avaliar o desenvolvimento de aplicac¸oes˜ moveis´ multiplataforma. Heitkotter¨ et. al (2012) estabeleceram um conjunto de criterios´ para avaliar abordagens de desenvolvimento multiplataforma. O trabalho de Tunali e Er- dogan (2015) comparou algumas ferramentas moveis´ multiplataforma. O objetivo desse trabalho foi avaliar algumas caracter´ısticas das ferramentas tais como robustez, custo e fa- cilidade de desenvolvimento. Ja´ Charland e Leroux (2011) realizaram um estudo teorico´ entre os dois tipos de desenvolvimento movel:´ multiplataforma e plataforma unica.´ Nesse estudo foram destacadas as vantagens do desenvolvimento multiplataforma considerando as necessidades da aplicac¸ao˜ e do negocio.´ Nesta pesquisa foi desenvolvido um estudo para comparar algumas ferramen- tas multiplataforma para o desenvolvimento de aplicac¸oes˜ moveis.´ Os criterios´ de comparac¸ao˜ utilizados foram baseados em pesquisas anteriores [Heitkotter¨ et al., 2012, Tunali e Zafer 2015], sendo eles: numero´ de plataformas dispon´ıveis, complexidade, IDE (Integrated Development Environment), desenvolvimento de interface grafica,´ suporte tecnico´ e documentac¸ao,˜ custo, amadurecimento do produto, comunidade e mercado. Di- ante disso, esse estudo investigou, considerando os criterios´ descritos anteriormente, se existe uma ferramenta multiplataforma para o desenvolvimento de aplicac¸oes˜ moveis´ que apresente maiores vantagens em relac¸ao˜ as` demais. O objetivo geral dessa pesquisa foi realizar um comparativo entre algumas ferra- mentas multiplataforma para o desenvolvimento de aplicac¸oes˜ moveis.´ Dentre os objeti- vos espec´ıficos desta pesquisa destacam-se: • Estudar os conceitos relacionados ao desenvolvimento de aplicac¸oes˜ moveis.´ • Pesquisar e selecionar ferramentas de desenvolvimento de aplicac¸oes˜ moveis´ mul- tiplataforma. • Realizar um comparativo entre as ferramentas selecionadas de acordo com um conjunto de criterios´ estabelecido nessa pesquisa. Este artigo esta´ organizado em seis sec¸oes.˜ A sec¸ao˜ 2 apresenta a fundamentac¸ao˜ teorica´ para a realizac¸ao˜ deste trabalho. A sec¸ao˜ 3 descreve os materiais e metodos´ uti- lizados. A sec¸ao˜ 4 apresenta os resultados obtidos e as discussoes˜ sobre os mesmos. A sec¸ao˜ 5 descreve as conclusoes˜ e trabalhos futuros.

2. Fundamentac¸ao˜ Teorica´ Esta sec¸ao˜ descreve a fundamentac¸ao˜ teorica´ da pesquisa realizada.

2.1. Desenvolvimento de Aplicac¸oes˜ Moveis´ Atualmente, os dispositivos moveis´ sao˜ cada vez mais utilizados e rapidamente estao˜ se tornando um dos produtos mais bem sucedidos do mercado [Lecheta 2013]. Pesquisas indicam que so´ no Brasil em 2017, aproximadamente 62% dos brasileiros possu´ıam um smartphone, e com base em dados de anos anteriores, esse numero´ continuara´ a crescer [Oliveira 2017].

2 Um dispositivo movel´ possui diversas utilidades que sao˜ implementadas por meio de aplicac¸oes,˜ eles podem conter desde funcionalidades simples como um despertador ou agenda, ate´ funcionalidades mais complexas tais como: envio de e-mails, reproduc¸ao˜ de musicas,´ inclusao˜ de jogos e execuc¸ao˜ de filmes. As aplicac¸oes˜ sao˜ softwares desenvol- vidos com o objetivo de serem executados em plataformas moveis,´ como smarthphones e tablets [Constantin et al., 2016]. O desenvolvimento de aplicac¸oes˜ moveis´ possui varios´ aspectos similares ao desenvolvimento de software embarcado: integrac¸ao˜ com o hardware do dispositivo, questoes˜ relacionadas a` seguranc¸a, desempenho, confiabilidade e limitac¸oes˜ de armaze- namento. Porem,´ existem questoes˜ que sao˜ espec´ıficas ao desenvolvimento de aplicac¸oes˜ moveis,´ tais como: forte interac¸ao˜ com outros aplicativos; manipulac¸ao˜ de sensores; existenciaˆ de aplicativos nativos e h´ıbridos; acesso a fam´ılias de plataformas de hard- ware e software; compartilhamento de elementos comuns da interface do usuario´ com outros aplicativos; e por ultimo´ os testes que sao˜ particularmente mais desafiantes [Wasserman 2010]. Tambem,´ aplicac¸oes˜ moveis´ sao˜ desenvolvidas dinamicamente e as equipes de desenvolvimento sao˜ pequenas. Ainda, uma aplicac¸ao˜ movel´ apresenta custo e tamanho reduzidos [Corral et al., 2012]. Outros fatores importantes a serem considerados sao˜ a privacidade e a seguranc¸a [El-Kassas et al., 2017]. Portanto, uma questao˜ importante que deve ser considerada pelo desenvolvedor e´ qual tipo de desenvolvimento optar: nativo ou multiplataforma. 2.2. Desenvolvimento Nativo O desenvolvimento nativo e´ o processo utilizado para a criac¸ao˜ de software para uma pla- taforma espec´ıfica, utilizando ferramentas e linguagens de programac¸ao˜ apropriadas exi- gidas para esta plataforma. As aplicac¸oes˜ estao˜ relacionadas a este ambiente, e sao˜ execu- tados apenas nos dispositivos que possuem esta plataforma. Em relac¸ao˜ aos dispositivos moveis,´ as principais plataformas moveis´ sao˜ Android e iOS [Constantin et al., 2016]. O desempenho obtido na execuc¸ao˜ da aplicac¸ao˜ e´ um dos principais benef´ıcios do desenvolvimento nativo. Porem,´ a grande variedade de caracter´ısticas existentes nos dis- positivos moveis,´ como tamanho de tela, especificac¸oes˜ de hardware, sistemas operacio- nais e mecanismos de entrada e sa´ıda, torna o desenvolvimento nativo um desafio para de- senvolvedores que visam alcanc¸ar o maior numero´ de usuarios´ [Charland e Leroux 2011]. Fatores como tempo de desenvolvimento e conhecimento intensivo do funcionamento da linguagem de cada sistema tambem´ devem ser considerados quando se desenvolve em plataforma nativas [Constantin et al., 2016]. As aplicac¸oes˜ nativas sao˜ consistentes em relac¸ao˜ a outras aplicac¸oes˜ do mesmo sistema operacional pois utilizam as APIs (Application Programming Interface) disponi- bilizadas pelos seus fabricantes [da Silva e Santos 2014]. Porem,´ por este mesmo motivo, a consistenciaˆ entre uma mesma aplicac¸ao˜ em relac¸ao˜ as` suas versoes˜ de diferentes plata- formas possuem grandes diferenc¸as [Charland e Leroux 2011]. Ja´ o desempenho e´ maior, pois as aplicac¸oes˜ sao˜ compiladas e salvas como arquivos binarios,´ e nao˜ necessitam de uma camada abstrata de interpretac¸ao˜ [da Silva e Santos 2014]. Alem´ disso, podem utili- zar funcionalidades embutidas do sistema, tais como: contatos, discador, e-mail integrado entre outros [Redda 2012].

3 O desenvolvimento nativo em cada plataforma movel´ utiliza diferentes linguagens de programac¸ao,˜ por exemplo, no sistema Android e´ utilizado a linguagem Java, ja´ em iOS se usa Objetive-, C++ e Swift. O desenvolvimento nativo necessita de uma mao˜ de obra especializada, pois no software nativo e´ esperado o maior desempenho e o uso de todos os recursos dispon´ıveis no dispositivo habilitado [Toledo e de Deus 2012]. Nas sec¸oes˜ seguintes sao˜ descritas as plataformas iOS e Android. Estas plata- formas foram selecionadas para este trabalho por serem as mais utilizadas para o desen- volvimento nativo de aplicac¸oes˜ moveis,´ segundo Gartner (2017), cerca de 98,4% dos dispositivos estao˜ dispon´ıveis para os sistemas operacionais Android ou iOS (Android e´ o mais popular, utilizado em aproximadamente 80,7% dos dispositivos do mercado). As- sim, sao˜ descritas a seguir, resumidamente, estas plataformas moveis´ e suas respectivas ferramentas para desenvolvimento.

2.2.1. iOS iOS e´ o sistema operacional para dispositivos moveis´ da Apple lanc¸ado em 2007 [Roshan et al., 2017]. Segundo Gartner (2017), cerca de 17,9% dos dispositivos vendi- dos em 2016 eram operados em iOS. O seu sistema e´ baseado em Unix, sendo sua versao˜ atual a 11, lanc¸ada em abril de 2018 [Novac et al., 2017, Apple 2018]. Inicialmente, iOS foi desenvolvido apenas para o iPhone, mas posteriormente o projeto foi estendido para iPad, iPod e Apple TV [Novac et al., 2017]. As linguagens de desenvolvimento para a plataforma da Apple sao˜ C, Objective-C e Swift. Essas linguagens sao˜ suportadas pelo SDK () que pos- sui todas as ferramentas para o desenvolvimento, execuc¸ao˜ e compilac¸ao˜ das aplicac¸oes˜ [SILVA et al., 2015]. A plataforma para o download de aplicac¸oes˜ iOS e´ a App Store. Essa plataforma foi originalmente lanc¸ada em 2008 com 500 aplicac¸oes,˜ e em 2017 a plataforma possu´ıa 2,2 milhoes˜ de aplicac¸oes˜ dispon´ıveis [Statista 2018b, Novac et al., 2017]. A arquitetura do sistema operacional iOS e´ dividida em 4 camadas, como ilustra a Figura 1. Cada camada contem´ diferentes n´ıveis de acesso e frameworks que podem ser incorporadas nas aplicac¸oes˜ sendo desenvolvidas. A camada Core OS e´ a mais inferior da arquitetura e cuida da alocac¸ao˜ de memoria,´ gerenciamento de dados, sockets, seguranc¸a, gerenciamento de bateria, entre outros. O Core OS e´ a camada que interage diretamente com o hardware do sistema. A camada seguinte a` Core OS, Core Services proveˆ uma abstrac¸ao˜ em relac¸ao˜ a anterior e contem´ componentes que permitem o uso de elementos essenciais do sistema [Daniel 2011]. A camada de m´ıdia (Media) disponibiliza ferramentas multim´ıdia que sao˜ uti- lizadas nos dispositivos iOS, tais como: Core Audio, OpenGL, formatos de imagens Quartz (framework para processamento de imagem e v´ıdeo), entre outros. E a camada mais alta na arquitetura e´ a Cocoa, camada responsavel´ pela aparenciaˆ das aplicac¸oes˜ [Daniel 2011]. Para as plataformas moveis´ da Apple e´ utilizado Cocoa Touch, framework voltado ao design de plataformas que utilizam touch screen. A maioria do desenvolvi- mento e´ realizado utilizando frameworks presentes em Cocoa Touch, desde objetos de interface grafica´ e interpretac¸ao˜ de dados recebidos pelo usuario´ ate´ as tarefas mais com-

4 plexas como gerenciamento de memoria´ [Boudreaux 2009].

Figura 1. Arquitetura do sistema operacional iOS (adaptado de [Daniel 2011]).

A IDE utilizada para o desenvolvimento da plataforma e´ o Xcode, que contem´ um compilador GNU modificado e funcionalidades como debugger e um construtor de interface [Allen et al., 2010].

2.2.2. Android

Android e´ um sistema operacional, originalmente, desenvolvido pela Android Inc. e que em 2005 foi vendido para o Google. Baseado no kernel do , foi desenvolvido com o intuito de ser utilizado em dispositivos portateis´ como smartphones, tablets, entre outros. Android e´ atualmente o l´ıder desse segmento, contendo ate´ 80% da fatia do mercado [Statista 2017]. O seu sucesso e´ devido a dois motivos. O primeiro e´ a sua versatilidade, seu design e´ limpo, simples e acess´ıvel, com um desenvolvimento descomplicado. O segundo e´ o fato de ser open source, resultando em uma opc¸ao˜ mais atrativa para os maiores produtores de eletronicosˆ (LG, Motorola, Intel, HTC, Sony, etc.) [Lecheta 2013]. A versao˜ atual do sistema operacional e´ a 8.0 Oreo, lanc¸ada em agosto de 2017 [Android 2017]. No entanto, o sucesso do Android nao˜ se deve apenas a` forc¸a do Google, por tras´ do desenvolvimento de toda a plataforma estao˜ gigantes do mercado de mobilidade, como fabricantes de celulares e operadoras. Esse grupo que ajuda no desenvolvimento da plataforma e´ chamado de OHA (Open Handset Alliance) [Lecheta 2013]. Segundo seu proprio´ website, a OHA e´ um grupo de 84 empresas de tecnologia que se uniram para acelerar a inovac¸ao˜ em dispositivos moveis´ e oferecer aos consumidores uma ex- perienciaˆ rica, acess´ıvel e superior [Open Handset Alliance 2017]. Todos se beneficiam com os avanc¸os alcanc¸ados pelo grupo OHA e a plataforma Android: os fabricantes de celulares, os usuarios´ comuns, as empresas em geral e os desenvolvedores de aplicac¸oes˜ [Lecheta 2013]. O sistema Android possui uma grande quantidade de aplicac¸oes˜ que estao˜ dis- pon´ıveis via Google Play Store, servic¸o de download de aplicac¸oes,˜ livros, musicas´ e

5 filmes que ja´ vem pre-instalado´ nos dispositivos Android. Porem,´ ainda e´ poss´ıvel reali- zar o download de aplicac¸oes˜ fora do Google Play [Silva 2012, Google 2018]. A ferramenta mais importante para o desenvolvimento e´ o Android SDK. Nela e´ poss´ıvel desenvolver aplicativos de forma nativa. O SDK possui uma API completa para Java, ferramentas auxiliares, um emulador de dispositivo Android para testes e projetos de exemplo com codigo-fonte.´ No SDK todos os aplicativos sao˜ escritos em Java, e em seguida sao˜ executados em ART (Android Runtime) [Lecheta 2013]. Android possui uma arquitetura baseada em linux open source, ilustrado na Fi- gura 2. O uso do kernel Linux possibilita o acesso a uma estrutura de seguranc¸a robusta e auxilia os desenvolvedores ao trabalhar com uma ferramenta conhecida. A camada de abstrac¸ao˜ de hardware denominada HAL (Hardware Abstraction Layer), consiste de diversas bibliotecas que habilitam o acesso a componentes de hardware do dispositivo, como camera,ˆ bluetooth, audio,´ entre outros [Android 2018b].

Figura 2. Arquitetura do sistema operacional Android (Adaptado de [Android 2018b]).

A plataforma Android utiliza bibliotecas nativas de C e C++ que sao˜ acessadas por APIs de frameworks em Java para o acesso de recursos de algumas das funcionalidades dispon´ıveis nela, como por exemplo, OpenGL para manipulac¸ao˜ de graficos´ 3D e 2D em aplicativos. Porem,´ todas as funcionalidades do Android sao˜ disponibilizadas em APIs es- critas em Java. A ultima´ camada do Android e´ composta de aplicac¸oes˜ que fornecem fun- cionalidades basicas,´ como: e-mail, sms, telefone, camera,ˆ entre outros [Android 2018b]. A IDE oficial para o desenvolvimento Android e´ o Android Studio. Essa IDE possui diversos recursos que auxiliam o desenvolvimento, tais como: integrac¸ao˜ ao SDK, sistema de build baseado em gradle, templates de projetos, assim como debugger, ferra- mentas de teste e execuc¸ao˜ instantaneaˆ [Android 2018a, Lecheta 2013].

6 2.3. Web Apps e Aplicac¸oes˜ H´ıbridas Web Apps sao˜ aplicac¸oes˜ que nao˜ necessitam de instalac¸ao˜ pois sao˜ executadas dire- tamente no navegador do dispositivo movel.´ Geralmente sao˜ desenvolvidas utilizando tecnologias web, como JavaScript, HTML5 e CSS [Fling 2009]. Estas aplicac¸oes˜ pos- suem, naturalmente, um alcance maior, ja´ que nao˜ e´ necessario´ o download da aplicac¸ao˜ [Sin et al., 2012]. Porem,´ web apps nao˜ conseguem se comunicar e utilizar os recursos nativos dos dispositivos em que sao˜ executadas. Isso reduz sua responsividade e capacidade, limi- tando suas possibilidades de uso. Alem´ disso, web apps sempre necessitam de conexao˜ a` internet para possibilitar o seu acesso [Picurelli 2017]. PWA (Progressive Web Apps) e´ uma tecnologia apresentada pela Google que tem o objetivo de ser uma ponte entre aplicativos web e nativos. Ela possui um conjunto de APIs que estende suas funcionalidades [Malavolta et al., 2017]. O PWA possui diversas vantagens em relac¸ao˜ a` um web app comum, tais como: disponibilidade de uso sem necessitar de conexao˜ com a internet, melhoria no desempenho, notificac¸oes˜ no celular, adic¸ao˜ de atalho na home screen do dispositivo, e maior controle da tela [Ater 2017]. Segundo Serrano (2013), aplicac¸oes˜ h´ıbridas sao˜ aplicac¸oes˜ web empacotadas em uma aplicac¸ao˜ nativa. Essas aplicac¸oes˜ sao˜ executadas em uma WebView, porem,´ ao inves´ de serem executadas diretamente pelo navegador, a aplicac¸ao˜ e´ instalada no dis- positivo possibilitando o acesso de recursos nativos por meio de APIs especializadas [Xanthopoulos e Xinogalos 2013]. Aplicac¸oes˜ h´ıbridas oferecem maior facilidade de desenvolvimento pois utilizam tecnologias populares. Porem,´ apresentam desempenho menor, variac¸oes˜ de experienciaˆ de usuario´ para usuario´ e acesso restrito a funcionalidades [Malavolta et al., 2015].

2.4. Desenvolvimento Multiplataforma As ferramentas multiplataforma sao˜ utilizadas para desenvolver software em multiplas´ ar- quiteturas de computadores ou sistemas operacionais. Quanto aos dispositivos moveis,´ o desenvolvimento multiplataforma se refere ao desenvolvimento para os sistemas operaci- onais moveis´ (os principais sendo Android e iOS). O desenvolvimento multiplataforma e´ mais eficiente, pois possibilita utilizar o mesmo codigo´ base para todas as versoes,˜ o que nao˜ e´ poss´ıvel utilizando ferramentas de desenvolvimento nativo [Constantin et al., 2016]. O desenvolvimento multiplataforma normalmente e´ mais facil,´ pois utiliza lin- guagens comuns e evita a necessidade de se especializar nas linguagens espec´ıficas de cada sistema. Alem´ disso, e´ desnecessario´ o estudo detalhado de cada plataforma. As ferramentas multiplataformas utilizam apenas suas APIs e seus proprios´ recursos. [Constantin et al., 2016]. A maior vantagem oferecida pelo desenvolvimento multipla- taforma e´ a facilidade que o seu software possui de atingir o maior publico´ poss´ıvel em um tempo menor.

2.5. Trabalhos Correlatos Alguns estudos foram realizados para avaliar o desenvolvimento de aplicac¸oes˜ moveis´ multiplataforma. Heitkotter¨ et. al., (2012) estabeleceram um conjunto de criterios´ para

7 avaliar abordagens de desenvolvimento multiplataforma. O estudo e´ baseado em pesqui- sas e experienciasˆ dos autores e em pareceres de desenvolvedores experientes. O trabalho de Tunali e Zafer (2015) comparou algumas ferramentas moveis´ multi- plataforma. O objetivo desse trabalho foi avaliar algumas caracter´ısticas das ferramentas tais como robustez, custo e facilidade de desenvolvimento. Ja´ Charland e Leurox (2011) realizaram um estudo teorico´ entre os dois tipos de desenvolvimento movel:´ multiplataforma e plataforma unica.´ Nesse estudo foram desta- cadas as vantagens do desenvolvimento multiplataforma considerando as necessidades da aplicac¸ao˜ e do negocio.´ Novac (2017) realizou um comparativo entre aplicac¸oes˜ h´ıbridas e aplicac¸oes˜ mul- tiplataforma nativas, para realizar a comparac¸ao˜ foi escolhido PhoneGap como ferramenta de desenvolvimento h´ıbrido, e Xamarin para desenvolvimento multiplataforma nativo. PhoneGap foi considerada a melhor escolha para aplicac¸oes˜ que nao˜ necessitaram reali- zar tarefas que exigissem performance e quando o desenvolvedor nao˜ precisava conhecer as ferramentas utilizadas para se desenvolver em Xamarin. Porem,´ caso necessitasse uti- lizar os demais recursos que o dispositivo oferece, Xamarin seria a melhor escolha.

3. Materiais e Metodos´ O metodo´ de pesquisa utilizado neste trabalho foi a pesquisa bibliografica.´ De acordo com Pereira (2005), a pesquisa bibliografica´ e´ realizada a partir de material cientifico ja´ publicado, em forma de livros, teses, dissertac¸oes,˜ periodicos´ cient´ıficos e anais de congressos cient´ıficos, impressos ou dispon´ıveis em sites eletronicos.ˆ Em relac¸ao˜ a` forma de pesquisa, e´ importante salientar que a mesma, tem a finali- dade de fazer com que o pesquisador entre em contato direto com o maximo´ de material escrito poss´ıvel sobre um determinado assunto. Desse modo, o pesquisador pode utili- zar este material na analise´ de suas pesquisas ou na manipulac¸ao˜ de suas informac¸oes˜ [Marconi e Lakatos 2003]. Apos´ realizar a pesquisa bibliografica´ foi poss´ıvel definir e realizar as etapas deste trabalho. A seguir sao˜ descritas essas etapas. 1. Definic¸ao˜ de um Conjunto de Ferramentas de Desenvolvimento de Aplicac¸oes˜ Moveis´ Multiplataforma. 2. Descric¸ao˜ das Ferramentas Moveis´ Multiplataformas. 3. Definic¸ao˜ de um Conjunto de Criterios´ para Comparar as Ferramentas Seleciona- das. 4. Comparac¸ao˜ das Ferramentas Selecionadas. 5. Apresentac¸ao˜ do Resultado do Comparativo das Ferramentas. As proximas´ sessoes˜ descrevem as etapas realizadas na pesquisa.

3.1. Definic¸ao˜ de um Conjunto de Ferramentas de Desenvolvimento de Aplicac¸oes˜ Moveis´ Multiplataforma Existem varias´ ferramentas para o desenvolvimento de aplicac¸oes˜ moveis´ multiplata- forma. Neste estudo foi selecionado um conjunto de ferramentas considerando os fatores descritos a seguir:

8 • Ferramentas populares e relevantes no mercado [Stack Overflow 2017]. • Inovac¸ao˜ na metodologia do desenvolvimento do software. • Existenciaˆ de uma comunidade de usuarios´ ativa para a resoluc¸ao˜ de problemas. As ferramentas escolhidas foram: Xamarin, PhoneGap, React Native, Appcele- rator Titanium e Google Flutter. A seguir sao˜ descritas as ferramentas, apresentando maiores detalhes e principais caracter´ısticas.

3.2. Descric¸ao˜ das Ferramentas Multiplataformas Nas subsec¸oes˜ seguintes sao˜ descritas as ferramentas multiplataformas para desenvolvi- mento de aplicac¸oes˜ moveis´ selecionadas para o comparativo. Na descric¸ao˜ sao˜ evidenci- ados o funcionamento e principais caracter´ısticas de cada ferramenta.

3.2.1. Xamarin

A Empresa Xamarin, fundada em maio de 2011, desenvolveu a tecnologia Mono, que e´ a implementac¸ao˜ open source do framework da Microsoft .NET para C#. Assim, ou- tras plataformas podem utilizar essa tecnologia [Mono 2018, Tanner 2016]. Utilizando C#, desenvolvedores conseguem construir aplicac¸oes,˜ tanto para iOS como Android, com recursos nativos, reutilizando o mesmo codigo´ para diferentes plataformas [Tanner 2016]. Xamarin e´ uma plataforma de desenvolvimento que cria um ambiente unificado para o desenvolvimento de aplicac¸oes˜ moveis,´ possibilitando um otimo´ reaproveitamento de codigo´ entre diferentes plataformas. As aplicac¸oes˜ constru´ıdas usando Xamarin conse- guem criar interfaces nativas de usuarios´ que sao˜ compiladas para os pacotes espec´ıficos da plataforma [Xamarin 2017]. O uso de Xamarin possibilita o acesso a APIs nativas das plataformas por meio de binds que permitem o uso de todas as funcionalidades dispon´ıveis do dispositivo em C#, tais como: graficos,´ notificac¸oes,˜ animac¸oes,˜ camera,ˆ GPS, entre outros [Dickson 2013]. Para o desenvolvimento de aplicac¸oes˜ em Android e´ utilizado Mono, ja´ para iOS e´ utili- zado MonoTouch [Hermes 2015]. As aplicac¸oes˜ em Xamarin sao˜ estruturadas de maneira similar a outras ferra- mentas multiplataforma. O modo mais comum de se desenvolver em Xamarin e´ utilizar bibliotecas portaveis´ e projetos compartilhados para armazenar os codigos,´ que resultam na criac¸ao˜ de aplicac¸oes˜ espec´ıficas para cada plataforma, que utilizara´ este codigo´ com- partilhado [Umbaugh et al., 2018a]. A Figura 3 e a Figura 4 demonstram a arquitetura da plataforma, Xamarin e´ exe- cutada no ambiente de execuc¸ao˜ de Mono junto ao ART (Android Runtime). Ambas as plataformas estao˜ sendo executadas no kernel do Linux, o que possibilita o acesso a diversos recursos nativos [McLemore et al., 2018]. O framework Xamarin.Forms permite aumentar o reuso´ de codigo´ no desenvol- vimento ja´ que desenvolve um mesmo codigo´ de interface grafica´ para Android, iOS e UWP (Universal Windows Platform). O desenvolvimento de interface utilizando Xa- marin.Forms pode ser feito utilizando C# ou sua propria´ linguagem de marcac¸ao,˜ XAML (eXtensible Application Markup Language) [Umbaugh et al., 2018a, Petzold et al., 2018].

9 Figura 3. Arquitetura do Xamarin na plataforma Android [McLemore et al., 2018].

Figura 4. Arquitetura do Xamarin na plataforma iOS [Umbaugh et al., 2018b].

XAML e´ uma linguagem baseada em XML desenvolvida pela Microsoft, possibilitando a instanciac¸ao,˜ inicializac¸ao˜ e organizac¸ao˜ de objetos em hierarquia. Juntamente com Xamarin.Forms, XAML consegue definir interfaces utilizando views, layouts, paginas´ e classes personalizadas. Porem,´ Xamarin.Forms nao˜ possui um gerador visual de XAML, apenas um pre-visualizador´ para verificar as mudanc¸as em tempo-real, mas todo o codigo´ deve ser escrito [Petzold et al., 2018]. O desenvolvimento de aplicac¸oes˜ em Xamarin pode ser realizado em Windows ou Mac. A ferramenta recomendada pela Microsoft e´ a IDE Visual Studio [Burns 2018]. Para a compilac¸ao˜ de aplicac¸oes˜ iOS e´ necessario´ um dispositivo Apple operando em um de seus sistemas operacionais (Mac ou iOS) [Burns et al., 2018].

3.2.2. PhoneGap

PhoneGap e´ um framework para desenvolvimento movel´ desenvolvido por Nitobi em 2008 e, em 2011 comprado pela Adobe. O projeto foi atribu´ıdo a` Apache Soft- ware Foundation (ASF) em 2012, sob o nome de . A ASF e´ uma organizac¸ao˜ sem fins lucrativos com suporte a diversos projetos sob o nome Apache [LeRoux 2012, Wargo 2012].

10 PhoneGap utiliza tecnologias padrao˜ web para o desenvolvimento multiplata- forma, tais como: JavaScript, CSS e HTML. Isso facilita o processo de desenvolvimento para a maioria dos desenvolvedores, pois possibilita o uso de tecnologias mais conhecidas no mercado [Ghatol e Patel 2012]. Porem,´ as aplicac¸oes˜ desenvolvidas em PhoneGap sao˜ h´ıbridas, ou seja, nao˜ sao˜ utilizadas somente JavaScript/HTML, consequentemente, nao˜ sao˜ totalmente nati- vas. Para a construc¸ao˜ da interface e comunicac¸ao˜ com servidor utiliza-se JavaScript e HTML, ja´ para o o controle do dispositivo e uso de seus recursos utiliza-se as respectivas linguagens nativas de cada plataforma. PhoneGap oferece APIs em JavaScript que per- mitem o acesso de recursos nativos (Figura 5). Alguns dos recursos que PhoneGap tem acesso sao:˜ camera,ˆ GPS, especificac¸ao˜ do hardware, entre outros [Ghatol e Patel 2012].

Figura 5. Arquitetura da plataforma PhoneGap [Ghatol e Patel 2012].

No PhoneGap, o aplicativo e´ executado dentro de uma WebView, tela que mostra paginas´ da web na versao˜ nativa de cada dispositivo. O uso no sistema operacional iOS exige a versao˜ UIWebView em Objective-C. Ja´ o uso no sistema operacional Android exige a versao˜ android..WebView [LeRoux 2012]. PhoneGap disponibiliza uma aplicac¸ao˜ de desktop que auxilia no desenvolvi- mento, criando um servidor web para hospedar seu projeto para visualizac¸ao˜ da aplicac¸ao˜ final. PhoneGap tambem´ disponibiliza uma aplicac¸ao˜ para celular que consegue executar o projeto hospedado no servidor criado pela aplicac¸ao˜ desktop. Tambem´ e´ poss´ıvel de- senvolver utilizando o seu CLI (command line interface), em conjunto com node.js, que e´ a ferramenta de desenvolvimento para JavaScript [PhoneGap 2018].

3.2.3. React Native

React Native foi desenvolvida pela empresa Facebook e apresentada oficialmente em 2015 na conferenciaˆ React.js [Occhino 2018]. Foi liberada como um framework de codigo´

11 aberto, oferecendo suporte ao desenvolvimento de aplicac¸oes˜ a` plataforma iOS, e em seguida ampliou o suporte para a plataforma Android [Hansson e Vidhall 2016]. React Native e´ um framework de script nativo usado para criar aplicac¸oes˜ mul- tiplataforma. Assim, varias´ partes do codigo´ podem ser compartilhadas entre diferentes plataformas mesmo que seja necessario´ alguns codigos´ espec´ıficos de plataforma. Alem´ do mais, e´ um framework de codigo´ aberto que permite que a comunidade de programac¸ao˜ contribua para o seu desenvolvimento [Asp 2018]. React Native nao˜ utiliza uma WebView, ou seja, seu desempenho promete ser maior ja´ que e´ poss´ıvel utilizar recursos nativos do dispositivo. React Native opera em JavaScript assim como React, a ferramenta na qual o mesmo foi baseado, que e´ uma fer- ramenta de desenvolvimento de interface grafica´ tambem´ criada pela equipe do Facebook [Eisenman 2015]. Similarmente a` Xamarin, React Native opera com a propria´ linguagem de marcac¸ao˜ do React denominada JSX. Essa ferramenta trabalha em conjunto com Ja- vaScript para acessar recursos nativos utilizando uma ligac¸ao˜ com APIs nativas com Objective-C (iOS) e em Java (Android). Isso oferece vantagens a React Native em relac¸ao˜ a ferramentas de desenvolvimento web ou h´ıbridas, pois possibilita a renderizac¸ao˜ do apli- cativo de forma nativa, ou seja, utilizando recursos do proprio´ dispositivo e nao˜ gerando uma WebView [Eisenman 2015, React 2018]. Para o desenvolvimento nativo utilizando JavaScript, React Native trabalha com Virtual DOM, tecnologia implementada originalmente no framework React. Para a renderizac¸ao˜ de interfaces moveis,´ desenvolvedores trabalham com o DOM (Document Object Model), uma estrutura organizada em forma de arvore´ contendo todos os elemen- tos graficos´ da pagina.´ Devido a sua maneira de estruturac¸ao,˜ mudanc¸as desses elementos tendem a custar caro e podem afetar a performance da aplicac¸ao.˜ Com Virtual DOM, Re- act realiza inicialmente as mudanc¸as apenas virtualmente, precipitando como o programa final deve parecer, diminuindo o custo da aplicac¸ao,˜ o seu funcionamento e´ ilustrado na Figura 6 [Eisenman 2015].

Figura 6. Funcionamento do Virtual DOM [Eisenman 2015].

12 Inicialmente o conceito do Virtual DOM foi aplicado como uma otimizac¸ao˜ do sistema, porem,´ em React Native, sua funcionalidade foi aplicada para possibilitar a renderizac¸ao˜ nativa da aplicac¸ao.˜ O uso do Virtual DOM possibilita que o codigo´ ja´ saiba como o programa deve ser, assim e´ poss´ıvel utilizar as APIs das plataformas iOS e Android para realizar a conexao˜ com as funcionalidades nativas do dispositivo, como ilustrado na Figura 7 [Eisenman 2015].

Figura 7. Funcionamento da Renderizac¸ao˜ de React Native [Eisenman 2015].

Para desenvolver aplicac¸oes˜ em React Native nao˜ e´ necessario´ o uso de uma IDE espec´ıfica. O metodo´ mais simples e´ utilizando npm (Node Package Manager), uma ferramenta gerenciadora de pacotes de JavaScript que permite exporta-lo´ e re- alizar seu desenvolvimento em editores de texto ou IDEs que suportam JavaScript [Hansson e Vidhall 2016].

3.2.4. Appcelerator Titanium

Titanium e´ um framework criado pela empresa Appcelerator em 2008, direcionado inicial- mente ao desenvolvimento de aplicac¸oes˜ desktop. Posteriormente, foi adicionado suporte para as principais plataformas moveis,´ sendo elas Android, iOS, Blackberry e UWP (Uni- versal Windows Platform). E´ estimado que o framework possui presenc¸a em cerca de 10% dos smartphones do mundo, contando com mais de 70,000 aplicac¸oes˜ em 111 milhoes˜ de dispositivos [Bort 2013, Titanium 2018a]. No desenvolvimento de aplicac¸oes˜ moveis´ nao˜ e´ utilizado HMTL5 ou CSS3, no desenvolvimento da interface e´ utilizado apenas JavaScript [Anderson 2013]. Os projetos desenvolvidos no Titanium primeiramente sao˜ compilados utilizando o Appcelerator, e em seguida sao˜ compilados nativamente na respectiva plataforma [Tunali e Zafer 2015]. Isso significa que para iOS, e´ criado um projeto XCode usando o compilador da Apple, resultando num arquivo .IPA que pode ser executado pelo dispositivo e lanc¸ado na App Store. Com Android o mesmo acontece, gerando um executavel´ nativo que utiliza recur- sos nativos [Anderson 2013]. Apesar de Titanium utilizar as SDKs nativas de cada plataforma nao˜ e´ necessario´ conhecer o funcionamento delas. Durante o desenvolvimento nao˜ e´ necessario´ utilizar a SDK, o framework trabalha com elas por conta propria´ sem impactar na forma de desen- volvimento da aplicac¸ao˜ [Anderson 2013].

13 Titanium opera como uma ponte com as APIs nativas da plataforma, como ilustra a Figura 8. A camada inferior representa o sistema operacional em que a aplicac¸ao˜ sera´ executada, no topo da arquitetura e´ definida a aplicac¸ao˜ em JavaScript, e entre as duas esta´ definido o SDK de Titanium [Titanium 2018b]. A aplicac¸ao˜ e´ desenvolvida em JavaScript e utiliza as APIs do Titanium para in- vocar determinadas ac¸oes,˜ tais como: abrir a camera,ˆ disponibilizar botoes,˜ abrir janelas, etc. Alem´ disso, Titanium age como uma ponte com o SDK nativo traduzindo todos os chamados para ac¸oes˜ nativas da respectiva plataforma.

Figura 8. Arquitetura da plataforma Titanium [Titanium 2018b].

Titanium usa somente JavaScript no desenvolvimento de suas aplicac¸oes,˜ diferente do desenvolvimento web comum. Normalmente para desenvolver uma pagina web e´ uti- lizado codigo´ HTML e propriedades sao˜ adicionadas aos elementos da interface (botoes,˜ janelas, campos de texto) via JavaScript. Com Titanium esses elementos sao˜ criados como objetos e suas propriedades sao˜ alteradas com metodos´ [Anderson 2013]. O framework conta com uma IDE que possui as principais funcionalidades para o aux´ılio do desenvolvimento, como: templates integrados, exemplos de codigos,´ construtor de interface grafica,´ tutoriais, ferramenta de debugging, add-ons, integrac¸ao˜ com nuvem, testes, empacotamento, entre outros.

3.2.5. Google Flutter

A ferramenta Google Flutter e´ a mais recente entre as pesquisadas. Esta ferramenta foi desenvolvida pelo Google para construir aplicac¸oes˜ moveis´ para os sistemas operacionais Android e iOS. Google Flutter foi lanc¸ado na sua versao˜ preview em 2018 [Sneath 2018]. O desenvolvimento da interface grafica´ e´ um dos pontos de destaque desta fer- ramenta. Ela contem´ uma biblioteca extensa de widgets e animac¸oes˜ dispon´ıveis para implementac¸ao˜ e para a criac¸ao˜ dos widgets. Outra questao˜ interessante na ferramenta e´

14 a possibilidade de observar suas mudanc¸as em tempo real utilizando hot reloads, que e´ recarregar a tela recem´ modificada, aumentando a eficienciaˆ do desenvolvimento de soft- ware. Google Flutter nao˜ opera em uma WebView, mas utiliza sua propria´ ferramenta de renderizac¸ao˜ [Lardinois 2018]. Google Flutter apresenta somente uma camada de codigo´ em C/C++, o restante da implementac¸ao˜ e´ realizada em Dart, linguagem de programac¸ao˜ desenvolvida pela Google com o intuito de desenvolver rapidamente aplicac¸oes˜ para Android, iOS e web. Ao utilizar Dart para desenvolvimento web a plataforma realiza um transpiling, que e´ a interpretac¸ao˜ de um codigo´ de uma linguagem para outro codigo´ de uma outra linguagem de mesmo n´ıvel, neste caso, de Dart para JavaScript [Dart 2018]. Para o codigo´ ser exe- cutado de forma nativa ele e´ compilado para o Android NDK (Native Development Kit) e com o LLMV (Low Level Virtual Machine) para o desenvolvimento multiplataforma (plataformas Android e iOS) [Flutter 2018a]. A Figura 9 ilustra a arquitetura da ferramenta. Todas as suas funcionalidades sao˜ disponibilizadas em Dart, enquanto a camada de C++ a renderiza utilizando Skia, engine grafica´ open-source para C++.

Figura 9. Arquitetura da plataforma Flutter [Flutter 2018a].

Para o desenvolvimento de aplicac¸oes˜ em Android utiliza-se a IDE Android Studio (dispon´ıvel para Windows, Mac e Linux). Ja´ para a construc¸ao˜ de aplicac¸oes˜ em iOS e´ poss´ıvel utilizar Xcode, ferramenta desenvolvida pela Apple para Mac [Flutter 2018b].

3.3. Definic¸ao˜ de um Conjunto de Criterios´ para Comparar as Ferramentas Selecionadas

A seguir sera´ apresentado um conjunto de criterios´ definidos para realizar a comparac¸ao˜ entre as ferramentas selecionadas.

15 3.3.1. Criterios´ de Comparac¸ao˜

Desenvolvedores precisam construir aplicac¸oes˜ moveis´ de qualidade com tempo de de- senvolvimento e custos reduzidos. As ferramentas de desenvolvimento multiplataforma apresentam caracter´ısticas que auxiliam os desenvolvedores a atingirem esses objetivos, ja´ que oferecem suporte para as plataformas mais populares utilizando um mesmo codigo´ base. Neste trabalho foram selecionados alguns criterios´ para realizar um comparativo entre as ferramentas multiplataformas descritas na sec¸ao˜ 3.1. Os criterios´ foram selecio- nados baseados em artigos publicados sobre o tema. Tunali e Erdogan (2015) realizaram um comparativo entre algumas ferramentas multiplataformas. A seguir sao˜ descritos os criterios´ utilizados pelos autores da pesquisa: • Criterios´ funcionais: familiaridade da equipe de desenvolvimento com o ambiente e linguagem de desenvolvimento; reuso´ parcial do codigo´ base; suporte oferecido a` ferramenta/framework e linguagem de programac¸ao;˜ existenciaˆ de dispositivos Mac para desenvolver, testar e depurar aplicac¸oes˜ para a plataforma iOS. • Criterios´ nao˜ funcionais: look-and-feel, responsividade, performance, estabili- dade, seguranc¸a e experienciaˆ completa do usuario´ da aplicac¸ao;˜ acessibilidade aos recursos e sensores dispon´ıveis nos dispositivos moveis.´ • Outros criterios:´ existenciaˆ de comunidade de desenvolvedores que utilizam a ferramenta para avaliar o tamanho e o suporte oferecido pela mesma. Os autores enfatizam a importanciaˆ da existenciaˆ da comunidade de desenvolvedores para que os problemas encontrados durante o desenvolvimento das aplicac¸oes˜ possam ser resolvidos rapidamente. Em outra pesquisa, Heitkotter¨ et. al (2012) analisaram duas ferramentas multipla- taforma e apresentaram seu comparativo sob duas perspectivas diferentes: infraestrutura - define criterios´ relacionados ao ciclo de vida de uma aplicac¸ao˜ tais como uso, operac¸ao˜ e alcance funcional; e desenvolvimento - cobre todos os criterios´ relacionados ao pro- cesso de desenvolvimento da aplicac¸ao˜ que envolvem testes, depurac¸ao˜ e ferramentas de desenvolvimento. A seguir sao˜ apresentados os criterios´ utilizados pelos pesquisadores. • Perspectiva de infraestrutura: analisou questoes˜ referentes a custos e licenc¸a da ferramenta, avaliando sua distribuic¸ao˜ como software livre e codigo´ aberto, custos para suporte; para quais plataformas oferece suporte; acessibilidade dos recursos do dispositivo; look-and-feel; viabilidade da ferramenta; desempenho e facilidade de distribuic¸ao˜ do aplicativo desenvolvido. • Perspectiva de desenvolvimento: robustez da IDE na qual a ferramenta e´ inte- grada; processo de desenvolvimento de interface grafica;´ facilidade de seu desen- volvimento; manutenibilidade; escalabilidade; reusabilidade e o tempo e custo do desenvolvimento. Nesta pesquisa foram definidos alguns criterios´ para realizar a comparac¸ao˜ entre as ferramentas selecionadas. Para a definic¸ao˜ dos criterios´ foram considerados os arti- gos descritos anteriormente e as principais caracter´ısticas das ferramentas selecionadas e descritas nesta pesquisa. Estes criterios´ sao˜ descritos a seguir. 1.B asicos:´ funcionalidades comuns a diversas ferramentas de desenvolvimento mul- tiplataforma movel.´

16 (a) Plataforma: avalia quantos e quais os sistemas operacionais que sao˜ dispo- nibilizados para o seu desenvolvimento. Embora esse criterio´ nao˜ seja tao˜ relevante atualmente, ja´ que os sistemas operacionais Android e iOS sao˜ dominantes no mercado [Statista 2018a], ainda assim e´ interessante saber se a ferramenta oferece a possibilidade de trabalhar com outras platafor- mas. (b) Complexidade: avalia a dificuldade de se desenvolver na ferramenta baseando-se na popularidade da sua linguagem e nos frameworks utiliza- dos em conjunto com a ferramenta. Ferramentas que utilizam tecnologias de desenvolvimento web por exemplo, sao˜ consideradas as mais simples, devido a sua popularidade de metodologia. (c) IDE: analisa se a ferramenta possui um ambiente de desenvolvimento ofi- cial, e caso possua, como e´ sua robustez e integrac¸ao˜ com o mesmo. (d) Desenvolvimento de Interface Grafica:´ avalia a dificuldade do desenvolvi- mento de interface grafica´ e as funcionalidades disponibilizadas para a sua composic¸ao.˜ (e) Responsividade: avalia se o software desenvolvido pela ferramenta tem uma boa performance baseando-se na maneira em que se desenvolve, po- dendo ser nativo, h´ıbrido ou web app. (f) Suporte Tecnico/Documentac¸´ ao:˜ avalia a qualidade da documentac¸ao˜ e suporte tecnico´ oferecido pela ferramenta. (g) Custo: Analisa o custo da ferramenta para a empresa: verifica se e´ livre e de codigo´ aberto, ou se e´ necessario´ comprar licenc¸a ou se possui versoes˜ pagas. 2. Produto: Licenc¸as e posicionamento da empresa no mercado. (a) Amadurecimento do produto: analisa o n´ıvel de consolidac¸ao˜ e estabili- dade da ferramenta. (b) Comunidade: avalia o tamanho e suporte oferecido pela comunidade de desenvolvedores. (c) Mercado: verifica se empresas notaveis´ utilizam a ferramenta.

3.4. Comparac¸ao˜ das Ferramentas Nesta etapa foi realizada a comparac¸ao˜ entre as ferramentas. A Tabela 1 descreve as fer- ramentas selecionadas neste estudo: Xamarin, PhoneGap, Appcelerator Titanium, React Native e Google Flutter. Para cada uma das ferramentas sao˜ descritos os 10 criterios´ definidos na etapa anterior, subdivididos em: Basicos´ - Plataforma, Complexidade, IDE, Desenvolvimento de Interface Grafica,´ Responsividade, Suporte Tecnico/Documentac¸´ ao,˜ Custo; e Produto - Amadurecimento do produto, Comunidade e Mercado. Os criterios´ sao˜ apresentados de forma resumida na Tabela1 para cada uma das ferramentas selecionadas. Em seguida, na sec¸ao˜ de Resultados e Discussoes˜ sao˜ descritas algumas informac¸oes˜ relevantes sobre o comparativo realizado.

17 Tabela 1: Comparativo das ferramentas de desenvolvimento multiplataforma 18 4. Resultado e Discussoes˜ Uma das ferramentas mais populares do mercado, Xamarin e´ gratuita. Possui uma extensa documentac¸ao,˜ que auxilia o desenvolvedor em todas as etapas do desenvolvimento. No site tambem´ e´ poss´ıvel encontrar v´ıdeo aulas ensinando a utilizar a ferramenta. A IDE oficial, Visual Studio possui duas versoes:˜ uma livre e outra proprietaria.´ A versao˜ pro- prietaria´ disponibiliza suporte tecnico,´ softwares auxiliares para desenvolvimento, assina- turas de softwares parceiros do Visual Studio, entre outros. Xamarin oferece uma curva de aprendizagem elevada, pois e´ o unico´ framework das ferramentas comparadas que utiliza C# e o framework .NET para o desenvolvimento. Xamarin oferece alto desempenho, compilando nativamente as aplicac¸oes˜ e e´ confiavel,´ com aproximadamente 15.000 empresas utilizando sua plataforma [Xamarin 2017]. PhoneGap apresenta um desenvolvimento simplificado e e´ uma ferramenta popu- lar. Foi considerada em artigos citados na pesquisa como uma das melhores escolhas para o desenvolvimento multiplataforma [Heitkotter¨ et al., 2012, Tunali e Zafer 2015]. Porem,´ atualmente, apresenta desvantagens em relac¸ao˜ a outras ferramentas desenvolvidas recen- temente. Seu maior atrativo que e´ utilizar tecnologias web para o desenvolvimento de aplicac¸oes˜ moveis´ e´ acompanhado de uma grande desvantagem, ja´ que o produto final tem seu desempenho inferior por nao˜ compilar nativamente nas respectivas plataformas. Ja´ frameworks mais recentes como React Native, permite desenvolver com tecnologias web e obter um desempenho elevado compilando nativamente. Esta plataforma possui duas versoes˜ pagas. As vantagens dispon´ıveis nas versoes˜ pagas sao:˜ aumento do tamanho das aplicac¸oes˜ desenvolvidas; possibilidade de upload de plugins proprios;´ aumento de aplicac¸oes˜ privadas - ou seja, aplicac¸oes˜ que sao˜ hospedadas em repositorios´ privados. PhoneGap e´ a ferramenta que oferece suporte ao maior numero´ de sistemas operacionais. Essa e´ uma escolha interessante quando se opta por desenvolver para plataformas menos populares. Apesar de sua versao˜ open source Apache Cordova estar listada entre os frameworks mais utilizados em 2017 [Stack Overflow 2017], Phone- Gap nao˜ possui nenhuma empresa notavel´ que a utiliza. Dentre as ferramentas pesquisadas, React Native se destaca. Essa ferramenta pos- sui a documentac¸ao˜ mais completa e extensa entre as ferramentas comparadas. React Native permite a criac¸ao˜ de uma aplicac¸ao˜ com um design uniforme para todas as plata- formas suportadas e oferece um desempenho semelhante ao obtido quando o desenvol- vimento e´ nativo. React Native e´ uma ferramenta nova e nao˜ apresenta suporte tecnico.´ Porem,´ sua comunidade e´ ampla, isso se deve a popularidade do framework na qual a mesma se baseia (ReactJS) [Stack Overflow 2017] e tambem,´ pela grande popularidade das empresas que ja´ a utilizam. Alem´ disso, vale lembrar que a ferramenta e´ desenvolvida pela equipe Facebook, assim considera-se que sua popularidade tende a aumentar cada vez mais. Apesar de nao˜ existir ferramentas externas ao framework, na sua documentac¸ao˜ existe recomendac¸oes˜ de diversos softwares que podem auxiliar em seu desenvolvimento. React Native possui uma curva de aprendizagem relativamente elevada, pois seu desen- volvimento destoa um pouco do desenvolvimento web padrao,˜ devido ao uso de JSX, sua propria´ linguagem de marcac¸ao˜ e o framework React. Appcelerator Titanium possui uma versao˜ gratuita, porem,´ muito limitada. Diver-

19 sas ferramentas auxiliares dispon´ıveis na plataforma temˆ suas funcionalidades restritas ou desabilitadas, tais como: construtor visual de interface, automac¸ao˜ para testadores, detecc¸ao˜ de crashes e analytics, entre outros. A versao˜ gratuita tambem´ disponibiliza apenas um seat, ou seja, nao˜ e´ poss´ıvel compartilhar o projeto com outros desenvolvedo- res impossibilitando o trabalho em conjunto. O suporte oferecido gratuitamente pela ferramenta e´ encontrado apenas em foruns´ publicos.´ Ja´ o forum´ exclusivo que a plataforma possu´ıa foi exclu´ıdo em 2016, direcio- nando toda a comunidade para o site Stack Overflow. Isso resulta em um problema, pois todo o conteudo´ capturado pela comunidade ate´ essa data foi removido, impedindo os desenvolvedores de utilizar esse conteudo.´ As versoes˜ pagas possuem suporte especiali- zado: na versao˜ pro - via chat e e-mail; e na versao˜ enterprise – o suporte oferecido e´ n´ıvel ”elite”, segundo o site da plataforma. Talvez o framework mais distinto entre os comparados, seja o Google Flutter. Ele apresenta desempenho equivalente ao das aplicac¸oes˜ nativas. Tambem´ conta com uma biblioteca extensa de widgets para o desenvolvimento de interfaces de maneira simples e, mantem´ uma aparenciaˆ unificada entre as plataformas. Sua documentac¸ao˜ e´ satisfatoria,´ como a linguagem da ferramenta e´ desconhecida, a documentac¸ao˜ conta com guias para desenvolvedores de Android, iOS, web e React Native se familiarizarem com o territorio,´ tambem´ e´ dispon´ıvel tutoriais para cada etapa de seu desenvolvimento e demonstrac¸oes˜ tecnicas´ do framework. A ferramenta nao˜ oferece suporte tecnico,´ porem,´ contem´ diversos foruns´ nos quais e´ poss´ıvel interagir com seus desenvolvedores. Como a ferramenta e´ desenvolvida pela Google, sua popularidade tende a se manter por um tempo consideravel.´ A linguagem e´ desconhecida, porem,´ sua sintaxe e´ similar a` de outras linguagens populares tais como Java e JavaScript. A ferramenta e´ bastante recente, na data da publicac¸ao˜ desse artigo, ele esta´ na sua versao˜ Preview 1 [Sneath 2018]. 5. Conclusoes˜ e Trabalhos Futuros O modo de desenvolvimento de aplicac¸oes˜ moveis´ assim como o de desenvolvimento web continua mudando rapidamente. A definic¸ao˜ de novas tecnologias, tal como progressive web apps, pode tornar desnecessaria´ a necessidade do desenvolvimento nativo para se obter maior desempenho nesse tipo de aplicac¸oes˜ [Ater 2017]. Assim, o mercado cada vez mais necessita de novas ferramentas que oferec¸am desenvolvimento simplificado e que apresentem maior qualidade. O surgimento constante de novas ferramentas que atendam as` varias´ restric¸oes˜ e particularidades do desenvolvimento de aplicac¸oes˜ moveis´ exige que sejam desenvolvidas pesquisas que possibilitem realizar comparac¸oes˜ entre as mesmas. Assim, e´ poss´ıvel ava- liar as vantagens e desvantagens das ferramentas no desenvolvimento dessas aplicac¸oes,˜ bem como apresentar as principais caracter´ısticas dessas ferramentas. Nesta pesquisa foram investigadas e comparadas cinco ferramentas de desenvolvi- mento para aplicac¸oes˜ moveis´ multiplataforma. Para realizar o comparativo foram defini- dos alguns criterios,´ tais como: numero´ de plataformas dispon´ıveis, complexidade, IDE, desenvolvimento de interface grafica,´ suporte tecnico´ e documentac¸ao,˜ custo, amadureci- mento do produto, comunidade e mercado. As ferramentas selecionadas foram: Xamarin, PhoneGap, React Native, Appcelerator Titanium e Google Flutter.

20 Resumidamente pode-se concluir que as ferramentas mais modernas como React Native e Google Flutter sao˜ as mais atrativas e que apresentam maiores vantagens. Ambas mantem´ o desempenho nativo, com um funcionamento simplificado e sao˜ completamente gratuitas. Apesar das mesmas nao˜ possu´ırem suporte tecnico,´ suas respectivas comunida- des e documentac¸oes˜ auxiliam durante o processo de desenvolvimento das aplicac¸oes.˜ PhoneGap apresentou algumas desvantagens em relac¸ao˜ as` demais ferramentas: desempenho inferior e recursos reduzidos. Appcelerator Titanium possui caracter´ısticas interessantes, porem,´ a maioria dessas caracter´ısticas esta´ disponibilizada apenas em suas versoes˜ pagas. Assim, o desenvolvedor que optar pela versao˜ gratuita, nao˜ tera´ acesso a varios´ recursos, inclusive, nao˜ podera´ construir projetos em conjunto. Xamarin mesmo sendo uma das ferramentas mais antigas, continua relevante no mercado, e´ uma ferramenta confiavel´ e robusta. Possui uma comunidade ativa de usuarios´ em foruns´ da plataforma e de terceiros. Apresenta uma documentac¸ao˜ extensa e um su- porte tecnico´ satisfatorio´ nas versoes˜ pagas, resultando em uma otima´ escolha para qual- quer tipo de empresa ou desenvolvedor que preza seguranc¸a e confiabilidade. Como trabalhos futuros pode ser realizado uma comparac¸ao˜ mais detalhada entre as ferramentas React Native, Google Flutter e Xamarin, analisando diferentes criterios.´ Alem´ disso, seria interessante o desenvolvimento de uma aplicac¸ao˜ utilizando cada uma das ferramentas avaliadas, a fim de compara-las,´ avaliando criterios´ como a responsivi- dade e o desempenho entre as mesmas. Referenciasˆ Allen, S., Graupera, V., e Lundrigan, L. (2010). Pro smartphone cross-platform develop- ment: iPhone, blackberry, windows mobile and android development and distribution. Apress. Anderson, J. (2013). Appcelerator Titanium: Up and Running: Building Native iOS and Android Apps Using JavaScript. ”O’Reilly Media, Inc.”. Android (2017). Open Wonder. Dispon´ıvel em: . Acesso em: 12 mai. 2018. Android (2018a). Everything you need to build on Android. Dispon´ıvel em: . Acesso em: 28 mai. 2018. Android (2018b). Platform Architecture. Dispon´ıvel em: . Acesso em: 28 mai. 2018. Apple (2018). iOS 11. Dispon´ıvel em: . Acesso em: 12 mai. 2018. Asp, F. (2018). A comparison of Ionic 2 versus React Native and Android in terms of performance, by comparing the performance of applications. Ater, T. (2017). Building progressive web apps: bringing the power of native to the browser. ”O’Reilly Media, Inc.”. Bort, J. (2013). Microsoft Might Buy A Startup That Powers 10 Percent Of The World’s Smartphones. Dispon´ıvel em: . Acesso em: 5 abr. 2018.

21 Boudreaux, T. (2009). Programming the iphone user experience: Developing and desig- ning cocoa touch applications. ”O’Reilly Media, Inc.”. Burns, A. (2018). Requisitos de Sistema. Dispon´ıvel em: . Acesso em: 15 mai. 2018. Burns, A., Dunn, C., e Umbaugh, B. (2018). Installation. Dispon´ıvel em: . Acesso em: 26 mai. 2018. Charland, A. e Leroux, B. (2011). Mobile application development: web vs. native. Communications of the ACM, 54(5):49–53. Constantin, N. O., Robert-Gyula, M., e Cornelia, N. M. (2016). Comparison of hybrid cross-platform mobile applications with native cross-platform applications. Journal Of Computer Science And Control Systems, 9(2):24. Corral, L., Janes, A., e Remencius, T. (2012). Potential advantages and disadvantages of multiplatform development frameworks–a vision on mobile environments. Procedia Computer Science, 10:1202–1207. da Silva, M. M. e Santos, M. T. P. (2014). Os paradigmas de desenvolvimento de aplica- tivos para aparelhos celulares. Revista TIS, 3(2). Daniel, S. F. (2011). Xcode 4 IOS Development: Beginner’s Guide: Use the Powerful Xcode 4 Suite of Tools to Build Applications for the IPhone and IPad from Scratch. Packt Publishing Ltd. Dart (2018). Why Dart?. Dispon´ıvel em: . Acesso em: 24 mai. 2018. Dickson, J. (2013). Xamarin mobile development. Eisenman, B. (2015). Learning React Native: Building Native Mobile Apps with JavaS- cript. ”O’Reilly Media, Inc.”. El-Kassas, W. S., Abdullah, B. A., Yousef, A. H., e Wahba, A. M. (2017). Taxonomy of cross-platform mobile applications development approaches. Ain Shams Engineering Journal, 8(2):163–190. Fling, B. (2009). Mobile design and development: Practical concepts and techniques for creating mobile sites and Web apps. ”O’Reilly Media, Inc.”. Flutter (2018a). Flutter FAQ. Dispon´ıvel em: . Acesso em: 24 mai. 2018. Flutter (2018b). Get Started: Install. Dispon´ıvel em: . Acesso em: 24 mai. 2018. Gartner (2017). Gartner Says Worldwide Sales of Smartphones Grew 7 Percent in the Fourth Quarter of 2016. Dispon´ıvel em: . Acesso em: 25 abr. 2018. Gavalas, D. e Economou, D. (2011). Development platforms for mobile applications: Status and trends. IEEE software, 28(1):77–86. Ghatol, R. e Patel, Y. (2012). Beginning PhoneGap: mobile web framework for JavaScript and HTML5. Apress.

22 Google (2018). Encontrar o app Google Play Store. Dispon´ıvel em: . Acesso em: 12 mai. 2018. Hansson, N. e Vidhall, T. (2016). Effects on performance and usability for cross-platform application development using react native. Heitkotter,¨ H., Hanschke, S., e Majchrzak, T. A. (2012). Evaluating cross-platform de- velopment approaches for mobile applications. In International Conference on Web Information Systems and Technologies, pages 120–138. Springer. Hermes, D. (2015). Xamarin Mobile Application Development: Cross-Platform C# and Xamarin.Forms Fundamentals. Apress. Lardinois, F. (2018). Flutter, Google’s SDK for iOS and An- droid, is now in beta. Dispon´ıvel em: . Acesso em: 10 abr. 2018. Lecheta, R. R. (2013). Google Android-3a Edic¸ao:˜ Aprenda a criar aplicac¸oes˜ para dispositivos moveis´ com o Android SDK. Novatec Editora. LeRoux, B. (2012). PhoneGap Beliefs, Goals, and Philosophy. Dispon´ıvel em: . Acesso em: 9 mar. 2018. Malavolta, I., Procaccianti, G., Noorland, P., e Vukmirovic, P. (2017). Assessing the impact of service workers on the energy efficiency of progressive web apps. In Mobile Software Engineering and Systems (MOBILESoft), 2017 IEEE/ACM 4th International Conference on, pages 35–45. IEEE. Malavolta, I., Ruberto, S., Soru, T., e Terragni, V. (2015). End users’ perception of hybrid mobile apps in the google play store. In Mobile Services (MS), 2015 IEEE International Conference on, pages 25–32. IEEE. Marconi, M. d. A. e Lakatos, E. M. (2003). Fundamentos de metodologia cient´ıfica. 5. ed.-Sao˜ Paulo: Atlas. McLemore, M., Dunn, C., Opgenorth, T., Eilertsen, F., e Umbaugh, B. (2018). Archi- tecture. Dispon´ıvel em: . Acesso em: 26 mai. 2018. Mono (2018). Mono. Dispon´ıvel em: . Acesso em: 11 mai. 2018. Mushtaq, Z., Kirmani, M., Saif, S. M., et al. (2016). Mobile application development: Issues and challenges. Novac, O. C., Novac, M., Gordan, C., Berczes, T., e Bujdoso,´ G. (2017). Comparative study of google android, apple ios and microsoft mobile operating systems. In Engineering of Modern Electric Systems (EMES), 2017 14th International Conference on, pages 154–159. IEEE. Occhino, T. (2018). React.js Conf 2015 Keynote - Introducing React Native. Dis- pon´ıvel em: . Acesso em: 26 mai. 2018.

23 Oliveira, F. (2017). Smartphones estao˜ nas maos˜ de 62% dos brasileiros, diz Google. Dispon´ıvel em: . Acesso em: 21 set. 2017. Open Handset Alliance (2017). What it would take to build a better mobile phone?. Dispon´ıvel em: . Acesso em: 11 nov. 2017. Pereira, M. A. C. (2005). Manual Basico´ de Orientac¸ao˜ de Documentos Cient´ıficos - Parte 2 - Orientac¸oes˜ Basicas´ para a Monografia. FAENQUIL. Petzold, C., Dunn, C., e Britch, D. (2018). Xamarin.Forms XAML Basics. Dispon´ıvel em: . Acesso em: 14 mai. 2018. PhoneGap (2018). Get Started. Dispon´ıvel em: . Acesso em: 16 mai. 2018. Picurelli, L. (2017). Advantages and disadvantages of web app development. Dispon´ıvel em: . Acesso em: 10 mai. 2018. React (2018). Introducing JSX. Dispon´ıvel em: . Acesso em: 18 mai. 2018. Redda, Y. A. (2012). Cross platform mobile applications development: Mobile apps mobility. Master’s thesis, Institutt for datateknikk og informasjonsvitenskap. Roshan, S., Kumar, S. V., e Kumar, M. (2017). Performance evaluation of web browsers in ios platform. In Research in Computational Intelligence and Communication Networks (ICRCICN), 2017 Third International Conference on, pages 74–78. IEEE. Serrano, N., Hernantes, J., e Gallardo, G. (2013). Mobile web apps. IEEE software, 30(5):22–27. SILVA, L., Pires, D. F., e Neto, S. C. (2015). Desenvolvimento de aplicac¸oes˜ para dispo- sitivos moveis:´ tipos e exemplo de aplicac¸ao˜ na plataforma ios. Franca/SP. Silva, R. (2012). Google lanc¸a Google Play para centralizar download de apps, livros, musica´ e mais. Dispon´ıvel em: . Acesso em: 12 mai. 2018. Sin, D., Lawson, E., e Kannoorpatti, K. (2012). Mobile web apps-the non-’s alternative to native applications. In Human System Interactions (HSI), 2012 5th Inter- national Conference on, pages 8–15. IEEE. Sneath, T. (2018). Announcing Flutter Release Preview 1. Dispon´ıvel em: . Acesso em: 20 jun. 2018. Stack Overflow (2017). Developer Survey Results 2017. Dispon´ıvel em: . Acesso em: 1 mai. 2018.

24 Statista (2017). Number of smartphone users worldwide from 2014 to 2020 (in billions). Dispon´ıvel em: . Acesso em: 12 nov. 2017. Statista (2018a). Market share held by mobile operating sys- tems in the United Kingdom (UK) from December 2011 to March 2018. Dispon´ıvel em: . Acesso em: 14 jun. 2018. Statista (2018b). Number of apps available in leading app stores as of March 2017. Dispon´ıvel em: . Acesso em: 12 mai. 2018. Tanner, A. (2016). Xamarin forms: For starters. Titanium (2018a). Titanium Mobile Development Environment. Dispon´ıvel em: . Acesso em: 5 abr. 2018. Titanium (2018b). Titanium Platform Overview. Dispon´ıvel em: . Acesso em: 2 jun. 2018. Toledo, J. M. e de Deus, G. D. (2012). Desenvolvimento em smartphones-aplicativos nativos e web. Tunali, A. P. D. V. e Zafer, S. (2015). Comparison of popular cross-platform mobile application development tools. Umbaugh, B., Dunn, C., e Britch, D. (2018a). An Introduction to Xamarin Forms. Dis- pon´ıvel em: . Acesso em: 14 mai. 2018. Umbaugh, B., Dunn, C., e Pakala, Y. (2018b). Architecture. Dispon´ıvel em: . Acesso em: 26 mai. 2018. Wargo, J. M. (2012). PhoneGap essentials: Building cross-platform mobile apps. Addison-Wesley. Wasserman, A. I. (2010). Software engineering issues for mobile application develop- ment. In Proceedings of the FSE/SDP workshop on Future of software engineering research, pages 397–400. ACM. Xamarin (2017). Xamarin e Visual Studio. Dispon´ıvel em: . Acesso em: 30 nov. 2017. Xanthopoulos, S. e Xinogalos, S. (2013). A comparative analysis of cross-platform deve- lopment approaches for mobile applications. In Proceedings of the 6th Balkan Confe- rence in Informatics, pages 213–220. ACM.

25