Skip to content

iOS App Store Submission Runbook

This is the manual App Store Connect listing procedure for Objectuve (com.objectuve.ionic). The Fastlane ios release lane uploads the binary only (skip_metadata: true, skip_screenshots: true, submit_for_review: false) — every listing field, screenshot, age rating, and the App Privacy nutrition label is entered by hand in App Store Connect, and the review is submitted from ASC after the metadata and screenshots are in place.

Public listing (live on approval): https://apps.apple.com/us/app/objectuve-every-day-adds-up/id6777474045 — App Store ID 6777474045. The app is currently under review; the URL is final and becomes reachable once Apple approves.

All listing copy uses Coach — there is no "AI" label anywhere in the user-facing listing. The only place vendor/data-type names appear is the App Privacy table below (Clerk / PostHog / Sentry / Diagnostics), which are factual data-collection disclosures.


1. Listing fields (App Store Connect → value)

Use the Primary copy variant. The A/B variant is reserved for post-launch Product Page Optimization — do not enter it at first submission.

ASC FieldValueNotes
App NameObjectuve · Goal Tracker24 chars (≤30)
SubtitleStreaks, XP & accountability28 chars (≤30)
Promotional TextThe Duolingo experience for any goal you chase. Daily streaks, earned rewards, accountability partners — built by a Public Benefit Company.139 chars (≤170)
Keywordsgamified,rewards,daily goals,consistency,habit builder,achievement,private,no ads,goals for adults98 chars (≤100); comma-separated, no spaces after commas
DescriptionUse the iOS Description — Primary block in ../marketing/store-listings.md~1,382 chars (≤4,000). Do not retype — copy it verbatim from the source.
Privacy Policy URLhttps://www.objectuve.com/policies/privacyMust be live before submission
Support URLhttps://www.objectuve.com/contactMust be live
Marketing URLhttps://www.objectuve.comOptional but recommended
Copyright© 2026 Objectuve Softworks, LLC
PriceFree
Primary CategoryProductivity
Secondary CategoryHealth & Fitness
Bundle IDcom.objectuve.ionicMust match the uploaded build

If the EULA field is used, the Terms of Use URL is https://www.objectuve.com/policies/terms (otherwise Apple's standard EULA applies).


2. Age rating questionnaire

QuestionAnswer
User Generated ContentYes
Unrestricted Web AccessNo

Expected result: ~12+ (not 4+). User Generated Content is Yes because Communities and accountability partners let users post check-ins and interact with one another — that is user-to-user content, so it must be declared.


3. App Privacy ("nutrition label")

Data TypeCollected byLinked to user?Used for tracking?Sold?
Email AddressClerk (account auth)YesNoNo
Usage Data (product analytics)PostHogYesNoNo
Diagnostics (crash / error)SentryYesNoNo

Nothing is used for cross-app tracking, and nothing is sold — this is a Public Benefit Company commitment, not just a setting. Declare each type as Linked to the user but not used for Tracking (no App Tracking Transparency prompt is needed).


4. App Review information

Sign-In Information (keep "Sign-in required" checked) — the demo account signs in via a real Clerk password (strategy: 'password' in SignIn.vue):

FieldValue
User namedemo@objectuve.com
PasswordObjectuve-Demo-2026!

Contact Information — the developer Apple contacts during review (e.g. Joshua Lockhart, josh@objectuve.com), not the demo account.

Notes — paste:

Objectuve is a gamified goal- and habit-tracking app (streaks, XP, badges, ranks) with
optional accountability communities and an in-app "Coach" that gives personalized check-ins.

HOW TO SIGN IN
The demo account is pre-loaded with goals, streaks, badges, a Coach, and communities.
  Email:    demo@objectuve.com
  Password: Objectuve-Demo-2026!
The sign-in screen shows an email + password form. Enter the credentials above and tap
"Sign in with password".

NOTES FOR REVIEW
• "Coach" is our own in-app coaching feature, not a third-party chatbot.
• Communities let users share check-ins for accountability. User-generated content is
  moderated via in-app reporting and a moderation queue. The app has no open web browsing.
• Free forever for individuals. The optional "Supporter" purchase unlocks cosmetic themes
  only — no features are paywalled.
• No special hardware or account creation needed for review — use the demo account above.
• Export compliance: standard HTTPS only (ITSAppUsesNonExemptEncryption = NO).

⚠️ Prerequisite (most common rejection cause): in the production Clerk instance, demo@objectuve.com must exist with password Objectuve-Demo-2026! and MFA/2FA disabled — the demo login fails closed if 2FA is on (SignIn.vue ~L470). Sign in with these credentials on the live app before submitting.

Export compliance is already configured in the build (ITSAppUsesNonExemptEncryption set, commit 0392c913a), so no encryption questionnaire appears at upload.

The boilerplate above (app description, HOW TO SIGN IN, NOTES FOR REVIEW, export compliance) is unchanged release to release. For the per-release "What's New in This Version" copy, the Google Play "What's new" text, and the resubmission preamble (added to these Notes only when a prior submission was rejected), see store-release-notes.md.

App Store Version Release: choose Manually release this version so GA timing stays coordinated with the launch runbook (ProductHunt/HN), rather than auto-releasing on approval.


5. Screenshots

Objectuve ships universal (iPhone + iPad), so one iPhone set and one iPad set are required. App Store Connect's iPhone slot varies by app-record age — this app's record (2026-06) shows the iPhone 6.5″ slot (which does not accept the 6.9″ 1290×2796 size), while the iPad slot accepts 12.9″ or 13″ (so the native 2064×2752 works). Upload the set matching the slot ASC presents (ASC hard-validates exact pixel dimensions):

ASC display slotUse this setSize
iPhone 6.5″ Displaydocs/marketing/store-assets/ios/iphone-6.5/1284×2778
iPad 12.9″ or 13″ Displaydocs/marketing/store-assets/ios/ipad-13/2064×2752

Newer app records show an iPhone 6.9″ slot instead — for that, use docs/marketing/store-assets/ios/iphone-6.9/ (1290×2796).

The iphone-6.9/ and ipad-13/ sets are captured natively by scripts/capture-store-screenshots.mjs:

bash
# Capture both native sets (run against your LOCAL stack on localhost:5173)
STORAGE_STATE=/abs/path/state.json node scripts/capture-store-screenshots.mjs

# Or one device at a time
STORAGE_STATE=/abs/path/state.json SCREENSHOT_URL=http://localhost:5173 \
  node scripts/capture-store-screenshots.mjs --device iphone
STORAGE_STATE=/abs/path/state.json \
  node scripts/capture-store-screenshots.mjs --device ipad

The iphone-6.5/ set is an exact downscale of the native iphone-6.9/ captures (identical content; both are 19.5∶9, so the resize is sub-0.2 % with no cropping):

bash
SRC=docs/marketing/store-assets/ios
for f in "$SRC"/iphone-6.9/*.png; do sips -z 2778 1284 "$f" --out "$SRC/iphone-6.5/$(basename "$f")"; done

Upload each set to the matching ASC display field. The STORAGE_STATE file contains the fallback secret — never commit it. Regeneration details (slide copy, Coach prerequisite) are in ../marketing/store-assets/README.md.


6. Binary upload

The IPA is built and uploaded by the Fastlane ios release lane. It runs upload_to_app_store with skip_metadata: true and skip_screenshots: true, so metadata and screenshots stay manual (Sections 1–5). It also sets submit_for_review: falsereview is submitted from App Store Connect after the metadata and both screenshot sets are entered, not from the lane.

Full build, signing, and secrets reference: ./mobile-builds.md.


7. Pre-submission checklist

  • [ ] Binary uploaded and processed (visible in TestFlight)
  • [ ] All listing fields entered (Primary variant — name, subtitle, promo, keywords, description)
  • [ ] iPhone screenshots uploaded — match the slot ASC shows (6.5″ = 1284×2778 / 6.9″ = 1290×2796)
  • [ ] iPad screenshots uploaded — match the slot ASC shows (12.9″ = 2048×2732 / 13″ = 2064×2752)
  • [ ] Screenshot copy verified — node scripts/check-store-asset-copy-drift.mjs reports ✓ anddocs/marketing/store-assets/ios/copy-manifest.json carries no knownStale block (the hash can match while knownStale is still set — check both; a present block means the committed PNGs are known-rejected and must be recaptured before submission)
  • [ ] Age rating completed (UGC = Yes, web = No → ~12+)
  • [ ] App Privacy completed (Clerk / PostHog / Sentry — linked, not tracked, not sold)
  • [ ] App Review notes added with demo credentials (demo@objectuve.com via /sign-in?demo)
  • [ ] Privacy / Support / Marketing URLs live and reachable
  • [ ] Categories set (Productivity / Health & Fitness)
  • [ ] Copyright set (© 2026 Objectuve Softworks, LLC)
  • [ ] No "AI" string anywhere in the listing — Coach is used throughout
  • [ ] storageState file NOT committed (it carries the fallback secret)
  • [ ] Submitted for review from App Store Connect

Last updated: 2026-08-31

Loading…