mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-10-31 18:19:43 +00:00
Install expo-updates and the eoas CLI, and configure the client against https://ota.apps.jbrunton.co.uk. app.json stays the static source of truth for version, buildNumber, and versionCode, which EAS rewrites during a release build. A new app.config.js spreads it and layers on the updates block, because XPREM selects a release channel from a build-time request header and that value differs per EAS build profile. - updates.url points at the XPREM manifest endpoint, /manifest - runtimeVersion uses the appVersion policy, so the runtime version is the store-visible expo.version and a native change requires a store build - expo-channel-name comes from RELEASE_CHANNEL, set per EAS build profile: development, staging (preview profile), and production - expo-app-id and an empty xprem-branch header are declared at build time, since expo-updates only sends headers that existed when the build was made - code signing uses keyid main and rsa-v1_5-sha256 against a certificate at certs/certificate.pem, skipped when DISABLE_CODE_SIGNING is set so a dev client can run against the packager The XPREM app id and the code-signing certificate are still placeholders pending the update server deployment. The config throws a descriptive error whenever RELEASE_CHANNEL is set while either is unresolved, so a misconfigured build fails at config resolution rather than shipping a client that can never validate a manifest. The native projects are Expo CNG output and are left untouched: the expo-updates config plugin embeds the real app id and certificate contents, so they are regenerated as a reviewed source change once both values land. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
53 lines
1.6 KiB
JSON
53 lines
1.6 KiB
JSON
{
|
|
"cli": {
|
|
"version": ">= 16.28.0",
|
|
"appVersionSource": "local"
|
|
},
|
|
"build": {
|
|
"development": {
|
|
"node": "20.19.4",
|
|
"developmentClient": true,
|
|
"distribution": "internal",
|
|
"env": {
|
|
"RELEASE_CHANNEL": "development"
|
|
}
|
|
},
|
|
"preview": {
|
|
"node": "20.19.4",
|
|
"distribution": "internal",
|
|
"env": {
|
|
"EXPO_PUBLIC_API_URL": "https://api.preprod.sauci.app",
|
|
"RELEASE_CHANNEL": "staging"
|
|
}
|
|
},
|
|
"production": {
|
|
"node": "20.19.4",
|
|
"autoIncrement": true,
|
|
"env": {
|
|
"RELEASE_CHANNEL": "production",
|
|
"EXPO_PUBLIC_API_URL": "https://api.sauci.app",
|
|
"EXPO_PUBLIC_SUPABASE_URL": "https://ckjcrkjpmhqhiucifukx.supabase.co",
|
|
"EXPO_PUBLIC_SUPABASE_ANON_KEY": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImNramNya2pwbWhxaGl1Y2lmdWt4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjcxMDc1ODEsImV4cCI6MjA4MjY4MzU4MX0.7FA_RmFXUjlmZF96O9xlAUfxHrQrSIZcJclNReLL4lI",
|
|
"EXPO_PUBLIC_REVENUECAT_IOS_API_KEY": "appl_lfPyYonFQtVytftPAfXIrGsMNFu",
|
|
"EXPO_PUBLIC_REVENUECAT_ANDROID_API_KEY": "goog_zoHtaRswsgvxtvYWIhZyvrPBGgh",
|
|
"EXPO_PUBLIC_REVENUECAT_ENTITLEMENT_ID": "Sauci Pro",
|
|
"EXPO_PUBLIC_POSTHOG_API_KEY": "phc_dXEEZrPwH6lKDaKNpkFcA3qafg1qwqakHoU5UfdX5Ug",
|
|
"EXPO_PUBLIC_POSTHOG_HOST": "https://eu.i.posthog.com"
|
|
}
|
|
}
|
|
},
|
|
"submit": {
|
|
"production": {
|
|
"android": {
|
|
"track": "internal",
|
|
"releaseStatus": "draft",
|
|
"changesNotSentForReview": true
|
|
},
|
|
"ios": {
|
|
"ascAppId": "6757159885",
|
|
"appleTeamId": "BXVPBATDZY"
|
|
}
|
|
}
|
|
}
|
|
}
|