- Xcode installed with your Apple Developer account signed in (Xcode > Settings > Accounts)
- Node.js and npm installed
- Capacitor CLI available (
@capacitor/cliin devDependencies)
cd game
npm run build
npx cap sync iosVersion info lives in game/ios/App/App.xcodeproj/project.pbxproj:
- MARKETING_VERSION — user-facing version (e.g.
0.1.4) - CURRENT_PROJECT_VERSION — build number (e.g.
536), must be unique per upload
You can also update these in Xcode: App target > General > Identity > Version / Build
To sync from package.json:
./scripts/sync-ios-version.shIn Xcode, open game/ios/App/App.xcworkspace:
- Select the App target
- Go to Signing & Capabilities
- Ensure Team is set to your Apple Developer account
- Ensure Bundle Identifier matches your App Store Connect app (e.g.
com.ojibwetd.app) - "Automatically manage signing" should be checked
Note: The
project.pbxprojfile contains team-specific signing settings. If another developer has changed the team/bundle ID, you'll need to switch it back to yours locally before archiving.
- Open
game/ios/App/App.xcworkspacein Xcode - Select Any iOS Device (arm64) as the build target (not a simulator)
- Product > Clean Build Folder (Shift+Cmd+K) — recommended if signing or bundle ID changed
- Product > Archive
- Wait for the build to complete — the Organizer window opens automatically
- In the Organizer, select your archive
- Click Distribute App
- Choose App Store Connect > Upload
- Walk through the options (defaults are typically fine)
- Xcode uploads the build directly — no need for Transporter
- Go to App Store Connect
- Select your app > TestFlight tab
- The build appears after a few minutes of processing
- Add testers under Internal Testing (or External Testing for wider distribution)
- Testers receive a notification and can install via the TestFlight app
- In App Store Connect, go to App Store tab > your version
- Under Build, click "+" and select the uploaded build
- Fill in: screenshots, description, keywords, "What's New", age rating, privacy declarations
- Click Submit for Review
- Review typically takes 24-48 hours for first submission
Another developer's team ID is in the project. Change the Team in Signing & Capabilities to your own account.
The bundle identifier in the project doesn't match your App Store Connect app. Update it in Signing & Capabilities or directly in project.pbxproj.
Each TestFlight upload requires a higher CURRENT_PROJECT_VERSION than the previous upload. Increment it before archiving.
Ensure game/ios/App/App/Assets.xcassets/AppIcon.appiconset contains a complete 1024x1024 icon.