# Мобильное приложение с ИИ: от Expo до магазинов

URL: https://agentvera.dev/ru/blog/build-mobile-app-with-ai/ · Опубликовано: 2026-10-11

Как создать мобильное приложение с ИИ: Expo или Flutter, тесты на телефоне, Supabase, авторизация, push-уведомления и публикация в App Store и Google Play.

**Коротко:**

- Новичкам проще всего React Native с Expo: Expo Go показывает каждое изменение на телефоне за секунды, а облачные сборки EAS избавляют от настройки Xcode и Android SDK.
- Облачный бэкенд вроде Supabase или Firebase даёт авторизацию и данные, но ключ внутри приложения публичный, поэтому данные защищают Row Level Security или правила безопасности.
- Для публикации нужны платное годовое членство в Apple Developer Program и разовая платная регистрация в Google Play Console, а формы магазинов о конфиденциальности и данных вы заполняете сами.

Самый быстрый способ создать мобильное приложение с ИИ: пусть кодинг-агент поднимет проект React Native с Expo, проверяйте каждое изменение на своём телефоне через Expo Go и используйте облачный бэкенд вроде Supabase или Firebase. Агент пишет экраны, слой данных и вход; вы тестируете на устройстве, возвращаете ему ошибки и проходите шаги магазинов. Для публикации по-прежнему нужны аккаунты разработчика Apple и Google и их проверка.

В статье весь путь от пустой папки до магазинов: какой стек я выбираю и почему, первый промпт для агента, как я тестирую на телефоне, авторизация и уведомления, публикация и места, где агенты спотыкаются чаще всего.

## Сначала расставим ожидания

Между [vibe coding](/ru/glossary/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 или другой [кодинг-агент](/ru/glossary/coding-agent/)
- **Expo Go на телефоне** из App Store или Google Play
- **Git**, чтобы любой шаг агента можно было отменить

Создайте проект сами. Агенты, создающие каркас с нуля, иногда берут устаревшие шаблоны:

```bash
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: первый промпт

Первый промпт определяет каждое решение, которое агент примет дальше. Оставите пробелы, и он заполнит их своими предпочтениями. Я пишу примерно так:

```text
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`, приложение на телефоне перезагружается по мере того, как агент правит файлы. Цикл такой:

1. Попробуйте на телефоне и отметьте, что не так.
2. Скажите агенту точно: «На экране Add клавиатура закрывает кнопку сохранения на iPhone».
3. Если появляется красный экран ошибки, скопируйте текст агенту дословно. Скриншот тоже работает; большинство агентов умеют читать изображения.
4. Делайте коммит после каждого рабочего шага.

Тестируйте и на iOS, и на Android. Один и тот же код ведёт себя по-разному: отступы безопасной области, работа с клавиатурой, кнопка «назад», тени. Если телефон только один, для другой платформы используйте эмулятор Android или (на Mac) iOS Simulator.

## Шаг 4: бэкенд на Supabase или Firebase

Когда нужны данные, общие для устройств, и учётные записи пользователей, нужен бэкенд. Не пишите собственный сервер; выберите облачный:

- **Supabase**: построен на PostgreSQL. База данных, авторизация, хранилище файлов и обновления в реальном времени. Подходит, если вы знаете SQL или хотите его освоить.
- **Firebase**: платформа Google. База документов Firestore, авторизация, сообщения. Тесно интегрирована с мобильной экосистемой.

Пусть агент строит слой за слоем, а не всё сразу:

```text
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 или равнозначный вариант с упором на приватность, с некоторыми исключениями. Перед отправкой проверьте действующие правила.

Так я прошу сделать авторизацию:

```text
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`:

```bash
npx expo install expo-notifications expo-device
```

Что нужно знать:

- **Локальные уведомления** («напоминай каждый вечер в 21:00») не требуют сервера и намного проще. Для трекера привычек их часто достаточно.
- **Удалённый push** означает получение push-токена, его хранение на вашем сервере и отправку оттуда. На iOS для этого нужны аккаунт Apple Developer и возможность push.
- Тестируйте поведение уведомлений на настоящем устройстве. Поддержка уведомлений в симуляторе и Expo Go может быть ограничена и со временем меняется.

Сначала попросите у агента локальные уведомления, убедитесь, что они работают, и только потом переходите к удалённому push.

## Шаг 7: сборки и магазины

Expo Go нужен для разработки; в магазины уходит настоящий бинарный файл приложения. Облачный сервис Expo, EAS, соберёт его за вас:

```bash
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_role` Supabase, секретный ключ платёжного провайдера или API-ключ ИИ ни в коем случае не должны попадать в приложение; их место на стороне сервера, например в edge-функции.
- **Храните секреты в файле `.env`** и убедитесь, что `.env` в `.gitignore`.
- **Не вставляйте API-ключи в чат.** Говорите агенту, какую переменную окружения читать, а не сам ключ.
- **Проверяйте правила базы данных.** Войдите вторым аккаунтом и посмотрите, можно ли прочитать данные первого.
- **Читайте команды, которые запускает агент,** особенно `eas`, `git push`, удаления и команды базы данных, прежде чем одобрять.

## Как это делается в AgentVera

Всё описанное можно делать в обычном терминале. В мобильных проектах мне нравится запускать нескольких агентов рядом, и я делаю это в [AgentVera](/ru/features/workspace/):

- **Отдельные агенты в отдельных worktree.** Например, Claude Code работает над схемой Supabase и edge-функциями в одном [git worktree](/ru/glossary/git-worktree/), пока Codex делает экраны в другом. [Панель Git](/ru/features/git-and-github/) показывает изменения каждой ветки.
- **Терминал в сетке.** `npx expo start` остаётся открытым в одной панели, и вы видите вывод Metro рядом с агентами; для этого и нужна панель [редактора и терминала](/ru/features/editor-and-terminal/).
- **Ревью перед слиянием.** [Автоматическое ревью кода](/ru/features/code-review/) отдаёт каждый ход агента на проверку второй модели; diff всё равно стоит прочитать самому.
- **База данных.** Добавьте подключение к Postgres Supabase в [менеджер баз данных](/ru/features/database-manager/), чтобы проверять таблицы и строки, созданные агентом.
- **Учёт токенов.** Длинные логи сборки быстро раздувают контекст; [расход токенов](/ru/features/token-savings/) виден по каждой панели.

AgentVera не собирает приложение для вашего телефона и не отправляет его в магазины; эта часть остаётся за Expo и консолями магазинов.

## Краткий чек-лист

- [ ] Проект Expo создан вами, первый коммит в git
- [ ] В первом промпте перечислены экраны, правила и требование `npx expo install`
- [ ] Каждая функция проверена на телефоне, на обеих платформах
- [ ] RLS в Supabase или правила безопасности Firebase включены и проверены
- [ ] В бандле приложения нет секретных ключей
- [ ] Резервная копия keystore Android сделана
- [ ] Политика конфиденциальности и раскрытия данных для магазинов готовы

## Подводим итоги

Создать мобильное приложение с ИИ сегодня реально, но всё не заканчивается на «напиши мне приложение». Начните с Expo, смотрите каждое изменение на телефоне через Expo Go, используйте облачный бэкенд, добавляйте функции по одной и сами проходите платформенные шаги: подпись, формы магазинов, проверку. О проверке написанного агентом читайте в статье [ревью кода с ИИ](/ru/blog/ai-code-review/), о параллельной работе агентов в статье [git worktree для параллельных агентов](/ru/blog/git-worktree-parallel-agents/).

## Частые вопросы

**Можно ли создать мобильное приложение с ИИ, не умея программировать?** Простое можно: кодинг-агент напишет экраны, данные и вход на React Native и Expo. Но ошибки читать, тестировать на телефоне и проходить шаги магазинов вам придётся самим; для этого нужны базовые навыки работы с терминалом, а не опыт программирования.

**Что лучше для приложения с ИИ: Flutter или React Native?** Если вы только начинаете, проще React Native с Expo: Expo Go мгновенно показывает каждое изменение на телефоне, а JavaScript и TypeScript кодинг-агенты видели больше всего. Flutter тоже хороший выбор, особенно если вы уже знаете Dart.

**Можно ли опубликовать в App Store приложение, созданное с ИИ?** Да. Apple и Google оценивают приложение, а не то, кто набрал код. Нужны платное членство в Apple Developer Program, политика конфиденциальности, скриншоты и приложение, которое работает достаточно хорошо, чтобы пройти проверку.

**Какой бэкенд проще всего для мобильного приложения?** Облачный бэкенд вроде Supabase или Firebase намного проще собственного сервера. Оба сразу дают авторизацию, базу данных и хранилище файлов; важно не оставить правила безопасности открытыми (RLS в Supabase, security rules в Firebase).

**Почему ИИ-агентам трудно с ошибками нативной сборки?** Потому что эти ошибки идут от окружения, а не от кода: Xcode, Android SDK, CocoaPods, версии Gradle и сертификаты подписи. Агент не видит вашу машину, поэтому давайте ему полный вывод ошибки и используйте облачную сборку вроде EAS Build, чтобы окружение оставалось неизменным.

---

**Об AgentVera.** AgentVera — настольное приложение для macOS, Windows и Linux от Solviera Teknoloji. Оно запускает 18 ИИ-агентов для программирования (Claude Code, Codex, Gemini CLI, Copilot, Cursor, Antigravity, opencode, Hermes, Qwen Code, Kimi Code, Kiro, Amp, Droid, Goose, Vibe, Crush, Aider, Cline) рядом, по проектам, в настоящих терминалах с собственными установками CLI и входами пользователя. В бесплатном тарифе количество агентов не ограничено. Скачать: https://agentvera.dev/ru/download/ · Цены: https://agentvera.dev/ru/pricing/
