Publishing to TestFlight
Guide for publishing Minuta to TestFlight via an organization Apple Developer account.
Prerequisites
| Item | Status | Notes |
|---|---|---|
| Apple Developer Program membership | Required | Organization needs $99/year membership |
| Your role in App Store Connect | Required | Need Admin, App Manager, or Developer role |
| D-U-N-S Number | Required for org | Should already be set up if you’re in the org |
| Xcode 15+ | Required | For iOS 17 deployment target |
Part 1: Apple Developer Portal Setup
1.1 Register App ID
- Go to Apple Developer Portal
- Navigate to Certificates, Identifiers & Profiles > Identifiers
- Click + to register a new identifier
- Select App IDs > App
- Fill in:
- Description:
Minuta - Bundle ID: Select “Explicit” and enter
tools.minuta.app
- Description:
- Capabilities: No special capabilities needed
- Click Continue > Register
1.2 Verify Team ID
Project uses Team ID UKMJ95C96B (configured in project.yml).
Confirm this matches your organization’s Team ID in the Developer Portal.
Part 2: App Store Connect Setup
2.1 Create the App
- Go to App Store Connect
- Click Apps > + > New App
- Fill in:
- Platforms: iOS (Mac Catalyst is automatic)
- Name:
Minuta - Primary Language: Your choice
- Bundle ID: Select
tools.minuta.appfrom dropdown - SKU:
minuta(unique identifier, not shown to users) - User Access: Full Access
- Click Create
2.2 App Information (Optional for TestFlight)
Under App Store tab, you’ll eventually need:
- App icon (1024x1024)
- Screenshots (various sizes)
- Description, keywords, support URL
- Privacy policy URL
- Age rating
For TestFlight-only testing, most of this can be skipped initially.
Part 3: Build and Archive
Option A: Using Xcode (Recommended)
Open project:
open Minuta/Minuta.xcodeprojSelect Any iOS Device (arm64) as build destination
Increment build number if needed:
- Edit
Minuta/project.yml:CURRENT_PROJECT_VERSION: "X" - Regenerate:
cd Minuta && xcodegen generate
- Edit
Product > Archive
When complete, Organizer window opens
Click Distribute App > App Store Connect > Upload
Follow prompts (automatic signing should work)
Option B: Command Line
# 1. Clean and archive
cd Minuta
xcodebuild clean archive \
-project Minuta.xcodeproj \
-scheme Minuta \
-destination 'generic/platform=iOS' \
-archivePath ../build/Minuta.xcarchive
# 2. Create ExportOptions.plist
cat > ../build/ExportOptions.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>app-store-connect</string>
<key>teamID</key>
<string>UKMJ95C96B</string>
<key>destination</key>
<string>upload</string>
</dict>
</plist>
EOF
# 3. Export and upload
xcodebuild -exportArchive \
-archivePath ../build/Minuta.xcarchive \
-exportPath ../build/export \
-exportOptionsPlist ../build/ExportOptions.plist Option C: Direct Upload with altool
After creating the .ipa:
# Create App-Specific Password at appleid.apple.com first
xcrun altool --upload-app \
-f ../build/export/Minuta.ipa \
-t ios \
-u your-apple-id@email.com \
-p "xxxx-xxxx-xxxx-xxxx" Part 4: TestFlight Configuration
4.1 Wait for Processing
After upload:
- Build appears in App Store Connect under TestFlight tab
- Processing takes 5-30 minutes
- Email notification when ready
4.2 Add Test Information
- In App Store Connect, go to TestFlight tab
- Click on your build
- Add What to Test notes
- Add Test Information:
- Beta App Description
- Feedback Email
- Privacy Policy URL (may be required)
4.3 Internal Testing (No Review Required)
- Go to Internal Testing section
- Create a group (e.g., “Core Team”)
- Add testers (must be App Store Connect users in your org)
- Up to 100 internal testers
- Available immediately after processing
4.4 External Testing (Requires Beta Review)
- Go to External Testing section
- Create a group
- Add external testers by email
- First build of each version requires Beta App Review (24-48 hours)
- Up to 10,000 external testers
Part 5: Mac Catalyst
App supports Mac Catalyst (SUPPORTS_MACCATALYST: YES).
- iOS build automatically works on Mac Catalyst
- Mac testers install via TestFlight for Mac
- Same build serves both platforms
Build Number Management
Each upload must have a unique build number.
# Before each new TestFlight upload, increment CURRENT_PROJECT_VERSION
# in project.yml, then regenerate:
cd Minuta && xcodegen generate Or edit directly in Xcode: Target > Build Settings > Current Project Version
Troubleshooting
| Issue | Solution |
|---|---|
| “No accounts with App Store Connect access” | Check your role in App Store Connect Users |
| “Bundle ID not registered” | Register App ID in Developer Portal first |
| “Build already exists” | Increment CURRENT_PROJECT_VERSION |
| “Missing compliance” | Add Export Compliance (select “No” - app has no encryption) |
| Archive fails with signing error | Check Team ID matches, or try manual signing |
Quick Summary
- Developer Portal: Register App ID
tools.minuta.app - App Store Connect: Create new app with that Bundle ID
- Xcode: Archive > Distribute > Upload
- App Store Connect: Add testers in TestFlight tab
- Testers: Download TestFlight app, accept invite