feat(ios): App Store signing and a one-command release script #10
No reviewers
Labels
No labels
bug
code
docs
duplicate
enhancement
help wanted
invalid
question
styles
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
uwayss/muhsin!10
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/ios-and-deployment"
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?
Everything needed to archive Muhsin for the App Store and build a matching
Play bundle, plus the tooling to do both in one command.
iOS signing
The ios directory is regenerated on every prebuild, so anything set in
Xcode's Signing pane survives exactly until the next one.
withIosSigningreapplies it each time: it stamps DEVELOPMENT_TEAM from APPLE_TEAM_ID in
.env, and deletes the aps-environment entitlement that expo-notifications
adds whether or not the app uses remote push. Only local notifications are
ever scheduled here, and those need no entitlement.
That second half reverses the reasoning in
203972d, which set theentitlement to production rather than removing it because removing it
trips ITMS-90078. It does -- but that is a post-upload warning mail, not a
rejection, and the build still reaches TestFlight. Keeping it would oblige
the App ID to carry the Push Notifications capability so signing matches,
for a capability nothing in the app exercises.
Verified against a real prebuild:
Muhsin.entitlementscomes out as anempty dict and DEVELOPMENT_TEAM is set on both build configurations.
Release script
npm run bundlegoes from a clean tree to a signed .aab and an .xcarchive.Nothing is passed in -- version, build number and version code come from
app.json, keystore and team id from .env, signing from the two config
plugins -- so a release cannot disagree with the config it was built from.
Artifacts land in build/ rather than dist/, because
expo exportclearsdist/ and would quietly delete an archive between a build and its upload.
Only the newest run is kept, and the directory is cleared before building
rather than after, since the point is to have the space free while
xcodebuild needs it.
The iOS side stops at the archive; distribution goes through Xcode's
Organizer while the certificates and profiles for this app do not exist yet.
dotenv
withReleaseSigninghand-rolled a KEY=value parser to avoid a dependency.It was wrong in quiet ways -- a trailing comment became part of the value,
and
export KEY=valuegave back a key named "export KEY". Neither shape isin .env today, which is exactly why nobody would notice one appearing. Now
extracted to
plugins/readEnv.json top of dotenv, shared by both pluginsand the release script.
Notes
export compliance, expo-updates, the RTL reload fix and the iOS rate row.
separately.
Checks:
tsc --noEmit,expo lintandprettier --checkall clean.