Skip to content

The Card Place iOS: prepare the first App Store submission (screenshots, metadata, privacy), not just TestFlight #202

Open

Description

@kellylford

Goal

Get The Card Place for iOS ready to submit to the App Store itself, not just TestFlight. First find out everything that's needed, then prepare as much as possible, and stop before "Submit for Review".

Where it stands

thecardplace/ios/scripts/RELEASE.md has a working TestFlight pipeline: release-testflight.sh, asc.py (the App Store Connect REST client), and wire-testflight.py. The app record exists in App Store Connect. Nothing for the public App Store listing has been done yet.

To do, on the Mac

  1. List the gaps. Check App Store Connect, through asc.py where the API allows, for what a first App Store submission needs and what's still missing. Post the list as a comment here. It probably includes:
    • screenshots for each required device size (6.9" iPhone, and iPad 13" if iPad is supported);
    • description, keywords, subtitle and promotional text;
    • support URL and marketing URL;
    • privacy policy URL and the App Privacy answers ("nutrition label");
    • age rating questionnaire;
    • price and availability, and the territories;
    • category and copyright;
    • App Review contact and notes, including how a reviewer can try the app with VoiceOver;
    • export compliance (encryption);
    • choosing the build for the version.
  2. Screenshots. Script them, for example with a UI test or simctl driving the simulator at the required sizes, so they can be taken again for each release. Commit the script, and put the output where RELEASE.md says.
  3. Metadata. Draft the store text in a file in the repo, so Kelly can review it as a diff. Upload it with asc.py where the API supports it. Say clearly which fields must be filled in by hand in App Store Connect.
  4. Privacy. Draft the App Privacy answers and a privacy policy, which could live on theideaplace.net. Kelly confirms both.
  5. Document it. Add an "App Store release" section to RELEASE.md, next to the TestFlight one.

Not without Kelly

These need Kelly's own go, typed by him:

  • "Submit for Review";
  • changing price or availability;
  • publishing a privacy policy on the website.

Stop at "everything is ready, here's the checklist".

Activity

  1. kellylford commented on Oct 8, 2026

    @kellylford
    CollaboratorAuthor

    The gaps, checked against App Store Connect today

    Read through the API with asc.py on 8 October. App id 6807994140; version 1.0 exists and is in Prepare for Submission; builds 1, 2 and 3 are processed and valid (3 is in external beta testing).

    Already done

    • App record, name "The Card Place", bundle id, SKU, primary locale en-US.
    • Export compliance: ITSAppUsesNonExemptEncryption = false is in the Info.plist, so no encryption questions per build.
    • App icon (single 1024 universal).
    • Not made for kids (isOrEverWasMadeForKids: false).

    Empty, and the API can fill it (scripted, text kept in the repo)

    Field Where it lives Now
    Description, keywords, promotional text, support URL, marketing URL version 1.0 localization all empty
    Subtitle, privacy policy URL app info localization empty
    Primary (and secondary) category app info none. Proposed: Games, Card; secondary Games, Board
    Age rating questionnaire age rating declaration every answer unset. Proposed: all None, so 4+ (no wagering, so not "simulated gambling")
    Copyright version empty. Proposed: "2026 Kelly Ford" (as Weather Fast does)
    Content rights app unset. Proposed: does not use third-party content
    App Review contact and notes app store review detail does not exist yet
    Release type version After approval. Proposed: Manual, so approval doesn't publish by itself
    Build version none attached
    Accessibility Nutrition Labels accessibility declarations none. The API has them, and this app can honestly claim VoiceOver, Voice Control, Larger Text, Dark Interface, Differentiate Without Color, Sufficient Contrast and Reduced Motion. Worth doing for this app above all.
    Screenshots app screenshot sets none. Needed: 6.9" iPhone (1320×2868) and 13" iPad (2064×2752), because the app runs on iPad
    Price and availability price schedule, availability no price schedule and no availability at all. Needs Kelly's go (free, all territories?)

    Needed in the binary

    • Privacy manifest. There's no PrivacyInfo.xcprivacy. AppSettings uses UserDefaults, which is a required-reason API, so the manifest has to declare it (reason CA92.1) and say no data is collected and there's no tracking. That means a build 4.

    By hand in App Store Connect (no API)

    • App Privacy answers (the nutrition label): "Data Not Collected". The app has no network access at all, so that's the whole answer, but it must be clicked through on the website.
    • Submit for Review — Kelly's go only.

    Needs a page on the web

    • A privacy policy URL is required even for an app that collects nothing. Draft: "The Card Place collects no data. It doesn't connect to the network; your name and settings stay on the device." Kelly's go before it's published.
    • Support URL: the existing Card Place page (kellylford.github.io/TheWorkBench/thecardplace/) can serve, with a contact line added.

    Review risk worth knowing

    • Low overall: native, offline, no accounts, no in-app purchases. The app review notes should say that it's built for VoiceOver and how to try it, so a reviewer who doesn't use VoiceOver isn't puzzled by the focus moving on each turn.
    • Hearts and spades difficulty does nothing Already handled: GameKind.hasDifficulty hides the choice for those two games, and Settings says they always play their best. Not a risk.
  2. kellylford commented on Oct 8, 2026

    @kellylford
    CollaboratorAuthor

    Everything that can be scripted is done; see #203. App Store Connect has build 5, the full listing, 12 screenshots, a 4+ age rating, and free in every territory. Left: merge #203 (publishes the privacy page the listing points at), then App Privacy "Data Not Collected" and Submit for Review on the website. After release: scripts/wire-appstore.py --apply --publish-accessibility.

  3. kellylford commented on Oct 8, 2026

    @kellylford
    CollaboratorAuthor

    Tried to submit 1.0 (build 5) for review. App Store Connect refused for two reasons: (1) App Privacy answers aren't published yet (website only); (2) the build was made with Xcode 27.1 (27A9269), which Apple says is "not yet supported" for App Store submission. TestFlight accepts it, but the App Store needs the current released Xcode. Next: install the released Xcode, rebuild as build 6, choose it for 1.0, submit. An empty draft review submission was left behind; the API won't delete or cancel it, and it will be reused.

  4. kellylford commented on Oct 9, 2026

    @kellylford
    CollaboratorAuthor

    Submitted: The Card Place 1.0 (build 6, Xcode 27.1 RC) is Waiting for Review, as of 8 October. Release is manual, so approval won't publish it. Still to do: merge #204 (build 6 number and RELEASE.md notes); after release, scripts/wire-appstore.py --apply --publish-accessibility; and the American spelling for the multiplayer forks' READMEs on their own branch.

  5. kellylford commented on Oct 10, 2026

    @kellylford
    CollaboratorAuthor

    Status correction (2026-10-10): The Card Place 1.0 is live on the App Store. It was released on 2026-10-09 at 18:52 UTC: https://apps.apple.com/us/app/the-card-place/id6807994140

    #204 (the build 6 bookkeeping) is now merged. Still to do: scripts/wire-appstore.py --apply --publish-accessibility, and the README spelling fix on the multiplayer forks. TheWorkBench is moving to the TheIdeaPlace org now. The listing's support, marketing and privacy URLs are being updated to the new address in the same step.

    🤖 Generated with Claude Code

  6. kellylford commented on Oct 10, 2026

    @kellylford
    CollaboratorAuthor

    After the move to TheIdeaPlace (2026-10-10): the App Store listing still names kellylford.github.io/TheWorkBench/thecardplace/ (support and marketing) and .../privacy.html. Those addresses keep working: the forwarding site kellylford/kellylford.github.io serves them as real pages, returning 200.

    • privacy.html is a copy of the policy.
    • The home page forwards to the new address, carrying settings.

    thecardplace/ios/store/app-store.json already has the new theideaplace.github.io URLs. With the next app version, run scripts/wire-appstore.py --apply from the Mac (the keys are in ~/.thecardplace-keys) so the listing uses them. Until then, keep the forwarding site's privacy.html in step with thecardplace/privacy.html if the policy changes.

    🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions