Skip to content

docs(ios): release-readiness truth pass + iOS CI lane#11

Merged
boggspa merged 3 commits into
masterfrom
docs/ios-release-truth-pass
Jun 18, 2026
Merged

docs(ios): release-readiness truth pass + iOS CI lane#11
boggspa merged 3 commits into
masterfrom
docs/ios-release-truth-pass

Conversation

@boggspa

@boggspa boggspa commented Jun 18, 2026

Copy link
Copy Markdown
Owner

From the multi-provider release-readiness review (dogfooded in TaskWraith). No code/feature changes — this makes the tracked docs match the shipped code and adds a CI gate. The stale docs are public (tracked ios/ + root README), so this is credibility + App-Store-review hygiene, not just local notes.

Doc truth pass — APNs honesty (the load-bearing fix)

The docs claimed Release builds don't request APNs and that a "developer-controlled push relay owns the key." Reality (verified):

  • iOS requests notification permission after pairing (Release/TestFlight); the old TASKWRAITH_ENABLE_APNS_REGISTRATION compile-guard is gone.
  • The Mac delivers push only with .p8 credentials (TASKWRAITH_APNS_KEY_PATH/KEY_ID/TEAM_ID/BUNDLE_ID); default is NoopApnsPusherno push delivered.
  • The relay does not send push.

AppStorePrivacyNotes.md + ios/TaskWraithApp/README.md now describe exactly that (push = post-pairing opt-in, delivery needs Mac creds, document as optional/advanced — don't market as a hero feature).

Other stale claims corrected

  • Removed "thin UI shell"; removed the dead "Not yet wired — incremental run-event streaming" gap (it shipped).
  • ATS note fixed (only NSAllowsLocalNetworking, no global NSAllowsArbitraryLoads).
  • Archive step: trust the exported IPA entitlements (aps-environment=production, get-task-allow=false); archive-stage development is expected under automatic signing.
  • Crypto review marked completed (2026-06) with the residual MED (silent identity regen on Keychain failure) disclosed.
  • Root README: iOS is in TestFlight beta, a Mac companion (not standalone).

iOS CI lane

New ios job (macos-15): swift test --package-path ios/TaskWraithKit + an unsigned xcodebuild of the app target. The Electron matrix couldn't see iOS regressions; this fails CI before a broken iOS build reaches TestFlight. This PR's own CI run is the lane's first live test.

Decision still yours (doesn't block this PR): the push positioning fork — A (honest/optional, what these docs describe), B (commit to consumer push: ship the Mac with a pre-wired .p8 or re-enable the hidden ApnsConfigPanel), or C (stay TestFlight longer). The docs reflect today's reality (A); say the word for B/C and I'll adjust.

🤖 Generated with Claude Code

boggspa and others added 3 commits June 18, 2026 19:19
From the multi-provider release-readiness review. No code/feature changes —
just making the tracked docs match the shipped code, and adding a CI gate.

Doc truth pass (these are PUBLIC, tracked files):
- AppStorePrivacyNotes.md + ios README: APNs is now honest — Release/TestFlight
  requests notification permission AFTER pairing; delivery requires the user's
  Mac to have APNs .p8 credentials (TASKWRAITH_APNS_KEY_PATH/KEY_ID/TEAM_ID/
  BUNDLE_ID), else NoopApnsPusher drops (no push); the relay does NOT send push.
  Dropped the aspirational "developer-controlled push relay owns the key" and
  the dead TASKWRAITH_ENABLE_APNS_REGISTRATION guard.
- ios README: removed "thin UI shell"; removed the stale "Not yet wired —
  incremental run-event streaming" gap (it shipped); corrected the ATS note
  (only NSAllowsLocalNetworking, no global ArbitraryLoads); archive step now
  says trust the EXPORTED IPA entitlements (archive-stage dev is expected);
  crypto review marked completed (2026-06) with the residual MED disclosed.
- root README: iOS status → "in TestFlight beta, Mac companion (not standalone)";
  push is opt-in + needs Mac APNs creds.

iOS CI lane (.github/workflows/ci.yml): new `ios` job (macos-15) runs
`swift test --package-path ios/TaskWraithKit` + an unsigned `xcodebuild` of the
app target — catches iOS regressions the Electron matrix can't, before any
TestFlight upload.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The first run of the new iOS job failed: TaskWraithUI uses the iOS-26 Liquid
Glass API `.glassEffect(.regular)` (TWSharedViews.swift), which the macos-15
runner's Xcode can't compile ("no member 'glassEffect'"). Point the lane at the
macos-26 runner (matches the local dev toolchain) + print the toolchain.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The new iOS lane surfaced a real but separate issue: the GitHub macos-26 runner
ships Xcode 26.5 / Swift 6.3.2, whose region-based isolation rejects
`sending 'params'` in RemoteSessionModel.swift (1613, 2620) as an ERROR — while
local dev is Xcode 26.0 / Swift 6.2.4, which does not. So the Kit compiles +
ships locally but not on the newest CI toolchain. Keep this PR to the doc truth
pass (already green) and decide the iOS-lane toolchain approach separately
(pin CI Xcode to 26.0 to match local, or make the code Swift-6.3-clean).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@boggspa boggspa merged commit 6b76d8c into master Jun 18, 2026
16 checks passed
@boggspa boggspa deleted the docs/ios-release-truth-pass branch June 18, 2026 18:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant