Já no estágio de design de um aplicativo móvel, é importante entender qual idioma é mais lucrativo para usar em um projeto específico. Juntamente com o desenvolvimento nativo (por exemplo, para iOS - Swift ou Objective-C, para Android - Java ou Kotlin), são usadas estruturas de plataforma cruzada, como React Native e Flutter. Na SimbirSoft, oferecemos vários critérios que ajudarão na escolha de uma empresa e de um desenvolvedor móvel.

Problema de escolha
No mundo, já existem cerca de cinco bilhões de smartphones, de acordo com várias estimativas, até 80% deles usam o sistema operacional Android e menos de 20% usam iOS. E, no entanto, cada país tem suas próprias características, por exemplo, nos Estados Unidos, mais de 65% dos smartphones funcionam no iOS. Ao criar aplicativos móveis, geralmente é necessário lançar versões no iOS e no Android. Para fazer isso, você pode recorrer ao desenvolvimento nativo ou de plataforma cruzada ("híbrido").
O desenvolvimento nativo é uma solução clássica que requer a criação de aplicativos para cada plataforma individualmente, usando diferentes idiomas e levando em consideração os recursos de cada plataforma. Ao criar várias versões de um projeto, várias equipes trabalham simultaneamente.
Graças às estruturas de plataforma cruzada, tornou-se possível "matar dois coelhos com uma cajadada" de uma só vez e preparar versões para iOS e Android com uma única ferramenta. Entre os frameworks são especialmente difundidos:
- Reagir nativo do Facebookpara aplicativos iOS, Android e Windows
usa a linguagem JavaScript e a biblioteca React.js como a principal ferramenta de desenvolvimento.
- Flutter do Googlepara aplicativos do Android, IOS e Fuchsia (para detalhes, consulte
nosso artigo sobre Habré )
usa a linguagem Dart, que também serve para programação na web.
A popularidade do React Native e do Flutter está crescendo, embora em velocidades diferentes, de acordo com as estatísticas do Google Trends.Desenvolvimento nativo
O desenvolvimento nativo e multiplataforma tem suas próprias características. Usamos as duas abordagens na prática da divisão mobile mobile.SimbirSoft. Entre as vantagens do desenvolvimento nativo estão as seguintes:
- operação de aplicação estável e rápida;
- vida útil máxima do aplicativo;
- a aplicação é mais flexível e escalável, graças ao uso de ferramentas "nativas";
- menos restrições na arquitetura e recursos;
- a interface corresponde exatamente à plataforma.
Desenvolvimento híbrido
As estruturas de plataforma cruzada “personalizam” o aplicativo para vários sistemas operacionais, portanto, não há necessidade de criar elementos exclusivos para cada plataforma. Como resultado:
- são necessários menos especialistas;
- leva menos tempo e recursos;
- velocidade de desenvolvimento está aumentando.
Se a lógica do aplicativo for a mesma em todas as plataformas e a interface for simples, o desenvolvimento híbrido ajudará a colocar o produto no mercado mais rapidamente. Recomendamos estruturas como React Native e Flutter nas seguintes condições:
- se em pouco tempo você precisar escrever um protótipo de aplicativo para várias plataformas;
- se o aplicativo pegar todas as informações do servidor, a lógica é implementada no servidor e a animação e a interface não importam;
- se o número mínimo de recursos nativos for usado, como notificações push, compras no aplicativo, geolocalização, etc;
- se um desempenho modesto for aceitável e o conteúdo for baixado da Internet.
Critérios de seleção para Nativo, React Native e Flutter
Para empresas
1. Disponibilidade
Algumas empresas, quando entram em contato conosco para o desenvolvimento de aplicativos móveis, observam o custo como um dos critérios mais significativos para eles. Ao mesmo tempo, o custo e a necessidade de especialistas dependem do método de desenvolvimento.
NativoComo regra, um estúdio móvel possui recursos suficientes para o desenvolvimento de aplicativos nativos de qualquer complexidade.
Reagir nativo e vibraçãoExistem menos especialistas nessas áreas no mercado. Pode haver dificuldades no desenvolvimento de aplicativos grandes.
Recomendamos tecnologias nativas para os negócios quando o aplicativo é projetado para operação a longo prazo (em outras palavras, "vida útil"). Também é benéfico se houver necessidade de alto desempenho, interface e animação complexas, baixo consumo de energia, integração com recursos de terceiros (API, etc.). Aplicativos nativos são mais lucrativos a longo prazo devido aos custos mais baixos de suporte técnico.
Recomendamos tecnologias de plataforma cruzada para testes rápidos de hipóteses, desenvolvimento de protótipos e aplicativos com uma limitação clara da vida útil, por exemplo, desenvolvida para determinados eventos.
Memorando para negócios:
para aplicativos complexos - recomendamos desenvolvimento nativo;
para aplicações simples - um híbrido.2. Speed + correspondência de tarefas
O tempo de colocação no mercado é determinado principalmente pelo tamanho da equipe disponível e pelos recursos do aplicativo móvel.
Trabalhar com estruturas de plataforma cruzada pode ser mais lucrativo e mais rápido se o aplicativo for simples, com a mesma interface do usuário, sem detalhes específicos da plataforma, como acesso à câmera, trabalho com o sistema de arquivos e impressões digitais, permissões de tempo de execução. Aqui, o desenvolvimento híbrido economiza tempo reutilizando quase todo o código e a interface do usuário para duas plataformas. No entanto, se você precisar criar visualizações personalizadas complexas, o desenvolvimento entre plataformas diminuirá.
Falando sobre o tempo de desenvolvimento de um aplicativo móvel, é importante entender que não há "prazo médio para um hospital". Por exemplo, em nossa prática, lançamos um aplicativo móvel bancário em 100 dias, agora estamos participando do desenvolvimento adicional deste produto. Ao mesmo tempo, havia aplicativos simples (tempo de inicialização - cerca de duas semanas) e projetos de larga escala com um período de desenvolvimento de mais de um ano.
3. Segurança e perspectivas
Ao escolher um idioma, é importante para uma empresa avaliar hoje sua confiabilidade e segurança de um ponto de vista técnico, bem como as perspectivas de desenvolvimento adicional e os riscos de obsolescência.
Em termos de confiabilidade, o desenvolvimento nativo está à frente de todos os seus concorrentes. O desenvolvimento das principais bibliotecas está em andamento há vários anos, a maioria dos bugs já foram corrigidos, linguagens nativas - como Java, Objective-C, Swift, Kotlin - estão em constante evolução. Entre os desenvolvedores de dispositivos móveis, você pode ouvir opiniões de que, na década de 2020, o desenvolvimento nativo do Android será parcialmente substituído pelo Flutter, mas até agora isso é apenas uma suposição.
O React Native fornece todas as ferramentas para criar aplicativos móveis seguros, por exemplo, Skype, Instagram, Facebook e outros produtos conhecidos. As preocupações de segurança são possíveis apenas ao usar módulos de terceiros durante o desenvolvimento. Ao mesmo tempo, o JavaScript está desenvolvendo ativamente, novos recursos estão sendo lançados e, no futuro próximo, o risco de obsolescência é mínimo.
No caso de desenvolvimento no Flutter, os riscos são maiores, já que o framework é jovem, o lançamento foi lançado apenas em dezembro de 2018. Até o momento, existem problemas, por exemplo, uma vez ou outra, a montagem da biblioteca está disponível apenas para uma plataforma, ocorrem falhas no Android Studio, há erros em alguns plugins e bibliotecas. Por outro lado, tudo isso está sendo finalizado e corrigido. Não podemos excluir o risco de o Google parar de dar suporte ao Flutter, como aconteceu com outros projetos da empresa. No entanto, o Fuchsia OS está escrito no Flutter, no qual alguns desenvolvedores vêem um substituto para o Android.
Para desenvolvedor
Acima, descrevemos os fatores que levam em consideração o negócio e o contratado. Também existem critérios tecnológicos que são atendidos principalmente pelo gerente de projeto. Por exemplo:
- Nível de conhecimento de idiomas nativos e preferências da equipeCada estúdio móvel tem suas próprias preferências na escolha da tecnologia. O desenvolvimento nativo requer o conhecimento mais completo dos respectivos idiomas. No entanto, devido ao uso de ferramentas nativas dos sistemas, há menos restrições e dificuldades ao personalizar ou acessar ferramentas específicas da plataforma (diferente de React Native e Flutter). Se você possui experiência em JavaScript, um desenvolvedor móvel pode facilmente mudar para o React Native (não é necessário aprender adicionalmente a linguagem Dart, como é o caso do Flutter) ou para o Dart (o conhecimento do TypeScript será uma grande vantagem).
O React Native usa módulos nativos sob o capô. Como resultado, se houver necessidade de personalização (e isso não é suportado imediatamente), é necessário trabalhar com módulos nativos. Por exemplo, em nossa prática, houve um caso em que você precisou personalizar a biblioteca Yandex.Maps para exibir componentes visuais personalizados no mapa.
O Flutter, diferentemente do React Native, se destaca com seu próprio mecanismo gráfico. Por um lado, isso permite que você não toque em nada nativo ao desenvolver aplicativos simples. Por outro lado, se você precisar acessar o nativo, isso significa dificuldades adicionais (por exemplo, envio de mensagens com tipos de dados elementares e JSON) e a incapacidade de usar componentes gráficos do nativo.
- Limiar de entradaSe o desenvolvedor decidir aprender um novo idioma, a disponibilidade da comunidade, bem como informações e documentação de segundo plano, se tornará uma questão importante.
Flutter e React Native estão em constante evolução, possuem uma comunidade profissional ativa e boa documentação. Ao mesmo tempo, o desenvolvimento nativo está à frente das estruturas, graças a uma comunidade maior e a mais materiais e fóruns de treinamento, que descrevem os processos de desenvolvimento de componentes complexos.
"Folha de dicas" para seleção
A tabela comparativa a seguir ajudará a simplificar a seleção e responder à pergunta em que casos esse ou aquele método de implementação é adequado (ou não) para criar um aplicativo móvel.

Recomendações
Se a escolha for feita em favor de estruturas, recomendamos que você preste atenção aos seguintes aspectos do trabalho:
ClassificaçãoVocê precisa testar todas as plataformas envolvidas (iOS, Android). É importante avaliar objetivamente o nível de conhecimento e experiência de todos os participantes do projeto, para que a classificação em horas não seja subestimada. Considere o risco de erros nas estruturas React Native e Flutter durante o desenvolvimento.
DesenhoAlguns elementos são difíceis (ou mesmo impossíveis) de renderizar no Flutter ou React Native. Por esse motivo, o design deve ser acordado com os desenvolvedores - e antes que o cliente se apaixone por uma imagem lindamente desenhada.
CI / CDNo React Native, problemas específicos com a montagem automática não são descartados (por exemplo, devido à instalação de bibliotecas em plataformas diferentes). Precisa colocar mais reserva de risco.
Tela inicialA implementação da tela inicial no Flutter é mais rápida que no React Native, onde esse elemento só pode ser desenhado de forma nativa, com uma alta probabilidade de erros. Ao usar o React Native em uma tela inicial com todas as renderizações e correções de bugs, é recomendável dedicar mais tempo.
LayoutAo usar o React Native, a digitação no iOS e no Android precisa ser feita simultaneamente para evitar problemas ao adaptar os layouts para um dos sistemas.
Desenvolvimento paralelo de web e mobileSe a versão da Web do aplicativo estiver escrita em React, menos tempo será gasto no desenvolvimento de um aplicativo móvel no React Native - devido à mesma lógica dos componentes.
DepurarSe o aplicativo for grande, o React Native facilita os testes e os testes de unidade. No Flutter, você precisa dedicar mais tempo à correção do bug, pois os logs não são informativos.
Trabalho de aplicativo com arquivos do sistemaÉ necessário solicitar permissão para o cartão SD, embora não seja possível obter um nome e caminho em todos os arquivos. Para enviar um arquivo, você deve usar o ContentResolver. Para minimizar os riscos, reserve tempo para todas as operações relacionadas ao sistema de arquivos.
Entrega de montagens ao clienteNão há diferenças significativas em relação ao desenvolvimento nativo; você pode escolher qualquer serviço conveniente: Crashlytics, TestFairy, TestFlight.
React Native vs Flutter
Na SimbirSoft, usamos o React Native e o Flutter, dependendo da natureza do aplicativo. Compartilhamos várias observações de nossa prática que ajudam a fornecer os recursos para trabalhar com uma estrutura específica.

Resumir
O desenvolvimento de aplicativos móveis nativos e híbridos tem suas vantagens e desvantagens, que são levadas em consideração pela empresa e pelo contratado na escolha de uma tecnologia. Entre os critérios mais significativos estão o tempo e o custo do desenvolvimento e manutenção, o cumprimento da tarefa, a segurança e as perspectivas, o nível de desenvolvimento da comunidade. Com base em sua experiência, um desenvolvedor móvel ajuda a escolher a melhor solução para cada aplicativo específico. Esperamos que nossos critérios e tabela de comparação tenham sido úteis para você. Obrigado pela atenção!