Skip to content

MKfun/MobileMkch-iOS

Repository files navigation

MobileMkch iOS

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

Version iOS Swift

Скриншоты

screenshots

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

Нативный 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 (для распространения) (я все равно не использую)

Локальная сборка

# Клонируйте репозиторий
git clone <repository-url>
cd MobileMkch-iOS

# Откройте в Xcode
open MobileMkch.xcodeproj

# Выберите устройство и запустите
# Cmd+R для сборки и запуска

Распространение

# 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

About

Мобильный клиент мкача на айос (из говна и палок)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages