Repository navigation
Open
Labels
toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surfaceFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
Description
Context
Nothing that landed in 2.0 has run on a device yet:
- the hybrid shell (feat!: rebuild as a hybrid shell around the web Console (v2.0) #144);
- the server probe (Private servers: probe with the anonymous discovery endpoints and confirm the server's identity before connecting #154);
- QR connect (Connect by QR code:
objectos://connect?server=…links and the native scanner screen #156); - saved connections (Saved connections and the native "切换组织" switcher (organizations and company servers) #152);
- MDM (Managed deployment: read the server URL (and an optional lock) from MDM managed app configuration #157);
- the IdP sign-in bar (External sign-in bar: let enterprise IdP pages load in the WebView during sign-in, behind a native bar showing the IdP's domain #155);
- the bridge methods (Bridge:
scan()— barcode / QR scanning for Console fields #146, Bridge:pickImage(),openFile()andshare()— reliable photo capture, attachment download and sharing #147, Bridge: stable install id andpushTokenChangedfor device registration; document the no-Service-Worker rule #163); - the ten locales (Languages: follow the phone's language in the platform's 11 locales (ruling F of objectstack#29349) #159).
The seat post #160 also records "Native rebuild owed": expo-camera, the cookie-manager module and modules/managed-config have never been compiled.
Measured on main at ddcf2d5:
- CI builds nothing. Every
EAS BuildandEAS Updaterun onmainfinishes in 6–17 s, for example run 41569850272. Each step is gated onenv.EXPO_TOKEN != '', so the runs are green but empty: theEXPO_TOKENsecret is not set. - The app is not linked to an EAS project.
app.config.tshas noextra.eas.projectId, noowner, noupdates.urland noruntimeVersion. Soeas buildwould prompt to create a project, andeas updatecannot publish. The slug isobjectos-mobile(Rebrand the app to ObjectOS: app name, URL schemeobjectos, bundle id / packageai.objectos.mobile#151). - The
previewprofile pre-fills a stale server.eas.jsonbuild.preview.env.EXPO_PUBLIC_DEFAULT_SERVER_URLishttps://staging.objectstack.com.
Ask
Maintainer only (needs the Expo account; a seat cannot do it):
- In the Expo account or organization that should own the app, run
eas initonce in this repo. That creates theobjectos-mobileproject and prints itsprojectId. - Add a GitHub Actions secret
EXPO_TOKEN: an Expo robot or personal access token for that account. - For iOS device builds: an Apple Developer team, and
eas credentials(or leteas buildmanage them). For Android, EAS generates the keystore.
Code (seat, one PR after step 1):
- Write the printed
projectIdandownerintoapp.config.ts. - Add
updates.url(https://u.expo.dev/<projectId>) andruntimeVersion: { policy: "fingerprint" }. An OTA update must never reach a binary whose native modules differ; the fingerprint policy guarantees that. - Change the
previewprofile'sEXPO_PUBLIC_DEFAULT_SERVER_URLto"", or to the staging environment the maintainer names. - Add a
previewchannel, plusdevelopment-device(a development client withios.simulator: false), so a phone can install a dev build. - Update
docs/DEVICE-TESTING.mdwith the install paths:- Android: the APK link or QR from EAS;
- iOS: register the device with
eas device:create, then an internal-distribution build.
Then add a short smoke checklist per landed card, built from each card's manual check.
Acceptance
- A push to
main(or a manualworkflow_dispatchwith profilepreview) produces an installable Android build and an iOS build on EAS. The run logs show the build steps executing, not skipped. docs/DEVICE-TESTING.mdlets someone with only a phone install the preview build and connect to a server.
Note: once EXPO_TOKEN is set, every merge to main starts real EAS builds and an OTA publish. That is the "publishes on merge" condition in the lane charter, and the seat's landing guard (#160) then hands merges back to the maintainer.
Metadata
Metadata
Assignees
Labels
toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surfaceFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
Activity
feat(eas): link the app to the EAS project so CI can build it
hotlong commentedon Nov 3, 2026
The code part is in #185. This card stays open until
EXPO_TOKENis set and a real EAS build runs, as its acceptance asks.ci(eas): run the EAS workflows on Node 22, which eas-cli now requires
fix(eas): drop the empty server URL values eas-cli refuses
fix(eas): preview builds do not upload source maps to Sentry
docs(eas): state which profile uploads source maps