Our App Store watch app is being terminated by dyld before any app code runs, only on watchOS 26.2 (23S303) and 26.3 (23S620). Only the arm64 slice is affected (Series 9/10, Ultra 2), and almost always on background launches.
Termination Reason: DYLD 9
Assertion failed: (0), function getNameSelRefVMAddr, file ObjCVisitor.cpp, line 1319.
objc_visitor::Method::getNameSelRefVMAddr (ObjCVisitor.cpp:1319)
dyld4::optimizeObjCSelectors (PrebuiltObjC.cpp:530)
dyld4::PrebuiltObjC::make (PrebuiltObjC.cpp:1372)
dyld4::PrebuiltLoaderSet::makeLaunchSet (PrebuiltLoader.cpp:2309)
dyld4::prepare (dyldMain.cpp:960)Our previous app version crashes in the same function with SIGSEGV instead (same frame offsets on the same dyld build). The fault address lies just past a mapped-file region.
What we checked:
The crashing binary UUID matches our archive.
Every ObjC method list in every image is a standard relative list (0x80000000). None has the selector-offset flag (0x40000000), which is what that assertion branch expects according to the open-source dyld.
dyld_info -objc parses all images cleanly.
Build settings and linker flags are defaults (Xcode 27.1).
So it looks like dyld is reading the wrong data while building the launch closure, rather than our binary being malformed.
This seems related to https://developer.apple.com/forums/thread/810471: same OS range, same "dyld before main(), ObjC metadata" symptom. That report involves VPP installs, while ours is App Store distribution.
Full crash logs, binaries and analysis are in FB25270892.
Has anyone else seen this? Is it fixed in watchOS 26.4 or later, and is there any workaround on the app side?
4
0
165