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 -objcparses 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?
All of the crash reports with these signatures come from watchOS 26.2 (23S303), 26.2.1 (23S314) and 26.3 (23S620). We have not seen either signature on any other watchOS version, including watchOS 27.
OK.
I used some internal tooling to check whether your experience is typical, and that seems to be the case. That is:
- This bug affected a lot of watchOS apps…
- … in the the 26.2 and 2.6.3 timeframe.
- After which the occurrences dropped off to almost nothing.
Given that, I’m not sure it’s worth pushing harder on this. If you have users reporting this, you can advise them to update to either watchOS 26.x, x > 3, or watchOS 27.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"