Swift By Rahul

App Store Connect Submission Checklist for iOS

The moment of truth for any iOS developer is the App Store submission. After countless hours of coding, testing, and refining, the final hurdle is getting your app approved and published on the App Store. While it can feel daunting, a well-organized checklist can transform this complex process into a manageable series of steps.

This article provides a comprehensive, step-by-step checklist to guide you through preparing and submitting your iOS app to App Store Connect. We'll cover everything from Xcode configurations to metadata, ensuring you're ready for a smooth review process and a successful launch.

Let's dive in!

High-level iOS App Submission Flow Develop Test Configure Submit Review Build Features Internal & TestFlight App Store Connect Upload Build Apple's Approval

Pre-Submission Checklist: Inside Xcode

Before you even think about App Store Connect, your Xcode project needs to be in tip-top shape.

1. App Icons & Launch Screen

  • App Icons: Ensure all required icon sizes are present in your Asset Catalog (AppIcon). Missing sizes or using a placeholder icon will lead to rejection. Pay attention to both iOS and potentially iPadOS/watchOS/macOS icons if your app supports multiple platforms.
  • Launch Screen: Your app must include a launch screen (either a Storyboard or LaunchScreen.storyboard file). Avoid using a static image for the launch screen as it doesn't scale well across devices. Ensure it reflects your app's branding and doesn't display any interactive elements or text that changes.

2. Bundle Identifier & Versioning

  • Bundle Identifier: This must be unique across the App Store and match the one registered in App Store Connect. It's usually in the format com.yourcompany.yourappname. You configure this in your project's Info.plist or target's General settings.
  • Version Number (CFBundleShortVersionString): This is your marketing version number (e.g., "1.0", "1.0.1"). Users see this.
  • Build Number (CFBundleVersion): This is an internal version number (e.g., "1", "2", "3"). It must be incremented with every new build you upload to App Store Connect, even if the marketing version hasn't changed.

3. Provisioning Profiles & Certificates

  • Distribution Profile: For App Store submissions, you need an "App Store" distribution provisioning profile.
  • Automatic vs. Manual Signing: For most developers, Xcode's "Automatically manage signing" option works best. Ensure you've selected the correct development team. If you're managing profiles manually, double-check that your "Release" build configuration uses the correct App Store Distribution profile and certificate.

4. Code Signing Entitlements

  • Capabilities: If your app uses specific Apple services (e.g., Push Notifications, iCloud, App Groups, Sign In with Apple, Wallet, HealthKit, SiriKit), ensure these capabilities are correctly enabled in Xcode (under your target's "Signing & Capabilities" tab) and match the services configured for your App ID in the Apple Developer Portal. Mismatches will cause build submission failures or runtime issues.

5. Privacy Manifests (iOS 17+)

  • Required Declaration: For apps targeting iOS 17 and later, you must include a PrivacyInfo.xcprivacy file in your project. This file declares the types of data your app collects and reasons for API usage that impacts privacy (e.g., UserDefaults, FileManager, SystemBootTime). Failing to include this or providing inaccurate information can lead to rejection.

6. Target Device Support & Orientation

  • Device Compatibility: In your project's General settings (under "Deployment Info"), specify whether your app supports iPhone, iPad, or both ("Universal").
  • Supported Orientations: Define the allowed device orientations (Portrait, Landscape Left/Right). Ensure your UI adapts correctly to all supported orientations.

7. App Thinning & Bitcode

  • App Thinning: Xcode automatically optimizes your app's size for different devices. Ensure your Asset Catalogs are set up correctly for this.
  • Bitcode: While historically important, Bitcode is no longer required for iOS, tvOS, or watchOS apps. You can generally leave "Enable Bitcode" set to "No" in your build settings for modern iOS projects.

Pre-Submission Checklist: Outside Xcode (Content & Legal)

With your Xcode project polished, it's time to prepare the assets and information for your App Store product page. This content is crucial for attracting users and passing review.

1. App Store Product Page Assets

  • Screenshots:
    • Minimum of 1, maximum of 10 per localization.
    • Capture screenshots for all supported device families (iPhone, iPad, potentially Apple Watch, Mac).
    • For iPhone, you need screenshots for the largest display (e.g., 6.7-inch iPhone) and 5.5-inch iPhone.
    • For iPad, you need screenshots for the 12.9-inch iPad Pro (2nd Gen) and 12.9-inch iPad Pro (3rd Gen).
    • Make them compelling, showcasing your app's best features.
    • App Previews (Optional but Recommended): Short videos (15-30 seconds) demonstrating your app's features. These can significantly boost downloads.
    • App Icon (1024x1024): A high-resolution version of your app icon. This is distinct from the icons in your Xcode Asset Catalog.

2. App Store Metadata

This information is what users see on your App Store listing.

  • App Name: Up to 30 characters. Make it unique, memorable, and descriptive.
  • Subtitle: Up to 30 characters. A brief phrase that expands on your app’s value.
  • Promotional Text: Up to 170 characters. Appears above your description and can be updated anytime without a new app version. Use it for announcements or sales.
  • Keywords: Up to 100 characters, comma-separated. Use relevant terms users might search for. Avoid competitor names or irrelevant words.
  • Description: Up to 4000 characters. A compelling, clear, and concise explanation of what your app does and why users need it. Highlight key features and benefits.
  • Support URL: A link to a webpage where users can get support for your app.
  • Marketing URL (Optional): A link to your app's marketing website.
  • Privacy Policy URL: A mandatory link to your app's privacy policy. This must be a live, accessible URL.

3. Pricing & Availability

  • Price Tier: Choose your app's price from a predefined list of tiers.
  • Geographical Availability: Select the countries/regions where your app will be available.

4. App Information

  • Category: Choose a primary category and an optional secondary category that best describes your app.
  • Content Rating: Complete the content rating questionnaire accurately. This determines the age rating for your app. Misrepresenting content can lead to rejection.
  • Copyright: Enter the name of the person or entity that owns the exclusive rights to your app, preceded by the year the rights were acquired (e.g., "2024 YourCompany, Inc.").

5. App Privacy Details

This section in App Store Connect requires you to declare your app's data collection practices. Be transparent and accurate.

  • Data Collection: Declare what data your app and its third-party partners collect (e.g., location, contact info, identifiers, usage data).
  • Data Usage: Explain how this data is used (e.g., app functionality, analytics, personalization).

6. Export Compliance (if applicable)

If your app uses encryption (other than standard HTTPS connections), you might need to answer export compliance questions. Be prepared to provide details if required.

┌────────────────────────────────┐
│       App Store Connect        │
└───────────────┬────────────────┘
                │
                ▼
┌───────────────────────────────┐
│           My Apps             │
└───────────────┬───────────────┘
                │
                ▼
┌───────────────────────────────┐
│        App Information        │
│        Pricing & Availability │
│        App Privacy            │
│        TestFlight             │
└───────────────┬───────────────┘
                │
                ▼
┌───────────────────────────────┐
│      App Version Details      │
│      (e.g., 1.0)              │
│      - Build                  │
│      - Screenshots            │
│      - Metadata               │
│      - Review Information     │
└───────────────────────────────┘
Common App Store Review Rejection Reasons App Submitted for Review Passes Initial Checks? Metadata Issues No (A) Broken Functionality No (B) Privacy Non-Compliance No (C) Poor User Experience No (D) Approved! Yes

Submitting the Build

Once all your preparations are complete, it's time to get your app into App Store Connect.

1. Archiving the App

In Xcode: 1. Select your app's scheme. 2. Ensure your target device is set to "Any iOS Device (arm64)" or a specific physical device, not a simulator. 3. Go to Product > Archive. Xcode will build your app and open the Organizer window.

2. Uploading to App Store Connect

From the Organizer window: 1. Select your archived build. 2. Click "Distribute App". 3. Choose "App Store Connect" as the method. 4. Select "App Store Distribution" for the destination. 5. Follow the prompts to sign and upload your app. Xcode will perform various validations before uploading. Alternatively, you can use the standalone Transporter app for uploading.

After uploading, your build will appear in App Store Connect under the "TestFlight" tab, usually within 15-30 minutes, sometimes longer. It will show as "Processing".

3. Testing with TestFlight

Crucial Step: Before submitting for review, always test your uploaded build using TestFlight.

  • Internal Testing: Add developers and testers from your App Store Connect team to internal groups. They can immediately download and test the build.
  • External Testing: For broader testing, you can invite external testers. These builds require a beta app review by Apple before they become available.
  • Why TestFlight? It ensures your distribution build functions as expected, helps catch last-minute bugs specific to the App Store environment, and provides valuable feedback.

You can check if your app is running via TestFlight using the appStoreReceiptURL property:

import Foundation

func isRunningInTestFlight() -> Bool {
    guard let url = Bundle.main.appStoreReceiptURL else {
        return false
    }

    // Check if the URL contains "sandboxReceipt"
    // This indicates it's a test receipt, common in TestFlight builds
    let isSandboxReceipt = url.lastPathComponent == "sandboxReceipt"

    // Further check for the presence of the embedded.mobileprovision file
    // TestFlight builds often contain this, while App Store builds typically do not
    let hasEmbeddedProvision = Bundle.main.path(forResource: "embedded", ofType: "mobileprovision") != nil

    return isSandboxReceipt || hasEmbeddedProvision
}

// Example usage:
if isRunningInTestFlight() {
    print("App is running in TestFlight or Sandbox environment.")
    // Adjust behavior for testing, e.g., disable analytics or show debug info
} else {
    print("App is running in production or development environment.")
}

Note: This check is a heuristic and might not cover all edge cases, but it's a common and generally reliable way to detect the TestFlight environment.

Final Review & Submission

Finally, navigate to your app's version in App Store Connect.

  1. Select the Build: Under the "Build" section, click the "+" button and select the build you just uploaded.
  2. Review All Information: Go through every section (App Information, Pricing, App Privacy, Version Information, etc.) one last time. Double-check your screenshots, description, keywords, and privacy declarations.
  3. Contact Information: Provide accurate contact details for the App Review team.
  4. Notes for App Review (Crucial!):
    • Login Credentials: If your app requires a login, provide a working demo account (username and password) for the reviewers.
    • Specific Instructions: Explain any non-obvious features, complex workflows, or areas that might require special attention during testing.
    • Hardware Requirements: If your app needs specific hardware or accessories, mention it.
    • Language: If your app is not fully localized into English, specify the primary language. 5. Release Options: Choose how your app will be released:
    • Manually release this version: You manually click "Release" after approval.
    • Automatically release this version: The app goes live immediately upon approval.
    • Release this version after your first Mac app version is approved: For universal purchases. 6. Submit for Review: Click the "Submit for Review" button.

After Submission

  • Patience: App review times vary, but Apple usually provides an estimated timeframe. You can check the status in App Store Connect.
  • Handling Rejections: If your app is rejected, don't panic. Read the rejection message carefully. Apple usually provides specific reasons and guidelines. Fix the issues, update your app, and resubmit. Use the Resolution Center in App Store Connect to communicate with the review team if you need clarification.

Summary

Submitting an iOS app to the App Store is a meticulous process, but with a thorough checklist, it becomes much more manageable. By meticulously preparing your Xcode project, crafting compelling App Store metadata, understanding privacy requirements, and thoroughly testing with TestFlight, you significantly increase your chances of a smooth approval and a successful launch. Remember, attention to detail and adherence to Apple's guidelines are key.

Happy Swifting!