nativekeel 0.1.22 → 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,7 @@ Health check for React Native and Expo apps. One command, no install, no account
6
6
  npx nativekeel
7
7
  ```
8
8
 
9
- **What's new in 0.1.22:** auth tokens in AsyncStorage/MMKV are found by what is stored, not only by the key name. **0.1.21:** corrected 16 KB page dates: Google Play blocks updates without them from 1 February 2027 (high until then). Recent releases added a *Start here* list in every report, hacking risks mapped to OWASP MASVS, crash and performance checks. Every check is tuned on 470 open-source React Native and Expo apps to keep false alarms out ([what we found in them](https://dev.to/keel_alican_akyol/we-scanned-470-open-source-react-native-apps-here-is-what-breaks-them-5072)). [All releases →](https://nativekeel.com/changelog)
9
+ **What's new in 0.1.23:** the core `SafeAreaView` does nothing on Android, and with target SDK 35+ Android 15 draws your app under the status bar: now reported as medium. **0.1.22:** auth tokens in AsyncStorage/MMKV are found by what is stored, not only by the key name. Recent releases added a *Start here* list in every report, hacking risks mapped to OWASP MASVS, crash and performance checks. Every check is tuned on 470 open-source React Native and Expo apps to keep false alarms out ([what we found in them](https://dev.to/keel_alican_akyol/we-scanned-470-open-source-react-native-apps-here-is-what-breaks-them-5072)). [All releases →](https://nativekeel.com/changelog)
10
10
 
11
11
  ```
12
12
  Summary 4 critical · 5 high · 4 medium · 6 low
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nativekeel",
3
- "version": "0.1.22",
3
+ "version": "0.1.23",
4
4
  "description": "Health check for React Native and Expo apps: upgrade blockers, store deadlines, crash risks, vulnerable dependencies and leaked secrets, with a step-by-step upgrade plan.",
5
5
  "type": "module",
6
6
  "bin": {
package/src/stability.js CHANGED
@@ -328,12 +328,17 @@ export function removedCoreImports(project) {
328
328
  if (deprecated.size) {
329
329
  const names = [...deprecated.keys()];
330
330
  const warnsNow = minor !== null && names.some((n) => minor >= DEPRECATED_IN_CORE[n].since);
331
+ // Core SafeAreaView only ever applied to iOS. Targeting API 35+ (Expo SDK 52+ does), Android 15
332
+ // draws edge-to-edge, so those screens slide under the status bar today.
333
+ const target = project.android && project.android.targetSdk;
334
+ const expoMajor = project.expoVersion ? Number(String(project.expoVersion).split('.')[0]) : null;
335
+ const edgeToEdge = deprecated.has('SafeAreaView') && ((target && target >= 35) || (!target && expoMajor !== null && expoMajor >= 52));
331
336
  findings.push({
332
337
  id: 'deprecated-core-imports',
333
- severity: 'low',
338
+ severity: edgeToEdge ? 'medium' : 'low',
334
339
  area: 'react-native',
335
340
  title: `${names.join(', ')} ${names.length === 1 ? 'is' : 'are'} deprecated in React Native core and will be removed`,
336
- detail: `${[...deprecated].map(([n, at]) => `${n} (${at}, deprecated in 0.${DEPRECATED_IN_CORE[n].since}) → ${DEPRECATED_IN_CORE[n].use}`).join('; ')}. ${warnsNow ? 'They already log a deprecation warning.' : 'They start logging a warning when you upgrade.'} Once removed, the import returns undefined and the screen crashes, so move off them while it is a small change.`,
341
+ detail: `${[...deprecated].map(([n, at]) => `${n} (${at}, deprecated in 0.${DEPRECATED_IN_CORE[n].since}) → ${DEPRECATED_IN_CORE[n].use}`).join('; ')}. ${warnsNow ? 'They already log a deprecation warning.' : 'They start logging a warning when you upgrade.'} Once removed, the import returns undefined and the screen crashes, so move off them while it is a small change.${edgeToEdge ? ' SafeAreaView also does nothing on Android: with your target SDK, Android 15 and newer draw the app edge-to-edge, so those screens already sit under the status bar there. react-native-safe-area-context handles both platforms.' : ''}`,
337
342
  fix: { kind: 'deprecated-core', step: `Replace ${names.map((n) => `\`${n}\` (→ ${DEPRECATED_IN_CORE[n].use})`).join(', ')} before React Native removes ${names.length === 1 ? 'it' : 'them'}.` },
338
343
  });
339
344
  }