Skip to content

# Deploying HopeBucket to the App Store via Xcode

Sarah Kimi Rettig edited this page May 12, 2026 · 1 revision

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


Prerequisites

  • 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

Step 1 — Update the Version and Build Number

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 version

android/app/build.gradle (keep in sync for Android releases)

versionName "2.2.5"
versionCode 3              // must be higher than the previous upload

Rule of thumb: bump version when shipping new features or fixes; always increment buildNumber on every single upload to App Store Connect.


Step 2 — Install Dependencies

cd /Users/sarahrettig/Documents/Coding_Projects/HopeBucket/hopebucket-reactNative-app
npm install

Step 3 — Prebuild the iOS Project

This generates (or regenerates) the ios/ folder from app.json:

npx expo prebuild --platform ios

Warning: This overwrites any manual changes made inside the ios/ folder. Always keep app.json as 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.


Step 4 — Open in Xcode

open ios/hopebucketreactnative.xcworkspace

Always open the .xcworkspace file, not the .xcodeproj file. The workspace includes CocoaPods dependencies.


Step 5 — Configure Signing in Xcode

  1. In the left sidebar, click the project root (hopebucketreactnative)
  2. Select the hopebucketreactnative target
  3. Go to the Signing & Capabilities tab
  4. Check Automatically manage signing
  5. Set Team to your Apple Developer account (# your Apple ID email here)
  6. Confirm Bundle Identifier is com.hopebucket.app

Step 6 — Verify Version and Build Number

  1. Go to the General tab for your target
  2. Confirm Version and Build match what you set in app.json
  3. If they don't match, update them here (or re-run prebuild from Step 3)

Step 7 — Archive the App

  1. In the top toolbar, set the target device to Any iOS Device (arm64) — not a simulator
  2. In the menu bar: Product → Archive
  3. Wait for the build to complete (this can take a few minutes)
  4. The Organizer window opens automatically when done

Step 8 — Upload to App Store Connect

In the Organizer window:

  1. Select the archive you just created
  2. Click Distribute App
  3. Choose App Store ConnectNext
  4. Choose UploadNext
  5. Leave the default options checked (Strip Swift symbols, Upload symbols) → Next
  6. Select your distribution certificate and provisioning profile → Next
  7. Click Upload

Step 9 — Submit for Review in App Store Connect

  1. Go to appstoreconnect.apple.com
  2. Select HopeBucketiOS App
  3. Click the + next to the version list to create a new version (if needed)
  4. Under Build, click + and select the build you just uploaded
    • It may take 5–15 minutes to appear after upload
  5. Fill in release notes under What's New in This Version
  6. Click Add for ReviewSubmit to App Review

Troubleshooting

"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.


Quick Reference — Files to Update Each Release

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