Noções Básicas de Prebuild
Dez exemplos para gerar ios/ e android/ a partir da configuração do Expo sem desvios manuais - a base da Geração Nativa Contínua (CNG) no Expo SDK 57 e React Native 0.86.
Busque em todas as páginas da documentação
Dez exemplos para gerar ios/ e android/ a partir da configuração do Expo sem desvios manuais - a base da Geração Nativa Contínua (CNG) no Expo SDK 57 e React Native 0.86.
Comece com um aplicativo Expo em branco com o SDK 57 fixado. O Prebuild lê app.config.ts, aplica plugins de configuração e grava projetos nativos:
npx create-expo-app@latest PrebuildBasics --template blank-typescript@sdk-57 --yes
cd PrebuildBasicsConfirme o pin da stack antes de executar o prebuild:
{
"dependencies": {
"expo": "~57.0.4",
"react": "19.2.3",
"react-native": "0.86.0"
}
}Ferramentas: Estes exemplos visam Expo SDK 57 (
expo~57.0.4), React Native 0.86.0 e React 19.2.3. Leia Native Module Rules antes de adicionar dependências nativas.
npx expo prebuild é a ponte entre sua configuração JavaScript e os projetos Xcode/Gradle. Ele:
app.config.ts (ou app.json)ios/ e android/Info.plist, AndroidManifest.xml, Gradle e Podfilenpx expo prebuildApós uma execução bem-sucedida:
PrebuildBasics/
├── app.config.ts
├── ios/ # Gerado - não edite manualmente sob CNG
├── android/ # Gerado - não edite manualmente sob CNG
└── package.jsonios/ e android/ - o EAS Build executa o mesmo passo de prebuild no CIexpo prebuild --clean (o padrão do SDK 57)O Prebuild precisa de identificadores de bundle, nome de exibição e caminhos de ícone no mínimo:
// app.config.ts
import type { ExpoConfig } from "expo/config";
const config: ExpoConfig = {
name: "PrebuildBasics",
slug: "prebuild-basics",
version: "1.0.0",
orientation: "portrait",
icon: "./assets/icon.png",
scheme: "prebuildbasics",
userInterfaceStyle: "automatic",
ios: {
bundleIdentifier: "com.example.prebuildbasics",
supportsTablet: true,
},
android: {
package: "com.example.prebuildbasics",
adaptiveIcon: {
foregroundImage: "./assets/adaptive-icon.png",
backgroundColor: "#ffffff",
},
},
};
export default config;npx expo prebuild --no-install--no-install pula pod install e sincronização do Gradle - útil para verificações de diff no CInpx expo config --type public imprime o manifesto resolvido sem gravar pastas nativasPRODUCT_BUNDLE_IDENTIFIER e applicationId geradosProjetos CNG padrão não confirmam diretórios nativos gerados:
# .gitignore (padrão CNG)
ios/
android/# Verifique se o prebuild reproduz a mesma árvore localmente
rm -rf ios android
npx expo prebuild --no-installios/ confirmado do SDK 56 bloqueia templates do RN 0.86 na atualização - exclua e regenereRelacionado: ../expo-rules/expo-project-rules-checklist/expo-project-rules-checklist.md - O gitignore do CNG é um não negociável de Nível 3
No SDK 57, expo prebuild exclui ios/ e android/ existentes antes de regenerar:
# Comportamento padrão (SDK 57): limpar e depois gerar
npx expo prebuild
# Desativar: sobrepor alterações em projetos nativos existentes
npx expo prebuild --no-clean| Flag | Comportamento |
|---|---|
| (padrão) | Remover ios/ e android/, depois gerar projetos novos |
--no-clean | Manter pastas existentes; aplicar atualizações de template incrementalmente |
--platform ios | Gerar apenas iOS |
--platform android | Gerar apenas Android |
--no-clean ao iterar em um patch nativo local que você está migrando para um pluginAntes de mesclar alterações de plugin, compare o que o prebuild produziu:
npx expo prebuild --no-install
git diff ios android # apenas se as pastas forem rastreadas (brownfield)# Imprimir configuração resolvida sem gravar arquivos
npx expo config --type introspect--type introspect mostra os resultados de modificação que os plugins aplicariam - mais rápido que o prebuild completo durante o desenvolvimento de pluginsexpo-doctor captura campos de configuração inválidos que falham silenciosamente até o prebuildapp.config.ts importa quando vários plugins tocam o mesmo arquivoPermissões e direitos nativos pertencem a plugins, não a edições pós-prebuild:
// app.config.ts
const config: ExpoConfig = {
// ...name, slug, ios, android
plugins: [
[
"expo-camera",
{
cameraPermission: "Allow $(PRODUCT_NAME) to scan barcodes.",
},
],
],
};npx expo install expo-camera
npx expo prebuild --platform ios --no-installexpo-camera envia um plugin de configuração que adiciona NSCameraUsageDescription ao Info.plistMódulos nativos personalizados exigem um build de desenvolvimento, não o Expo Go. O Prebuild gera o shell nativo:
npx expo install expo-dev-client
npx expo prebuild
npx expo run:ios// scripts do package.json
{
"scripts": {
"prebuild": "expo prebuild",
"ios:native": "expo run:ios",
"android:native": "expo run:android"
}
}expo run:ios executa o prebuild se ios/ estiver ausente, instala pods e depois compilaO Prebuild lê chaves de plataforma e gera configurações nativas correspondentes:
// trecho do app.config.ts
ios: {
bundleIdentifier: "com.example.prebuildbasics",
infoPlist: {
UIBackgroundModes: ["fetch"],
},
associatedDomains: ["applinks:shop.example.com"],
},
android: {
package: "com.example.prebuildbasics",
intentFilters: [
{
action: "VIEW",
autoVerify: true,
data: [{ scheme: "https", host: "shop.example.com", pathPrefix: "/orders" }],
category: ["BROWSABLE", "DEFAULT"],
},
],
},npx expo prebuild --no-installassociatedDomains e filtros de intençãoexpo-router, expo-notifications) em vez de infoPlist bruto quando disponíveisO SDK 57 visa o RN 0.86 com a Nova Arquitetura habilitada nos templates de prebuild:
// app.config.ts
const config: ExpoConfig = {
// ...
newArchEnabled: true,
};npx expo-doctor
npx expo prebuild --no-installnewArchEnabled: false é um escape hatch temporário - documente um ADR se você o desativarnewArchEnabled: rm -rf ios android && npx expo prebuildAtualizações de SDK excluem pastas nativas desatualizadas sob CNG:
npx expo install expo@^57.0.0
npx expo install --fix
npx expo-doctor
rm -rf ios android
npx expo prebuild --no-installreact-native independentemente - expo install --fix fixa o RN 0.86.0 para o SDK 57ios//android/ estão ausentes do uploadEm um workspace pnpm/Turborepo, execute o prebuild a partir do diretório do pacote do aplicativo:
cd apps/mobile
npx expo prebuild --no-install// apps/mobile/app.config.ts
const config: ExpoConfig = {
name: "Mobile",
slug: "mobile",
// ...
};ios/ - apenas aplicativos implantáveis executam o prebuildControle os IDs de bundle de staging e produção a partir de variáveis de ambiente - um arquivo de configuração, múltiplos binários:
// app.config.ts
const IS_DEV = process.env.APP_VARIANT === "development";
const config: ExpoConfig = {
name: IS_DEV ? "PrebuildBasics (Dev)" : "PrebuildBasics",
slug: "prebuild-basics",
ios: {
bundleIdentifier: IS_DEV
? "com.example.prebuildbasics.dev"
: "com.example.prebuildbasics",
},
android: {
package: IS_DEV
? "com.example.prebuildbasics.dev"
: "com.example.prebuildbasics",
},
};
export default config;APP_VARIANT=development npx expo prebuild --no-install
APP_VARIANT=production npx expo prebuild --no-installenv.APP_VARIANT por build - o prebuild é executado com o ID de bundle correto no CIprojectId do EAS se os binários forem enviados separadamenteapp.config.ts - use EAS Secrets para chaves de assinaturaAdicione um portão de CI que prove que a configuração produz saída nativa reproduzível:
#!/usr/bin/env bash
# scripts/verify-prebuild.sh
set -euo pipefail
npx expo-doctor
rm -rf ios android
npx expo prebuild --no-install
# Opcional: falhar se houver um diff nativo inesperado quando as pastas forem rastreadas
if git diff --quiet ios android 2>/dev/null; then
echo "A saída do Prebuild corresponde aos projetos nativos confirmados."
else
echo "Diff nativo detectado - migre as alterações para plugins de configuração."
exit 1
fiios/ e recriá-los.expo run:ios e expo run:android precisam de toolchains de plataforma para compilar.--no-clean, checklist de iteração localexpo run:ios/android e confirmação de diretórios nativosVersões da Stack: Esta página foi escrita para React 19.2.3, React Native 0.86.0 e Expo SDK 57 (
expo~57.0.4).
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026