Texto de: Lucas Galdino
Introdução
Atualmente, não existem emuladores dos dispositivos Apple para sistemas operacionais que não sejam da própria empresa. Ou seja, dentro do Windows ou qualquer distro do Linux não temos como baixar e utilizar emuladores de iOS, tvOS, watchOS e por aí vai.
Desenvolvimento Mobile
Normalmente, o questionamento base desse artigo acontece quando desenvolvedores começam a trabalhar com programação mobile, utilizando plataformas como Flutter ou React Native. Essas plataformas nos dão a possibilidade de criar um código que pode ser executado nos ambientes Android e iOS, e é natural que tenhamos vontade de testar este código nos dois ambientes.
Porém, é aqui que as limitações começam. Caso você esteja trabalhando em um ambiente Windows ou Linux, será possível fazer testes apenas em emuladores de Android. Isso acontece por que a Apple não criou emuladores do ambiente iOS para estes sistemas operacionais, ou seja, só existem versões de emuladores iOS dentro do Ambiente do MacOS, o sistema que roda nos Macbooks e Macs, em geral.
Isso acontece não só com emuladores, mas com todo o ecossistema de desenvolvimento da Apple, como a IDE Xcode e os plugins que fazem toda a construção das aplicações por debaixo dos panos. Por isso, também não é possível utilizar um iPhone real conectado à sua máquina para testar uma aplicação. Esse tipo de operação também é limitada apenas aos Macs.
Alternativas
Seria mentira falar que não existem alternativas para tentar driblar isso. O mais comum de se pensar é de criar uma máquina virtual executando um MacOS para trabalhar com os emuladores a partir disso. E sim, é possível criar uma máquina virtual dessa forma, porém isso acabaria gerando novos problemas.
A performance seria o primeiro problema. Por se tratar de uma emulação de sistema, a performance seria bem menor que o sistema verdadeiro e também seria necessária uma máquina muito mais parruda para conseguir executar essa emulação. E bem, tentar executar um emulador em outro emulador seria um baita desafio, tanto para a máquina host quanto para a máquina emulada.
Outra saída seria tentar instalar uma versão mais antiga do MacOS para “resolver” os problemas de performance, mas nisso, outro problema surge. Diferente do Android, onde as versões do sistema variam muito de celular para celular, de marca para marca, o iOS é bem constante no assunto de versionamento. Sempre que uma versão nova é lançada, uma quantidade grande dos aparelhos já recebe essa versão nova, o que faz com que a grande maioria da base de usuários faça essa atualização bem cedo. Por conta disso não é recomendado que você tente trabalhar com versões antigas do iOS, ou mais precisamente do Swift, que é a linguagem responsável pelas aplicações de todos os sistemas da Apple.
Quando você trabalha com Flutter, por exemplo, você escreve todo o código em Flutter, mas o resultado é convertido para Java ou Kotlin no Android e para Swift no iOS, e é ai que surge o problema. Quando saem novas versões do Swift, o Xcode é atualizado e os emuladores de iOS também. E essas atualizações só chegam para versões mais novas do MacOS, ou seja, a versão do MacOS vai controlar quais atualizações você vai receber para essas ferramentas de desenvolvimento.
De forma resumida, não é indicado trabalhar com máquinas muito antigas que estão em versões antigas do MacOS, pois nessa situação você iria trabalhar com uma versão do iOS que nenhum iPhone utiliza mais, pois mesmo os mais antigos recebem diversos anos de atualizações.
Conclusão
É importante lembrar que o mesmo não acontece na situação inversa, a partir do ambiente MacOS é possível trabalhar normalmente com o Android sem nenhum problema ou limitação.
Finalizando, infelizmente o desenvolvimento de aplicações é limitado nesse ponto por conta dessas regras da empresa, porém tais regras e limitações tem seus pontos positivos refletidos na qualidade e na performance que as aplicações conseguem atingir dentro desse ambiente mais fechado.