12k
All articles

Como criar um app iOS sem um Mac

Crie e publique um app iOS sem Mac com Expo EAS, um Mac alugado na nuvem ou CI. Compare custos, opções de assinatura e testes no iPhone.

OpenReplay Team
OpenReplay Team
Como criar um app iOS sem um Mac

É possível escrever, compilar, assinar e publicar um app iOS sem ter um Mac, mas toda alternativa viável usa o macOS de outra pessoa: os servidores de build da Expo, um Mac alugado ou um runner de CI.

Se você trabalha no Windows ou no Linux, provavelmente tem um app React Native ou Capacitor funcionando, um iPhone na mesa e um guia de primeiros passos mandando você abrir o Xcode. Só que o Xcode não instala na sua máquina.

Este artigo apresenta as alternativas legítimas para contornar esse problema, quanto cada uma custa e como testar o app depois de compilado. Compilar na nuvem é a parte fácil. Testar sem um Mac é mais difícil.

Principais pontos

  • O Xcode, o codesign e o iOS Simulator rodam apenas no macOS, então toda alternativa sem Mac executa o build no Mac de outra pessoa.
  • Em projetos Expo e React Native, o eas build --platform ios compila e assina o app nos servidores da Expo, e o eas submit --platform ios faz o upload para o App Store Connect a partir do Windows ou do Linux.
  • O Apple Developer Program custa US$ 99 por ano, seja qual for a alternativa escolhida, porque tanto a assinatura para a App Store quanto a distribuição pelo TestFlight exigem a assinatura do programa.
  • O iOS Simulator é um app do macOS, então, sem um Mac próprio, você testa em um iPhone físico, usando um build interno do EAS ou o TestFlight.
  • Instalar o macOS em hardware que não seja da Apple, como hackintosh ou em uma VM, viola os termos de licença da Apple.

Por que o toolchain de build da Apple precisa do macOS?

O Xcode, o xcodebuild, a ferramenta codesign e o iOS Simulator rodam apenas no macOS. Ou seja, a questão é de quem é o Mac que faz o trabalho, porque não dá para evitar usar um. Compilar código nativo iOS, assinar o binário com seu certificado de distribuição e empacotá-lo para o App Store Connect são etapas que acontecem dentro do toolchain da Apple. Cada alternativa abaixo contorna essa limitação. Nenhuma delas a elimina.

Crie um app iOS sem Mac usando o Expo EAS

Em um projeto React Native ou Expo, o eas build --platform ios compila e assina o app nos servidores da Expo. Depois que você faz login com sua conta do Apple Developer Program, o EAS CLI também pode gerar o certificado de distribuição e o perfil de provisionamento para você. Para a maioria dos leitores deste artigo, essa é a alternativa a seguir.

Se você ainda não conhece o Expo, comece por Getting Started with Expo. A sequência completa do guia de configuração de build da Expo é esta:

# Create a project if you don't have one
npx create-expo-app@latest my-app
cd my-app

# Install the EAS CLI and sign in to your Expo account
npm install --global eas-cli
eas login
eas whoami            # confirms which account you're signed in as

# Generate the build configuration for the project
eas build:configure

# Build a signed iOS binary on Expo's servers
eas build --platform ios --message "First App Store build"

# Check build status and logs later
eas build:list

Se preferir não fazer a instalação global, execute npx eas-cli@latest sempre que a documentação indicar eas. Quando o build começa, o CLI pergunta se deve gerenciar suas credenciais iOS. Se você aceitar e fizer login na sua conta Apple, nunca vai precisar abrir o Acesso às Chaves (Keychain Access) nem um portal de certificados.

O EAS Build funciona de imediato com apps Expo e React Native, inclusive os que foram iniciados com react-native ou ignite-cli. Segundo a Expo, ele também funciona com outros projetos nativos. O Capacitor não tem um guia oficial do EAS, então equipes que usam Capacitor costumam recorrer a uma das alternativas abaixo.

Para publicar, basta mais um comando:

eas submit --platform ios

O EAS Submit roda no Windows, no Linux ou no macOS. Ele envia seu build para o App Store Connect e, assim que a Apple processa o upload, o build aparece no TestFlight. Essa etapa exige uma conta paga de Apple Developer. A autenticação é feita com uma chave de API do App Store Connect ou com seu Apple ID e uma senha específica de app.

Alugue um Mac na nuvem quando precisar do Xcode

Um Mac alugado na nuvem oferece um desktop macOS completo por conexão remota. Use essa opção quando precisar do próprio Xcode: para trabalhar com módulos nativos, depurar no nível do Xcode ou em um projeto Capacitor sem um caminho de build gerenciado. Provedores como MacStadium e MacinCloud alugam esse tipo de máquina. Você ganha controle, mas também assume o trabalho de administração: instala e atualiza o Xcode, gerencia certificados e perfis e escreve seus próprios scripts de build.

Use CI com runners macOS

CI hospedado com runners macOS é ideal para equipes que já automatizam seus builds com scripts. O GitHub Actions oferece runners macOS hospedados junto com os de Linux e Windows, e outros provedores de CI oferecem máquinas macOS semelhantes. O runner cuida do build, mas a assinatura continua sendo responsabilidade sua. Você armazena certificados e perfis como secrets e os integra ao pipeline por conta própria. Se você usa Expo, também pode disparar builds do EAS a partir do CI e manter a assinatura gerenciada da Expo.

Alternativas a evitar: hackintosh e VMs com macOS

Rodar o macOS em hardware que não seja da Apple, seja como hackintosh ou em uma máquina virtual em um PC com Windows ou Linux, viola os termos de licença da Apple. A licença de software do macOS Tahoe proíbe instalar ou executar o macOS em qualquer computador que não seja da marca Apple. Ela só permite máquinas virtuais com macOS em um Mac que já executa o macOS. Descarte as duas opções.

Como testar um app iOS sem um Mac?

Sem um Mac próprio, você testa um app iOS em um iPhone físico, seja por meio de um build de desenvolvimento ou interno do EAS, seja pelo TestFlight, porque o iOS Simulator é um app do macOS. O build pode ser resolvido inteiramente na nuvem. É nos testes que a falta de um Mac realmente pesa.

Para o trabalho do dia a dia, adicione o development client e gere builds para distribuição interna:

npx expo install expo-dev-client

Com a distribuição interna, o EAS usa provisionamento ad hoc. O perfil lista os UDIDs (identificadores únicos de dispositivo) dos aparelhos aprovados, e um dispositivo só consegue instalar o build se já estava nessa lista quando o build foi gerado. Registre seu iPhone com este comando:

eas device:create

Depois de registrar um dispositivo, gere um novo build. Builds criados antes do registro não serão instalados nele. Esses builds para dispositivos são assinados com um certificado de distribuição e um perfil ad hoc, e ambos exigem uma conta paga do Apple Developer Program.

Para testes mais amplos, o TestFlight aceita até 10.000 testadores externos por app. Você os convida por e-mail ou compartilha um link público, e o build precisa ser aprovado primeiro na revisão de apps do TestFlight.

Uma lacuna continua aberta: a depuração nativa com o Xcode e o iOS Simulator ainda exigem o macOS. Quando chegar a esse ponto, alugue um Mac na nuvem para a sessão.

Quanto custa e qual alternativa escolher?

O Apple Developer Program custa US$ 99 por ano, e a Apple cobra na moeda local em muitas regiões. Essa taxa vale para todas as alternativas sem Mac, porque tanto a assinatura para a App Store quanto a distribuição pelo TestFlight exigem a assinatura do programa, não importa onde o build seja executado.

AlternativaQuem roda o macOSO que você gerenciaCusto adicional
Expo EASExpoConfiguração do appPlano gratuito disponível; veja os preços do EAS
Mac na nuvemProvedor de aluguelXcode, certificados, scriptsConsulte o provedor
Runner macOS de CIProvedor de CIPipeline, secrets de assinaturaConsulte o provedor

O plano gratuito do EAS oferece uma pequena cota mensal de builds iOS em uma fila mais lenta. Os planos pagos colocam você na fila mais rápida, permitem builds mais longos e possibilitam pagar para executar mais builds simultaneamente.

No cenário mais comum, um app React Native ou Expo desenvolvido no Windows ou no Linux, use o Expo com um iPhone físico. Pague os US$ 99 da assinatura, compile e assine com o EAS, teste com builds internos e com o TestFlight e alugue um Mac apenas quando precisar do próprio Xcode.

Não ter um Mac significa alugar o toolchain da Apple em vez de comprar o hardware. Compilar e publicar funcionam bem remotamente. O que você perde é o Simulator e a depuração nativa. Próximo passo: inscreva-se no Apple Developer Program, execute eas build:configure no seu projeto e registre seu iPhone com eas device:create antes do seu primeiro build interno.

Perguntas frequentes

Posso rodar meu app em um iPhone sem um Mac e sem uma conta paga da Apple?

Sim, para prototipagem, usando o Expo Go. Instale o Expo Go pela App Store, inicie seu projeto Expo no Windows ou no Linux e escaneie o QR code com a câmera do iPhone. A versão do Expo SDK do seu projeto precisa corresponder à versão do Expo Go disponível na App Store. O Expo Go vem com um conjunto fixo de bibliotecas nativas, então bibliotecas com outro código nativo não funcionam nele. Notificações push remotas, universal links e o nome e o ícone próprios do seu app exigem um development build, e instalar um em um iPhone sem um Mac requer o programa pago.

Quantos iPhones podem instalar um build interno do EAS?

Até 100 iPhones por ano de assinatura. Builds ad hoc só são instalados em dispositivos registrados na sua conta do Apple Developer, e a Apple conta cada família de produtos separadamente, então são permitidos 100 iPhones e 100 iPads. Desativar um dispositivo não libera a vaga. Só é possível remover dispositivos e restaurar a contagem para 100 no início de um novo ano de assinatura. Para grupos maiores, use o TestFlight, que não exige registro de dispositivos.

Preciso de um novo build iOS a cada alteração de código?

Não. O EAS Update envia alterações de JavaScript, estilos e imagens over the air para builds que incluem a biblioteca expo-updates, e os usuários recebem a nova versão na próxima vez que abrirem o app. Alterações nativas, como adicionar uma biblioteca que inclui código Swift ou Objective-C, ainda exigem um novo build do EAS e, para apps publicados na loja, um novo envio para a App Store. O build que adiciona o expo-updates pela primeira vez também precisa ser um build novo.

DevTools for the frontend

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.