# MobileMkch iOS

Нативный iOS клиент для борды mkch.pooziqo.xyz

![Version](https://img.shields.io/badge/версия-2.1.0--ios--alpha-blue)
![iOS](https://img.shields.io/badge/iOS-15.0%2B-green)
![Swift](https://img.shields.io/badge/Swift-5-orange)

## Скриншоты
![screenshots](https://git.fuckyougoogle.xyz/MKFun/MobileMkch-iOS/raw/branch/main/screenshot/screenshot.png)

## Основные возможности

### Нативный 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 тапов по информации об устройстве):
  - Тест краша приложения
  - Тестовые уведомления
- **Управление кэшем**:
  - Очистка кэша досок
  - Очистка кэша тредов
  - Очистка кэша изображений
  - Полная очистка
- **Информация об устройстве** с детальной диагностикой
- **Сброс настроек** до заводских

## Установка и настройка

### Системные требования
- iOS 15.0 или новее
- iPhone/iPad с поддержкой SwiftUI
- Разрешение на уведомления (для push-уведомлений)

### Первоначальная настройка

1. **Скачайте и установите** приложение
2. **Откройте вкладку "Настройки"**
3. **Настройте аутентификацию** (при необходимости):
   - Введите ключ аутентификации
   - Введите passcode для постинга
   - Протестируйте подключение кнопками "Тест ключа" и "Тест passcode"

### Настройка уведомлений

1. **Включите нестабильные функции** в настройках
2. **Перейдите в "Настройки уведомлений"**
3. **Включите уведомления** и разрешите их в системных настройках
4. **Выберите интервал проверки** (рекомендуется 15-30 мин)
5. **Подпишитесь на нужные доски** переключателями
6. **Протестируйте** кнопкой "Проверить новые треды сейчас"

## Архитектура приложения

### Основные компоненты

| Файл | Описание |
|------|----------|
| `MobileMkchApp.swift` | Точка входа приложения с crash handler |
| `MainTabView.swift` | Tab Bar с навигацией и избранным |
| `Models.swift` | Структуры данных (Board, Thread, Comment, etc.) |
| `APIClient.swift` | HTTP клиент с CSRF и аутентификацией |
| `Settings.swift` | Система настроек с JSON сериализацией |
| `Cache.swift` | Многоуровневое кэширование с TTL |

### UI компоненты

| Файл | Описание |
|------|----------|
| `BoardsView.swift` | Список досок с ошибками и загрузкой |
| `ThreadsView.swift` | Треды с пагинацией и избранным |
| `ThreadDetailView.swift` | Детали треда с комментариями |
| `CreateThreadView.swift` | Форма создания треда |
| `AddCommentView.swift` | Форма добавления комментария |
| `SettingsView.swift` | Настройки с debug меню |
| `FileView.swift` | Просмотр файлов с полноэкранным режимом |
| `NotificationSettingsView.swift` | BETA настройки уведомлений |

### Системные сервисы

| Файл | Описание |
|------|----------|
| `NotificationManager.swift` | Push-уведомления и подписки |
| `BackgroundTaskManager.swift` | Фоновое обновление |
| `CrashHandler.swift` | Обработка крашей |
| `ImageLoader.swift` | Асинхронная загрузка изображений |

## 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.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.0-ios-alpha (Always in alpha lol)  
**Дата**: Август 2025

*Разработано с <3 на Swift*
