配置
配置 Expo 环境 key、应用变体、链接、app config 和服务降级行为。
Expo 配置分成两处:
.env.local或按环境拆分的文件提供公开客户端 key。app.config.ts生成原生配置、应用标识、URL scheme、权限、plugins 和 EAS update 元数据。
配置链路
从 .env.example 开始
cp .env.example .env.local如果要按构建环境拆分值,可以使用 .env.development、.env.preview 和
.env.production。
Expo 内联 EXPO_PUBLIC_*
每个 EXPO_PUBLIC_* 都会进入发给用户的 JavaScript bundle。把这些值当成公开值:
可发布的 Supabase anon key、RevenueCat public SDK key、PostHog project key 和
Sentry DSN 可以放这里;service-role key、webhook secret、APNs private key、Sentry
auth token 不可以。
Provider 读取自己的 key
Supabase 是 auth/data/storage 的基础。可选 Provider 会检查自己的 key:RevenueCat 报告未配置,PostHog 禁用 capture,Sentry 禁用 SDK capture,更新门禁保持安静, 链接退回 Expo 创建的 URL。
app.config.ts 生成原生应用配置
动态配置会派生显示名称、bundle/package ID、URL scheme、原生权限、plugins、 associated domains、Android intent filters、EAS project ID、runtime version 和 update URL。
服务端值必须留在 JS bundle 外。REVENUECAT_WEBHOOK_AUTH 和 APNs key 放在
Supabase Edge secrets;SENTRY_AUTH_TOKEN 放在 EAS secrets 或 CI。不要把它们
暴露成 EXPO_PUBLIC_*。
起步 .env.local
# Supabase
EXPO_PUBLIC_SUPABASE_URL=https://your-project-ref.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_PROJECT_ID=your-project-ref
# Optional providers
EXPO_PUBLIC_REVENUECAT_IOS_KEY=
EXPO_PUBLIC_REVENUECAT_ANDROID_KEY=
EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID=
EXPO_PUBLIC_GOOGLE_IOS_CLIENT_ID=
EXPO_PUBLIC_POSTHOG_API_KEY=
EXPO_PUBLIC_SENTRY_DSN=
APP_VARIANT=development修改 EXPO_PUBLIC_* 后重启 Expo dev server。修改原生标识、plugins、权限或 URL
scheme 行为后,需要重建 development client。
Key reference
Supabase
Prop
Type
RevenueCat
Prop
Type
lib/purchases.tsx 不会在 Web 上配置 RevenueCat。应用仍然通过
useEntitlement().isEntitled 从 Supabase 读取权益;RevenueCat CustomerInfo 只是
购买和缓存状态,不是 gate。
Google Sign-In
Prop
Type
Google Sign-In 是 native-only。Web 上不会加载可选模块;缺少所需 ID 时按钮会给出配置错误。
PostHog
Prop
Type
Sentry
Prop
Type
版本门禁
Prop
Type
链接、法律与商店
Prop
Type
App variant
Prop
Type
应用变体
app.config.ts 会从 APP_VARIANT 派生标识符,让 development、preview 和
production 构建可以同时安装:
| Variant | 应用名 | Bundle / package ID | URL scheme |
|---|---|---|---|
development | Soar Starter (Dev) | expo.soarstarter.com.dev | soar-starter-expo-dev |
preview | Soar Starter (Preview) | expo.soarstarter.com.preview | soar-starter-expo-preview |
production | Soar Starter | expo.soarstarter.com | soar-starter-expo |
eas.json 中的 EAS profiles 设置同样的 variant:
development使用 development client、internal distribution 和developmentchannel。preview使用 internal distribution、Android APK 输出和previewchannel。production使用 store distribution、auto-increments versions 和productionchannel。
动态原生配置
原生应用设置应放在 app.config.ts,不要放在静态 app.json。模板当前配置了:
newArchEnabled: true和 AndroidedgeToEdgeEnabled: true。- 按当前 variant 派生 iOS 与 Android bundle identifiers。
- 按当前 variant 派生
scheme。 - 设置
EXPO_PUBLIC_LINKING_DOMAIN时,生成 iOSassociatedDomains和 AndroidintentFilters。 expo-router、expo-splash-screen、expo-apple-authentication、@react-native-google-signin/google-signin、expo-tracking-transparency和 Sentry plugins。- Camera、photos、notification、ATT 和 Apple Sign-In 权限/能力元数据。
- EAS project id、
runtimeVersion: { policy: "appVersion" }和expo-updatesURL。
