@buivietphi/skill-mobile-mt 1.0.0

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.

Potentially problematic release.


This version of @buivietphi/skill-mobile-mt might be problematic. Click here for more details.

@@ -0,0 +1,82 @@
1
+ # Release Checklist — Before Shipping
2
+
3
+ > Complete ALL items before submitting to App Store / Play Store.
4
+
5
+ ---
6
+
7
+ ## Code Quality
8
+
9
+ - [ ] No `console.log` / `print` / `NSLog` in production
10
+ - [ ] No hardcoded secrets or API keys
11
+ - [ ] No force unwraps without safety (`!` / `!!` / `as!`)
12
+ - [ ] No empty catch blocks
13
+ - [ ] No files > 500 lines
14
+ - [ ] All TODO/FIXME resolved or tracked
15
+
16
+ ## Security
17
+
18
+ - [ ] Tokens stored in SecureStore / Keychain / EncryptedSharedPreferences
19
+ - [ ] Deep links validated before navigation
20
+ - [ ] No sensitive data in logs
21
+ - [ ] SSL pinning enabled (if required)
22
+ - [ ] ProGuard / R8 enabled for Android release
23
+ - [ ] Debug mode stripped from release build
24
+
25
+ ## Performance
26
+
27
+ - [ ] Lists use FlatList / ListView.builder / LazyColumn (not ScrollView)
28
+ - [ ] Images optimized (resized, cached, lazy loaded)
29
+ - [ ] No main thread blocking
30
+ - [ ] No memory leaks (useEffect cleanup, dispose, [weak self])
31
+ - [ ] App launch time < 3 seconds
32
+ - [ ] Smooth scrolling (60fps)
33
+
34
+ ## UI / UX
35
+
36
+ - [ ] All states handled: loading, success, error, empty
37
+ - [ ] Touch targets >= 44pt (iOS) / 48dp (Android)
38
+ - [ ] Safe area / notch handled
39
+ - [ ] Keyboard dismissal handled
40
+ - [ ] Back button works (Android)
41
+ - [ ] Accessibility labels on interactive elements
42
+ - [ ] Dark mode works (if supported)
43
+
44
+ ## Platform-Specific
45
+
46
+ ### iOS
47
+ - [ ] Correct deployment target set
48
+ - [ ] App icons all sizes provided
49
+ - [ ] Privacy usage descriptions in Info.plist
50
+ - [ ] `pod install` runs clean
51
+ - [ ] Tested on physical device
52
+
53
+ ### Android
54
+ - [ ] `minSdk` / `targetSdk` correct
55
+ - [ ] Signing config for release
56
+ - [ ] Permissions declared in AndroidManifest.xml
57
+ - [ ] Tested on physical device
58
+ - [ ] 64-bit support included
59
+
60
+ ### React Native / Flutter
61
+ - [ ] Both iOS + Android tested
62
+ - [ ] Native modules compile on both platforms
63
+ - [ ] Bundle size acceptable
64
+ - [ ] Hermes enabled (RN) / tree-shaking (Flutter)
65
+
66
+ ## Testing
67
+
68
+ - [ ] Critical paths tested manually
69
+ - [ ] Edge cases: offline, slow network, empty data, expired token
70
+ - [ ] Fresh install tested (no cached data)
71
+ - [ ] Upgrade from previous version tested (if applicable)
72
+ - [ ] Crash reporting SDK integrated (Sentry / Firebase Crashlytics)
73
+
74
+ ## Final
75
+
76
+ - [ ] Version number bumped
77
+ - [ ] Changelog updated
78
+ - [ ] Screenshots / store listing updated (if UI changed)
79
+
80
+ ---
81
+
82
+ > Ship when ALL boxes are checked. Not before.
@@ -0,0 +1,509 @@
1
+ # Version Management — SDK Compatibility First
2
+
3
+ > Treat SDK version as a first-class constraint, not an afterthought.
4
+
5
+ ## Philosophy
6
+
7
+ **Traditional approach:** Install package → hope it works with current SDK
8
+ **This approach:** Check SDK compatibility BEFORE suggesting any package
9
+
10
+ ---
11
+
12
+ ## Version Matrix (React Native / Expo)
13
+
14
+ ### Expo SDK Compatibility
15
+
16
+ ```
17
+ Expo SDK 52 (latest - Jan 2025)
18
+ ├── React Native: 0.76.x
19
+ ├── React: 18.3.x
20
+ ├── Node: >= 18.0.0
21
+ ├── TypeScript: >= 5.3.0
22
+ └── Metro: 0.80.x
23
+
24
+ Expo SDK 51
25
+ ├── React Native: 0.74.x
26
+ ├── React: 18.2.x
27
+ ├── Node: >= 18.0.0
28
+ ├── TypeScript: >= 5.3.0
29
+ └── Metro: 0.80.x
30
+
31
+ Expo SDK 50
32
+ ├── React Native: 0.73.x
33
+ ├── React: 18.2.x
34
+ ├── Node: >= 18.0.0
35
+ ├── TypeScript: >= 5.1.0
36
+ └── Metro: 0.76.x
37
+ ```
38
+
39
+ ### React Native CLI Compatibility
40
+
41
+ ```
42
+ React Native 0.76.x (latest)
43
+ ├── React: 18.3.x
44
+ ├── Node: >= 18.0.0
45
+ ├── TypeScript: >= 5.0.0
46
+ ├── Metro: 0.80.x
47
+ ├── Hermes: Latest
48
+ ├── iOS: >= 13.4
49
+ └── Android: >= 6.0 (API 23)
50
+
51
+ React Native 0.74.x
52
+ ├── React: 18.2.x
53
+ ├── Node: >= 18.0.0
54
+ ├── TypeScript: >= 5.0.0
55
+ ├── Metro: 0.80.x
56
+ ├── iOS: >= 13.4
57
+ └── Android: >= 6.0 (API 23)
58
+
59
+ React Native 0.73.x
60
+ ├── React: 18.2.x
61
+ ├── Node: >= 18.0.0
62
+ ├── TypeScript: >= 5.0.0
63
+ ├── Metro: 0.76.x
64
+ ├── iOS: >= 13.4
65
+ └── Android: >= 6.0 (API 23)
66
+ ```
67
+
68
+ ---
69
+
70
+ ## Flutter SDK Compatibility
71
+
72
+ ```
73
+ Flutter 3.27.x (latest - Jan 2025)
74
+ ├── Dart: >= 3.6.0
75
+ ├── iOS: >= 12.0
76
+ ├── Android: >= 21 (API 21)
77
+ ├── Material: 3.x
78
+ └── Cupertino: Latest
79
+
80
+ Flutter 3.24.x
81
+ ├── Dart: >= 3.5.0
82
+ ├── iOS: >= 12.0
83
+ ├── Android: >= 21 (API 21)
84
+ ├── Material: 3.x
85
+ └── Cupertino: Latest
86
+
87
+ Flutter 3.22.x
88
+ ├── Dart: >= 3.4.0
89
+ ├── iOS: >= 11.0
90
+ ├── Android: >= 21 (API 21)
91
+ ├── Material: 3.x
92
+ └── Cupertino: Latest
93
+ ```
94
+
95
+ ---
96
+
97
+ ## iOS Native Compatibility
98
+
99
+ ```
100
+ iOS 18+ (latest - 2024)
101
+ ├── Xcode: 16.0+
102
+ ├── Swift: 6.0+
103
+ ├── Deployment Target: iOS 13.0+ (recommended)
104
+ └── CocoaPods: 1.15.x
105
+
106
+ iOS 17
107
+ ├── Xcode: 15.0+
108
+ ├── Swift: 5.9+
109
+ ├── Deployment Target: iOS 12.0+
110
+ └── CocoaPods: 1.14.x
111
+
112
+ iOS 16
113
+ ├── Xcode: 14.0+
114
+ ├── Swift: 5.7+
115
+ ├── Deployment Target: iOS 11.0+
116
+ └── CocoaPods: 1.12.x
117
+ ```
118
+
119
+ ---
120
+
121
+ ## Android Native Compatibility
122
+
123
+ ```
124
+ Android 15+ (API 35, latest - 2024)
125
+ ├── Android Studio: Ladybug (2024.2.1)+
126
+ ├── Gradle: 8.7+
127
+ ├── Kotlin: 2.0.x
128
+ ├── AGP (Android Gradle Plugin): 8.7.x
129
+ ├── Compose: 1.7.x
130
+ └── Min SDK: 24 (Android 7.0) recommended
131
+
132
+ Android 14 (API 34)
133
+ ├── Android Studio: Hedgehog (2023.1.1)+
134
+ ├── Gradle: 8.4+
135
+ ├── Kotlin: 1.9.x
136
+ ├── AGP: 8.2.x
137
+ ├── Compose: 1.5.x
138
+ └── Min SDK: 23 (Android 6.0)
139
+
140
+ Android 13 (API 33)
141
+ ├── Android Studio: Flamingo (2022.2.1)+
142
+ ├── Gradle: 8.0+
143
+ ├── Kotlin: 1.8.x
144
+ ├── AGP: 8.0.x
145
+ ├── Compose: 1.4.x
146
+ └── Min SDK: 21 (Android 5.0)
147
+ ```
148
+
149
+ ---
150
+
151
+ ## Package Compatibility Protocol
152
+
153
+ ### BEFORE suggesting ANY package:
154
+
155
+ ```
156
+ STEP 1: DETECT CURRENT SDK
157
+ React Native:
158
+ - Read package.json → react-native version
159
+ - Check expo.sdkVersion (if Expo)
160
+
161
+ Flutter:
162
+ - Read pubspec.yaml → environment.flutter
163
+
164
+ iOS Native:
165
+ - Read Podfile → platform :ios, 'X.X'
166
+ - Read *.xcodeproj/project.pbxproj → IPHONEOS_DEPLOYMENT_TARGET
167
+
168
+ Android Native:
169
+ - Read app/build.gradle → compileSdkVersion, minSdkVersion
170
+
171
+ STEP 2: CHECK PACKAGE COMPATIBILITY
172
+ - Search package docs for version compatibility
173
+ - Check GitHub releases for SDK support
174
+ - Look for "Supported Versions" in README
175
+ - Verify peer dependencies
176
+
177
+ STEP 3: SUGGEST COMPATIBLE VERSION
178
+ ✅ "react-native-reanimated": "^3.6.0" (works with RN 0.73+)
179
+ ❌ "react-native-reanimated": "^3.0.0" (requires RN 0.71+, you have 0.70)
180
+
181
+ If incompatible:
182
+ Option 1: Suggest upgrade SDK first
183
+ Option 2: Suggest older compatible package version
184
+ Option 3: Suggest alternative package
185
+
186
+ STEP 4: WARN ABOUT BREAKING CHANGES
187
+ - Major version changes (3.x → 4.x) = breaking changes
188
+ - SDK upgrades may require migration
189
+ - Link to migration guide if available
190
+ ```
191
+
192
+ ---
193
+
194
+ ## Common Package Compatibility
195
+
196
+ ### React Native
197
+
198
+ | Package | RN 0.76 | RN 0.74 | RN 0.73 | Notes |
199
+ |---------|---------|---------|---------|-------|
200
+ | **react-navigation** | 7.x | 7.x | 6.x | v7 requires RN 0.74+ |
201
+ | **react-native-reanimated** | 3.16+ | 3.10+ | 3.6+ | Always use latest for SDK |
202
+ | **react-native-gesture-handler** | 2.20+ | 2.18+ | 2.14+ | Match with Reanimated |
203
+ | **react-native-safe-area-context** | 4.12+ | 4.10+ | 4.8+ | Used by React Navigation |
204
+ | **react-native-screens** | 4.0+ | 3.34+ | 3.31+ | Used by React Navigation |
205
+ | **@react-native-async-storage** | 2.0+ | 1.24+ | 1.23+ | Separate from RN core |
206
+ | **react-native-mmkv** | 3.x | 3.x | 2.x | Faster than AsyncStorage |
207
+ | **@shopify/flash-list** | 1.7+ | 1.6+ | 1.6+ | Drop-in FlatList replacement |
208
+ | **axios** | 1.7.x | 1.6.x | 1.6.x | Independent of RN version |
209
+ | **zustand** | 5.x | 4.x | 4.x | Independent of RN version |
210
+ | **@tanstack/react-query** | 5.x | 5.x | 4.x | Check React version |
211
+
212
+ ### Expo
213
+
214
+ | Package | Expo 52 | Expo 51 | Expo 50 | Notes |
215
+ |---------|---------|---------|---------|-------|
216
+ | **expo-router** | 4.x | 4.x | 3.x | File-based routing |
217
+ | **expo-image** | ~2.0.0 | ~1.12.0 | ~1.10.0 | Fast image component |
218
+ | **expo-camera** | ~16.0.0 | ~15.0.0 | ~14.0.0 | Camera access |
219
+ | **expo-location** | ~18.0.0 | ~17.0.0 | ~16.0.0 | GPS/location |
220
+ | **expo-notifications** | ~0.29.0 | ~0.28.0 | ~0.27.0 | Push notifications |
221
+ | **expo-secure-store** | ~14.0.0 | ~13.0.0 | ~12.0.0 | Secure storage |
222
+ | **expo-linear-gradient** | ~14.0.0 | ~13.0.0 | ~12.0.0 | Gradient backgrounds |
223
+
224
+ ### Flutter
225
+
226
+ | Package | Flutter 3.27 | Flutter 3.24 | Flutter 3.22 | Notes |
227
+ |---------|--------------|--------------|--------------|-------|
228
+ | **riverpod** | 3.x | 3.x | 2.x | State management |
229
+ | **flutter_riverpod** | 3.x | 3.x | 2.x | Match with riverpod |
230
+ | **go_router** | 15.x | 14.x | 13.x | Declarative routing |
231
+ | **dio** | 5.x | 5.x | 5.x | HTTP client |
232
+ | **flutter_bloc** | 9.x | 9.x | 8.x | BLoC pattern |
233
+ | **hive** | 2.x | 2.x | 2.x | Local database |
234
+ | **sqflite** | 2.x | 2.x | 2.x | SQLite for Flutter |
235
+ | **shared_preferences** | 2.x | 2.x | 2.x | Simple key-value |
236
+ | **flutter_secure_storage** | 9.x | 9.x | 8.x | Secure storage |
237
+ | **cached_network_image** | 3.x | 3.x | 3.x | Image caching |
238
+
239
+ ---
240
+
241
+ ## Migration Guides
242
+
243
+ ### React Native Major Upgrades
244
+
245
+ ```
246
+ 0.73 → 0.74:
247
+ - New Architecture enabled by default
248
+ - Update Gradle to 8.3+
249
+ - Update CMake if using C++ modules
250
+ - Review breaking changes: https://react-native-community.github.io/upgrade-helper/
251
+
252
+ 0.74 → 0.76:
253
+ - React 18.3 required
254
+ - Update Metro config
255
+ - Check deprecated APIs
256
+ - Test with Hermes engine
257
+
258
+ Expo SDK 50 → 51:
259
+ - Run: npx expo install --fix
260
+ - Update app.json with new config
261
+ - Check deprecated expo-* packages
262
+ - Test deep linking configuration
263
+
264
+ Expo SDK 51 → 52:
265
+ - React Native 0.76 included
266
+ - Update expo-router if used
267
+ - Check for breaking changes in expo-* packages
268
+ ```
269
+
270
+ ### Flutter Major Upgrades
271
+
272
+ ```
273
+ 3.22 → 3.24:
274
+ - Dart 3.5 required
275
+ - Update Material widgets to Material 3
276
+ - Check for deprecated APIs
277
+ - Run: flutter pub upgrade --major-versions
278
+
279
+ 3.24 → 3.27:
280
+ - Dart 3.6 required
281
+ - New widget deprecations
282
+ - Performance improvements
283
+ - Run: flutter pub upgrade --major-versions
284
+ ```
285
+
286
+ ---
287
+
288
+ ## Pre-Installation Checklist
289
+
290
+ Before suggesting `npm install` / `yarn add` / `flutter pub add`:
291
+
292
+ ```
293
+ □ Current SDK version detected
294
+ □ Package compatibility verified
295
+ □ Peer dependencies checked
296
+ □ Breaking changes reviewed
297
+ □ Migration guide (if needed) linked
298
+ □ Alternative options considered
299
+ ```
300
+
301
+ ---
302
+
303
+ ## Version Lock Strategy
304
+
305
+ ### React Native / Expo
306
+
307
+ ```json
308
+ // package.json
309
+ {
310
+ "dependencies": {
311
+ "react-native-reanimated": "~3.6.0", // ~ allows patch (3.6.x)
312
+ "react-navigation": "^6.0.0", // ^ allows minor (6.x.x)
313
+ "axios": "1.6.2" // exact version
314
+ }
315
+ }
316
+
317
+ RULES:
318
+ - Core RN libraries: Use ~ (patch updates only)
319
+ - Navigation/UI: Use ^ (minor updates OK)
320
+ - Data/API: Use exact version (full control)
321
+ ```
322
+
323
+ ### Flutter
324
+
325
+ ```yaml
326
+ # pubspec.yaml
327
+ dependencies:
328
+ flutter_riverpod: ^3.0.0 # ^ allows compatible updates
329
+ dio: 5.4.0 # exact version
330
+ go_router: '>=13.0.0 <14.0.0' # range constraint
331
+
332
+ RULES:
333
+ - State management: Use ^ (minor updates OK)
334
+ - HTTP/API: Use exact version
335
+ - Routing: Use range (controlled updates)
336
+ ```
337
+
338
+ ---
339
+
340
+ ## Dependency Conflict Resolution
341
+
342
+ ### React Native
343
+
344
+ ```bash
345
+ # Check for conflicts
346
+ npm ls <package-name>
347
+ yarn why <package-name>
348
+
349
+ # Common conflict: react-native-reanimated + react-native
350
+ Error: react-native-reanimated@3.6.0 requires react-native@>=0.72
351
+
352
+ Fix:
353
+ 1. Upgrade react-native to 0.72+
354
+ 2. OR downgrade react-native-reanimated to 3.5.x
355
+ 3. Check compatibility matrix above
356
+ ```
357
+
358
+ ### Flutter
359
+
360
+ ```bash
361
+ # Check for conflicts
362
+ flutter pub deps
363
+
364
+ # Common conflict: riverpod + flutter_riverpod versions mismatch
365
+ Error: riverpod ^3.0.0 depends on flutter_riverpod ^3.0.0
366
+
367
+ Fix:
368
+ 1. Ensure versions match:
369
+ riverpod: ^3.0.0
370
+ flutter_riverpod: ^3.0.0
371
+ ```
372
+
373
+ ---
374
+
375
+ ## Release Mode Testing
376
+
377
+ **CRITICAL:** Always test in release mode before submitting to stores.
378
+
379
+ ### React Native
380
+
381
+ ```bash
382
+ # iOS Release
383
+ cd ios && pod install && cd ..
384
+ npx react-native run-ios --configuration Release
385
+
386
+ # Android Release
387
+ npx react-native run-android --variant=release
388
+
389
+ COMMON RELEASE-ONLY ISSUES:
390
+ - Hermes bytecode compilation errors
391
+ - Minification breaks code
392
+ - Missing native modules
393
+ - Performance regressions
394
+ ```
395
+
396
+ ### Expo
397
+
398
+ ```bash
399
+ # EAS Build (production-like)
400
+ eas build --profile preview --platform ios
401
+ eas build --profile preview --platform android
402
+
403
+ # Local release build
404
+ npx expo run:ios --configuration Release
405
+ npx expo run:android --variant release
406
+ ```
407
+
408
+ ### Flutter
409
+
410
+ ```bash
411
+ # iOS Release
412
+ flutter build ios --release
413
+ flutter run --release
414
+
415
+ # Android Release
416
+ flutter build apk --release
417
+ flutter build appbundle --release
418
+
419
+ COMMON RELEASE-ONLY ISSUES:
420
+ - Code obfuscation breaks reflection
421
+ - Missing native permissions
422
+ - Assets not bundled correctly
423
+ ```
424
+
425
+ ---
426
+
427
+ ## Version Documentation
428
+
429
+ Always document SDK requirements in README:
430
+
431
+ ```markdown
432
+ ## Requirements
433
+
434
+ - **React Native:** 0.74.x
435
+ - **Expo SDK:** 51 (if using Expo)
436
+ - **Node:** >= 18.0.0
437
+ - **iOS:** >= 13.0
438
+ - **Android:** >= API 23 (Android 6.0)
439
+ - **Xcode:** 15.0+ (for iOS development)
440
+ - **Android Studio:** Hedgehog (2023.1.1)+ (for Android development)
441
+
442
+ ## Dependency Versions
443
+
444
+ Key dependencies are locked to compatible versions. Do not upgrade without testing:
445
+
446
+ - `react-native-reanimated`: ~3.6.0
447
+ - `@react-navigation/native`: ^6.0.0
448
+ - `react-native-mmkv`: ^2.12.0
449
+
450
+ See `package.json` for full list.
451
+ ```
452
+
453
+ ---
454
+
455
+ ## Auto-Detection Script
456
+
457
+ Add to project for teammates:
458
+
459
+ ```javascript
460
+ // scripts/check-versions.js
461
+ const { execSync } = require('child_process');
462
+ const pkg = require('../package.json');
463
+
464
+ const RN_VERSION = pkg.dependencies['react-native'];
465
+ const NODE_VERSION = process.version;
466
+ const REQUIRED_NODE = '18.0.0';
467
+
468
+ console.log('📦 Version Check');
469
+ console.log(`React Native: ${RN_VERSION}`);
470
+ console.log(`Node: ${NODE_VERSION} (required: >=${REQUIRED_NODE})`);
471
+
472
+ // Check Node version
473
+ if (parseInt(NODE_VERSION.slice(1)) < parseInt(REQUIRED_NODE)) {
474
+ console.error(`❌ Node version too old. Please upgrade to ${REQUIRED_NODE}+`);
475
+ process.exit(1);
476
+ }
477
+
478
+ // Check iOS deployment target
479
+ try {
480
+ const podfile = require('fs').readFileSync('ios/Podfile', 'utf8');
481
+ const match = podfile.match(/platform :ios, '(\d+\.\d+)'/);
482
+ if (match) {
483
+ console.log(`iOS Deployment Target: ${match[1]}`);
484
+ }
485
+ } catch {}
486
+
487
+ console.log('✅ All version checks passed');
488
+ ```
489
+
490
+ Run before every install:
491
+ ```json
492
+ {
493
+ "scripts": {
494
+ "preinstall": "node scripts/check-versions.js"
495
+ }
496
+ }
497
+ ```
498
+
499
+ ---
500
+
501
+ ## Summary
502
+
503
+ **Core Principle:** SDK version is the foundation. Everything else must align with it.
504
+
505
+ **Workflow:**
506
+ 1. Detect SDK version FIRST
507
+ 2. Check package compatibility SECOND
508
+ 3. Suggest installation THIRD
509
+ 4. Test in release mode BEFORE production