Хотите создать одно приложение, которое будет работать и на iPhone, и на Android, используя знакомый JavaScript? React Native — это фреймворк от Facebook (Meta), который позволяет именно это. Это не гибридное приложение в WebView, а настоящий нативный код, что даёт высокую производительность и доступ ко всем возможностям устройства. В этой статье мы пройдём весь путь: от настройки окружения до публикации в магазинах.
Что такое React Native и почему он?
React Native — это фреймворк для создания кроссплатформенных мобильных приложений. Вы пишете код на JavaScript (или TypeScript), используя философию и компоненты React, а фреймворк преобразует его в нативные элементы интерфейса для iOS (UIKit) и Android (Android Views). Это значит, что ваше приложение будет выглядеть и вести себя как «родное» для каждой платформы.
Ключевое преимущество: До 90% кода можно использовать для обеих платформ. Оставшиеся 10% — это настройка специфичного для iOS или Android поведения, что также легко делается в React Native.
Подготовка и настройка окружения
Первым делом нужно установить необходимые инструменты. Рекомендуемый способ — использование Expo, который значительно упрощает начало работы, или «чистый» React Native CLI для полного контроля.
Вариант 1: Быстрый старт с Expo
- Установите Node.js.
- В терминале выполните:
npm install -g expo-cli - Создайте проект:
expo init MyFirstApp - Перейдите в папку проекта и запустите:
npm startилиexpo start
Expo предоставляет свой клиент для тестирования на физическом устройстве (через QR-код) и симулятор.
Вариант 2: React Native CLI (более гибкий)
Потребуется установка Android Studio (для эмулятора Android и SDK) и/или Xcode (для симулятора iOS, только на macOS).
- Установите Node.js, Watchman (рекомендуется).
- Установите CLI:
npm install -g react-native-cli - Создайте проект:
npx react-native init AwesomeProject - Запустите для iOS:
npx react-native run-ios - Запустите для Android:
npx react-native run-android
Структура проекта и первый компонент
После инициализации вы увидите знакомую для React-разработчика структуру. Ключевые файлы:
App.js— точка входа, корневой компонент.index.js— регистрирует приложение.- Папки
android/иios/— нативные проекты. При работе с Expo они скрыты.
Давайте создадим простой экран с приветствием и кнопкой:
import React from 'react';
import { View, Text, StyleSheet, Button, Alert } from 'react-native';
export default function App() {
return (
Добро пожаловать в React Native!
);
}
const styles = StyleSheet.create({
container: { flex: 1, justifyContent: 'center', alignItems: 'center' },
title: { fontSize: 20, fontWeight: 'bold', marginBottom: 20 }
});
Навигация, состояние и работа с API
Для навигации между экранами стандартного решения нет, но сообщество рекомендует библиотеки React Navigation (на JavaScript) или React Native Navigation от Wix (использует нативные контроллеры). Установка React Navigation: npm install @react-navigation/native @react-navigation/stack.
Для управления состоянием приложения можно использовать Context API, Redux, MobX или Zustand — всё как в веб-React.
Работа с API осуществляется стандартным fetch или библиотеками типа axios. Не забывайте обрабатывать состояния загрузки и ошибок.
Важный момент: Для запросов к HTTP-ресурсам в Android начиная с API 28 по умолчанию требуется HTTPS. Для разработки можно добавить android:usesCleartextTraffic=\"true\" в AndroidManifest.xml, но для продакшена всегда используйте HTTPS.
Доступ к функциям устройства
React Native предоставляет множество API для доступа к нативным функциям: камера, геолокация, контакты, файловая система. Часто они входят в ядро (например, Geolocation), но для более специфичных задач (например, сканер отпечатков) ищите проверенные библиотеки на React Native Directory.
Пример получения геолокации:
import { PermissionsAndroid, Platform } from 'react-native';
import Geolocation from '@react-native-community/geolocation';
// Не забудьте запросить разрешения! Для Android манифест и runtime-запрос.
Сборка и публикация
Для Android (APK/AAB):
- Сгенерируйте ключ подписи.
- Настройте
android/gradle.propertiesиandroid/app/build.gradle. - Выполните в папке
android:./gradlew bundleRelease(для AAB) или./gradlew assembleRelease(для APK). - Загрузите AAB в Google Play Console.
Для iOS (IPA):
- Вам понадобится аккаунт Apple Developer ($99/год).
- Настройте проект в Xcode: идентификатор, профили provisioning.
- Выберите схему
Releaseи устройствоAny iOS Device. - Меню
Product->Archive, затем загрузка черезDistribute Appв App Store Connect.
С Expo процесс проще: expo build:android или expo build:ios, а затем загрузка через expo upload:android или Transporter для iOS.
FAQ: Часто задаваемые вопросы
React Native или Flutter?
React Native использует JavaScript и React, что удобно веб-разработчикам. Flutter от Google использует Dart и собственный движок отрисовки. Выбор зависит от команды и требований к UI. React Native имеет более зрелое сообщество и больше готовых библиотек.
Нужно ли знать Swift/Kotlin?
Для большинства задач — нет. Но для написания собственных нативных модулей или тонкой настройки производительности знание нативных языков будет большим плюсом.
Какие есть ограничения?
Сложные анимации, требующие 60 FPS, или приложения, сильно зависящие от специфичного нативного UI, могут потребовать больше усилий. Также «горячее» обновление кода (как в Expo) не допускается в магазинах приложений.
Как обновлять приложение у пользователей?
Для критических исправлений можно использовать сервисы типа CodePush от Microsoft (App Center), которые позволяют обновлять JavaScript-код, минуя магазины приложений.