Skip to content

iOS 7.0.0-beta4: the rest of the adoption after #30 - #56

Merged
krassx merged 4 commits into
mainfrom
chore/ios-sdk-7.0.0-beta4
Oct 6, 2026
Merged

krassx merged 4 commits into
mainfrom
chore/ios-sdk-7.0.0-beta4

Conversation

@krassx

@krassx krassx commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Summary

The rest of the iOS SDK 7.0.0-beta4 adoption. It is rebased onto main, which now has #30 (merged as d55c45e) and #55.

#30 pinned beta4: native-versions.json, the ios/Support manifest and Package.resolved (e467f57c), the feedback package's SPM pins, native-versions.test.ts, and the secure-rect / view-tree origin fix with the video.aux v2 e2e change. This PR's pin lines were byte-identical to #30's, so the rebase dropped them. Without #30, beta4 fails secure-component and secure-modal on iOS (they expect no video.aux). That is fixed by #30. Those suites were run on a local merge of this branch and #30 before #30 landed.

What this PR adds on top of the pin

  • The published artifact was checked. Bugsee-7.0.0-beta4.zip returns HTTP 200, and its SHA-256 90a923ec…f6ec87b matches the bugsee/spm checksum. The headers and module maps are byte-identical to beta3's. Every iOS slice is minos 15.0. The simulator slice still has no crash reporter. The feedback-spm beta4 sources are identical to beta3's.
  • Stale floor comments are fixed (podspec, ios/Support/Package.swift, platform-floors.ts, its test). They said Bugsee supports iOS below 15. It has floored at 15.0 since beta2, and beta4 still does. The podspec floor (RN's min_ios_version_supported, fallback 15.1) is unchanged and consistent.
  • The remaining 7.0.0-beta3 references are updated where they describe the current pin or vendored header. Where they describe behaviour that beta4 did not change, they now say so. Historical records are left as they were.
  • Podfile.lock was regenerated with a plain pod install. The committed lock predated the feedback pod.
  • e2e: SDK fixes that beta4 ships are now asserted as plain it:
    • attributes case 3: a new report carries the global attributes and identifier (bugsee-cocoa #164, fe857ad97).
    • exceptions exc-fatal, exc-root and the Release gate: the stored JS crash (override_report.plcrash) is recovered at the next launch (bugsee-cocoa #177, 7bca39c59).
    • The BugseeModule comment that said this report is dropped is corrected.

Behaviour evaluated in beta4, with no wrapper change needed

  • #180 session warm-up at launch. It replaces a session fetch that already ran at launch. The endpoint option is still honoured. Every run logged Session not initialized. - Could not connect to the server. against https://127.0.0.1:9. launch.test.ts reached Launched in about 1 s on the simulator.
  • d1015a35d log redaction. Internal-log only. No wrapper code reads it.
  • #184 16-hex span ids and #185 span environment attributes. The wrapper treats spanId as opaque. apm passes on the simulator and the XS.
  • 44ab78a96 dialog email snapshot. SDK-internal. reporting passes.
  • Multi-window placement (#170–#172, #186). Fixed for the wrapper by iOS: keep secure rectangles and the view tree on windows away from the screen's origin #30. On a single window at the screen origin (iPhone), nothing changes.

Test plan

Findings

  • For the iOS SDK team: crash recovery at the next launch is intermittent on hardware, on beta3 and on beta4.
    • Over 5 probe iterations on the XS, each "JS fatal, terminate, relaunch" cycle left override_report.plcrash in Library/Caches/com.bugsee.crashreporter/<bundle id>/. In 2 of the 5, the relaunch did not claim it. The file was still there afterwards, no report was dispatched, and no bundle was written.
    • The report-handler native-crash recovery case (+testCrash, live_report.plcrash) shows the same symptom: it failed in 3 of 5 full runs on beta4 and 3 of 4 on beta3 0d9c9d0a-9, and passes when run on its own.
    • In the failing iterations, the app's preferences plist (which holds bugsee_lastLaunchSDKVersionKey / bugsee_lastLaunchAppVersionKey, the inputs to +hasVersionMatchForPendingReport) was usually not on disk yet after the crash run. One no-plist iteration still recovered, so this is a lead, not a proven cause.
    • These e2e cases therefore assert the correct outcome as plain it and can be red on a device run. They deliberately do not relaunch a second time, because that would hide the miss. The comments say so (review fix ca60ea9).
  • Wrapper, predates beta4, not fixed here: with the embedded main.jsbundle (Debug on a device without Metro), payload.debug_ids is keyed by the raw file path, but frames[].data.source is cleaned (cleanSource strips the .app/ prefix). The debug_ids key therefore does not equal the frame source. The backend uses only the map's values, so symbolication is unaffected.

🤖 Generated with Claude Code

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Deep review: iOS 7.0.0-beta4 adoption (rest of pin, on top of #30)

#30 is already on main (d55c45e) and already pins 7.0.0-beta4 (e467f57c / checksum 90a923ec…f6ec87b, confirmed on bugsee/spm’s tag and Package.swift). This PR is the necessary follow-up: lock the e2e that #30 inverted, correct floor comments, refresh Podfile.lock, and stop describing a dropped override_report as current behaviour.

git merge-tree against current main auto-merges (no conflict markers). BugseeModule.mm keeps #30’s origin-tracker work; only the comment hunks from this branch apply. Rebase is still the cleaner history, not a merge blocker.

No wrapper logic change. Appearance keys, option surface, and feedback-spm sources are unchanged from beta3 (headers/module maps byte-identical per the PR; SPM platforms are .iOS(.v15) / .tvOS(.v15) / .visionOS(.v1) as the floor comments now say). docs-versions already matched the pin on main; the extra design-doc sentences are accurate. Attributes case 3 (bugsee-cocoa#164) is the right conversion: live upload() seeding is deterministic and was green on the simulator and on the XS merge with #30.

Findings

  1. P2 — examples/bare/e2e/exceptions.test.ts (~L1079, and the exc-root / Release-gate copies): JS-crash recovery is now a hard it even though this PR measured it missing on 2/5 hardware cycles. Details on the inline comment. Do not revert to it.failing.

Checks actually run

  • Three-dot and two-dot diffs vs origin/main; git merge-tree for #30 overlap.
  • Surrounding e2e (awaitBundles does not throw; describeIosDevice / CI launch.test.ts only; report-handler recovery still E2E_IOS_RECOVERY=1).
  • Published tag 7.0.0-beta4 → e467f57c; zip checksum matches the committed pin.
  • CI on this head (partial): lint, typecheck, unit, ios unit (BugseeRNSupport), ios (spm) green. ios e2e (simulator) / ios (cocoapods) were still pending; those jobs do not execute these device recovery cases.

Overall

  1. Overall risk: Low (wrapper). Residual SDK crash-recovery miss on device is real but not introduced here — beta3 dropped the report 100% of the time; beta4 claims it and still misses when last-launch prefs are not flushed.
  2. Merge recommendation: Approve. This is the test/docs lock #30 needs. The P2 should be a retry (or an honest comment) so a hardware exceptions run is not a coin flip; it does not need to block the pin.
  3. Most important to fix: Bounded retry of exc-observe when override_report.plcrash is still on disk; stop stating recovery as always-on in the e2e comments and in logUnhandledException.
  4. Positives: Pin, resolved revision, and checksum agree with the published artifact. Attributes #164 conversion is justified and keeps the separate identity it so a harness miss cannot hide inside case 3. Floor comments now match the xcframework minos / SPM manifest. Podfile.lock finally records BugseeReactNativeFeedback. it.failing was correctly abandoned for a case that now passes often enough to invert Jest.
Open in Web View Automation 

Sent by Cursor Automation: Bugsee code review

Comment thread examples/bare/e2e/exceptions.test.ts Outdated
krassx added 4 commits October 6, 2026 16:38
…e.lock

#30 pinned 7.0.0-beta4. This is what that pin left behind.

Verified against the published artifact: bugsee/spm 7.0.0-beta4 ->
e467f57c, Bugsee-7.0.0-beta4.zip SHA-256 90a923ec...f6ec87b (= the
Package.swift checksum), build stamp bb2f0e7e-12. Headers and module maps
are byte-identical to beta3's in the ios-arm64 and simulator slices; every
iOS slice is minos 15.0; the simulator slice still has no crash reporter.
bugsee/feedback-spm 7.0.0-beta4 (f23afe34) has the same sources as beta3.

- Comments that said Bugsee supports iOS below 15 (podspec, the Support
  manifest, platform-floors.ts and its test) now say what is true: its
  floor is 15.0 since beta2, re-checked on beta4.
- Comments that cite the vendored header (report and feedback appearance)
  name beta4; the ones describing behaviour beta4 did not change say so
  (deleteCollectedDataOnDevice, the simulator slice without a crash
  reporter).
- Podfile.lock: a plain `pod install`. The committed lock predated the
  feedback pod.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
…s reports

7.0.0-beta4 carries bugsee-cocoa#164 (fe857ad97): a new report starts from
the global attributes and the user identifier. On the iOS simulator
(6FA9B3E8, beta4 bb2f0e7e-12) the `it.failing` case 3 failed with "Failing
test passed even though it was supposed to fail"; as a plain `it` all six
cases pass. Android already ran it as a plain `it`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
…are plain it

7.0.0-beta4 claims override_report.plcrash ahead of the live crash
(bugsee-cocoa #177, 7bca39c59). On the iPhone XS (KRSFT, iOS 18.7.9, SDK
bb2f0e7e-12) the three `itIosDevice.failing` cases failed with "Failing
test passed even though it was supposed to fail":

- exc-fatal: the relaunch recovered one `crash` bundle, a
  ReactNativeWebException carrying "E2E fatal <nonce>";
- exc-root: one `crash` bundle, a ReactNativeWebException;
- Release gate: the console ended, no RCTFatalException bundle, and exactly
  one ReactNativeWebException crash.

They are plain `it` now. BugseeModule's logUnhandledException comment no
longer says the stored report is dropped.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Review (cursor, #56): the exceptions comments and logUnhandledException's
read as if beta4 always recovers override_report.plcrash. On the iPhone XS
2 of 5 relaunches left it unclaimed. The cases stay a plain `it` asserting
the correct outcome; they do not relaunch again, because a second launch
would hide the SDK miss the device run exists to show.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
@krassx
krassx force-pushed the chore/ios-sdk-7.0.0-beta4 branch from d65bba2 to ca60ea9 Compare October 6, 2026 11:39
@krassx krassx changed the title iOS 7.0.0-beta4: the rest of the adoption (on top of #30) iOS 7.0.0-beta4: the rest of the adoption after #30 Oct 6, 2026

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale comment

Re-review at ca60ea9 (rebased onto main)

Prior P2 is fully addressed. ca60ea9 takes the honest-comment option from the first pass: the file header, the three device recovery cases, and logUnhandledException now state that beta4 claims override_report.plcrash intermittently (2 of 5 on the XS), name +hasVersionMatchForPendingReport as the lead, and say a second exc-observe is deliberately not done because it would write last-launch prefs and hide the miss. That reasoning is right; retry would have been the wrong fix. Cases stay a plain it.

The branch is rebased onto current main (0de99f0, #30 + #55). Duplicate pin hunks dropped. Unique remaining work is comments, Podfile.lock, attributes/exceptions e2e locks, and floor/header wording. No wrapper logic change. No remaining P0–P3.

  1. Overall risk: Low
  2. Merge recommendation: Approve
  3. Most important issues to fix: None in this wrapper PR. Residual is the iOS SDK recovery miss on device, already filed with that team.
  4. Positives: Rebase is clean. Comments now match the measured hardware behaviour instead of the one green KRSFT run. Skipping a recovery retry keeps the device suite honest.
Open in Web View Automation 

Sent by Cursor Automation: Bugsee code review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deep review: iOS 7.0.0-beta4 follow-up (ca60ea9, on top of #30)

Re-review after the synchronize that landed ca60ea9. #30 is on main (0de99f0 / d55c45e) and already pins 7.0.0-beta4 (e467f57c). This PR still has no wrapper logic change: it locks the e2e that the pin inverted, corrects floor/header comments, and records BugseeReactNativeFeedback in Podfile.lock.

Prior finding

P2 (exceptions recovery overstated as always-on) — fully addressed. exceptions.test.ts (file header, exc-fatal / exc-root / Release-gate) and logUnhandledException now say beta4 claims override_report.plcrash intermittently (2 of 5 on the XS), with +hasVersionMatchForPendingReport as the lead. The cases stay a plain it asserting the correct outcome. Skipping a second exc-observe is the right call: that launch would write last-launch prefs and hide the SDK miss these device cases exist to show.

What was checked this pass

  • Three-dot diff 0de99f0...ca60ea9 (15 files, comments / e2e inversion / lockfile only).
  • Surrounding harness: awaitBundles does not throw; describeIosDevice / describeIosRelease stay hardware-gated; CI ios e2e still runs only launch.test.ts.
  • Attributes case 3 (bugsee-cocoa#164) is a plain it on both platforms; identity remains its own preceding it, so a harness miss cannot hide inside case 3.
  • Reporting P10 (source.type unknown vs code_upload) is correctly still it.failing — that is not #164.
  • report-handler case 6 is still E2E_IOS_RECOVERY=1 / simulator slice has no crash reporter (beta3 and beta4).
  • Floor comments now match the xcframework minos 15.0 / bugsee/spm .iOS(.v15). Podspec fallback stays RN's 15.1.
  • Podfile.lock: adds the already-autolinked feedback pod; BugseeReactNative SPEC CHECKSUM change is the podspec comment edit; PODFILE CHECKSUM unchanged.
  • Pin on this branch still native-versions.json / Package.swift / Package.resolved 7.0.0-beta4 @ e467f57c.
  • Did not re-run yarn test / e2e. Current CI on this head was still in progress at review time; the previous head's CI was cancelled by this push.

Residual (accepted, not re-filed)

A hardware exceptions / E2E_RELEASE=1 run can still go red when the SDK leaves override_report.plcrash unclaimed. That is now documented as an SDK finding, not a wrapper defect, and is out of CI.

Overall

  1. Overall risk: Low
  2. Merge recommendation: Approve. This is the test/docs lock #30 needs. No remaining P0–P3.
  3. Most important to fix: Nothing in this PR. The remaining crash-recovery miss belongs with the iOS SDK team (+hasVersionMatchForPendingReport / last-launch prefs).
  4. Positives: #164 conversion is justified and keeps the separate identity it. Floor comments match the artifact. Podfile.lock finally records BugseeReactNativeFeedback. Recovery comments no longer overclaim beta4.
Open in Web View Automation 

Sent by Cursor Automation: Bugsee code review

@krassx
krassx merged commit 232be5e into main Oct 6, 2026
28 checks passed
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