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: Xamarin, PhoneGap, Appcelerator Titanium, React Native and Google Flutter.
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, 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 (Software Development Kit) 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 Linux, 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 Apache Cordova. 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.webkit.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:
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:
22 Google (2018). Encontrar o app Google Play Store. Dispon´ıvel em:
23 Oliveira, F. (2017). Smartphones estao˜ nas maos˜ de 62% dos brasileiros, diz Google. Dispon´ıvel em:
24 Statista (2017). Number of smartphone users worldwide from 2014 to 2020 (in billions). Dispon´ıvel em:
25