From 0daae683fb2dea25204c0908631a3f6cba74b7e8 Mon Sep 17 00:00:00 2001 From: Calham Northway Date: Wed, 10 Sep 2025 12:41:04 -0700 Subject: [PATCH 1/2] fix: app crashing due to undefined settings constant accessor - add check for undefined settings constant - add null coalescing operation to use getConstants to prevent undefined settings object --- .../sdk/react-native/src/platform/locale.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/sdk/react-native/src/platform/locale.ts b/packages/sdk/react-native/src/platform/locale.ts index 3fff16028b..f5fbf25b48 100644 --- a/packages/sdk/react-native/src/platform/locale.ts +++ b/packages/sdk/react-native/src/platform/locale.ts @@ -1,12 +1,15 @@ import { NativeModules, Platform } from 'react-native'; - /** - * Ripped from: - * https://dev.to/medaimane/localization-and-internationalization-in-react-native-reaching-global-audiences-3acj + * Apps opted into Fabric (the new architecture of React Native) + * may not have access to the SettingsManager.settings.AppleLocale property. + * It is now common to use the `getConstants` method to access these constant properties with Fabric enabled apps. */ -const locale = - Platform.OS === 'ios' - ? NativeModules.SettingsManager?.settings?.AppleLocale // iOS - : NativeModules.I18nManager?.localeIdentifier; +const getAppleLocale = () => { + const settings = NativeModules.SettingsManager?.settings ?? NativeModules.SettingsManager?.getConstants()?.settings; + return settings?.AppleLocale; +} -export default locale; +export default Platform.select({ + ios: getAppleLocale(), + android: NativeModules.I18nManager?.localeIdentifier, +}) From f8eca985271977baa1bca92a45d058236a207206 Mon Sep 17 00:00:00 2001 From: Steven Zhang Date: Fri, 21 Nov 2025 12:05:45 -0600 Subject: [PATCH 2/2] chore: addressing PR comments --- packages/sdk/react-native/package.json | 1 + .../sdk/react-native/src/platform/locale.ts | 21 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/sdk/react-native/package.json b/packages/sdk/react-native/package.json index 9e879ed430..f051ba4803 100644 --- a/packages/sdk/react-native/package.json +++ b/packages/sdk/react-native/package.json @@ -31,6 +31,7 @@ "tsw": "yarn tsc --watch", "start": "rimraf dist && yarn tsw", "lint": "eslint . --ext .ts,.tsx", + "lint:fix": "eslint . --ext .ts,.tsx --fix", "prettier": "prettier --write '**/*.@(js|ts|tsx|json|css)' --ignore-path ../../../.prettierignore", "test": "jest", "coverage": "yarn test --coverage", diff --git a/packages/sdk/react-native/src/platform/locale.ts b/packages/sdk/react-native/src/platform/locale.ts index f5fbf25b48..f14384cc9c 100644 --- a/packages/sdk/react-native/src/platform/locale.ts +++ b/packages/sdk/react-native/src/platform/locale.ts @@ -1,15 +1,18 @@ import { NativeModules, Platform } from 'react-native'; + /** - * Apps opted into Fabric (the new architecture of React Native) + * Apps opted into Fabric (the new architecture of React Native) * may not have access to the SettingsManager.settings.AppleLocale property. * It is now common to use the `getConstants` method to access these constant properties with Fabric enabled apps. */ -const getAppleLocale = () => { - const settings = NativeModules.SettingsManager?.settings ?? NativeModules.SettingsManager?.getConstants()?.settings; - return settings?.AppleLocale; -} +const localeIdentifier = Platform.select({ + ios: () => { + const settings = + NativeModules.SettingsManager?.settings ?? + NativeModules.SettingsManager?.getConstants()?.settings; + return settings?.AppleLocale; + }, + default: () => NativeModules.I18nManager?.localeIdentifier, +}); -export default Platform.select({ - ios: getAppleLocale(), - android: NativeModules.I18nManager?.localeIdentifier, -}) +export default localeIdentifier();