[2026-05-22] fix skip-fuse-ui pitfall, add folder picker feature plan
This commit is contained in:
@@ -107,6 +107,17 @@ Apple требует дисклеймер: "Не является заменой
|
||||
- После сброса: онбординг с чистого листа
|
||||
- Реализует GDPR-требование "право на удаление" (см. [[privacy-legal]])
|
||||
|
||||
- **Папка документов** — пикер системной папки для хранения/чтения сессий
|
||||
- Расположение: под кнопкой "Пропустить" на стартовом экране + отдельная секция в Настройках
|
||||
- Позволяет выбрать любую папку (iCloud Drive, локальная, внешний диск на iPad)
|
||||
- По умолчанию: стандартная `Documents/UserProfile/` — ничего не ломается
|
||||
- Нужно для переноса данных между устройствами (резервная копия, смена телефона)
|
||||
- iOS: `.fileImporter(allowedContentTypes: [.folder])` (SwiftUI, iOS 14+)
|
||||
- Возвращает security-scoped URL → сохраняется как bookmark в UserDefaults
|
||||
- `startAccessingSecurityScopedResource()` / `stopAccessingSecurityScopedResource()` при каждом доступе
|
||||
- Android (`#if SKIP`): `Intent.ACTION_OPEN_DOCUMENT_TREE` → URI с `takePersistableUriPermission`
|
||||
- ProfileManager читает путь из UserDefaults (bookmark на iOS, URI string на Android)
|
||||
|
||||
### Структура сессии
|
||||
1. **Check-in** (2 мин): короткий mood check через карточки
|
||||
2. **Тема** (выбирает пользователь или AI предлагает из паттернов)
|
||||
@@ -686,6 +697,7 @@ Phase 2 — Voice + Android (6-8 недель)
|
||||
├── OpenAI Realtime API интеграция
|
||||
├── Skip.tools → Android версия
|
||||
├── Persistence: профиль пользователя + recurring topics
|
||||
├── Импорт/экспорт папки данных (iOS + Android file picker)
|
||||
└── Подписка через RevenueCat
|
||||
|
||||
Phase 3 — Launch & Marketing (2-4 недели)
|
||||
|
||||
@@ -44,24 +44,25 @@ skip gradle assembleDebug
|
||||
|
||||
```swift
|
||||
// Package.swift — обязательные поля
|
||||
products: [
|
||||
.library(name: "ReflectApp", targets: ["ReflectApp"])
|
||||
dependencies: [
|
||||
.package(url: "https://source.skip.tools/skip.git", from: "1.8.9"),
|
||||
.package(url: "https://source.skip.tools/skip-fuse.git", from: "1.0.0"),
|
||||
.package(url: "https://source.skip.tools/skip-fuse-ui.git", from: "1.0.0"),
|
||||
],
|
||||
targets: [
|
||||
.target(
|
||||
name: "ReflectApp",
|
||||
path: "Sources/ReflectApp",
|
||||
dependencies: [
|
||||
.product(name: "SkipFuse", package: "skip-fuse"),
|
||||
.product(name: "SkipUI", package: "skip-ui"),
|
||||
// НЕ добавлять skip-fuse-ui как отдельную зависимость
|
||||
.product(name: "SkipFuse", package: "skip-fuse"),
|
||||
.product(name: "SkipFuseUI", package: "skip-fuse-ui"),
|
||||
],
|
||||
plugins: [.plugin(name: "skipstone", package: "skip")]
|
||||
)
|
||||
]
|
||||
```
|
||||
|
||||
**Pitfall:** `skip-fuse-ui` как отдельный product не существует — нужны `skip-fuse` + `skip-ui` раздельно.
|
||||
**Pitfall:** нужны оба: `skip-fuse` (runtime) + `skip-fuse-ui` (SwiftUI overlay для Android). Ранее была попытка использовать `skip-ui` вместо `skip-fuse-ui` — это неверно, `skip-ui` не предоставляет `SwiftUI` модуль для Android-сборки и ломает full build с `no such module 'SwiftUI'`.
|
||||
|
||||
## Прочие питфоллы
|
||||
|
||||
|
||||
Reference in New Issue
Block a user