Bump iOS to 1.0.3 (build 9) to ship Begin-crash fix (#259)#260
Conversation
Build 8 (currently on the App Store) crashes on Begin tap. The fix landed in main at 3780c0a (PR #256, closes #250) but won't reach users until a new build is uploaded. - ios/project.yml: CURRENT_PROJECT_VERSION 8 -> 9 - ios/QA_CHECKLIST.md: header + line 34 referencing build 9 - ios/RELEASING.md: example commands updated to ios-v1.0.3-build9 Closes #259 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
✅ Files skipped from review due to trivial changes (1)
📝 WalkthroughWalkthroughBumped the iOS application build number from 8 → 9 in the Xcode project configuration ( Changes
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~3 minutes Possibly related issues
Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
ios/QA_CHECKLIST.md (1)
39-39:⚠️ Potential issue | 🟡 MinorConsider updating the stale target date.
The App Store submission target date of 2026-04-24 is three days in the past, but the submission checklist item remains unchecked. Consider updating this to reflect the current timeline, especially since the PR description indicates submission will occur after TestFlight verification of build 9.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@ios/QA_CHECKLIST.md` at line 39, Update the stale "Target date: 2026-04-24" entry in ios/QA_CHECKLIST.md to reflect the current timeline (or remove it if the date is TBD) so the App Store submission target matches the PR plan to submit after TestFlight verification of build 9; locate the "Target date: 2026-04-24" line and replace it with the new agreed date or a "TBD" and ensure the corresponding checklist item status is consistent with that change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@ios/QA_CHECKLIST.md`:
- Line 39: Update the stale "Target date: 2026-04-24" entry in
ios/QA_CHECKLIST.md to reflect the current timeline (or remove it if the date is
TBD) so the App Store submission target matches the PR plan to submit after
TestFlight verification of build 9; locate the "Target date: 2026-04-24" line
and replace it with the new agreed date or a "TBD" and ensure the corresponding
checklist item status is consistent with that change.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 40d7ecbc-d0e7-42bf-abd1-ddf2ac96826a
📒 Files selected for processing (3)
ios/QA_CHECKLIST.mdios/RELEASING.mdios/project.yml
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
@coderabbitai Fixed in latest commit: |
|
Tip For best results, initiate chat on the files or code changes.
|
|
@cursor review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 5618e61. Configure here.
The iOS Begin-button crash (issue #250) shipped in App Store build 8 despite having a UI test that taps Begin and asserts SessionView mounts. Root cause for the gap: scripts/e2e/run-ios-tests.sh pointed at ios/StillPointUITests (the actual directory is ios/StillPointAppUITests), and on missing-directory it set FINAL_STATUS="skipped" + exit 0 — so the ios-e2e-smoke / ios-e2e-critical CI checks have been "passing" without running anything for an extended period. Logs from PR #260 confirm: "iOS E2E suite not present (ios/StillPointUITests); skipping critical lane." This PR closes the gap on three layers: 1. Fix the runner script: - IOS_UI_TESTS_DIR default -> ios/StillPointAppUITests - Drop bogus -testPlan StillPointE2E (no .xctestplan exists) - Lane mapping points at the real classes/methods: smoke -> StillPointAppUITests/StillPointAppUITests/testLaunchLoginCompleteSessionAndHistoryPersistence critical -> StillPointAppUITests/StillPointAppUITests - Hard-fail (exit 1) on missing test directory, never silently skip - Add IOS_TEST_CONFIGURATION knob so callers can pin Release config 2. Add a Release-config pre-flight gate to ios-testflight.yml: - New pre-flight-tests job runs the smoke lane with IOS_TEST_CONFIGURATION=Release on simulator - build-and-upload now `needs: pre-flight-tests` — a failing UI test blocks the TestFlight upload outright - Uploads simulator DiagnosticReports + xcresult bundle on every run 3. Defense in depth on PR-time runs: - e2e-ios.yml uploads simulator DiagnosticReports as artifact too, so any future silent crash leaves a recoverable trace - ios/QA_CHECKLIST.md gains a Pre-tag manual smoke section for the real-device pass that the simulator gate cannot fully replace After this lands, intentionally re-introducing the build 8 bug on a throwaway branch should fail the pre-flight gate and block a hypothetical TestFlight tag push, satisfying the issue's primary acceptance criterion. Closes #253 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Add iOS Release-config UI test gate to TestFlight workflow (#253) The iOS Begin-button crash (issue #250) shipped in App Store build 8 despite having a UI test that taps Begin and asserts SessionView mounts. Root cause for the gap: scripts/e2e/run-ios-tests.sh pointed at ios/StillPointUITests (the actual directory is ios/StillPointAppUITests), and on missing-directory it set FINAL_STATUS="skipped" + exit 0 — so the ios-e2e-smoke / ios-e2e-critical CI checks have been "passing" without running anything for an extended period. Logs from PR #260 confirm: "iOS E2E suite not present (ios/StillPointUITests); skipping critical lane." This PR closes the gap on three layers: 1. Fix the runner script: - IOS_UI_TESTS_DIR default -> ios/StillPointAppUITests - Drop bogus -testPlan StillPointE2E (no .xctestplan exists) - Lane mapping points at the real classes/methods: smoke -> StillPointAppUITests/StillPointAppUITests/testLaunchLoginCompleteSessionAndHistoryPersistence critical -> StillPointAppUITests/StillPointAppUITests - Hard-fail (exit 1) on missing test directory, never silently skip - Add IOS_TEST_CONFIGURATION knob so callers can pin Release config 2. Add a Release-config pre-flight gate to ios-testflight.yml: - New pre-flight-tests job runs the smoke lane with IOS_TEST_CONFIGURATION=Release on simulator - build-and-upload now `needs: pre-flight-tests` — a failing UI test blocks the TestFlight upload outright - Uploads simulator DiagnosticReports + xcresult bundle on every run 3. Defense in depth on PR-time runs: - e2e-ios.yml uploads simulator DiagnosticReports as artifact too, so any future silent crash leaves a recoverable trace - ios/QA_CHECKLIST.md gains a Pre-tag manual smoke section for the real-device pass that the simulator gate cannot fully replace After this lands, intentionally re-introducing the build 8 bug on a throwaway branch should fail the pre-flight gate and block a hypothetical TestFlight tag push, satisfying the issue's primary acceptance criterion. Closes #253 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Fix iOS e2e simulator destination + CR Minor (archive vs ipa) - run-ios-tests.sh: default simulator iPhone 16 -> iPhone 17. macos-26 runners no longer have an "iPhone 16" simulator (only "iPhone 16e"), so xcodebuild was failing immediately with "Unable to find a device matching the provided destination specifier". This was the actual cause of the iOS e2e failures on this branch — once the runner script stopped silently skipping (per the parent fix in this PR), it surfaced the simulator mismatch as a real failure. iPhone 17 is the runner's current default phone simulator. - QA_CHECKLIST.md: clarify the install step. An xcarchive is not directly installable; reword to either (a) install the TestFlight build via the TestFlight app (preferred) or (b) export an Ad Hoc .ipa and drag it onto the device. Addresses CR Minor on PR #261. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Add [E2E-DIAG] launch-time diagnostics + UserDefaults synchronize (#253/#266) After PR #267's reset-store wipe + 30s launchTimeout bump, three iOS UI tests still fail on the same auth-screen waitForExistence assertion. The fix didn't move the needle on the actual symptom, so before pushing more fixes blind, instrument the suspect surfaces: - APIClient.init: print parsed UITestConfig + final isAuthenticated. This tells us whether SP_UI_TEST_MODE is being honored and whether the reset-store path actually produced a fresh isAuthenticated=false store. - AppViewModel.checkAuth: print final currentView slug + currentUser email + elapsedMs, so we can correlate with APIClient.init and see if the app is landing on .auth/.home/something else. - Defensive defaults.synchronize() after the reset wipe in case there's a cross-process cfprefsd timing issue specific to macos-26 + iOS 26 simulator. The print() lines are guarded by uiTestConfig != nil so they're noise-free in production builds. Refs #253, #266, PR #261 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Pick first available iPhone simulator instead of hardcoding (CodeAnt) CodeAnt flagged: hardcoding `iPhone 17` as the default has the same infra-failure mode that bit us when the prior default `iPhone 16` was removed from the macos-26 runner image. Future runner refreshes will break this lane the same way. Replace the hardcoded default with a runtime fallback chain. The new resolve_test_destination function: - Honors IOS_TEST_DESTINATION env var if explicitly set (unchanged) - Otherwise greps `xcrun simctl list devices available` for the first installed iPhone from a preferred-order list (17 Pro, 17, 17 Pro Max, 17e, 16e, 16 Pro, 16, 15 Pro, 15, Air) - Last-resort fallback to the prior hardcoded default so xcodebuild's own error message surfaces if the host has no iPhone simulators at all Echoes the resolved destination into the CI log so future failures show exactly which simulator was selected. Refs PR #261, addresses CodeAnt Suggestion finding from 2026-04-27. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Gate [E2E-DIAG] checkAuth print on SP_UI_TEST_MODE (CodeAnt PII) CodeAnt flagged: the diagnostic print included currentUser.email, which would leak PII into production logs. Gate the entire print on SP_UI_TEST_MODE=1 so the diag only emits during UI-test runs (the only context where it's useful) and is silent in production. The fixture sets SP_UI_TEST_MODE=1 via launchEnvironment, so test runs keep the diagnostic for debugging while production builds emit nothing. Refs PR #261 / CodeAnt finding 2026-04-27. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
Bump iOS to 1.0.3 (build 9) so the Begin-button crash fix from #250 / PR #256 reaches TestFlight and the App Store. Build 8 (currently shipping) is broken — every Begin tap crashes.
Next steps after merge
Per `ios/RELEASING.md`:
```bash
git checkout main && git pull
git tag ios-v1.0.3-build9
git push origin ios-v1.0.3-build9
```
The tag push triggers .github/workflows/ios-testflight.yml which archives + uploads to TestFlight automatically.
Test plan
Closes #259
🤖 Generated with Claude Code
Summary by CodeRabbit