Skip to content

App Crashes on Launch on iOS 26.4 - getSortDescriptors #340

@ddxkalin

Description

@ddxkalin

Library version: 11.1.2
react-native-nitro-modules version: (check your lockfile)
React Native version: 0.74.1
Expo SDK: N/A (bare React Native)
Device: iPhone 16 Pro (iPhone17,1)
OS: iPhone OS 26.4 (23E246) — beta

What happens:

App crashes on launch in TestFlight. Crash happens ~2-3 seconds after launch on a GCD background workqueue thread (com.apple.root.default-qos) while HealthKit is establishing its XPC connection to com.apple.healthd.
Stack trace (all 7 crash reports share the identical stack):
Foundation -[NSSortDescriptor encodeWithCoder:] ← throws NSException
Foundation -[NSXPCEncoder _encodeObject:]
Foundation -[NSXPCEncoder _encodeArrayOfObjects:forKey:]
Foundation -[NSArray encodeWithCoder:]
HealthKit -[_HKSampleQueryConfiguration encodeWithCoder:]
Foundation NSXPCConnection _sendInvocation...
HealthKit HKQueryServerProxyProvider fetchProxyServiceEndpoint...
HealthKit HKHealthStoreImplementation _serverProxyWithHandler...

Root cause:
On iOS 26.4 beta, NSSortDescriptor throws an NSException when NSXPCEncoder attempts to serialize it. HKSampleQuery passes sortDescriptors over XPC to healthd, which triggers the crash. This is a regression in iOS 26.x's NSXPC serialization layer — NSSortDescriptor encoded fine on all prior iOS versions.

The crash originates from getSortDescriptors() in Helpers.swift:
// This crashes on iOS 26.x beta:
func getSortDescriptors(ascending: Bool?) -> [NSSortDescriptor] {
return [NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: ascending ?? false)]
}
Called at QuantityTypeModule.swift:19 and CategoryTypeModule.swift:49.

Fix:
Return nil instead of an NSSortDescriptor array. The HKSampleQuery API accepts an optional sort descriptor array — passing nil means unsorted results from the native layer, which is fine since sorting can be handled in JavaScript.
func getSortDescriptors(ascending: Bool?) -> [NSSortDescriptor]? {
// Returning nil: NSSortDescriptor crashes NSXPCEncoder on iOS 26.x beta
return nil
} -> Still testing not quite sure if it's going to work as expected!

Workaround (patch-package):
We are currently using patch-package to apply this fix locally until it is addressed upstream.

Additional notes:

  • Affects all HKSampleQuery calls: queryQuantitySamples, queryCategorySamples, queryWorkoutSamples
  • Reproducible 100% of the time on iOS 26.4 (23E246) beta, iPhone17,1
  • Does not affect any other iOS version
  • Minimum deployment target: iOS 16.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions