crossmate

A collaborative crossword app for iOS
Log | Files | Refs | LICENSE

commit de84aac82ac6573ced60bf1b4eb6313701b70ecb
parent eccd53839b712d6ccd3150cc7c4224ab15b6d9f0
Author: Michael Camilleri <[email protected]>
Date:   Wed, 20 May 2026 03:17:59 +0900

Disable Release linker code-folding so crash frames symbolicate

The app ships TestFlight-only, with no on-device debugger, so a crash is
diagnosed from its backtrace. The Release linker's identical-code-folding
merges byte-identical Swift functions — common for async resume thunks and
generic specialisations — so those frames render as <deduplicated_symbol> in
the crash report. Recovering the real function then needs dwarfdump --lookup
against the archived dSYM, which is ambiguous precisely because folding is what
made the address-to-function mapping many-to-one.

OTHER_LDFLAGS gains -Wl,-no_deduplicate on the Crossmate target's Release
configuration only (the target settings move to base/configs form for this);
Debug is left untouched — it already symbolicates and keeps the faster link.
project.pbxproj is the regenerated xcodegen output. The only cost is a bounded
increase in binary size; identical-code-folding is purely a size optimisation,
so there is no behavioural or runtime change.

Co-Authored-By: Claude Opus 4.7 <[email protected]>

Diffstat:
MCrossmate.xcodeproj/project.pbxproj | 1+
Mproject.yml | 18+++++++++++++-----
2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/Crossmate.xcodeproj/project.pbxproj b/Crossmate.xcodeproj/project.pbxproj @@ -759,6 +759,7 @@ "$(inherited)", "@executable_path/Frameworks", ); + OTHER_LDFLAGS = "$(inherited) -Wl,-no_deduplicate"; PRODUCT_BUNDLE_IDENTIFIER = net.inqk.crossmate; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/project.yml b/project.yml @@ -75,11 +75,19 @@ targets: - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight settings: - PRODUCT_BUNDLE_IDENTIFIER: net.inqk.crossmate - INFOPLIST_FILE: Crossmate/Info.plist - CODE_SIGN_ENTITLEMENTS: Crossmate/Crossmate.entitlements - TARGETED_DEVICE_FAMILY: "1,2" - CODE_SIGN_STYLE: Automatic + base: + PRODUCT_BUNDLE_IDENTIFIER: net.inqk.crossmate + INFOPLIST_FILE: Crossmate/Info.plist + CODE_SIGN_ENTITLEMENTS: Crossmate/Crossmate.entitlements + TARGETED_DEVICE_FAMILY: "1,2" + CODE_SIGN_STYLE: Automatic + configs: + # Disable linker identical-code-folding in Release so TestFlight crash + # reports name the real Swift async functions instead of collapsing + # them to <deduplicated_symbol> (which forces dwarfdump --lookup + # guesswork during symbolication). + Release: + OTHER_LDFLAGS: $(inherited) -Wl,-no_deduplicate Crossmate Unit Tests: type: bundle.unit-test