# Guideline 2.5.1: APIs públicas e SDK atualizado no Expo

> Guideline 2.5.1: só APIs públicas, app compatível com o iOS atual e frameworks no uso previsto. Com Expo, comece verificando seus módulos nativos.

Página original: [Guideline 2.5.1: APIs públicas e SDK atualizado no Expo](https://devoria.fr/pt-br/blog/guideline-2-5-1-apis-publicas-sdk-expo)
Autor: [Mehdi Azizi](https://devoria.fr/pt-br/mehdi-azizi)
Publicação: 2026-11-04
Última revisão do conteúdo: 2026-11-04


A guideline 2.5.1 traz quatro exigências: usar só APIs públicas, rodar na versão atual do iOS, abandonar o que a Apple descontinua e usar cada framework para o fim previsto. **Com Expo, o risco raramente vem do seu código JavaScript: ele vem dos módulos nativos que você instala e do SDK com que você compila.**

Eu publico Solys, TradaZen e Nolera com o Expo SDK 57. O Solys usa a API de Tempo de Uso (Screen Time) da Apple, um framework de uso controlado. Este guia trata da regra de revisão. Para o erro recebido no envio do build, leia o guia [ITMS-90338](https://devoria.fr/pt-br/blog/itms-90338-non-public-api-usage-expo). Para os modos em segundo plano, vizinhos na mesma seção, leia o da [guideline 2.5.4](https://devoria.fr/pt-br/blog/guideline-2-5-4-modo-segundo-plano-recusado-apple).

## O que diz a guideline 2.5.1?

A regra está na seção 2.5, "Software Requirements", das [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#2.5.1): "Apps may only use public APIs and must run on the currently shipping OS. Keep your apps up-to-date and make sure you phase out any deprecated features, frameworks or technologies that will no longer be supported in future versions of an OS. Apps should use APIs and frameworks for their intended purposes and indicate that integration in their app description."

Na prática, quatro obrigações:

1. **Só APIs públicas**, ou seja, documentadas pela Apple.
2. **Um app que roda na versão atual do iOS**, o iOS 27 desde setembro de 2026.
3. **Nada descontinuado que vai sumir**: você substitui o que a Apple anuncia como fim de vida.
4. **Cada framework no seu lugar, e citado na descrição**: HomeKit para casa conectada, HealthKit para saúde e exercícios, ligado ao app Saúde.

Daí o título da rejeição: "Guideline 2.5.1 - Performance - Software Requirements".

## APIs públicas: onde o risco se esconde num app Expo

Uma API privada é uma função do sistema que a Apple não documenta. A Apple não garante nem o comportamento dela nem que ela vai continuar existindo na próxima versão do iOS, por isso a proibição.

Seu código JavaScript nunca mexe no iOS diretamente: ele passa por módulos nativos. Os do SDK do Expo são mantidos pela equipe do Expo. **Os outros trazem código que você não escreveu, e a Apple analisa esse código como se fosse seu.** O guia [ITMS-90683](https://devoria.fr/pt-br/blog/itms-90683-missing-purpose-string-expo) mostra o mesmo mecanismo com as frases de permissão: a Apple julga o código presente no build, não o que o app faz.

No Solys, em 15 de outubro de 2026, 42 dependências diretas têm código iOS nativo, 14 delas fora do SDK do Expo. Entre elas estão RevenueCat, Sentry, AppsFlyer e `react-native-device-activity`, a ponte para a API de Tempo de Uso.

Uma API privada pode ser detectada em dois momentos. No envio, a análise automática do App Store Connect pode devolver o erro ITMS-90338. Durante a revisão, o revisor cita a 2.5.1.

## APIs descontinuadas: do UIWebView ao UIScene

O exemplo mais conhecido é o UIWebView, o antigo componente para exibir conteúdo web. A Apple [parou de aceitá-lo](https://developer.apple.com/news/?id=12232019b) em apps novos em abril de 2020, e depois em atualizações em dezembro de 2020. Uma biblioteca antiga que ainda fazia referência a ele bloqueava o envio. No Solys, a busca do checklist mais abaixo não encontra nenhuma referência.

A próxima mudança já está anunciada. A nota técnica [TN3187](https://developer.apple.com/documentation/technotes/tn3187-migrating-to-the-uikit-scene-based-life-cycle) da Apple diz: "In the next major release following iOS 26, UIScene lifecycle will be required when building with the latest SDK; otherwise, your app won't launch." Traduzindo: um app compilado com o SDK do iOS 27 sem o ciclo de vida baseado em cenas não abre.

Três datas para conectar:

- **Desde abril de 2026**, a Apple exige o Xcode 26: esse é o assunto do guia [ITMS-90725](https://devoria.fr/pt-br/blog/itms-90725-sdk-version-issue-expo).
- **Em abril de 2027**, a [página de envio da Apple](https://developer.apple.com/app-store/submitting/) anuncia o SDK do iOS 27 como obrigatório.
- **O Expo SDK 58**, em beta desde 15 de setembro de 2026, já gera o gerenciamento de cenas, segundo o [anúncio do Expo](https://expo.dev/changelog/sdk-58-beta).

Com o Expo SDK 57 e o Xcode 26, você ainda compila com o SDK do iOS 26: nada quebra hoje. **Os módulos que modificam o AppDelegate vão ter que se adaptar antes de abril de 2027.**

## Frameworks usados fora do fim previsto

O revisor verifica se um framework sensível atende a uma função visível, e se a sua página na loja menciona isso.

- **HealthKit** serve para saúde e exercícios. As [diretrizes de interface da Apple](https://developer.apple.com/design/human-interface-guidelines/healthkit) dizem: "If your app doesn't provide health and fitness functionality, don't request access to people's private health data."
- **HomeKit** serve para casa conectada, e nada mais.
- **PushKit** serve para chamadas de voz sobre IP. A [documentação do PushKit](https://developer.apple.com/documentation/pushkit/responding-to-voip-notifications-from-pushkit) é clara: "If you are unable to support CallKit in your app, you cannot use PushKit to handle push notifications." Uma notificação VoIP que acorda o app sem chamada é desvio de uso.
- **Family Controls**, a API de Tempo de Uso, exige uma permissão especial. A [documentação](https://developer.apple.com/documentation/familycontrols) especifica: "Before submitting your app to the App Store, you must request permission to use the entitlement."

Para o Solys, pedi essa permissão de distribuição em 23 de setembro de 2026, e a Apple liberou no mesmo dia. O uso bate com o framework: o usuário escolhe os apps a pausar, e o Solys bloqueia esses apps por 30, 45 ou 60 minutos depois que ele acorda. A descrição na loja diz isso numa frase: "O Solys usa a permissão de Tempo de Uso da Apple para pausar os apps selecionados." **É isso que o final da 2.5.1 pede: citar a integração na descrição.**

## Versões beta: TestFlight sim, App Store não

As [notas de versão do App Store Connect](https://developer.apple.com/help/app-store-connect/release-notes/) mostram a regra na prática. Em 14 de outubro de 2026, builds feitos com o Xcode 27.2 beta 3 são aceitos "for internal and external testing", ou seja, para o TestFlight. Em 5 de outubro, os do Xcode 27.1 RC são aceitos "for the App Store".

**Um build compilado com um Xcode beta vai para o TestFlight, nunca para revisão.** Para enviar, você precisa de uma versão final, ou de uma RC que a Apple liberou para a App Store.

Dois detalhes para um app Expo:

- **Um beta do Expo não é um beta da Apple.** A Apple controla a versão do Xcode e do SDK do iOS, não a do Expo. O anúncio do SDK 58 acrescentava que as imagens do EAS com Xcode 27 chegariam em breve.
- **Testar no iOS atual continua obrigatório**, mesmo se você compila com o SDK do iOS 26. Abra o app do zero (cold start) num iPhone ou simulador atualizado.

## Checklist: dependências nativas antes do envio

Passe por ela antes de cada build de produção. Os comandos rodam na raiz do projeto Expo:

```bash
npx expo-doctor
npx expo install --check
grep -rlw "UIWebView" node_modules --include='*.m' --include='*.mm' --include='*.swift' --include='*.h'
```

1. **`npx expo-doctor` não aponta nenhuma falha.** No Solys, em 15 de outubro de 2026: 20 de 21 verificações aprovadas. A falha vinha de 13 pacotes do Expo atrasados em um patch, que o `npx expo install --check` alinha.
2. **Cada módulo fora do SDK do Expo aparece no React Native Directory.** O Expo Doctor faz essa verificação por padrão, como diz a [documentação do Expo](https://docs.expo.dev/versions/latest/config/package-json/). Um pacote desconhecido merece uma leitura do código iOS dele.
3. **Cada módulo nativo acompanha a sua versão do React Native.** A [tabela de versões do Expo](https://docs.expo.dev/versions/latest/) associa o SDK 57 ao React Native 0.86. Um módulo sem publicação há várias versões é um sinal de alerta.
4. **A busca por UIWebView não retorna nada.** Faça o mesmo para qualquer API que a Apple anuncie como fim de vida.
5. **Cada framework sensível tem sua função visível**: saúde, Tempo de Uso, chamadas, casa. A descrição cita essa função, e a permissão especial foi concedida.
6. **O build sai de um Xcode final.** Confira a versão nos logs de build do EAS.
7. **O app abre do zero na versão atual do iOS**, com uma conta nova.
8. **Os módulos que mexem no AppDelegate anunciam suporte ao UIScene** antes de você migrar para o SDK do iOS 27.

## Como responder a uma rejeição 2.5.1?

A mensagem geralmente nomeia a API ou o framework em questão. Dois casos:

- **O framework não serve para nada visível**: remova o módulo ou a capability, gere um novo build e responda em duas frases.
- **O framework atende a uma função real**: indique o caminho exato, uma captura de tela ou um vídeo curto, e cite a integração na descrição da página do app.

**Remover um módulo nativo muda o binário: uma atualização remota não basta.** O guia da [guideline 2.1](https://devoria.fr/pt-br/blog/guideline-2-1-rejeicao-app-store) explica por que o revisor só vê o código embutido. A conversa continua depois no App Store Connect, como no guia para [responder ao App Review](https://devoria.fr/pt-br/blog/resolution-center-apple-responder-rejeicao-app-review).

## Verifique seu projeto antes do envio

O [Review Kit](https://devoria.fr/pt-br/kits/app-review) reúne meu checklist pré-envio, minhas rejeições corrigidas e skills do Claude Code que revisam seu projeto Expo. Para um olhar humano, [agende uma hora comigo](https://devoria.fr/pt-br/coaching): a gente lê juntos a mensagem da Apple e as suas dependências. O passo a passo completo está na página [app rejeitado pela Apple](https://devoria.fr/pt-br/expertise/app-recusado-pela-apple).

Está preparando seu primeiro lançamento? [Faça seu diagnóstico gratuito](https://devoria.fr/pt-br/diagnostic): ele te envia meu checklist contra rejeições da Apple.

## Perguntas frequentes

### O que significa "Guideline 2.5.1 - Performance - Software Requirements"?

É o título da rejeição quando a Apple considera que seu app usa uma API não pública, uma tecnologia descontinuada ou um framework fora do fim previsto. A mensagem geralmente nomeia o elemento em questão.

### Qual a diferença entre a guideline 2.5.1 e o erro ITMS-90338?

O ITMS-90338 é um erro automático recebido no envio do build, quando a análise detecta um símbolo não público. A 2.5.1 é a regra de revisão aplicada por uma pessoa, que também cobre frameworks desviados e tecnologias descontinuadas.

### Dá para enviar um app compilado com um Xcode beta?

Não. O App Store Connect aceita esses builds só para o TestFlight. Para a revisão, compile com uma versão final do Xcode, ou com uma RC que a Apple liberou para a App Store nas notas de versão.

### Um app Expo pode usar uma API privada sem saber?

Sim, por meio de um módulo nativo de terceiros. Seu código JavaScript não chama o iOS sozinho, mas cada pacote nativo traz código Objective-C ou Swift. Revise a lista de módulos fora do SDK do Expo antes de cada versão.

### Preciso migrar para o Expo SDK 58 agora?

Não por causa da 2.5.1, em 15 de outubro de 2026: o SDK 57 compila com o SDK do iOS 26, que ainda é aceito. Planeje a migração antes de abril de 2027, quando a Apple vai exigir o SDK do iOS 27 e o ciclo de vida baseado em cenas.


## Seu projeto

[Review Kit](https://devoria.fr/pt-br/kits/app-review): Meu checklist de revisão da App Store, as recusas da Apple que corrigi, o checklist do Google Play e três skills do Claude Code. R$ 289.

[iOS & Android Kit](https://devoria.fr/pt-br/kits/ios): Crie seu app para iPhone e Android com o Claude Code: o código inicial dos meus apps, o caminho até as lojas e todos os kits. R$ 589.

[Diagnóstico: o que te separa do seu app de iPhone](https://devoria.fr/pt-br/diagnostic): 7 perguntas, 60 segundos: descubra o que realmente te impede de publicar seu app de iPhone, seu caminho em 4 etapas e o kit certo para você.
