Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build and manage React Native/Expo mobile apps including project setup, development workflows, and platform-specific guidance. Use when working on mobile app development, configuration, or running apps.
.claude/skills/aiskillstore-react-native-mobile-development/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | -21% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 3% | 0% |
| case-02 | ✓→✓ | = Same ✓ | -6% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 17% | 0% |
Guide for building mobile apps with React Native and Expo.
bash# Development npm start # Start Metro bundler npm run ios # Run on iOS Simulator npm run android # Run on Android Emulator # Expo specific npx expo start # Start with Expo CLI npx expo install PKG # Install compatible packages npx expo prebuild # Generate native code
typescript// Mobile component template import { View, Text, TouchableOpacity, StyleSheet } from 'react-native'; interface Props { title: string; onPress: () => void; } export function MyComponent({ title, onPress }: Props) { return ( <TouchableOpacity onPress={onPress} style={styles.container}> <Text style={styles.text}>{title}</Text> </TouchableOpacity> ); } const styles = StyleSheet.create({ container: { padding: 16, backgroundColor: '#007AFF', borderRadius: 8, }, text: { color: '#FFFFFF', fontSize: 16, fontWeight: '600', }, });
typescriptimport { Platform } from 'react-native'; // Conditional rendering {Platform.OS === 'ios' && <IOSComponent />} {Platform.OS === 'android' && <AndroidComponent />} // Platform-specific values const height = Platform.select({ ios: 44, android: 56, default: 50, }); // Platform-specific styles const styles = StyleSheet.create({ container: { ...Platform.select({ ios: { shadowColor: '#000', shadowOpacity: 0.3 }, android: { elevation: 4 }, }), }, });
StyleSheet.create(), avoid inline styles, optimize imagesaccessibilityLabel and accessibilityRoletypescriptimport { FlatList } from 'react-native'; <FlatList data={items} keyExtractor={(item) => item.id} renderItem={({ item }) => <ItemComponent item={item} />} />
typescriptimport { TextInput } from 'react-native'; const [value, setValue] = useState(''); <TextInput value={value} onChangeText={setValue} placeholder="Enter text" style={styles.input} />
typescriptimport { ActivityIndicator } from 'react-native'; {loading ? <ActivityIndicator /> : <Content />}
npx expo start --clearnpx expo prebuild --cleanapp.json configuration| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | fail→pass | 31,674 | 10,208 | -68% | 1 | 1 | 0% | 3,494 | 2,759 | -21% | 0 | 0 | — |
case-01 | pass→pass | 21,800 | 18,589 | -15% | 1 | 1 | 0% | 3,108 | 3,213 | +3% | 0 | 0 | — |
case-02 | pass→pass | 13,022 | 7,962 | -39% | 1 | 1 | 0% | 2,532 | 2,372 | -6% | 0 | 0 | — |
case-03 | pass→pass | 12,364 | 8,912 | -28% | 1 | 1 | 0% | 2,244 | 2,627 | +17% | 0 | 0 | — |
case-05 | fail→pass | 18,477 | 14,585 | -21% | 1 | 1 | 0% | 3,113 | 4,227 | +36% | 0 | 0 | — |
case-06 | pass→pass | 8,249 | 7,539 | -9% | 1 | 1 | 0% | 361 | 1,149 | +218% | 0 | 0 | — |
case-07 | pass→pass | 2,168 | 7,598 | +250% | 1 | 1 | 0% | 321 | 1,230 | +283% | 0 | 0 | — |
case-08 | pass→pass | 10,657 | 2,305 | -78% | 1 | 1 | 0% | 968 | 1,227 | +27% | 0 | 0 | — |
case-13 | pass→pass | 4,476 | 7,761 | +73% | 1 | 1 | 0% | 740 | 1,215 | +64% | 0 | 0 | — |
case-09 | pass→pass | 13,302 | 9,847 | -26% | 1 | 1 | 0% | 1,505 | 1,701 | +13% | 0 | 0 | — |
case-10 | pass→pass | 4,772 | 7,258 | +52% | 1 | 1 | 0% | 817 | 1,208 | +48% | 0 | 0 | — |
case-11 | fail→fail | 12,485 | 11,689 | -6% | 1 | 1 | 0% | 1,488 | 2,200 | +48% | 0 | 0 | — |
case-12 | pass→pass | 12,296 | 11,205 | -9% | 1 | 1 | 0% | 1,456 | 1,897 | +30% | 0 | 0 | — |
case-14 | pass→pass | 10,901 | 10,135 | -7% | 1 | 1 | 0% | 1,826 | 1,764 | -3% | 0 | 0 | — |
case-15 | pass→pass | 13,745 | 9,648 | -30% | 1 | 1 | 0% | 960 | 1,635 | +70% | 0 | 0 | — |
case-16 | pass→pass | 8,961 | 2,207 | -75% | 1 | 1 | 0% | 653 | 1,140 | +75% | 0 | 0 | — |
case-17 | pass→pass | 5,251 | 7,898 | +50% | 1 | 1 | 0% | 731 | 1,146 | +57% | 0 | 0 | — |
case-18 | pass→pass | 7,492 | 10,164 | +36% | 1 | 1 | 0% | 870 | 1,772 | +104% | 0 | 0 | — |
case-19 | pass→pass | 6,721 | 8,756 | +30% | 1 | 1 | 0% | 1,238 | 1,497 | +21% | 0 | 0 | — |
case-20 | pass→pass | 14,034 | 7,063 | -50% | 1 | 1 | 0% | 1,317 | 1,926 | +46% | 0 | 0 | — |
case-21 | fail→fail | 32,943 | 18,912 | -43% | 1 | 1 | 0% | 2,557 | 3,204 | +25% | 0 | 0 | — |
case-22 | pass→pass | 16,816 | 15,001 | -11% | 1 | 1 | 0% | 2,373 | 2,702 | +14% | 0 | 0 | — |
case-23 | pass→pass | 3,186 | 8,104 | +154% | 1 | 1 | 0% | 521 | 1,218 | +134% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.