# Мобильные приложения

Версия источника: 4880e8b4372c96001c2e052be28b68a95d31252b
Синхронизировано: 2026-11-09T11:15:07.649Z
Источник: https://github.com/sergey-from-riders/vibecoding-base/tree/4880e8b4372c96001c2e052be28b68a95d31252b

## Оглавление

- [Keychain и Keystore](#mobile-secure-storage)
- [Deep links](#mobile-deep-links)
- [Офлайн-синхронизация](#mobile-offline)
- [Мобильный релиз](#mobile-native-release)

<a id="mobile-secure-storage"></a>

# Keychain и Keystore

## Коротко

Обычное локальное хранилище приложения не подходит для секретов.

## Плохо

```text
Токен в AsyncStorage и диагностическом логе.
```

## Хорошо

```text
iOS: токен в Keychain.
Android: токен зашифрован, ключ находится в Keystore.
Библиотека поддерживает эту схему и очистку при выходе.
```

## Почему

Файл приложения и резервные копии могут раскрыть открытый текст токена.

## Когда применять

Android Keystore хранит криптографические ключи, а не произвольный текст токена. Для React Native выбирайте поддерживаемую библиотеку с документированной реализацией для каждой платформы. Защищённое хранилище не заменяет срок действия и отзыв токена на сервере. Биометрия обычно разблокирует локальный доступ.

## Как проверить

- Выход удаляет локальный секрет и отзывает нужную сессию?

## Человек

Определяет срок сессии, выход из аккаунта и политику устройств.

## Агент

Реализует поведение клиента и проверяет потерю сети, повторный запуск и ограничения платформы.

Контроль результата:

- Выход удаляет локальный секрет и отзывает нужную сессию?

## Источники

- [Security · React Native](https://reactnative.dev/docs/security)
- [Android Keystore system  |  Security  |  Android Developers](https://developer.android.com/privacy-and-security/keystore)

Уровень: Обязательно. Проверено: 2026-11-09. Изменено: 2026-11-09.

[Исходный файл](https://github.com/sergey-from-riders/vibecoding-base/blob/4880e8b4372c96001c2e052be28b68a95d31252b/registry/standards/mobile/react-native/rules/secure-storage.md)

---

<a id="mobile-deep-links"></a>

# Deep links

## Коротко

Ссылка должна соответствовать разрешённому маршруту и начатой операции.

## Плохо

```text
Любая ссылка с code открывает авторизованную сессию.
```

## Хорошо

```text
Проверены scheme, host, path и state.
Авторизация завершается проверкой сервера.
```

## Почему

Другое приложение или сайт может подставить свои параметры.

## Когда применять

Предпочитайте подтверждённые ссылки платформы. Не передавайте секреты в push-уведомлениях.

## Как проверить

- Проверьте чужой host, подмену state и повтор старой ссылки.

## Человек

Определяет разрешённые адреса и ожидаемый сценарий возврата.

## Агент

Реализует поведение клиента и проверяет потерю сети, повторный запуск и ограничения платформы.

Контроль результата:

- Проверьте чужой host, подмену state и повтор старой ссылки.

## Источники

- [Security · React Native](https://reactnative.dev/docs/security)

Уровень: Обязательно. Проверено: 2026-11-09. Изменено: 2026-11-09.

[Исходный файл](https://github.com/sergey-from-riders/vibecoding-base/blob/4880e8b4372c96001c2e052be28b68a95d31252b/registry/standards/mobile/react-native/rules/deep-links.md)

---

<a id="mobile-offline"></a>

# Офлайн-синхронизация

## Коротко

Локальная очередь должна знать идентичность операции и версию изменяемой записи.

## Плохо

```text
После восстановления сети все действия отправляются как новые.
```

## Хорошо

```text
Очередь с постоянными ключами.
Повторы безопасны. Конфликт версии виден пользователю.
```

## Почему

Потеря сети не должна создавать дубликаты или молча затирать данные.

## Когда применять

Офлайн-чтение и офлайн-запись — разные возможности. Определите срок и состав локальных данных.

## Как проверить

- Измените одну запись на двух устройствах без сети.

## Человек

Определяет правила разрешения конфликтов и статус неподтверждённых изменений.

## Агент

Реализует поведение клиента и проверяет потерю сети, повторный запуск и ограничения платформы.

Контроль результата:

- Измените одну запись на двух устройствах без сети.

## Источники

- [Build an offline-first app  |  App architecture  |  Android Developers](https://developer.android.com/topic/architecture/data-layer/offline-first)

Уровень: Рекомендуется. Проверено: 2026-11-09. Изменено: 2026-11-09.

[Исходный файл](https://github.com/sergey-from-riders/vibecoding-base/blob/4880e8b4372c96001c2e052be28b68a95d31252b/registry/standards/mobile/react-native/rules/offline.md)

---

<a id="mobile-native-release"></a>

# Мобильный релиз

## Коротко

Изменение нативных возможностей требует соответствующей сборки приложения.

## Плохо

```text
Новый нативный модуль доставлен только JavaScript-обновлением.
```

## Хорошо

```text
JS-обновление совместимо с установленным runtime.
Нативные изменения включены в новую сборку.
```

## Почему

Установленное приложение не сможет вызвать отсутствующий нативный код.

## Когда применять

Пример механизма совместимости — runtimeVersion в Expo EAS Update. OTA разрешён только в пределах политики магазина и выбранного механизма обновлений. Версии React и RN должны быть совместимы.

## Как проверить

- Проверьте запуск, авторизацию и возврат на предыдущую совместимую версию.

## Человек

Выбирает поддерживаемые версии клиента и порядок распространения.

## Агент

Реализует поведение клиента и проверяет потерю сети, повторный запуск и ограничения платформы.

Контроль результата:

- Проверьте запуск, авторизацию и возврат на предыдущую совместимую версию.

## Источники

- [Runtime versions and updates - Expo documentation](https://docs.expo.dev/eas-update/runtime-versions/)

Уровень: Рекомендуется. Проверено: 2026-11-09. Изменено: 2026-11-09.

[Исходный файл](https://github.com/sergey-from-riders/vibecoding-base/blob/4880e8b4372c96001c2e052be28b68a95d31252b/registry/standards/mobile/react-native/rules/native-release.md)
