-
Notifications
You must be signed in to change notification settings - Fork 0
# Deploying HopeBucket to the App Store via Xcode
Bundle ID: com.hopebucket.app
Apple ID: # your Apple ID email here
App Store Connect App ID: 6758913831
- Mac with Xcode installed (get it from the Mac App Store)
- Apple Developer Program membership ($99/year) — required for App Store distribution
- App Store Connect account at appstoreconnect.apple.com
- Node.js and npm installed
Before every release, update these files:
app.json
"version": "2.2.5", // user-facing version shown in App Store
"buildNumber": "7", // must increment on every upload, even for the same versionandroid/app/build.gradle (keep in sync for Android releases)
versionName "2.2.5"
versionCode 3 // must be higher than the previous uploadRule of thumb: bump
versionwhen shipping new features or fixes; always incrementbuildNumberon every single upload to App Store Connect.
cd /Users/sarahrettig/Documents/Coding_Projects/HopeBucket/hopebucket-reactNative-app
npm installThis generates (or regenerates) the ios/ folder from app.json:
npx expo prebuild --platform iosWarning: This overwrites any manual changes made inside the
ios/folder. Always keepapp.jsonas the source of truth and run prebuild after updating it.If the
ios/folder already exists and you haven't changed any native config (permissions, icons, new native packages), you can skip this step.
open ios/hopebucketreactnative.xcworkspaceAlways open the .xcworkspace file, not the .xcodeproj file. The workspace includes CocoaPods dependencies.
- In the left sidebar, click the project root (
hopebucketreactnative) - Select the hopebucketreactnative target
- Go to the Signing & Capabilities tab
- Check Automatically manage signing
- Set Team to your Apple Developer account (
# your Apple ID email here) - Confirm Bundle Identifier is
com.hopebucket.app
- Go to the General tab for your target
- Confirm Version and Build match what you set in
app.json - If they don't match, update them here (or re-run
prebuildfrom Step 3)
- In the top toolbar, set the target device to Any iOS Device (arm64) — not a simulator
- In the menu bar: Product → Archive
- Wait for the build to complete (this can take a few minutes)
- The Organizer window opens automatically when done
In the Organizer window:
- Select the archive you just created
- Click Distribute App
- Choose App Store Connect → Next
- Choose Upload → Next
- Leave the default options checked (Strip Swift symbols, Upload symbols) → Next
- Select your distribution certificate and provisioning profile → Next
- Click Upload
- Go to appstoreconnect.apple.com
- Select HopeBucket → iOS App
- Click the + next to the version list to create a new version (if needed)
- Under Build, click + and select the build you just uploaded
- It may take 5–15 minutes to appear after upload
- Fill in release notes under What's New in This Version
- Click Add for Review → Submit to App Review
"No accounts with iTunes Connect access" Go to Xcode → Settings → Accounts and add your Apple ID.
Build number rejected ("already been used")
Increment buildNumber in app.json and in Xcode's General tab, then re-archive.
Signing certificate errors Go to Signing & Capabilities, uncheck then re-check Automatically manage signing.
xcworkspace not found after prebuild
Run npx pod-install or cd ios && pod install to install CocoaPods dependencies, then try opening again.
App crashes on device but works in simulator Make sure you archived with Any iOS Device (arm64), not a simulator target.
| File | Field | Purpose |
|---|---|---|
app.json |
version |
User-facing version (App Store) |
app.json |
ios.buildNumber |
Must increment every upload |
android/app/build.gradle |
versionName |
Android user-facing version |
android/app/build.gradle |
versionCode |
Must increment every Android upload |