app-store18 min readMay 30, 2026

Submitting Your First App: A Guide to App Store Connect

Submitting your first app to the App Store can feel like a daunting task, but App Store Connect simplifies the process. This guide will walk you through every essential step, from preparing your development environment to configuring your app's metadata. You'll gain the confidence to successfully launch your app and share it with millions of users worldwide.

Submitting Your First App: A Guide to App Store Connect

Getting Started: Setting Up Your Developer Account and App ID

Before you can even think about submitting your app, you need to ensure your Apple Developer Program membership is active and correctly configured. This is the foundation for everything else, providing access to App Store Connect, Xcode's distribution tools, and necessary certificates.

First, make sure you have an active Apple Developer Program membership. If you don't, you'll need to join at developer.apple.com. Once your membership is active, you'll gain access to the Certificates, Identifiers & Profiles section on the developer website.

The very first step in App Store Connect itself is to provision an "App ID" for your application. An App ID is a two-part string used to identify one or more applications from a single development team. It consists of a Team ID and a Bundle ID search string.

To create an App ID:

  1. Go to developer.apple.com/account and sign in.
  2. Navigate to "Certificates, Identifiers & Profiles."
  3. In the left sidebar, select "Identifiers" and click the "+" button.
  4. Choose "App IDs" and click "Continue."
  5. Select "App" and click "Continue" again.
  6. Provide a "Description" (e.g., "My Awesome App").
  7. For "Bundle ID," select "Explicit" and enter a unique reverse-domain name string (e.g., com.yourcompany.yourappname). This must match the bundle identifier in your Xcode project exactly.
  8. Enable necessary capabilities for your app (e.g., Push Notifications, Associated Domains, iCloud). Make sure these match what your app actually uses.
  9. Click "Continue" and then "Register."

This App ID links your app specifically to your developer account and enables specific Apple services. It's a crucial identifier used throughout the submission process.

Preparing Your App in Xcode: Signing and Archiving

With your App ID registered, it's time to prepare your Xcode project for distribution. This involves correctly configuring code signing, ensuring your app meets all requirements, and finally, archiving the build.

1. Code Signing:

Code signing is a security measure that ensures your app was indeed created by you and hasn't been tampered with. Xcode often handles much of this automatically with "Automatic Manages Signing" enabled. However, it's vital to understand the components:

  • Development Certificate: Identifies you as a developer to Apple.
  • Distribution Certificate: Identifies your team for App Store submissions.
  • Provisioning Profile: A file that links your App ID, certificates, and devices, allowing your app to run on specific devices or be submitted to the App Store.

When "Automatically manage signing" is enabled in your Xcode project's TARGETS > Signing & Capabilities tab, Xcode will create and manage these for you. For your first submission, this is highly recommended. Ensure your Team is correctly selected.

2. App Icons and Launch Screens:

Your app must include all required app icon sizes and, for iOS, a launch screen. Xcode assets catalogs (Assets.xcassets) are the standard way to manage these. The App Icons section of your Assets.xcassets needs to be populated with images of specific dimensions. Similarly, you should have a LaunchScreen.storyboard (or use LaunchScreen.xib) configured in your project settings (under TARGETS > General > App Icons and Launch Images).

3. Build Settings and Versioning:

Before archiving, check your project's build settings:

  • Go to your project's TARGETS > General tab.
  • Ensure the Bundle Identifier exactly matches the App ID you created in App Store Connect (e.g., com.yourcompany.yourappname).
  • Set your Version number (e.g., 1.0.0). This is user-facing.
  • Increment your Build number (e.g., 1). This is for internal tracking and must be unique for each build uploaded to App Store Connect. Each time you upload a Version 1.0.0, its Build number must be new (e.g., 1, 2, 3).

4. Archiving Your App:

Once your app is ready, you'll create an archive in Xcode:

  1. In Xcode, select Generic iOS Device (or Any Mac for macOS apps) from the scheme selector dropdown.
  2. Go to Product > Archive in the Xcode menu bar.
  3. Xcode will compile your project and, if successful, open the Organizer window.
  4. In the Organizer, select your archive and click Distribute App.
  5. Choose App Store Connect as the distribution method and click Next.
  6. Select Upload and click Next.
  7. Review the signing options. It's usually best to let Xcode Automatically manage signing.
  8. Click Next and then Upload. Xcode will then upload your archived build to App Store Connect. This can take several minutes depending on your internet speed and app size.

After a successful upload, you'll receive an email from App Store Connect confirming the build receipt. This build will then undergo processing, which can range from a few minutes to an hour. You'll get another email once processing is complete and the build is ready to be used.

swift
// No direct Swift code for archiving or signing configuration, as these are Xcode UI operations.
// However, you often define app version and build numbers in your Info.plist,
// which can be accessed programmatically in Swift if needed.

import Foundation

struct AppInfo {
    static let version: String = {
        guard let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else {
            return "Unknown Version"
        }
        return version
    }()

    static let build: String = {
        guard let build = Bundle.main.infoDictionary?["CFBundleVersion"] as? String else {
            return "Unknown Build"
        }
        return build
    }()

    static func printAppDetails() {
        print("App Version: \(appInfo.version)")
        print("App Build: \(appInfo.build)")
        print("Bundle ID: \(Bundle.main.bundleIdentifier ?? "Unknown Bundle")")
    }
}

// How you might use it in your app, for example, on an 'About' screen:
// AppInfo.printAppDetails()

Once your build is uploaded, the next major step is to create a new app record in App Store Connect. This record holds all the information about your app that users will see on the App Store.

  1. Sign in to App Store Connect: Go to appstoreconnect.apple.com and log in with your Apple ID linked to your developer account.

  2. Go to My Apps: From the homepage, click on "My Apps."

  3. Add a New App: Click the "+" button (usually in the top left corner) and select "New App."

    You will be prompted to fill in some initial details:

    • Platforms: Choose iOS (and macOS if it's a universal app).
    • Name: This is your app's name as it will appear on the App Store. It must be unique and can be up to 30 characters. Choose a compelling and descriptive name that helps users understand what your app does.
    • Primary Language: Select the primary language for your app's information.
    • Bundle ID: Select the App ID you created earlier (e.g., com.yourcompany.yourappname). This is critical — it must match your Xcode project's bundle identifier.
    • SKU: A unique ID for your app that is not visible on the App Store. You can use any string, such as YOURCOMPANY_YOURLASTAPP_001 or APPNAME_iOS_v1. Keep it consistent for your internal tracking.
    • User Access: Typically, you'll select Full Access.
  4. Click Create: This will generate your app's entry in App Store Connect.

Now you'll be taken to your app's page, where you'll see various sections to fill out. The most important one for initial submission is App Store > 1.0 Prepare for Submission (or whatever your current version number is).

Providing App Metadata: Descriptions, Keywords, and Screenshots

This section is crucial for discoverability and convincing users to download your app. Pay close attention to every field.

1. Version Information (App Store tab > [Your Version Number])

  • App Previews and Screenshots: Upload high-quality screenshots for various device sizes (iPhone, iPad, Mac if applicable). You need at least one screenshot per device type per localization. App previews are optional but highly recommended; these are short videos demonstrating your app's features. Xcode helps you generate screenshots directly from your simulators or on-device.

    • Compatibility Hint: For iOS 17+, you usually need at least one set of screenshots for iPhone (6.7-inch display) and iPad (12.9-inch display, 2nd or 3rd generation, or higher).
  • Promotional Text (Optional): This text appears above your app's description and can be used to announce new features or special offers. It can be updated without submitting a new app version.

  • Description: This is your app's main marketing message. Write a compelling, concise, and keyword-rich description (max 4000 characters) that explains what your app does, its key features, and unique selling points. Use clear paragraphs and bullet points.

  • Keywords: Enter relevant keywords (up to 100 characters, comma-separated) that users might use to search for your app. Think like a user! Don't repeat words already in your name or category.

  • Support URL: A URL to your support website or contact page.

  • Marketing URL (Optional): A URL to your app's marketing website.

  • Privacy Policy URL: A mandatory URL to your app's privacy policy. If you collect any user data, this is legally required.

2. General App Information

  • Category: Choose the primary and an optional secondary category that best describes your app (e.g., Games > Puzzle, Utilities).
  • Content Rights: Declare if your app contains, shows, or accesses third-party content.
  • Age Rating: Answer a series of questions about your app's content to automatically generate an age rating (e.g., 4+, 9+, 12+, 17+).

3. App Review Information

  • Sign-in Information (Required if your app has login): Provide a demo account username and password for Apple's review team. Ensure this account grants full access to all features they need to test. If your app requires specific configurations (e.g., a server setup), provide detailed instructions.
  • Contact Information: Provide your contact details for the App Review team.
  • Notes: Add any special notes for the App Review team, such as features that require specific steps, known limitations, or features you specifically want them to test.
  • Attachment (Optional): Upload files if necessary (e.g., a video demonstrating a complex feature, specific test data).

4. Build

In this section, you'll link the build you uploaded from Xcode to this specific App Store version. Click "+ Build" and select the correct build from the list. It must have completed processing to appear here. Once selected, save your changes.

5. Pricing and Availability

  • Price Tier: Select your app's price (or choose Free).
  • Availability: Choose the territories where your app will be available.

6. App Privacy

This is a critical section (introduced with iOS 14.5) where you declare your app's privacy practices. You'll need to answer a detailed questionnaire about what data your app collects, how it's used, and whether it's linked to the user or used for tracking. Be honest and accurate, as this information is displayed to users on your App Store product page. It should align with your Privacy Policy.

swift
// Example of how you might display a Privacy Policy link within your app
// (if you also link to it from within the app, not just App Store Connect).
// This could be on an 'About' screen or settings.

import SwiftUI

struct PrivacyPolicyView: View {
    let privacyPolicyURL = URL(string: "https://www.yourcompany.com/yourapp/privacypolicy")!

    var body: some View {
        NavigationView {
            List {
                Section("Legal") {
                    Link("View Privacy Policy", destination: privacyPolicyURL)
                }
                // Other legal or app info sections
            }
            .navigationTitle("About App")
        }
    }
}

// To show an in-app privacy policy link:
// PrivacyPolicyView()

Testing Your App with TestFlight

Before submitting your app for review, thoroughly testing it is paramount. Apple's TestFlight service is an invaluable tool for beta testing and comes integrated with App Store Connect.

What is TestFlight?

TestFlight allows you to distribute pre-release versions of your app to internal testers (members of your development team) and external testers (anyone you invite) to gather feedback and identify bugs.

How to Use TestFlight:

  1. Upload a Build: You've already uploaded a build via Xcode's Archive > Distribute App process. This build automatically appears in the TestFlight tab in App Store Connect.

  2. Internal Testing:

    • Go to the TestFlight tab in App Store Connect.
    • Select your app from the left menu.
    • Under Internal Testing, choose the build you want to test and click Add Testers.
    • You can add up to 100 internal testers (members of your App Store Connect team with specified roles).
    • Testers will receive an email invitation to install the TestFlight app and then your app.
  3. External Testing:

    • To distribute to external testers, your first build for external testing must undergo a basic review by Apple (often quicker than the full App Store Review). This ensures the app doesn't crash, looks complete, and handles user data appropriately.
    • Under External Testing, create a new testing group.
    • Add your chosen build to this group.
    • Provide Test Information (What to Test, Feedback Email, Contact Information).
    • Submit the build for TestFlight Review. Once approved, you can invite up to 10,000 external testers via email or by sharing a public link.

Benefits of TestFlight:

  • Crash Reports: TestFlight automatically collects crash reports from testers.
  • User Feedback: Testers can easily provide feedback directly from the app (e.g., by taking a screenshot).
  • Session Information: Provides insights into how testers are using your app.
  • Streamlined Distribution: Easily distribute updates to testers without going through the full App Store review process every time.

Running thorough beta testing through TestFlight allows you to catch critical bugs and usability issues before your app reaches public users, significantly increasing your chances of a smooth App Store approval and a positive user experience. Address all reported bugs and feedback before you consider your app ready for submission to App Store Review.

swift
// While TestFlight itself doesn't involve direct Swift code for its functionality,
// you can integrate in-app prompts for feedback or log specific events
// that might be useful during testing.

import StoreKit

func requestAppReviewFromUser() {
    // Only call this when it makes sense in your app's flow (e.g., after a key achievement)
    // The system decides if/when to show the prompt, and may not show it often.
    if #available(iOS 10.3, *) {
        SKStoreReviewController.requestReview()
    }
}

// You might also implement a custom feedback mechanism for TestFlight builds,
// perhaps a hidden button or gesture that opens an email pre-filled with diagnostics.

struct FeedbackButton: View {
    var body: some View {
        #if DEBUG // Only include this in debug/TestFlight builds
        Button("Send Feedback") {
            sendEmailWithFeedback()
        }
        #endif
    }

    func sendEmailWithFeedback() {
        // Logic to compose and send an email, potentially with device info,
        // app version, build number, and even a screenshot.
        print("Preparing feedback email...")
        // You would typically use MFMailComposeViewController for this on iOS.
    }
}

// Integrate into your app's settings or a 'hidden' debug menu
// Example: FeedbackButton()

Submitting Your App for Review

After meticulously preparing your app, configuring its metadata in App Store Connect, and conducting thorough TestFlight testing, you're finally ready for the moment of truth: submitting for App Store Review.

  1. Back to App Store Connect: Navigate to your app's page in App Store Connect, specifically the App Store tab and the 1.0 Prepare for Submission (or current version) section.
  2. Review All Sections: Double-check every field:screenshots, description, keywords, privacy policy, app review information (especially the demo account if applicable), build selection, and age rating. Ensure everything is accurate and up-to-date. Missing or incorrect information is a common reason for rejections.
  3. Choose Release Method: At the top of your version page, you'll see "Version Release." You have three options:
    • Manually release this version: The app will go to Pending Developer Release after approval. You then manually click Release Your App when you're ready. This is recommended for your first app.
    • Automatically release this version: The app goes live on the App Store immediately after approval.
    • Automatically release this version after App Review approval, no earlier than [date]: The app goes live automatically on a specified future date after approval.
  4. Click 'Submit for Review': Once you're confident everything is in order, click the "Submit for Review" button, usually located in the top right corner of the page.
  5. Answer Compliance Questions: You will be prompted to answer a few final questions regarding export compliance or advertising identifiers. Answer these accurately.

What Happens Next?

Your app status will change to Waiting For Review. The App Store Review team will then begin evaluating your app against Apple's App Store Review Guidelines. This process can take anywhere from 24 hours to several days, though often it's quicker now for standard apps (typically 1-3 days).

  • Approval: If approved, your app's status will change to Ready for Sale (or Pending Developer Release if you chose manual release). Congratulations!
  • Rejection: If rejected, your app's status will change to Rejected. You will receive a detailed message in Resolution Center explaining why it was rejected and providing references to the specific guideline violations. Address the issues, make the necessary changes in Xcode, upload a new build, update any metadata in App Store Connect, and resubmit for review.

Always be polite and professional in your communications with the App Review team via the Resolution Center. They are there to help ensure the quality and safety of the App Store ecosystem. Persist through rejections; it's a common part of the development process.

By following these steps and paying close attention to detail, you'll significantly increase your chances of a successful first App Store submission. Good luck!

swift
// No direct Swift code for the submission process itself.
// However, ensuring your app adheres to the App Store Review Guidelines
// often involves careful implementation within your Swift code.
// For example, correctly handling in-app purchases or user data.

import StoreKit
import SwiftUI

class InAppPurchaseManager: ObservableObject {
    @Published var products: [Product] = []

    func loadProducts() async {
        do {
            let products = try await Product.products(for: ["com.yourapp.premiumfeature"])
            await MainActor.run { self.products = products }
        } catch {
            print("Error loading products: \(error)")
        }
    }

    func purchase(_ product: Product) async throws {
        let result = try await product.purchase()
        switch result {
        case .success(let verification):
            // Verify the purchase receipt on your server or locally
            switch verification {
            case .verified(let transaction):
                // Handle successful purchase and fulfill content
                await transaction.finish()
                print("Purchase successful: \(product.id)")
            case .unverified(let transaction, let error):
                print("Purchase unverified: \(error.localizedDescription)")
                await transaction.finish()
            }
        case .userCancelled: // User cancelled the purchase
            print("Purchase cancelled.")
        case .pending: // Transaction is awaiting approval, e.g., Ask to Buy
            print("Purchase pending.")
        @unknown default:
            print("Unknown purchase result.")
        }
    }
}

// Compatibility: StoreKit 2 APIs are available from iOS 15.0+, macOS 12.0+.
// For older versions, you'd use SKPaymentQueue and SKProductsRequest.

Frequently Asked Questions

What is an App ID and why is it important?
An App ID is a unique identifier (Team ID + Bundle ID) that registers your app with Apple's developer program. It's crucial because it links your Xcode project to your Apple Developer account, enables specific Apple services (like Push Notifications), and acts as a central identifier for your app throughout the App Store Connect submission process.
What's the difference between 'Version' and 'Build' numbers in Xcode?
The 'Version' number (e.g., 1.0.0) is the user-facing release number displayed on the App Store. The 'Build' number (e.g., 1, 2, 3) is an internal identifier that must be unique for every build you upload to App Store Connect, even if the user-facing 'Version' remains the same. You increment the build number for each new archive of the same version.
My app was rejected. What should I do?
Don't panic! Rejection is common. Carefully read the message in App Store Connect's Resolution Center. It will detail the specific App Store Review Guidelines your app violated. Address the issues in your Xcode project, upload a new build, update any necessary metadata in App Store Connect, and then resubmit for review. Communicate politely and clearly with the review team if you need clarification.
How long does App Store Review take?
App Store Review times vary, but for new app submissions, it typically takes 1-3 business days. For updates, it can sometimes be faster. However, times can fluctuate based on submission volume and the complexity of your app. TestFlight builds for external testing usually have a quicker review process.
Do I need a Privacy Policy for my app?
Yes, a Privacy Policy URL is mandatory for all apps submitted to the App Store, regardless of whether your app collects user data. Even if your app doesn't directly collect data, Apple requires a policy outlining this. It's a legal requirement and crucial for user trust and transparency.
Can I test my app on real devices before submitting?
Absolutely! You should always test your app extensively on real devices. You can connect your device to Xcode and run your app directly, or use TestFlight to distribute pre-release builds to a wider set of internal and external testers. Testing on various device models and iOS versions is highly recommended.
What Apple device screenshot sizes do I need for App Store Connect?
For iOS apps, you typically need screenshots for iPhone (6.7-inch display, e.g., iPhone 15 Pro Max) and iPad (12.9-inch display, 2nd or 3rd generation or higher). If your app supports other specific display sizes, you might need additional sets. For macOS, you'll need screenshots suitable for Mac displays.
What is the purpose of TestFlight before App Store submission?
TestFlight is Apple's official beta testing service. Its purpose is to allow you to distribute pre-release versions of your app to a group of testers, collect feedback, identify bugs, and improve the app's stability and usability before it goes live on the App Store. It significantly reduces the chances of rejection and enhances the user experience.
#App Store Connect#App Submission#iOS Development#Xcode#Provisioning Profiles#TestFlight