Самый быстрый способ создать мобильное приложение с ИИ: пусть кодинг-агент поднимет проект React Native с Expo, проверяйте каждое изменение на своём телефоне через Expo Go и используйте облачный бэкенд вроде Supabase или Firebase. Агент пишет экраны, слой данных и вход; вы тестируете на устройстве, возвращаете ему ошибки и проходите шаги магазинов. Для публикации по-прежнему нужны аккаунты разработчика Apple и Google и их проверка.
В статье весь путь от пустой папки до магазинов: какой стек я выбираю и почему, первый промпт для агента, как я тестирую на телефоне, авторизация и уведомления, публикация и места, где агенты спотыкаются чаще всего.
Сначала расставим ожидания
Между vibe coding сайта и vibe coding мобильного приложения есть настоящая разница. В вебе, если код работает, вы закончили. В мобильной разработке над кодом лежит платформенный слой: инструменты сборки, сертификаты подписи, разрешения, правила магазинов. С большей частью кода агент справляется уверенно; платформенная часть требует ваших глаз и рук.
Хорошая новость: при правильных инструментах большую часть этого слоя вы в первые недели не заденете.
Какой стек: Expo, Flutter или нативный
Есть три основных маршрута.
| Вариант | Язык | Зачем выбирать | На что обратить внимание |
|---|---|---|---|
| React Native + Expo | TypeScript | Мгновенное тестирование на устройстве через Expo Go, облачные сборки, язык, который агенты знают лучше всего | Нативные библиотеки не работают в Expo Go; нужна development-сборка |
| Flutter | Dart | Одна кодовая база, единый внешний вид, сильные инструменты | У агентов меньше примеров на Dart; для тестов на устройстве нужен локальный набор инструментов |
| Нативный (Swift / Kotlin) | Swift, Kotlin | Полный доступ к платформе, лучшая производительность | Два отдельных приложения, нужны Xcode и Android Studio |
Для новичка мой ответ ясен: React Native + Expo. Причина не столько в технических достоинствах, сколько в скорости обратной связи. Агент что-то меняет, и через секунды вы видите это на телефоне. Чем короче этот цикл, тем лучше работает vibe coding.
Flutter хороший выбор, если вы знаете Dart или ваша команда уже его использует. Нативная разработка оправданна только по конкретной причине: обработка камеры, тяжёлая графика или глубокая интеграция с платформой.
Шаг 1: подготовка
Что понадобится:
- Node.js (релиз LTS) и менеджер пакетов
- Кодинг-агент: Claude Code, Codex, Gemini CLI или другой кодинг-агент
- Expo Go на телефоне из App Store или Google Play
- Git, чтобы любой шаг агента можно было отменить
Создайте проект сами. Агенты, создающие каркас с нуля, иногда берут устаревшие шаблоны:
npx create-expo-app@latest habits
cd habits
git init && git add -A && git commit -m "initial scaffold"
npx expo start
В терминале появится QR-код. Отсканируйте его камерой iPhone или изнутри Expo Go на Android, и приложение откроется на телефоне. Компьютер и телефон должны быть в одной сети Wi‑Fi. Если мешает сеть, попробуйте npx expo start --tunnel.
Шаг 2: первый промпт
Первый промпт определяет каждое решение, которое агент примет дальше. Оставите пробелы, и он заполнит их своими предпочтениями. Я пишу примерно так:
This is an Expo (React Native, TypeScript) project. We're building a
simple habit tracker.
Screens:
1. Today: list of habits, each with a "done" button
2. Add: create a habit with a name and a daily goal
3. History: calendar view of the last 30 days
Rules:
- Use expo-router for navigation and follow the existing app/ folder.
- Keep data on the device for now (AsyncStorage). Backend comes later.
- Add packages with npx expo install, not npm install.
- Don't add native packages that don't run in Expo Go; ask first.
- Run npx tsc --noEmit after each step and fix the errors.
- When done, list the files you changed.
Важнее всего две строки. npx expo install подбирает версию пакета под ваш Expo SDK, а агенты постоянно про неё забывают. Правило «никаких пакетов, не работающих в Expo Go» удерживает вас вне нативных сборок, пока они действительно не понадобятся.
Шаг 3: тестируйте на телефоне и повторяйте
Пока работает npx expo start, приложение на телефоне перезагружается по мере того, как агент правит файлы. Цикл такой:
- Попробуйте на телефоне и отметьте, что не так.
- Скажите агенту точно: «На экране Add клавиатура закрывает кнопку сохранения на iPhone».
- Если появляется красный экран ошибки, скопируйте текст агенту дословно. Скриншот тоже работает; большинство агентов умеют читать изображения.
- Делайте коммит после каждого рабочего шага.
Тестируйте и на iOS, и на Android. Один и тот же код ведёт себя по-разному: отступы безопасной области, работа с клавиатурой, кнопка «назад», тени. Если телефон только один, для другой платформы используйте эмулятор Android или (на Mac) iOS Simulator.
Шаг 4: бэкенд на Supabase или Firebase
Когда нужны данные, общие для устройств, и учётные записи пользователей, нужен бэкенд. Не пишите собственный сервер; выберите облачный:
- Supabase: построен на PostgreSQL. База данных, авторизация, хранилище файлов и обновления в реальном времени. Подходит, если вы знаете SQL или хотите его освоить.
- Firebase: платформа Google. База документов Firestore, авторизация, сообщения. Тесно интегрирована с мобильной экосистемой.
Пусть агент строит слой за слоем, а не всё сразу:
We're moving to Supabase. For now, only do this:
1. Write a SQL file under supabase/migrations that creates habits and
completions tables. Every row has a user_id.
2. Enable Row Level Security on both tables so a user can only read
and write their own rows.
3. Don't change the app code yet. Show me the SQL; I'll apply it.
Не пропускайте часть про RLS. Ключ Supabase, поставляемый внутри мобильного приложения, публичен по замыслу; ваши данные защищают правила в базе, а не секретность этого ключа. В Firebase ту же роль играют правила безопасности.
Шаг 5: авторизация
Вход по почте проще всего; его дают и Supabase, и Firebase. Вход через Google и Sign in with Apple требуют больше настройки: redirect URI, схема приложения и регистрация в консоли каждой платформы.
Стоит знать: по правилам App Store, если приложение предлагает вход через стороннюю соцсеть, Apple может ожидать также Sign in with Apple или равнозначный вариант с упором на приватность, с некоторыми исключениями. Перед отправкой проверьте действующие правила.
Так я прошу сделать авторизацию:
Add email + password sign-in with Supabase Auth.
- If there's no session, redirect to the sign-in screen.
- Store the session with expo-secure-store.
- Put a sign-out button on the Settings screen.
- Error messages should be clear and in plain English.
Don't add Google or Apple sign-in yet.
Шаг 6: push-уведомления
Push-уведомления отнимают больше времени, чем что-либо ещё в мобильной разработке. В Expo начинают с expo-notifications:
npx expo install expo-notifications expo-device
Что нужно знать:
- Локальные уведомления («напоминай каждый вечер в 21:00») не требуют сервера и намного проще. Для трекера привычек их часто достаточно.
- Удалённый push означает получение push-токена, его хранение на вашем сервере и отправку оттуда. На iOS для этого нужны аккаунт Apple Developer и возможность push.
- Тестируйте поведение уведомлений на настоящем устройстве. Поддержка уведомлений в симуляторе и Expo Go может быть ограничена и со временем меняется.
Сначала попросите у агента локальные уведомления, убедитесь, что они работают, и только потом переходите к удалённому push.
Шаг 7: сборки и магазины
Expo Go нужен для разработки; в магазины уходит настоящий бинарный файл приложения. Облачный сервис Expo, EAS, соберёт его за вас:
npm install -g eas-cli
eas login
eas build:configure
eas build --platform android
eas build --platform ios
Главный плюс облачных сборок в том, что не нужно самому настраивать Xcode и Android SDK. Сборку для iOS можно сделать даже без Mac.
Apple:
- Платное годовое членство в Apple Developer Program.
- Запись приложения в App Store Connect со скриншотами, описанием, URL политики конфиденциальности и раскрытием данных App Privacy.
- Сначала распространите сборку через TestFlight себе и нескольким тестировщикам, затем отправляйте на проверку.
- Отказы это нормально. Частые причины: сбои, нет текста о конфиденциальности, «обёртки сайтов» без содержимого и приложения, где можно создать аккаунт, но нельзя его удалить.
Google:
- Разовая платная регистрация в Google Play Console и подтверждение личности.
- Страница приложения в магазине, анкета возрастного рейтинга и форма Data safety.
- Новым личным аккаунтам разработчика может понадобиться закрытое тестирование с определённым числом тестировщиков в течение определённого срока, прежде чем выйти в продакшен; действующее правило смотрите в консоли.
eas submit упрощает отправку сборок в оба магазина, но формы магазинов вы заполняете сами. Читайте их, а не перепоручайте агенту; объявлять, какие данные собирает приложение, ваша ответственность.
Где агенты испытывают трудности
Это список мест, где я потерял больше всего времени на vibe coding мобильных приложений.
Ошибки нативной сборки
Gradle, CocoaPods, версии Xcode, уровни Android SDK. Эти ошибки длинные, шумные и зависят от окружения. Агент не видит Xcode на вашей машине; он гадает. Что помогает:
- Вставляйте полный вывод ошибки, а не первые строки. Настоящая причина часто ближе к концу или спрятана посередине.
- Где можно, используйте EAS Build; окружение остаётся неизменным.
- Не позволяйте агенту править вручную папки
ios/иandroid/. В Expo они обычно генерируются из конфигурации, поэтому долговечные изменения принадлежатapp.jsonили config plugin.
Подпись и сертификаты
Сертификаты, provisioning-профили и bundle identifier на iOS; keystore на Android. Агенты могут давать здесь уверенные, но неверные инструкции. Самый гладкий путь — отдать управление учётными данными EAS. Если вы потеряете ключ загрузки Android, выпускать обновления того же приложения станет настоящей головной болью, поэтому сделайте его резервную копию.
Несовпадение версий
Агент использует API пакета из времени своего обучения; в вашем проекте версия может быть другой. npx expo install --check покажет несовпадающие пакеты. Помогает указание агенту: «сначала проверь версию в package.json, затем пиши по документации этой версии».
Тестирование только на одной платформе
Агент пишет вёрстку, которая работает на iOS и вылезает за края на Android. Смотрите каждую функцию на обеих.
Просьба сделать всё сразу
«Добавь авторизацию, уведомления и платежи» оставляет все три наполовину готовыми. Одна функция за раз, коммит между ними.
Безопасность на мобильных важна ещё больше
Всё, что вы кладёте в мобильное приложение, оказывается на устройстве пользователя, где это можно распаковать и прочитать. Поэтому:
- Никогда не кладите секреты в бандл приложения. В Expo переменные окружения с префиксом
EXPO_PUBLIC_встраиваются в бандл, то есть становятся публичными. Ключservice_roleSupabase, секретный ключ платёжного провайдера или API-ключ ИИ ни в коем случае не должны попадать в приложение; их место на стороне сервера, например в edge-функции. - Храните секреты в файле
.envи убедитесь, что.envв.gitignore. - Не вставляйте API-ключи в чат. Говорите агенту, какую переменную окружения читать, а не сам ключ.
- Проверяйте правила базы данных. Войдите вторым аккаунтом и посмотрите, можно ли прочитать данные первого.
- Читайте команды, которые запускает агент, особенно
eas,git push, удаления и команды базы данных, прежде чем одобрять.
Как это делается в AgentVera
Всё описанное можно делать в обычном терминале. В мобильных проектах мне нравится запускать нескольких агентов рядом, и я делаю это в AgentVera:
- Отдельные агенты в отдельных worktree. Например, Claude Code работает над схемой Supabase и edge-функциями в одном git worktree, пока Codex делает экраны в другом. Панель Git показывает изменения каждой ветки.
- Терминал в сетке.
npx expo startостаётся открытым в одной панели, и вы видите вывод Metro рядом с агентами; для этого и нужна панель редактора и терминала. - Ревью перед слиянием. Автоматическое ревью кода отдаёт каждый ход агента на проверку второй модели; diff всё равно стоит прочитать самому.
- База данных. Добавьте подключение к Postgres Supabase в менеджер баз данных, чтобы проверять таблицы и строки, созданные агентом.
- Учёт токенов. Длинные логи сборки быстро раздувают контекст; расход токенов виден по каждой панели.
AgentVera не собирает приложение для вашего телефона и не отправляет его в магазины; эта часть остаётся за Expo и консолями магазинов.
Краткий чек-лист
- Проект Expo создан вами, первый коммит в git
- В первом промпте перечислены экраны, правила и требование
npx expo install - Каждая функция проверена на телефоне, на обеих платформах
- RLS в Supabase или правила безопасности Firebase включены и проверены
- В бандле приложения нет секретных ключей
- Резервная копия keystore Android сделана
- Политика конфиденциальности и раскрытия данных для магазинов готовы
Подводим итоги
Создать мобильное приложение с ИИ сегодня реально, но всё не заканчивается на «напиши мне приложение». Начните с Expo, смотрите каждое изменение на телефоне через Expo Go, используйте облачный бэкенд, добавляйте функции по одной и сами проходите платформенные шаги: подпись, формы магазинов, проверку. О проверке написанного агентом читайте в статье ревью кода с ИИ, о параллельной работе агентов в статье git worktree для параллельных агентов.