Docs/Guides/Submission and releaseView Markdown
On this page
Submission and release
Production submission, beta review, manual release, and phased rollout are separate actions. State apply prepares supported configuration; production submission uses an explicit plan, assembly, and final-submit workflow.
These commands describe the current source tree. Check your installed binary's help before using them. Local tests do not establish controlled live qualification: IAP-version attachment and phased-release writes still need that qualification.
1. Inspect the version and readiness
Use an existing version and replace the example coordinates throughout:
flightline versions get com.example.app --version 1.0 --platform IOS
flightline preflight com.example.app --version 1.0 --platform IOS
flightline review-submissions list com.example.appResolve blocking diagnostics before continuing. Preflight checks supported rules and observed state; it cannot promise Apple acceptance or review approval. If you manage YAML, first apply and verify that intent.
2. Plan exact submission membership
For an app-version-only submission:
flightline submission-assembly plan com.example.app --version 1.0 --platform IOSPlan resolves the selected version and validates proposals without writing. It is not the full live preflight run. Optional repeatable flags select additional members:
| Flag | Required identity |
|---|---|
--iap-version |
An IAP version resource ID, not a product ID or parent IAP ID |
--event |
An in-app event resource ID |
--experiment |
An App Store version experiment resource ID |
The command does not automatically attach every eligible purchase, event, or experiment. Obtain the exact resource IDs before selecting them. For IAP versions, use Apple's version relationship for the parent IAP; Flightline's parent-product ID is not a substitute. See IAP commerce, events, and experiments for their preparation boundaries.
3. Assemble a draft
Repeat the same version and optional item flags, adding confirmation:
flightline submission-assembly assemble com.example.app --version 1.0 --platform IOS --confirmAssembly creates or reuses an eligible READY_FOR_REVIEW draft, attaches the app version before optional items, verifies exact membership, and runs fresh preflight. Ambiguous drafts, foreign resources, extra members, and unsupported states stop the workflow instead of silently changing the selection.
Record the returned submissionId. Assembly is not final submission. It is also not transactional: a preflight or later attachment failure can leave an assembled or partially assembled draft. Inspect it before retrying:
flightline review-submissions items com.example.app --submission SUBMISSION_IDDo not infer that a failed command rolled back earlier writes. Resolve the reported mismatch or readiness issue, then repeat the intended assembly. Do not select a different draft merely to bypass a failure.
4. Submit explicitly
After reviewing the draft, repeat the exact planned membership and identify the assembled submission:
flightline submission-assembly submit com.example.app --version 1.0 --platform IOS --submission SUBMISSION_ID --confirmIf assembly used optional item flags, include those same flags here. Final submit revalidates ownership, eligibility, exact membership, and fresh preflight, then checks draft membership again before submitting. Unknown or drifting observations block the write.
Successful submission confirms review progression to WAITING_FOR_REVIEW or IN_REVIEW; it does not mean approval. After a timeout or uncertain outcome, inspect the submission and version before retrying. For rejection details available through the API:
flightline rejection com.example.app --version 1.0Resolution-center correspondence remains a portal workflow.
5. Release after approval
For a version configured for MANUAL release and freshly observed in PENDING_DEVELOPER_RELEASE:
flightline version-release com.example.app --version 1.0 --platform IOS --confirm
flightline versions get com.example.app --version 1.0 --platform IOSAn accepted release request is not proof that storefront distribution has completed. Inspect the version after an uncertain result before retrying. This action is separate from apply and App Review submission.
Phased rollout
Inspect phased state first:
flightline phased-release get com.example.app --version 1.0 --platform IOSphased-release enable --confirm creates an inactive phased release for an eligible prerelease update. Apple determines eligibility, including release history. After distribution begins, pause --confirm requires an active phased release and resume --confirm requires a paused one; both require the version to be freshly observed in READY_FOR_DISTRIBUTION.
flightline phased-release pause com.example.app --version 1.0 --platform IOS --confirm
flightline phased-release get com.example.app --version 1.0 --platform IOSUse only the transition appropriate to the observed state. Flightline does not expose phased-release deletion or an immediate complete-rollout action. Selected phased intent is also modeled in state YAML, but that does not relax version editability for other changes. Live phased-write qualification remains pending.
For beta distribution instead, use the separate TestFlight workflow.