Files
scarf/releases/v2.5.0/TESTFLIGHT_CHECKLIST.md
Alan Wizemann d45de925ae docs(v2.5): privacy policy + TestFlight submission checklist
Authored locally (not pushed). Phase D of the v2.5 release plan needs:
- A privacy policy at a stable URL before App Store Connect lets you
  submit for Beta App Review.
- A pre-flight checklist so the Xcode + App Store Connect dance
  doesn't lose state.

`scarf/docs/PRIVACY_POLICY.md` — minimal, accurate. The apps don't
collect data on developer-controlled servers (no analytics, no
telemetry, no ads, no IDFA). Covers SSH credentials, Hermes state
cache, the project + attribution sidecars, the network connections the
apps make. Ready to host on gh-pages at /privacy/ when the user opts to
push it.

`releases/v2.5.0/TESTFLIGHT_CHECKLIST.md` — step-by-step from Apple
Developer Program prerequisites through Beta Review submission, with a
beta-description copy block, "What to test" copy, and a rollback note.
Explicitly calls out NOT bumping versions manually (release.sh does it
in Phase G) and NOT enabling Push Notifications until APNs cert +
sender land together.

Both files stay local until the user pushes them — the checklist is
the user's reference, the privacy policy gets copied into the
gh-pages worktree when ready to submit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 07:57:56 +02:00

5.7 KiB

v2.5 TestFlight submission checklist

Pre-flight steps to take ScarfGo to public TestFlight. Order matters — Apple review wants the privacy URL to resolve at submission time, and the build needs to upload before review can start.

0. Apple Developer Program prerequisites

  • Apple Developer Program enrollment active (team 3Q6X2L86C4).
  • iOS Distribution certificate in login Keychain (Apple Distribution: Alan Wizemann).
  • App Store provisioning profile for the iOS bundle ID (auto-managed in Xcode is fine).
  • App Store Connect access for the team.

1. Privacy policy live

  • Copy scarf/docs/PRIVACY_POLICY.md content into .gh-pages-worktree/privacy/index.html (wrap in minimal HTML, or leave as Markdown if GitHub Pages renders Markdown — GitHub Pages with Jekyll does).
  • cd .gh-pages-worktree && git add privacy/index.html && git commit -m "docs(privacy): publish v2.5 policy" && git push
  • Verify https://awizemann.github.io/scarf/privacy/ resolves (give it ~1 min after push).

The privacy URL is required by App Store Connect before submitting for Beta App Review. Without it the submission button is disabled.

2. Xcode target configuration

Open scarf/scarf.xcodeproj, select the scarf mobile target.

  • Signing & Capabilities → "Automatically manage signing" ON, team set to 3Q6X2L86C4.
  • Capabilities present: Keychain Sharing only. Push Notifications stays OFFNotificationRouter.apnsEnabled = false and the entitlement is absent. Match the two: enable both later together.
  • Info.plist sanity:
    • Bundle Identifier matches App Store Connect record.
    • LSApplicationCategoryType = public.app-category.developer-tools.
    • NSAppTransportSecurity allows the SSH ports the app dials? — N/A for SSH (raw TCP); ATS only governs HTTPS. Skip.

3. Version bump

The version bump runs automatically via ./scripts/release.sh 2.5.0 in Phase G. Do NOT bump MARKETING_VERSION / CURRENT_PROJECT_VERSION manually before that — the script writes the version commit and reads CURRENT_PROJECT_VERSION to compute the next build number.

4. Archive + upload

  • Xcode → Product → Scheme → scarf mobile.
  • Destination → "Any iOS Device (arm64)".
  • Product → Archive. Wait for build (~3-5 min).
  • Organizer opens automatically. Select the archive → Distribute App.
  • Distribution method: App Store Connect.
  • Destination: Upload.
  • Distribution options: leave defaults (manage versioning automatically; include bitcode if offered = N/A on Xcode 14+; strip Swift symbols ON).
  • Re-sign: automatic.
  • Upload. Apple processes the binary (~5-15 min); App Store Connect emails when ready.

5. App Store Connect metadata (TestFlight tab)

Once the binary is processed:

  • App information (one-time, persists across builds):
  • Test information (per-build is fine, persists if not changed):
    • Beta App Description (paragraph): see "Beta description copy" below.
    • Email: alan@wizemann.com
    • Beta App Review information: account credentials only if the app required them — N/A (BYO Hermes host).
    • Marketing URL (optional): https://github.com/awizemann/scarf
  • What to test (per-build):
    v2.5.0 — first public TestFlight build of ScarfGo. Try connecting to a
    Hermes host (you'll need an SSH-reachable Hermes install). Test:
    - Onboarding + Add a second server
    - Project-scoped chat
    - Session resume from Dashboard
    - Sessions tab project filter
    - Forget a server / re-onboard
    Known limitations: no push, no in-app Settings editor, English only.
    Report issues via TestFlight feedback.
    

Beta description copy

ScarfGo is the iOS companion to Scarf, the Mac client for the Hermes AI agent. Connect to a Hermes server you operate (Mac, Linux, or any SSH-reachable host) and run sessions, browse memory, manage cron jobs, and resume conversations from your phone. All data stays between your device and your Hermes host — no developer servers in between.

6. Submit for Beta App Review

  • TestFlight tab → External Testers → Add a public group called "Public Beta".
  • Add the new build to the group.
  • Click Submit for Review.
  • Apple's Beta Review queue is typically 24-48h.

7. After approval

  • Apple issues a public TestFlight URL (https://testflight.apple.com/join/XXXXXX).
  • Record the URL — needed in Phases E (wiki ScarfGo page) and F (README v2.5 section).
  • DO NOT publicize it yet. Update wiki + README in branches first; the user (Alan) decides when to push live.

Rollback

If a build breaks on TestFlight:

  • Disable the build in App Store Connect → TestFlight → Builds → Expire.
  • Fix the bug, archive a new build with the same MARKETING_VERSION (Apple requires the build number — CURRENT_PROJECT_VERSION — to monotonically increase).
  • Upload + add to Public Beta group + submit if Apple flagged the prior build for re-review.

Open items / future TestFlight builds

  • Push notifications — flip NotificationRouter.apnsEnabled = true simultaneously with: enabling the Push Notifications capability, generating an APNs auth key, deploying the Hermes-side push sender. Stops being a no-op only when all three exist.
  • iPad support.tabViewStyle(.sidebarAdaptable) is wired but iPad layout hasn't been smoke-tested. Probably free, but verify before flipping the iPad flag in the target.
  • Localization — English only for v1. Mac ships 7 languages; iOS strings are extracted but no translations.