Summary
Every asset of every update we publish — the launch asset (JS bundle) and all 61 static assets — returns HTTP 403 Forbidden from assets.eascdn.net. The manifest endpoint at u.expo.dev serves correctly and eas update publishes succeed, so devices fetch the manifest, fail to download the files, and silently keep the embedded bundle. As far as we can tell, no OTA update has ever applied for this project.
Similar past report: #1688 (Cloudflare-level denial on eascdn).
Project
- Project ID:
c4988614-4950-482a-b174-dc2ba141f2fa (account kaivest, Free plan)
- SDK 57 ·
expo-updates ~57.0.8 · eas-cli 21.2.0 · runtimeVersion policy appVersion (1.0.0) · channel/branch production
- Example affected update group:
842fcd11-36e5-425d-9fbe-3563c8430128 (also all earlier groups on the branch)
Reproduction
Manifest is served fine:
curl -s "https://u.expo.dev/c4988614-4950-482a-b174-dc2ba141f2fa" \
-H "expo-platform: ios" -H "expo-runtime-version: 1.0.0" \
-H "expo-channel-name: production" -H "expo-protocol-version: 1" \
-H "Accept: multipart/mixed"
# → 200, correct latest update manifest
Every asset URL from that manifest 403s:
curl -s -o /dev/null -w "%{http_code}\n" "https://assets.eascdn.net/dwddHDrldp2nFKHZdWqQqnPOcNLDzFtS1_sbXdDf-0w?project=c4988614-4950-482a-b174-dc2ba141f2fa"
# → 403 (same for all 61 assets of the update, and for older update groups)
Tested with multiple user agents (curl default, empty, CFNetwork-style) — always 403.
Ruled out
- Client config: extracted
Expo.plist from the actual production IPA — EXUpdatesEnabled true, correct EXUpdatesURL, expo-channel-name: production request header, runtime 1.0.0, CheckOnLaunch: ALWAYS.
- Publish failures:
eas update completes successfully; eas update:list shows the groups with both platforms.
- Runtime/channel mismatch: manifest endpoint returns the expected latest update for the exact headers the binary sends.
- Real devices (TestFlight builds 12 and 13, multiple networks: home wifi + cellular) never apply any update, consistent with the asset 403s.
Ask
Could you check whether this project's assets or account are being blocked at the CDN (Cloudflare) level? Happy to provide anything else useful.
🤖 Filed with Claude Code on behalf of the account owner.
Summary
Every asset of every update we publish — the launch asset (JS bundle) and all 61 static assets — returns HTTP 403 Forbidden from
assets.eascdn.net. The manifest endpoint atu.expo.devserves correctly andeas updatepublishes succeed, so devices fetch the manifest, fail to download the files, and silently keep the embedded bundle. As far as we can tell, no OTA update has ever applied for this project.Similar past report: #1688 (Cloudflare-level denial on eascdn).
Project
c4988614-4950-482a-b174-dc2ba141f2fa(accountkaivest, Free plan)expo-updates~57.0.8 · eas-cli 21.2.0 · runtimeVersion policyappVersion(1.0.0) · channel/branchproduction842fcd11-36e5-425d-9fbe-3563c8430128(also all earlier groups on the branch)Reproduction
Manifest is served fine:
Every asset URL from that manifest 403s:
Tested with multiple user agents (curl default, empty, CFNetwork-style) — always 403.
Ruled out
Expo.plistfrom the actual production IPA —EXUpdatesEnabledtrue, correctEXUpdatesURL,expo-channel-name: productionrequest header, runtime1.0.0,CheckOnLaunch: ALWAYS.eas updatecompletes successfully;eas update:listshows the groups with both platforms.Ask
Could you check whether this project's assets or account are being blocked at the CDN (Cloudflare) level? Happy to provide anything else useful.
🤖 Filed with Claude Code on behalf of the account owner.