Skip to content

Release check: run the previous release on its own frameworks - #1657

Merged
GianniCarlo merged 1 commit into
developfrom
fix/release-check-previous-frameworks
Oct 18, 2026
Merged

GianniCarlo merged 1 commit into
developfrom
fix/release-check-previous-frameworks

Conversation

@GianniCarlo

@GianniCarlo GianniCarlo commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

The 6.0.0 release check couldn't get an upgrade result: the previous release (5.22.2) crashed at launch on both iOS 26.5 and 27.0 before seeding its data.

Cause

retarget() makes a copy of the candidate's .xctestrun that installs the previous release's app, but it kept the candidate's UITargetAppEnvironmentVariables. Those carry DYLD_FRAMEWORK_PATH / DYLD_LIBRARY_PATH pointing at the candidate's build products, so the old app loaded the candidate's BookPlayerKit.framework instead of the one it embeds. The crash reports say so:

Termination: DYLD, Symbol missing
Symbol not found: _$s13BookPlayerKit10TimeParserC14getTimerOption4fromAA0gH0OSgSd_tFZ
Referenced from: …/BookPlayer.app/BookPlayer            (5.22.2)
Expected in:     /private/tmp/*/BookPlayerKit.framework/BookPlayerKit   (the candidate's build)

#1653 removed TimeParser.getTimerOption(from:), so 5.22.2 couldn't start. The cached 5.22.2 app embeds its own BookPlayerKit with that symbol, so App Store users upgrading from 5.22.2 aren't affected; only the check was. The script then fell back to building 5.22.1, which ran the Mac out of disk. Before #1653, the candidate's framework happened to be a superset, so earlier upgrade checks ran the old app on the new framework without anyone noticing.

Fix

The copy drops every DYLD_* key from UITargetAppEnvironmentVariables, so the previous release runs on the frameworks it ships with. The test runner's own environment (TestingEnvironmentVariables) is untouched. CLAUDE.md's release-check paragraph says so.

Testing

A full run of the check from this branch (develop e7ecc8f + this fix), Xcode 27.1, previous release 5.22.2 from the cache, passed in 14.9 min:

iOS fresh import playback upgrade from 5.22.2
26.5 ✅ ✅ ✅ ✅
27.0 ✅ ✅ ✅ ✅

The same build without the fix: upgrade crashed on both (the missing symbol above), then the 5.22.1 fallback build ran out of disk.

The upgrade scenario retargets a copy of the candidate's .xctestrun at the
previous release's app but kept the candidate's DYLD_FRAMEWORK_PATH and
DYLD_LIBRARY_PATH, so the old app loaded the candidate's BookPlayerKit.
Once #1653 removed TimeParser.getTimerOption(from:), 5.22.2 stopped at
launch with a missing symbol, the check fell back to building 5.22.1, and
6.0.0 couldn't get an upgrade result. The copy now drops every DYLD_* entry
of the app's environment; the test runner's own variables stay.
@github-actions

Copy link
Copy Markdown

✅ Claude PR Review — PASS

Changes only the release-check script and CLAUDE.md. retarget() builds the copy of the candidate's .xctestrun that installs the previous release. It now removes every DYLD_* key from UITargetAppEnvironmentVariables, so the old app loads the BookPlayerKit it embeds instead of the candidate's build. That fixes the 5.22.2 launch crash (missing symbol) after #1653. retarget()'s only caller is previous_xctestrun, so the candidate's own .xctestrun still points at its build products. TestingEnvironmentVariables isn't touched. The keys are collected before deleting, and a missing key falls back to an empty dict, so neither case breaks. No app, BookPlayerKit, concurrency, player/AVAudioSession, CoreData/SwiftData or auth/entitlement code is affected. The CLAUDE.md note is accurate.

Findings: no findings

Converged: nothing new this round, and no earlier finding is open.

Model claude-opus-5-5 · run log · 0 new · 0 carried over · 0 resolved · advisory (a human should still review). Findings are de-duplicated across pushes; an earlier finding closes only when the verification pass judges it against the current code — fixed, no longer applicable, accepted by a maintainer, or a duplicate of a finding reported on this push.

@GianniCarlo
GianniCarlo merged commit be46dc7 into develop Oct 18, 2026
3 checks passed
@GianniCarlo
GianniCarlo deleted the fix/release-check-previous-frameworks branch October 18, 2026 16:07

This branch was successfully deployed

1 active deployment
reviewer — a3a1baaa Deployed Oct 18, 2026 by GianniCarlo via review #295
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