# MobileMkch iOS Нативный iOS клиент для борды mkch.pooziqo.xyz ![Version](https://img.shields.io/badge/версия-2.0.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 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.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.0.0-ios-alpha (Always in alpha lol) **Дата**: Январь 2025 *Разработано с <3 на Swift*