315 lines
16 KiB
Markdown
315 lines
16 KiB
Markdown
# MobileMkch iOS
|
||
|
||
Нативный iOS клиент для борды mkch.pooziqo.xyz
|
||
|
||

|
||

|
||

|
||
|
||
## Скриншоты
|
||

|
||
|
||
## Основные возможности
|
||
|
||
### Нативный iOS интерфейс
|
||
- **Tab Bar навигация** с тремя вкладками: Доски, Избранное, Настройки
|
||
- **Адаптивный дизайн** для iPhone и iPad
|
||
- **Темная/светлая тема** с автопереключением
|
||
- **Нативные анимации** и жесты iOS
|
||
- **SwiftUI интерфейс** для современного внешнего вида
|
||
|
||
### Просмотр контента
|
||
- **Просмотр всех досок** mkch с описаниями
|
||
- **Список тредов** с поддержкой сортировки по рейтингу и закрепленным
|
||
- **Детальный просмотр тредов** с комментариями
|
||
- **Система файлов** с поддержкой изображений и видео
|
||
- **Полноэкранный просмотр изображений** с зумом и жестами
|
||
- **Компактный/обычный режим** отображения для экономии места
|
||
- **Пагинация** с настраиваемым размером страницы (5-20 элементов)
|
||
- **Оффлайн режим**: просмотр сохранённых данных без сети
|
||
|
||
### Система избранного
|
||
- **Добавление тредов в избранное** одним тапом
|
||
- **Отдельная вкладка избранного** с быстрым доступом
|
||
- **Локальное сохранение** избранного между запусками
|
||
- **Управление избранным** с возможностью удаления
|
||
|
||
### Гибкие настройки
|
||
- **Темы**: темная/светлая
|
||
- **Автообновление** контента
|
||
- **Показ файлов** (включение/отключение)
|
||
- **Компактный режим** для экономии пространства
|
||
- **Размер страницы**: от 5 до 20 элементов
|
||
- **Пагинация**: включение/отключение
|
||
- **Нестабильные функции** с предупреждением
|
||
- **Принудительно оффлайн**: работа только с кэшем
|
||
|
||
### Полная поддержка постинга
|
||
- **Аутентификация по ключу** с тестированием подключения
|
||
- **Аутентификация по passcode** для обхода капчи
|
||
- **Создание новых тредов** с заголовком и текстом
|
||
- **Добавление комментариев** в существующие треды
|
||
- **CSRF защита** и автоматическая обработка форм
|
||
- **Автоочистка кэша** после постинга
|
||
|
||
### Push-уведомления (BETA)
|
||
- **Подписка на доски** через интуитивные переключатели
|
||
- **Настраиваемый интервал проверки**: 5 мин - 1 час
|
||
- **Фоновое обновление** даже при закрытом приложении
|
||
- **Принудительная проверка** новых тредов
|
||
- **Умные уведомления**: "Новый тред: [название] в /доска/"
|
||
- **Тестовые уведомления** в debug режиме
|
||
|
||
### Оптимизации и производительность
|
||
- **Многоуровневое кэширование**:
|
||
- Доски (TTL: 10 мин)
|
||
- Треды (TTL: 5 мин)
|
||
- Детали тредов и комментарии (TTL: 3 мин)
|
||
- Изображения с NSCache
|
||
- **Автоочистка кэша** по таймеру
|
||
- **Оптимизация батареи** для фоновых задач
|
||
- **Ленивая загрузка** контента
|
||
- **Graceful error handling** с retry логикой
|
||
- **Дисковый кэш** с фолбэком на устаревшие данные при оффлайне
|
||
|
||
### Дополнительные функции
|
||
- **Crash Handler** с детальной диагностикой
|
||
- **Debug меню** (5 тапов по информации об устройстве):
|
||
- Тест краша приложения
|
||
- Тестовые уведомления
|
||
- **Live Activity (BETA)**:
|
||
- Отображение треда на экране блокировки/Dynamic Island
|
||
- Тикер случайных тредов по доскам с настраиваемым интервалом
|
||
- Гибкие опции: заголовок, последний коммент, счётчик
|
||
- **Управление кэшем**:
|
||
- Очистка кэша досок
|
||
- Очистка кэша тредов
|
||
- Очистка кэша изображений
|
||
- Полная очистка
|
||
- **Информация об устройстве** с детальной диагностикой
|
||
- **Сброс настроек** до заводских
|
||
|
||
## Установка и настройка
|
||
|
||
### Системные требования
|
||
- iOS 15.0 или новее
|
||
- iPhone/iPad с поддержкой SwiftUI
|
||
- Разрешение на уведомления (для push-уведомлений)
|
||
|
||
### Первоначальная настройка
|
||
|
||
1. **Скачайте и установите** приложение
|
||
2. **Откройте вкладку "Настройки"**
|
||
3. **Настройте аутентификацию** (при необходимости):
|
||
- Введите ключ аутентификации
|
||
- Введите passcode для постинга
|
||
- Протестируйте подключение кнопками "Тест ключа" и "Тест passcode"
|
||
|
||
### Настройка уведомлений
|
||
|
||
1. **Включите нестабильные функции** в настройках
|
||
2. **Перейдите в "Настройки уведомлений"**
|
||
3. **Включите уведомления** и разрешите их в системных настройках
|
||
4. **Выберите интервал проверки** (рекомендуется 15-30 мин)
|
||
5. **Подпишитесь на нужные доски** переключателями
|
||
6. **Протестируйте** кнопкой "Проверить новые треды сейчас"
|
||
|
||
### Live Activity (BETA)
|
||
|
||
1. Требования: iPhone c iOS 16.1+ (на iPad до iPadOS 18 Live Activity не показываются; на симуляторе поддержка ограничена)
|
||
2. Включите: Настройки -> Уведомления -> Live Activity
|
||
3. Отдельный тред: откройте тред и включите тумблер в правом верхнем углу
|
||
4. Тикер:
|
||
- В Настройки -> Уведомления включите "Тикер случайных тредов"
|
||
- Выберите случайную борду или укажите код борды
|
||
- Задайте интервал (5–120 сек)
|
||
- Кнопки "Старт тикера" / "Стоп тикера"
|
||
5. Ограничения платформы: бегущая строка в Live Activity недоступна. Контент обновляется дискретно через интервал. Частота обновлений в фоне ограничивается iOS.
|
||
|
||
### Оффлайн режим
|
||
|
||
1. Откройте вкладку "Настройки"
|
||
2. Включите тумблер "Принудительно оффлайн"
|
||
3. На экранах появится баннер "Оффлайн режим. Показаны сохранённые данные"
|
||
4. Загрузка из сети отключается, используются данные из кэша (если есть)
|
||
5. Отключите тумблер для возврата в онлайн
|
||
|
||
## Архитектура приложения
|
||
|
||
### Основные компоненты
|
||
|
||
| Файл | Описание |
|
||
|------|----------|
|
||
| `MobileMkchApp.swift` | Точка входа приложения с crash handler |
|
||
| `MainTabView.swift` | Tab Bar с навигацией и избранным |
|
||
| `Models.swift` | Структуры данных (Board, Thread, Comment, etc.) |
|
||
| `APIClient.swift` | HTTP клиент с CSRF и аутентификацией |
|
||
| `Settings.swift` | Система настроек с JSON сериализацией |
|
||
| `Cache.swift` | Многоуровневое кэширование с TTL |
|
||
| `LiveActivityManager.swift` | Управление Live Activity и тикером |
|
||
|
||
### UI компоненты
|
||
|
||
| Файл | Описание |
|
||
|------|----------|
|
||
| `BoardsView.swift` | Список досок с ошибками и загрузкой |
|
||
| `ThreadsView.swift` | Треды с пагинацией и избранным |
|
||
| `ThreadDetailView.swift` | Детали треда с комментариями |
|
||
| `CreateThreadView.swift` | Форма создания треда |
|
||
| `AddCommentView.swift` | Форма добавления комментария |
|
||
| `SettingsView.swift` | Настройки с debug меню |
|
||
| `FileView.swift` | Просмотр файлов с полноэкранным режимом |
|
||
| `NotificationSettingsView.swift` | BETA настройки уведомлений |
|
||
|
||
### Виджеты и Live Activity
|
||
|
||
| Файл | Описание |
|
||
|------|----------|
|
||
| `FavoritesWidget/FavoritesWidget.swift` | Конфигурация виджета и UI Live Activity |
|
||
| `FavoritesWidget/FavoritesWidgetBundle.swift` | Регистрация виджета и Live Activity |
|
||
| `FavoritesWidget/AppIntent.swift` | Intent-конфигурация виджета |
|
||
| `FavoritesWidget/Info.plist` | Ключ `NSSupportsLiveActivities` |
|
||
|
||
### Системные сервисы
|
||
|
||
| Файл | Описание |
|
||
|------|----------|
|
||
| `NotificationManager.swift` | Push-уведомления и подписки |
|
||
| `BackgroundTaskManager.swift` | Фоновое обновление |
|
||
| `CrashHandler.swift` | Обработка крашей |
|
||
| `ImageLoader.swift` | Асинхронная загрузка изображений |
|
||
| `NetworkMonitor.swift` | Монитор сети и принудительный оффлайн |
|
||
| `AppGroup.swift` | Общие UserDefaults для app ↔ widget |
|
||
|
||
## API интеграция
|
||
|
||
### Endpoints
|
||
- `GET /api/boards/` - список досок
|
||
- `GET /api/board/{code}` - треды доски
|
||
- `GET /api/board/{code}/thread/{id}` - детали треда
|
||
- `GET /api/board/{code}/thread/{id}/comments` - комментарии
|
||
- `POST /boards/board/{code}/new` - создание треда
|
||
- `POST /boards/board/{code}/thread/{id}/comment` - комментарий
|
||
|
||
### Аутентификация
|
||
- **Key auth**: `/key/auth/` с CSRF токенами
|
||
- **Passcode auth**: `/passcode/enter/` для обхода капчи
|
||
- **User-Agent**: `MobileMkch/[VERSION]`
|
||
|
||
### Кэширование стратегии
|
||
- **Доски**: 10 минут (редко меняются)
|
||
- **Треды**: 5 минут (часто обновляются)
|
||
- **Детали**: 3 минуты (могут изменяться)
|
||
- **Изображения**: NSCache с лимитами памяти
|
||
- **Оффлайн фолбэк**: при ошибке сети или включённом оффлайне данные берутся из дискового кэша, если доступны
|
||
|
||
## Сборка проекта
|
||
|
||
### Требования разработчика
|
||
- Xcode 15.0+
|
||
- macOS 13.0+
|
||
- Apple Developer Account (для распространения) (я все равно не использую)
|
||
|
||
### Локальная сборка
|
||
```bash
|
||
# Клонируйте репозиторий
|
||
git clone <repository-url>
|
||
cd MobileMkch-iOS
|
||
|
||
# Откройте в Xcode
|
||
open MobileMkch.xcodeproj
|
||
|
||
# Выберите устройство и запустите
|
||
# Cmd+R для сборки и запуска
|
||
```
|
||
|
||
### Распространение
|
||
```bash
|
||
# 1. Выберите "Any iOS Device"
|
||
# 2. Product -> Archive
|
||
# 3. Distribute App:
|
||
# - App Store Connect (для App Store)
|
||
# - Ad Hoc (для тестирования)
|
||
# - Development (для разработки)
|
||
```
|
||
|
||
P.S. Костыль через Payload/MobileMkch.app в зипе и переименовании ее в .ipa будет работать почти всегда
|
||
|
||
## Версии и обновления
|
||
|
||
### Версия 2.1.1-ios-alpha (Текущая)
|
||
- Live Activity (BETA): тумблер в треде, тикер в "Настройки -> Уведомления"
|
||
- Добавлен оффлайн режим (тумблер в настройках)
|
||
- Дисковый кэш и фолбэк на сохранённые данные
|
||
- Оффлайн-баннеры в списках и деталях
|
||
|
||
### Версия 2.1.0-ios-alpha
|
||
- Добавлены push-уведомления
|
||
- Добавлены фоновые задачи
|
||
- Добавлены уведомления о новых тредах
|
||
- Добавлены уведомления о новых комментариях
|
||
- Добавлены уведомления о новых файлах
|
||
- Добавлены уведомления о новых досках
|
||
|
||
p.s. я не уверен работает ли оно, но оно работает по крайней мере на моем устройстве
|
||
|
||
### Версия 2.0.0-ios-alpha
|
||
- Полная переработка UI на SwiftUI
|
||
- Система избранного с локальным сохранением
|
||
- Push-уведомления с фоновым обновлением
|
||
- Полноэкранный просмотр изображений с жестами
|
||
- Crash handler с детальной диагностикой
|
||
- Многоуровневое кэширование с TTL
|
||
- Debug меню для разработчиков
|
||
- Компактный режим интерфейса
|
||
- Нестабильные функции с предупреждениями
|
||
|
||
### Планы развития
|
||
- Поддержка загрузки файлов при постинге
|
||
- Поиск по тредам и комментариям
|
||
- Темы оформления (кастомные цвета)
|
||
- Статистика использования (мб и не будет, я не знаю мне лень)
|
||
- Экспорт/импорт настроек
|
||
|
||
## Технологии
|
||
|
||
### Основной стек
|
||
- **SwiftUI** - современный UI фреймворк
|
||
- **Combine** - реактивное программирование
|
||
- **Foundation** - базовые возможности
|
||
- **UserNotifications** - push-уведомления
|
||
- **BackgroundTasks** - фоновое обновление
|
||
|
||
### Архитектурные паттерны
|
||
- **MVVM** с ObservableObject
|
||
- **Dependency Injection** через EnvironmentObject
|
||
- **Repository Pattern** для API и кэша
|
||
- **Observer Pattern** для уведомлений
|
||
|
||
## Поддержка и вклад
|
||
|
||
### Сообщение об ошибках
|
||
1. **Debug информация**: 5 тапов по информации об устройстве в настройках
|
||
2. **Скриншот краша** (если произошел)
|
||
3. **Шаги воспроизведения** ошибки
|
||
4. **Информация об устройстве** из настроек
|
||
|
||
### Известные ограничения
|
||
- iPad интерфейс требует доработки
|
||
- Постинг файлов пока не поддерживается
|
||
- Push-уведомления в beta статусе
|
||
- Требуется passcode для стабильного постинга
|
||
|
||
## Лицензия
|
||
|
||
Это приложение разработано для сообщества mkch и распространяется на условиях открытого использования. (0BSD btw)
|
||
|
||
---
|
||
|
||
**Автор**: w^x (лейн, платон)
|
||
**Контакт**: mkch.pooziqo.xyz
|
||
**Версия**: 2.1.1-ios-alpha (Always in alpha lol)
|
||
**Дата**: Август 2025
|
||
|
||
*Разработано с <3 на Swift*
|