- Add release-testflight.sh — one-command archive + upload to TestFlight - Add README_TESTFLIGHT.md — setup guide for home laptop - Add BUILD_STATE.md — build tracking - Migrate bundle IDs: com.chronomind.app → com.saravana.chronomind (original was taken) - Remove App Groups entitlement temporarily (not registered in dev portal yet) - Fix duplicate theme enums in generated file
3.8 KiB
3.8 KiB
ChronoMind — TestFlight Release Guide
One-Time Setup (Home Laptop)
1. Install prerequisites
# Xcode (from App Store or xcodereleases.com)
xcode-select --install
# XcodeGen
brew install xcodegen
2. Clone sibling repos
The iOS app depends on ByteLystPlatformSDK from the common platform repo. Both repos must be siblings:
~/code/mygh/
├── learning_ai_clock/ # This repo
└── learning_ai_common_plat/ # ByteLystPlatformSDK lives here
cd ~/code/mygh
git clone https://github.com/saravanakumardb1/learning_ai_common_plat.git
3. App Store Connect API Key
The key is already created. Copy it from your work machine:
mkdir -p ~/.appstoreconnect/private_keys
# Copy AuthKey_PPATU9GL73.p8 to ~/.appstoreconnect/private_keys/
chmod 600 ~/.appstoreconnect/private_keys/AuthKey_PPATU9GL73.p8
| Field | Value |
|---|---|
| Key ID | PPATU9GL73 |
| Issuer ID | 1dbc2980-1621-4fb9-940b-e28257e6322c |
4. Create app in App Store Connect (one-time)
- Go to App Store Connect → My Apps
- Click "+" → "New App"
- Fill in:
- Platform: iOS
- Name:
ChronoMind - Primary Language: English (U.S.)
- Bundle ID:
com.saravana.chronomind(already registered) - SKU:
chronomind
- Click Create
Release to TestFlight
Quick release (one command)
cd ios
bash release-testflight.sh
This will:
- Bump the build number in
project.yml - Regenerate the Xcode project via
xcodegen - Verify the debug build compiles
- Archive a Release build
- Export and upload to App Store Connect
- Update
BUILD_STATE.md - Commit and push
Re-upload a failed upload
If the archive succeeded but upload failed:
bash release-testflight.sh --skip-build
Custom API key location
ASC_KEY_ID=XXXX ASC_ISSUER_ID=yyyy ASC_KEY_PATH=/path/to/key.p8 bash release-testflight.sh
Manual Steps (if script fails)
Generate Xcode project
cd ios
xcodegen generate
Build (simulator, no signing)
xcodebuild build \
-project ChronoMind.xcodeproj \
-scheme ChronoMind \
-configuration Debug \
-destination 'platform=iOS Simulator,name=iPhone 16 Pro' \
CODE_SIGN_IDENTITY=- CODE_SIGNING_ALLOWED=NO
Archive
xcodebuild archive \
-project ChronoMind.xcodeproj \
-scheme ChronoMind \
-configuration Release \
-archivePath /tmp/ChronoMind_1.xcarchive \
-destination 'generic/platform=iOS'
Export + Upload
xcodebuild -exportArchive \
-archivePath /tmp/ChronoMind_1.xcarchive \
-exportPath /tmp/ChronoMind_export1 \
-exportOptionsPlist ExportOptions.plist \
-allowProvisioningUpdates \
-authenticationKeyPath ~/.appstoreconnect/private_keys/AuthKey_PPATU9GL73.p8 \
-authenticationKeyID PPATU9GL73 \
-authenticationKeyIssuerID 1dbc2980-1621-4fb9-940b-e28257e6322c
Troubleshooting
| Error | Fix |
|---|---|
xcodegen not found |
brew install xcodegen |
ByteLystPlatformSDK not found |
Clone learning_ai_common_plat as sibling directory |
Authentication failed |
Check API key path, Key ID, and Issuer ID |
Error Downloading App Information |
Create the app record in App Store Connect first (see Setup §4) |
No signing certificate "iOS Distribution" |
Use -allowProvisioningUpdates with API key (script does this) |
App Groups capability |
Register App Group in developer portal, or remove entitlement for initial release |
duplicate 'init(hex:alpha:)' |
Remove duplicate Color.init(hex:) from ChronoMindTheme.generated.swift |
Project Info
| Field | Value |
|---|---|
| Bundle ID | com.saravana.chronomind |
| Team ID | 748N7QPX7J |
| Min iOS | 17.0 |
| Xcode | 16.0+ |
| Swift | 5.9 |