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:
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