iOS App Store Deployment
This guide walks you through deploying your iOS app to App Store and TestFlight using WebF.
Prerequisites
Before you begin, make sure you have:
- ✅ An Apple Developer Program membership ($99/year)
- ✅ Access to a Mac computer with Xcode installed (for certificate generation)
- ✅ Your app’s Bundle Identifier (e.g.,
com.yourcompany.appname) - ✅ Your Apple Developer Team ID
- ✅ Distribution certificate and provisioning profile
- ✅ App Store Connect API key
Step 1: Create Bundle Identifier
The Bundle Identifier uniquely identifies your iOS app. It cannot be changed after your first upload to App Store.
1.1 Access Apple Developer Portal
- Go to developer.apple.com
- Sign in with your Apple ID
- Navigate to Certificates, Identifiers & Profiles
1.2 Create App ID
- Click Identifiers in the sidebar
- Click the + button
- Select App IDs → Click Continue
- Select App → Click Continue
- Fill in the details:
- Description: Human-readable name (e.g., “My WebF App”)
- Bundle ID: Reverse domain notation
- Choose Explicit (recommended)
- Enter your Bundle ID:
com.yourcompany.appname
- Select capabilities your app needs:
- Push Notifications
- In-App Purchase
- Game Center
- etc.
- Click Continue → Register
Guidelines for Bundle ID
- Use reverse domain notation:
com.yourcompany.appname - Only alphanumeric characters and periods
- Must be unique across App Store
- Cannot be changed after first upload
Example
com.example.mywebfapp⚠️ Important: Choose carefully! The Bundle ID cannot be changed after you upload your app to App Store.
Step 2: Find Your Team ID
Your Team ID is a 10-character identifier for your Apple Developer account.
Locate Team ID
- Go to developer.apple.com
- Sign in with your Apple ID
- Click your name in the top right corner
- Your Team ID is displayed under your team name (e.g.,
ABCD123456)
Save this ID - you’ll need it later.
Step 3: Create Distribution Certificate
A distribution certificate identifies you as the developer and is required to sign your app.
3.1 Create Certificate Signing Request (CSR)
On your Mac:
- Open Keychain Access (in Applications → Utilities)
- Go to Keychain Access menu → Certificate Assistant → Request a Certificate from a Certificate Authority
- Fill in:
- User Email Address: Your email
- Common Name: Your name or company name
- CA Email Address: Leave empty
- Request is: Select “Saved to disk”
- Click Continue
- Save the file as
CertificateSigningRequest.certSigningRequest
3.2 Generate Certificate in Apple Developer Portal
- In Certificates, Identifiers & Profiles, click Certificates
- Click the + button
- Select Apple Distribution (under “Software”)
- Click Continue
- Upload your
.certSigningRequestfile - Click Continue
- Download the certificate (
.cerfile)
3.3 Install and Export Certificate
On your Mac:
- Double-click the downloaded
.cerfile to install it in Keychain - Open Keychain Access
- In the “My Certificates” category, find your certificate
- Look for “Apple Distribution: Your Name (Team ID)”
- Expand the certificate (click the triangle) to show the private key
- Select both the certificate and private key
- Right-click → Export 2 items…
- Save as
.p12file - Set a strong password (remember this!)
- Click Save
- Enter your Mac password if prompted
🔐 Critical: Store your .p12 file and password securely! You’ll need them to sign future app updates.
Step 4: Create Provisioning Profile
A provisioning profile links your certificate, App ID, and distribution method.
4.1 Create Profile
- In Certificates, Identifiers & Profiles, click Profiles
- Click the + button
- Select App Store (under “Distribution”)
- Click Continue
- Select your App ID (Bundle Identifier)
- Click Continue
- Select your Distribution Certificate
- Click Continue
- Enter a profile name (e.g., “MyApp App Store Distribution”)
- Click Generate
- Download the
.mobileprovisionfile
💡 Note: Provisioning profiles expire after 1 year. You’ll need to regenerate and re-upload when they expire.
Step 5: Create App Store Connect API Key
The API key allows automated uploads to TestFlight and App Store without two-factor authentication.
5.1 Generate API Key
- Go to App Store Connect
- Click Users and Access
- Click the Keys tab (under “Integrations”)
- Click the + button (or Generate API Key)
- Fill in:
- Name:
WebF Deployment(or your preferred name) - Access: Select “Developer” or “App Manager”
- Developer: Can upload builds and manage TestFlight
- App Manager: Can also submit for App Review
- Name:
- Click Generate
5.2 Download and Save
- Download the
.p8file immediately (you can only download once!) - Save the following information:
- API Key file (
.p8) - Key ID: 10-character ID shown in the table (e.g.,
ABC123DEF4) - Issuer ID: UUID shown at the top of the page (e.g.,
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
- API Key file (
⚠️ One-time Download: The .p8 file can only be downloaded once. If you lose it, you’ll need to revoke and create a new key.
Step 6: Create App in App Store Connect
Before you can upload builds, your app must exist in App Store Connect.
6.1 Create New App
- Go to App Store Connect
- Click My Apps
- Click the + button → New App
- Fill in:
- Platform: iOS
- Name: Your app’s name (can be changed later)
- Primary Language: Select language
- Bundle ID: Select the Bundle ID you created earlier
- SKU: Unique identifier (e.g.,
mywebfapp001) - User Access: Full Access (or Limited if needed)
- Click Create
6.2 Complete App Information
Before you can submit for review, you need to fill in:
- App Information: Category, content rating, etc.
- Pricing and Availability: Free or paid, territories
- App Privacy: Privacy policy URL, data collection details
- Screenshots: Required for all device sizes
- App Icon: 1024x1024 PNG, cannot be transparent or contain alpha channel
- App Description: What’s New, Description, Keywords
- Support URL: Link to your support page
You can fill these in later, but you’ll need them before submitting for review.
⚠️ App Icon Requirement: Your app icon must be opaque (no transparency). Icons with alpha channels will be rejected by App Store Connect.
Step 7: Configure in WebF Platform
Now configure everything in WebF:
7.1 Navigate to Project Settings
- Log in to your WebF account
- Go to your project
- Click “Publish Config” tab
- Select the “iOS” tab
7.2 Upload Configuration
Fill in the following fields:
| Field | Value | Example |
|---|---|---|
| Bundle Identifier | Your app’s Bundle ID | com.example.mywebfapp |
| Team ID | Your 10-character Team ID | ABCD123456 |
| Distribution Certificate | Upload your .p12 file | distribution.p12 |
| Certificate Password | Password for the .p12 file | MySecurePass123 |
| Provisioning Profile | Upload your .mobileprovision file | MyApp_AppStore.mobileprovision |
| API Key (.p8) | Upload your App Store Connect API key | AuthKey_ABC123DEF4.p8 |
| API Key ID | 10-character Key ID from Step 5 | ABC123DEF4 |
| Issuer ID | UUID from Step 5 | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
7.3 Save Configuration
Click “Save iOS Configuration” to save your settings.
Step 8: Create Your First Build
8.1 Navigate to Builds Tab
- In your project, click the “Builds” tab
- Click “New Build” button
8.2 Configure Build
-
Select Build Type:
App- For end-user appsSDK- For libraries (if applicable)Both- Build both versions
-
Select Platforms:
- ✅ Check iOS
-
Configure iOS Output Types:
- IPA (Device) - For real iOS devices
- Distribution: Select TestFlight
- IPA (Simulator) - For iOS Simulator testing
- IPA (Device) - For real iOS devices
-
Select WebF Version (use latest stable version)
-
Add any required Plugins
8.3 Start Build
Click “Create Build” to start the build process.
Step 9: Monitor Build Progress
Build Statuses
- 🔵 RUNNING - Build is in progress
- ✅ SUCCESS - Build completed successfully
- ⚠️ PARTIAL - Some targets succeeded, others failed
- ❌ FAILED - Build failed completely
View Build Details
- Click the “eye” icon next to a build
- Check the Artifacts tab for build info
- Review the Logs tab if there are errors
Step 10: Test on TestFlight
💡 Build Number Auto-Increment: WebF automatically increments the build number with each new build, so you don’t need to manage this manually.
📝 Privacy Manifest: Starting May 1, 2024, Apple requires apps using certain APIs to include a Privacy Manifest file explaining why the APIs are used. If your app uses file access, system info, or tracking APIs and doesn’t include a manifest, it may be rejected during review.
If you configured IPA with TestFlight distribution:
10.1 Check Upload Status
- The build system automatically uploads to TestFlight
- Go to App Store Connect
- Select your app
- Click TestFlight tab
- Wait for Apple to process the build (usually 5-15 minutes)
10.2 Add Testers
Internal Testing (up to 100 testers, no review required):
- In TestFlight, go to Internal Testing
- Click + next to “Internal Testers”
- Add testers by email
- They’ll receive an invitation to test your app
External Testing (unlimited testers, requires Apple review):
- In TestFlight, go to External Testing
- Create a new test group
- Add a build to the group
- Add testers or create a public link
- Submit for Beta App Review
- Wait for approval (usually 24-48 hours)
Step 11: Submit to App Store
When you’re ready to release:
11.1 Prepare for Submission
- In App Store Connect, select your app
- Go to App Store tab
- Click + next to “iOS App” (if no version exists)
- Complete all required information:
- Screenshots (all required device sizes)
- Description, keywords, support URL
- App Privacy details
- Age rating
- Pricing and availability
11.2 Select Build
- Scroll to Build section
- Click + Select Build
- Choose the build you want to submit
- Click Done
11.3 Submit for Review
- Click Add for Review (top right)
- Complete the Export Compliance questionnaire
- Click Submit to App Review
11.4 Review Process
- In Review: Usually takes 24-48 hours
- Rejected: Address feedback and resubmit
- Approved: Your app is ready to release!
11.5 Release
Once approved, you can:
- Release Immediately: App goes live right away
- Schedule Release: Choose a specific date/time
- Manual Release: Release when you’re ready
Troubleshooting
Certificate Issues
Error: “Certificate not valid”
Solution:
- Ensure certificate is Apple Distribution (not Development)
- Check certificate hasn’t expired
- Verify password is correct
- Make sure you exported both certificate and private key
Provisioning Profile Issues
Error: “Profile doesn’t match bundle identifier”
Solution:
- Verify Bundle ID matches exactly
- Check profile includes your distribution certificate
- Ensure profile hasn’t expired
- Regenerate profile if needed
Upload Fails
Error: “Invalid signature” or “Couldn’t authenticate”
Possible causes:
- ❌ Wrong API key or credentials
- ❌ API key lacks permissions
- ❌ Certificate/profile mismatch
Solution:
- Verify all credentials are correct
- Check API key has “Developer” or “App Manager” access
- Ensure certificate matches provisioning profile
Build Processing Stuck
Issue: Build stuck in “Processing” on TestFlight
Solution:
- Wait - Processing usually takes 5-15 minutes
- Check email for any issues from Apple
- If stuck for hours, contact Apple Developer Support
Best Practices
Version Management
- ✅ Use semantic versioning (e.g., 1.0.0, 1.0.1, 1.1.0)
- ✅ Increment build number for each upload
- ✅ Keep track of what’s in each version
Testing Strategy
- Internal TestFlight - Quick testing with your team
- External TestFlight - Broader testing with beta users
- App Store - Full public release
Security
- 🔐 Never commit certificates or keys to version control
- 🔐 Store passwords in secure password manager
- 🔐 Limit API key permissions to minimum required
- 🔐 Rotate API keys periodically
- 🔐 Enable two-factor authentication on Apple ID
Certificate Expiration
- 📅 Distribution certificates expire after 1 year
- 📅 Provisioning profiles expire after 1 year
- 📅 Set calendar reminders to renew before expiration
- 📅 Plan app updates around certificate renewal
Additional Resources
- App Store Connect
- Apple Developer Portal
- App Store Review Guidelines
- TestFlight Documentation
- App Store Connect API Documentation
Next Steps
After your app is published:
- 📊 Monitor crash reports in App Store Connect
- 🔔 Set up alerts for new reviews and ratings
- 📈 Track downloads and user engagement
- 🚀 Plan your update schedule
- 💬 Respond to user reviews