Vibeloy
注册

免费发布指南

iOS Publishing Guide (App Store)

本指南用 10 个步骤,从头到尾讲解将你的 Flutter 或 React Native iOS 应用发布到 App Store 的完整流程。无需注册即可阅读每一行内容,准备好保存进度时再注册。

切换到 Android 指南

本指南对所有人开放

你可以无需注册阅读全部步骤。免费注册即可保存进度,并使用完整的隐私政策和 app-ads.txt 工具;Keystore 保险库和截图工作室需升级到高级版才能解锁。

免费注册

第 1 步

Create your Apple Developer account

You cannot upload anything to the App Store without an Apple Developer Program membership. Set up the right account type first.

Apple Developer Program membership costs 99 USD per year (shown in local currency depending on region). This fee covers App Store Connect access, TestFlight, and certificate/profile creation — there is no per-app charge.

At sign-up you choose between Individual or Organization. With an Individual account, your own name appears as the developer. With an Organization account, your company name appears, but Apple requires a D-U-N-S number to verify the entity is real. It is a free 9-digit identifier from Dun & Bradstreet — apply at dnb.com, typically ready in 1-5 business days. Plan this early if you are enrolling as a company, do not leave it to the last minute.

The account is built on an Apple ID, and two-factor authentication (2FA) is mandatory. Keep a registered phone number and a trusted device (iPhone/iPad/Mac) handy — confirmation codes will arrive there.

Nonprofits, accredited educational institutions, and government entities may request a fee waiver under certain conditions.

第 2 步

Set up your app identity

Bundle ID, icon, and minimum iOS version are your app's fingerprint in the Apple ecosystem — hard to change later.

The Bundle ID (e.g. com.yourcompany.yourapp) is the reverse-DNS style identifier that uniquely marks your app across Apple systems. In a Flutter project it is set via Xcode in ios/Runner.xcodeproj. Once registered in App Store Connect it cannot be changed, so choose carefully.

In Xcode's Signing & Capabilities tab you must select the developer Team matching your Apple Developer account. The "Display Name" shown on the App Store is also set here or in Info.plist — keep it under 30 characters and consistent with your brand.

The app icon must be 1024x1024 pixels, PNG format, and must NOT contain an alpha channel (transparency). Uploading an icon with alpha will be rejected by App Store Connect. If you generate it with a tool like flutter_launcher_icons, verify this setting.

The minimum iOS version (Deployment Target) is set in Xcode or in ios/Podfile. Base it on the highest minimum required by the Flutter plugins you use — setting it too high excludes older devices, too low can break some plugins from compiling.

第 3 步

Certificates and code signing

iOS signing looks intimidating, but trusting Xcode's automatic mode does most of the work for you.

We recommend keeping "Automatically manage signing" enabled in Xcode's Signing & Capabilities. It creates and renews the signing certificate (the digital identity key Apple requires) and the provisioning profile (which defines what devices/capabilities the build can run with) on your behalf.

Only consider manual signing for enterprise teams sharing a common distribution certificate across developers, or for CI/CD pipelines — for day-to-day development it adds unnecessary complexity.

A Mac (physical or cloud-based) is required to archive an iOS build and upload to the App Store — Xcode does not run on Windows or Linux. If you don't own a Mac, use cloud Mac/CI services such as Codemagic, GitHub Actions macOS runners, or MacStadium.

第 4 步

Create your app in App Store Connect

Before uploading any build you must register the app in App Store Connect — this is the hub for all your metadata.

At appstoreconnect.apple.com, go to "My Apps" > "+" to create a new record. You'll select iOS as the platform, then provide the Bundle ID (must exactly match what you defined in Xcode), a SKU (your own internal reference code, not user-facing), and a primary language.

This screen also sets the app name (the store-facing name, which must be globally unique), category, and pricing/territory settings. Teams that want to reserve their app name early can create this record before a build is even ready.

第 5 步

Build and upload

There are two main ways to get a Flutter .ipa into App Store Connect: Xcode Organizer or Transporter.

This command produces a release-ready .ipa file under build/ios/ipa/.

bash
flutter build ipa --release

You can send the resulting file to App Store Connect either via Xcode Organizer (Window > Organizer > Archives, the "Distribute App" flow) or the standalone Transporter app (downloaded from the Mac App Store, drag-and-drop upload). Both achieve the same result; Transporter is a bit more convenient for large files or batch uploads.

There are two numbering systems: the Version (e.g. 1.2.0) is user-facing and is the part before the "+" in pubspec.yaml's version field; the Build number (the part after "+") must be unique and increasing on every upload — you cannot reuse a build number within the same version.

After upload, build "processing" can take anywhere from a few minutes to a few hours; you cannot attach it to TestFlight or a release until this finishes — wait for the email notification.

追踪你的进度,生成隐私政策和 app-ads.txt

免费注册 Vibeloy,在一个地方管理你的整个 Android 和 iOS 发布流程。托管服务、截图工作室和 Keystore 保险库在高级版中等着你。

免费开始

第 6 步

Test with TestFlight

Internal and external testing on TestFlight follow very different approval processes — knowing the difference saves time.

Internal Testing targets members of your App Store Connect team (up to 100 people), does NOT require Apple review, and is available as soon as the build finishes processing. Ideal for fast iteration.

External Testing targets testers invited by email or joining via a public link (up to 10,000 per group), and every new build must pass Apple's lighter "beta review". This review usually completes within a day, but plan your schedule around it.

Send your first build to the internal group to catch crashes and basic bugs, then move to external testing only once it is stable.

第 7 步

Prepare screenshots

The App Store now only requires screenshots for the largest screen in each device family — getting the size exact avoids rejection.

As of 2026, Apple only requires screenshots for the largest screen in each device family and auto-scales them down for smaller/older devices. The mandatory iPhone class is "6.9-inch" at 1260x2736 pixels (iPhone 17 Pro Max and similar); if you support iPad, the mandatory "13-inch" class is 2064x2752 pixels (iPad Pro M4 and similar). Being off by even 1 pixel causes rejection.

  • Format: PNG or JPEG, RGB color space, must NOT have an alpha channel.
  • At least 1 and up to 10 screenshots can be uploaded per device class.
  • Pixel dimensions must exactly match the required size — App Store Connect does not auto-crop or resize.
Raw screenshots taken from a real device or simulator usually come out at the correct pixel size; if you produce them manually in a design tool (Figma, etc.), double-check the dimensions.
In the Vibeloy Screenshot Studio you can add captions, backgrounds, and decorative shapes to these raw captures and export at exactly the required pixel size, splitting a single design into 2-3 panels to produce the side-by-side images shown in the App Store gallery in one pass.

此步骤提供 Vibeloy 工具

免费注册即可使用 截图 工具并保存你的进度。

注册并使用

第 8 步

Privacy details and permissions

App Privacy labels and, for AdMob apps, tracking permission are among the most commonly skipped steps in App Store Connect.

Completing the "App Privacy" section in App Store Connect (sometimes called the "nutrition label") is mandatory: you declare what data your app collects, whether it is used to identify you, and whether it is shared with third parties for advertising or analytics. An inaccurate or incomplete declaration can lead to later rejection or takedown.

A privacy policy URL is required for every app and must point to a real, accessible page — empty or broken links result in immediate rejection.

If you use AdMob or a similar ad SDK, requesting App Tracking Transparency (ATT) permission is MANDATORY. You must add the NSUserTrackingUsageDescription key (the explanation text shown to users) and the SKAdNetworkItems list (identifiers ad networks need for attribution) to Info.plist — missing them causes rejection or unmeasurable ad revenue.

此步骤提供 Vibeloy 工具

免费注册即可使用 隐私政策 工具并保存你的进度。

注册并使用

第 9 步

Submit for review

Apple's review is more human-driven and stricter than Google's; knowing common rejection reasons improves your odds of passing on the first try.

When submitting, use the "Review Notes" field to give the reviewer everything needed to test the app: if login is required, provide a working demo account (username/password); explain any special setup step. Missing a demo account causes reviewers to get stuck at login and reject.

  • Guideline 2.1 (Performance/Completeness): Crashes, blank screens, broken links, or incomplete features are the most common rejection reason. Test end-to-end on a clean device before submitting.
  • Guideline 4.3 (Spam/Templates): Resubmitting an existing template app with minor tweaks, or publishing many near-identical apps, gets rejected. Make your app clearly distinct.
  • Guideline 5.1.1 (Data Collection Permissions): Requesting location, camera, notifications, etc. without explaining purpose, or leaving Info.plist usage description strings empty/vague, gets rejected. Clearly state WHY each permission is needed, in plain user-facing language.
Review typically takes around 24-48 hours but can be longer during busy periods; leave extra buffer time for your first submission.

第 10 步

Release and manage updates

Once approved, when and how the release goes live is up to you — and you'll need a rhythm for the updates that follow.

App Store Connect offers three release options: automatic release as soon as approved, manual release where you press "Release" yourself after approval, or a scheduled release at a specific date/time. The manual option is ideal if you want your marketing launch decoupled from the review timeline.

Phased Release rolls the new version out to users gradually over 7 days (e.g. starting at 1% and increasing) instead of all at once. If you spot a critical bug you can pause the rollout — this reduces risk for apps with a large user base.

The post-release cycle: monitor user feedback and crash reports, bump the version/build number on every update, and keep the App Privacy declaration current as your data collection changes. Apple reviews updates through the same process as first submissions, so re-check the same checklist (permissions, demo account, screenshots) every time to reduce rejection risk on major feature changes.

追踪你的进度,生成隐私政策和 app-ads.txt

免费注册 Vibeloy,在一个地方管理你的整个 Android 和 iOS 发布流程。托管服务、截图工作室和 Keystore 保险库在高级版中等着你。

免费开始