Pular para o conteúdo
← Voltar para o Skalablog

Artigo publicado

iOS travando o desenvolvimento de apps: assinatura, sandbox e Xcode

Engenharia de Software

O iOS travando o desenvolvimento de apps é um problema real: assinatura de código, revisão e sandbox limitam o que você pode testar no seu próprio aparelho. Desde 2026, o fluxo exige Mac, conta paga e aprovação da Apple; a experiência relatada no vídeo ilustra o atrito, mesmo com ferramentas como Expo e React Native.

iOS travando o desenvolvimento de apps: o que muda na prática

O iOS travando o desenvolvimento de apps significa que você não instala no seu próprio iPhone um binário que você mesmo compilou sem passar pela assinatura e pela aprovação da Apple. Na prática, isso exige três coisas: um Mac, uma conta paga do Apple Developer Program e um perfil de provisionamento válido para cada dispositivo.

A Apple documenta o fluxo em Signing your apps for distribution e nas páginas do Apple Developer Program. Não existe caminho oficial para compilar e rodar um app iOS sem Xcode ou sem um serviço de build na nuvem que rode macOS.

O relato do canal Theo - t3.gg, publicado em agosto de 2026, descreve um caso concreto: um app próprio ficou 36 horas em estado pendente antes de poder ser instalado num iPad comprado pelo próprio desenvolvedor. Essa espera é atrito de processo, e não uma exigência técnica do hardware.

Vale lembrar que esse atrito não é de hoje. Quando o iPhone foi anunciado, em 2007, a proposta era que você escrevesse apps com as tecnologias da web, sem SDK e com distribuição instantânea pelo seu próprio servidor. A chegada da App Store mudou o modelo.

O que você precisa hoje para rodar o próprio app

  1. Assinar o Apple Developer Program e manter a assinatura anual em dia.
  2. Instalar o Xcode (ou usar um serviço de build em macOS na nuvem) numa máquina autorizada.
  3. Registrar o identificador do aparelho no perfil de provisionamento.
  4. Compilar e assinar o binário com as credenciais do seu time.
  5. Reconectar cada dispositivo físico ao Mac para renovar a autorização.

Por que a assinatura de código gera tanta fricção

A assinatura de código existe para garantir que o binário veio de um desenvolvedor identificado, mas o processo tem consequências práticas para quem desenvolve. Perfis de desenvolvimento expiram em poucos dias, então você precisa reconectar cada dispositivo ao Mac com regularidade para renovar a autorização.

O próprio Theo - t3.gg menciona o ciclo de reconectar os aparelhos à máquina para manter os apps abrindo. Quem trabalha com builds distribuídos sente isso como uma tarefa recorrente, que não tem relação com a qualidade do código escrito. O resultado é um trabalho repetitivo que consome tempo de quem deveria estar testando o próprio produto.

Há ainda o detalhe do arquivo de configuração do projeto, que carrega identificadores de conta e de time dentro do repositório. Isso atrapalha o trabalho com Git, porque partes do arquivo mudam de máquina para máquina e geram conflitos difíceis de revisar.

O problema não é só a ferramenta de controle de versão, é a mentalidade. O ecossistema do Xcode foi construído antes do Git existir e, segundo o relato, continua operando como se o Git não tivesse mudado nada. Quando o projeto precisa acessar uma versão específica da branch para instalar, você tem que alterar arquivos que não deveria precisar tocar.

Sandbox, JIT e o limite do que o app pode fazer

O sandbox do iOS impede que um app controle outros apps, altere o comportamento do sistema ou instale software por conta própria. Você não pode forçar um app a ficar em modo escuro, trocar a primeira tela de outro app ou criar uma camada que aja sobre a interface do sistema.

A restrição mais estrutural é a ausência de compilação just-in-time (JIT). A Apple exige que o código executável seja estático, o que inviabiliza emuladores performáticos, linguagens com compilador próprio e qualquer motor que precise gerar código em tempo de execução.

A própria App Review Guidelines lista as regras de execução de código e de conteúdo gerado. É por isso que emuladores de console e ambientes de programação no aparelho continuam limitados, mesmo quando a categoria é aceita na loja.

Também há a questão do motor de navegador. No iPhone, todo navegador usa WebKit por exigência da Apple, então Chrome, Firefox ou qualquer alternativa não levam o próprio motor para o aparelho. Você instala o navegador que quiser, mas o que roda por baixo é sempre o WebKit.

O que o sandbox bloqueia na prática

  • Apps não conversam entre si sem um servidor externo.
  • Não existe equivalente a extensões que modificam outros apps.
  • Não há como instalar um app sem passar pela App Store ou pelo TestFlight.

Xcode: a única porta de entrada e seus problemas

Xcode é o ambiente oficial da Apple para compilar apps iOS, e não existe substituto completo. Você até pode automatizar partes do processo, mas o build passa por ele ou por um serviço que executa macOS na nuvem.

O ponto de atrito mais citado por quem trabalha com isso é o arquivo de projeto, que concentra o estado da configuração. Ele é grande, frágil, mal se resolve em conflitos de merge e pode até impedir a abertura do projeto quando fica corrompido. Sem abrir o projeto, você não consegue corrigir o que está errado.

A documentação de Xcode cobre os fluxos de build, assinatura e execução no simulador. O simulador, por sua vez, tem comportamento diferente do aparelho físico em recursos como login, push e modos em segundo plano, o que obriga a testar nos dois ambientes.

Essa diferença entre simulador e aparelho é uma fonte constante de bugs. Alguns problemas só aparecem no dispositivo, outros só aparecem no simulador, e a documentação da Apple não deixa claro qual é qual. Recursos como login, push, widgets e grupos de apps costumam cair nessa zona cinzenta.

O que a revisão da App Store impõe ao desenvolvedor

A revisão é o outro gargalo. A regra é simples: o único caminho para instalar um app que não foi assinado pelo próprio desenvolvedor é a App Store ou o TestFlight, e os dois exigem aprovação da Apple. Não existe rota alternativa.

Isso cria decisões que parecem pouco técnicas. A App Review Guidelines lista as regras de execução de código e de conteúdo gerado, e é essa mesma estrutura que condiciona categorias inteiras de software.

O relato cita ainda o caso dos pagamentos externos. Se o app vende bens digitais, a compra precisa passar pelo sistema da Apple. Já serviços presenciais, como transporte ou entrega de comida, ficam fora dessa cobrança. O critério é o tipo de bem, não o valor da transação.

Alternativas práticas: Expo, React Native e builds na nuvem

Expo e React Native reduzem bastante o atrito porque você escreve a maior parte do código fora do ecossistema nativo. Com Expo, o build nativo acontece uma vez e depois o app carrega JavaScript de um servidor local durante o desenvolvimento.

Esse fluxo é o mais próximo de iteração rápida que existe hoje no iOS. Ainda assim, o ciclo de renovação do perfil de desenvolvimento continua valendo, e a versão final ainda depende de uma conta Apple e de uma revisão.

Vale registrar que até o app do próprio Expo para escanear QR codes deixou de ser atualizado, por causa da restrição a apps que geram ou carregam código dinamicamente. É um exemplo de como as regras alcançam até as ferramentas criadas para conviver com elas.

Serviços de build na nuvem, como o Xcode Cloud, resolvem parte do problema de máquina local. Eles não eliminam a exigência de assinatura nem a revisão, mas evitam manter um Mac dedicado só para compilar.

Como essas camadas se comparam

A tabela abaixo resume o que cada camada libera e o que continua bloqueado.

CamadaO que permiteO que ainda bloqueia
Xcode localCompilar, assinar e rodar no simuladorExige Mac e perfil válido por dispositivo
Xcode CloudBuild em macOS sem máquina dedicadaNão elimina assinatura nem revisão
Expo e React NativeIteração rápida com JavaScriptPerfil expira e a versão final passa pela revisão
App Store e TestFlightDistribuir para o públicoSó instala o que a Apple aprovar

O que está em jogo além do fluxo de trabalho

O ponto central do relato não é só a quantidade de passos. É o efeito sobre quem quer experimentar. Se cada ideia nova precisa de conta paga, Mac e aprovação, a maior parte das tentativas morre antes de começar.

O autor também aponta um efeito geracional. Para muita gente que cresceu só com iPhone e iPad, a ideia de instalar software fora de uma loja ou modificar um app é desconhecida. Quem nunca viu um computador pessoal aberto tem menos chance de aprender que software é algo que se pode mudar.

Nada disso significa que o iOS não tenha valor. A combinação de hardware e sistema continua sendo boa para o usuário final. O que o relato questiona é o custo dessa experiência para quem constrói, e se esse custo se justifica quando ele alcança até quem só quer testar a própria ideia.

Quem trabalha com educação em programação sente esse efeito de perto. É o tipo de tema que aparece em conversas abertas como as do canal Gustavo Dev Doido, que discute carreira e prática de desenvolvimento para quem está começando. Existem opções no mercado para atacar isso, como o Crazystack Typescript, focado em fundamentos de TypeScript. Vale olhar o formato antes de decidir, porque o Crazystack trabalha com TypeScript como base, e a escolha depende do seu objetivo atual.

Perguntas frequentes

  • Preciso de um Mac para desenvolver para iOS? Na prática, sim. Você pode usar serviços de build em macOS na nuvem, mas o binário ainda passa pelo Xcode ou por um ambiente equivalente rodando macOS. Não existe fluxo oficial que dispense isso.
  • Quanto tempo dura um perfil de provisionamento de desenvolvimento? Ele expira em poucos dias. Na prática, você precisa reconectar cada dispositivo ao Mac com regularidade para manter os apps abrindo, como descreve o relato do vídeo.
  • O que é JIT e por que o iOS bloqueia? JIT é a compilação just-in-time, em que o código é traduzido para o processador durante a execução. A Apple exige código executável estático, então qualquer motor que gere código em tempo de execução fica fora das regras.
  • Por que todo navegador no iPhone usa WebKit? Porque a Apple exige WebKit como motor único no iOS. Chrome, Firefox e outros levam a própria interface, mas o motor por baixo é sempre o WebKit.
  • TestFlight serve para fugir da revisão? Não. O TestFlight também exige passar pelo processo de revisão da Apple, então ele não é um atalho.
  • Dá para instalar um app no iPhone sem passar pela App Store? Só se o binário for assinado por você ou por um time do qual você faz parte, com o identificador do aparelho embutido. Fora disso, o caminho é a App Store ou o TestFlight.
  • Por que o arquivo de projeto do Xcode dá tanto conflito no Git? Porque ele concentra identificadores de conta e de time que mudam de máquina para máquina. Isso gera diferenças difíceis de revisar e conflitos que não têm relação com a lógica do código.
  • Expo e React Native eliminam a exigência de conta paga? Não. Eles reduzem o atrito do dia a dia, porque a maior parte do código roda fora do ambiente nativo, mas a versão final ainda depende de conta Apple e de uma revisão.
  • O simulador substitui o aparelho físico? Não. Alguns recursos, como login, push e modos em segundo plano, se comportam de forma diferente, então o teste precisa acontecer nos dois ambientes.
  • Por que a demora de aprovação incomoda tanto? Porque ela acontece depois que você já pagou a conta, comprou o aparelho e compilou o app. Você tem o binário pronto e ainda assim não pode usá-lo no próprio dispositivo, como no caso das 36 horas descritas no relato.

Para onde isso aponta

O relato termina com um pedido direto: que a Apple deixe as pessoas instalarem software sem pedir permissão e que voltem a permitir experimentação. O autor não espera mudanças. Ele desconfia que o problema já se espalhou o suficiente para afetar a próxima geração.

A recomendação prática que fica do vídeo é começar cedo por onde é possível mexer. Um computador pessoal, Linux ou Windows, onde instalar e alterar software não depende de aprovação, ensina mais sobre o que a computação permite do que um aparelho totalmente fechado. É a mesma lógica que sustenta projetos como o Bootcamp do Dev Doido, que parte do princípio de que aprender a construir é mais útil do que só consumir apps prontos.

O vídeo original está disponível em Source video.

Transforme o que já está gravado em algo que se lê

O problema que este artigo descreve não é falta de ideia, é falta de caminho. Se você já explicou em vídeo por que certas decisões técnicas travam o trabalho de quem constrói, esse conhecimento está preso num formato que só quem assiste encontra.

Se você tem entrevistas, aulas, opiniões ou histórias gravadas no YouTube, dá para transformar esse material em artigo escrito sem reescrever tudo do zero. O Skala Blog faz esse caminho: você cola a URL do vídeo, o conteúdo é transcrito e vira um artigo. Se a sua experiência merece circular além do vídeo, comece por lá.