feat: iOS build config for TestFlight + Expo SDK 57 upgrade #8
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/ios-testflight-build"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
First native build config for this app.
eas build:listwas empty — nothing here has been exercised on a real device yet.What is in here
Expo SDK 56 → 57 (commit 1) —
expo-doctor20/20,tscclean. Three SDK-57 API adaptations:StyleSheet.absoluteFillObject→StyleSheet.absoluteFill, tighter expo-routerLink hreftyping, narrowedStatusChipstate prop.iOS build config (commit 2):
app.json— register theexpo-cameraandexpo-image-pickerconfig plugins. Without them the production build ships noNSCameraUsageDescriptionand camera access crashes on device. Permission strings are specific; App Review rejects vague ones. The unusedNSMicrophoneUsageDescriptionandNSFaceIDUsageDescriptionthat expo-camera and expo-secure-store add by default are suppressed — the app records no audio and uses no biometrics.usesNonExemptEncryption: false— HTTPS-only, skips the export-compliance prompt on every TestFlight upload.eas.json—appVersionSource: remoteplusautoIncrementon production, so build numbers live in EAS rather than being committed.EXPO_PUBLIC_API_URLset per profile..easignore— new file. EAS reads this instead of.gitignore.api/andopenapi.jsonare gitignored build artifacts, but Metro cannot resolve@/api/*without them, so a cloud build would have failed at bundling.Bugs found on the way
Broken today, not only in the native build. The orval-generated paths already start with
/api/, sobaseURLmust not repeat it.lib/api-instance.tsfallbackhttps://superclean.haskytech.com/api/api/api/...whenever.envis absent — which is exactly the EAS build case, since.envis gitignored and never reaches the build serversapp/job/photo-list.tsxphotoUrl${base}/shifts/.../api, job photos 404app/payslip/[id].tsxPDF URL${baseURL}/staff/me/.../api, payslip download 404Verification
npx expo-doctor— 20/20 checks passednpx tsc --noEmit— cleannpx expo config --type introspect— resolved Info.plist carries exactlyNSCameraUsageDescription,NSPhotoLibraryUsageDescriptionandITSAppUsesNonExemptEncryption=false; bundle identifiersg.superclean.staffNot verified: no build has run. The iOS build is the next step and needs Apple Developer credentials.
Follow-up flagged, not done
expo configwarnsandroid: userInterfaceStyle: Install expo-system-ui in your project to enable this feature. The app is designed light-mode-only; withoutexpo-system-uithat lock does not apply on Android. Out of scope for the iOS TestFlight build, worth a separate PR before Android rollout.iOS build is green.
f3c045cd— version 0.1.0, build 3, 4m33s, signed IPA produced. Apple teamRU2UHH6PAR, bundlesg.superclean.staff.The first build failed, and it was not the iOS config
Build
c6f1f74bdied inINSTALL_DEPENDENCIES, 21s in, reporting only "Unknown error". The log said:pnpm-workspace.yamlstill carried pnpm's own generated placeholder,esbuild: set this to true or false. An undecided build script makespnpm install --frozen-lockfileexit 1. It never showed up locally becausenode_moduleswas already populated, so pnpm skipped the decision path entirely —pnpm installreported success on this machine while failing on every clean checkout.Reproduced in isolation (a scratch directory holding only
package.json,pnpm-lock.yamlandpnpm-workspace.yaml):allowBuilds.esbuildCI=1 pnpm install --frozen-lockfileset this to true or false(placeholder)ERR_PNPM_IGNORED_BUILDStrueWorth noting the placeholder predates this branch — it was committed with the original scaffold, so any clean CI checkout of this repo would have failed the same way.
Still outstanding
eas submitneedsascAppId, which does not exist until the app record is created in App Store Connect. That step requires an interactive Apple login (2FA), so it has to be run by hand:submit.production.iosineas.jsonstays empty until that returns anascAppId; filling it in is a follow-up commit.Holding this PR unmerged until the build is confirmed running on a physical device via TestFlight — the SDK 57 upgrade has still never executed outside a simulator-less cloud builder.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.