Settings and NSUserDefaults

Settings wraps NSUserDefaults, iOS's per-app key-value store for small preferences. Settings.get(key) reads synchronously, Settings.set({ key: value }) writes, and watchKeys(keys, callback) reports changes made outside JavaScript, typically by the user on your app's page in the iOS Settings app (a Settings.bundle you add to the native project); clearWatch(id) stops watching. Your own set() calls do not fire the watch.

src/ios/lastBook.ts: remembering the last opened book on iOS (not run here)TypeScript
export function rememberLastBook(id: number) {
  if (Platform.OS === 'ios') Settings.set({ lastBookId: id });
}
export function lastBook(): number | null {
  return Platform.OS === 'ios' ? (Settings.get('lastBookId') ?? null) : null;
}

On Android the module is a stub that warns and returns null, which is what the unguarded call in IosOnly.tsx printed:

Output of 140
 WARN  Settings is not yet supported on this platform.
 LOG  Settings.get -> null

Because only iOS has it, use Settings just for values that must appear in the iOS Settings app. For everything else, pick a cross-platform store from Storage and Native Modules: MMKV 18,748 or AsyncStorage 5,070 for preferences, and expo-secure-store for secrets, which never belong in NSUserDefaults.