Problem
Basically I want to build an offline app (no hosted OTA updates) locally (using turtle-cli) without publishing (instead using expo export) or ejecting. Hopefully that’s clear enough. I’ve followed so many docs and forum posts, but I’ve hit a wall when I open the app on a device or simulator and it says "Could not connect to development server. [...] URL: http://127.0.0.1:8000/bundles/ios-xxxx.js"
. But I don’t want it to try to connect to any Node server at all. How do I package it as an offline app where it uses the manifest that’s in the app? Is there something obvious I’m missing about building a standalone app?
Steps
I’ve basically been following these instructions.
- Export locally:
expo export --dev --public-url http://127.0.0.1:8000
- Host locally:
npx http-server -p 8000 dist
- Build locally:
EXPO_IOS_DIST_P12_PASSWORD="aaaa" \ turtle build:ios \ --team-id "bbbb" \ --dist-p12-path "cccc" \ --provisioning-profile-path "dddd" \ --public-url "http://127.0.0.1:8000/ios-index.json" \ --allow-non-https-public-url \ --output "eeee" \ --type simulator
- Stop hosting before running the app.
Attempts
Of course I set "updates": { "enabled": false }
in my app.json, and I can see the resulting .app’s EXShell.plist has areRemoteUpdatesEnabled
and updatesCheckAutomatically
set to boolean 0. However I also see the manifestUrl
is http://127.0.0.1:8000/ios-index.json
.
I saw some posts mentioning publishManifestPath
and publishBundlePath
, so I tried setting those, but I’m not even sure if those have much effect without ejecting. I couldn’t identify any difference.
I tried setting various EXUpdates__
values in app.json’s infoPlist
, but I guess these only affect Info.plist, not Expo.plist where those keys are expected.
This post seems similar, where they want to load the manifest and bundle offline. They solve this by manually replacing shell-app-manifest.json
and shell-app.bundle
, but I don’t know how to do this without ejecting. I can manually edit these files within a .app, but that won’t work for a .ipa, right?
Any pointers would be super appreciated!