@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.
- package/AGENTS.md +392 -0
- package/README.md +224 -0
- package/SKILL.md +1048 -0
- package/android/android-native.md +208 -0
- package/bin/install.mjs +199 -0
- package/flutter/flutter.md +246 -0
- package/ios/ios-native.md +182 -0
- package/package.json +50 -0
- package/react-native/react-native.md +743 -0
- package/shared/agent-rules-template.md +343 -0
- package/shared/anti-patterns.md +407 -0
- package/shared/bug-detection.md +71 -0
- package/shared/claude-md-template.md +125 -0
- package/shared/code-review.md +121 -0
- package/shared/common-pitfalls.md +117 -0
- package/shared/document-analysis.md +167 -0
- package/shared/error-recovery.md +467 -0
- package/shared/observability.md +688 -0
- package/shared/performance-prediction.md +210 -0
- package/shared/platform-excellence.md +159 -0
- package/shared/prompt-engineering.md +677 -0
- package/shared/release-checklist.md +82 -0
- package/shared/version-management.md +509 -0
|
@@ -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
|