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.
- Listing copy source: ../marketing/store-listings.md (use the Primary variant)
- Rendered screenshots + regeneration: ../marketing/store-assets/README.md
- Binary build + secrets: ./mobile-builds.md
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 Field | Value | Notes |
|---|---|---|
| App Name | Objectuve · Goal Tracker | 24 chars (≤30) |
| Subtitle | Streaks, XP & accountability | 28 chars (≤30) |
| Promotional Text | The Duolingo experience for any goal you chase. Daily streaks, earned rewards, accountability partners — built by a Public Benefit Company. | 139 chars (≤170) |
| Keywords | gamified,rewards,daily goals,consistency,habit builder,achievement,private,no ads,goals for adults | 98 chars (≤100); comma-separated, no spaces after commas |
| Description | Use 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 URL | https://www.objectuve.com/policies/privacy | Must be live before submission |
| Support URL | https://www.objectuve.com/contact | Must be live |
| Marketing URL | https://www.objectuve.com | Optional but recommended |
| Copyright | © 2026 Objectuve Softworks, LLC | |
| Price | Free | |
| Primary Category | Productivity | |
| Secondary Category | Health & Fitness | |
| Bundle ID | com.objectuve.ionic | Must 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
| Question | Answer |
|---|---|
| User Generated Content | Yes |
| Unrestricted Web Access | No |
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 Type | Collected by | Linked to user? | Used for tracking? | Sold? |
|---|---|---|---|---|
| Email Address | Clerk (account auth) | Yes | No | No |
| Usage Data (product analytics) | PostHog | Yes | No | No |
| Diagnostics (crash / error) | Sentry | Yes | No | No |
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):
| Field | Value |
|---|---|
| User name | demo@objectuve.com |
| Password | Objectuve-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.commust exist with passwordObjectuve-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 slot | Use this set | Size |
|---|---|---|
| iPhone 6.5″ Display | docs/marketing/store-assets/ios/iphone-6.5/ | 1284×2778 |
| iPad 12.9″ or 13″ Display | docs/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:
# 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 ipadThe 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):
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")"; doneUpload 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: false — review 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.mjsreports ✓ anddocs/marketing/store-assets/ios/copy-manifest.jsoncarries noknownStaleblock (the hash can match whileknownStaleis 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.comvia/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