8000 GitHub - dimensi/malysh: Малыш — offline-first нативный дневник ухода за младенцем для iPhone. SwiftUI, Core Data и CloudKit Sharing. · GitHub
[go: up one dir, main page]

Skip to content
{"props":{"color_mode":"dark","logged_in":false,"marketing_page":false,"home_path":"/","login_path":"/login?return_to=https%3A%2F%2FgitHub.com%2Fdimensi%2Fmalysh","signup_path":"/signup?ref_cta=Sign+up\u0026ref_loc=header+logged+out\u0026ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E\u0026source=header-repo\u0026source_repo=dimensi%2Fmalysh","signup_enabled":true,"is_signup_controller":false,"show_search_and_nav":true,"hide_search":false,"private_mode_enabled":false,"should_use_dotcom_links":true,"auth_hydro_click":"{\"event_type\":\"authentication.click\",\"payload\":{\"location_in_page\":\"site header menu\",\"repository_id\":null,\"auth_type\":\"SIGN_UP\",\"originating_url\":\"https://gitHub.com/dimensi/malysh\",\"user_id\":null}}","auth_hydro_click_hmac":"077b7e5cb9f8aa3c2f61d7d641de230d8c3b3fa637a0d9dca1fa14eaab0b1a8a"}}
dimensiPublic

About

Малыш — offline-first нативный дневник ухода за младенцем для iPhone. SwiftUI, Core Data и CloudKit Sharing.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

102 Commits

Folders and files

Repository files navigation

Малыш

В «Малыше» для iPhone и Apple Watch можно записывать кормление грудью и из бутылочки, подгузники и сон. Записи сохраняются локально. Синхронизация через iCloud включается отдельно на iPhone. Минимальная система — iOS 27.0, язык — Swift 6.

Сборка

Для запуска готового проекта нужен Xcode 27.2 с SDK iOS 27.2. Для перегенерации проекта и проверок нужны Tuist, SwiftFormat и SwiftLint. Готовый Malysh.xcworkspace уже включён в исходники. Для запуска откройте его в Xcode, выберите схему Malysh и iPhone Simulator с iOS 27.0 или новее, затем нажмите Run (⌘R). Для запуска на физическом устройстве выберите свою Team в Signing & Capabilities.

Команды выполняются из этой папки. Project.swift описывает проект; Tuist создаёт Malysh.xcworkspace со схемой Malysh.

tuist generate --no-open
xcodebuild -workspace Malysh.xcworkspace -scheme Malysh -destination 'platform=iOS Simulator,name=iPhone 16 Pro' CODE_SIGNING_ALLOWED=YES CODE_SIGN_IDENTITY=- -derivedDataPath DerivedData -resultBundlePath Artifacts/Tests.xcresult test

Пример использует iPhone 16 Pro с установленной iOS 27.0 или новее. На другом Mac выберите имя установленного симулятора или передайте его идентификатор через DESTINATION. Перед повторным запуском выберите новый путь результата или удалите предыдущий Artifacts/Tests.xcresult.

Состав проверок, правила добавления тестов и выборочный запуск — в матрице тестов.

Полная проверка форматирования, правил и тестов:

bash Scripts/check.sh

Для другого устройства или каталога результатов:

DESTINATION='platform=iOS Simulator,name=iPhone 16 Pro' RESULT_BUNDLE_PATH=Artifacts/Tests-repeat.xcresult bash Scripts/check.sh

Для приложения Apple Watch, его виджетов и проверки сопряжённой пары см. Apple Watch.

Данные и iCloud

На первом запуске можно создать дневник, принять приглашение или восстановить дневники из iCloud. По умолчанию iCloud выключен. Переключатель применяется в открытом приложении. Оба режима используют те же локальные SQLite-файлы. Включение iCloud разрешает передачу записей в настроенный контейнер Apple.

В настройках действие «Экспортировать дневник» сохраняет выбранный дневник в «Файлы» одним JSON. В файл входят профиль ребёнка, события с заметками и замеры, которые доступны на iPhone, включая записи общего дневника. Экспорт работает офлайн. Фотографии выгружаются отдельно из галереи.

Настройка подписания, схемы и проверки двух устройств описана в CloudKit. Симулятор без настроенной команды разработчика не подтверждает работоспособность синхронизации на устройствах.

Экспорт и безопасная проверка схемы одной командой: bash Scripts/cloudkit-schema.sh. Авторизация, diff и перенос в Production.

Ручной запуск той же подготовки в GitHub Actions: CloudKit schema tooling → Run workflow → prepare; Production переносится вручную в CloudKit Console. Порядок работы с CI artifact.

Напоминания о кормлении

В «Настройки» → «Напоминания» включите «Напоминать о кормлении» и выберите интервал. После завершения кормления iPhone планирует одну Live Activity с кнопками «Левая», «Правая» и «Через 15 минут». Если Live Activity недоступна, при выданном разрешении сработает локальное уведомление. Параметры хранятся на каждом iPhone отдельно. Как рассчитывается время и когда учитывается кормление второго родителя.

Таймеры на экране блокировки

Кормление грудью и сон поддерживают Live Activities и Dynamic Island. Кнопки переключения груди и завершения сохраняют изменения в дневнике без открытия приложения. Подробности восстановления, ограничения iOS и задержки CloudKit описаны в LiveActivities.md. Проект включает MalyshWidgets; для подписанного выпуска расширению нужен отдельный профиль из TestFlight.md.

Автор и изменения записи

Новое событие сохраняет автора, если текущего участника дневника удалось определить. При исправлении сохраняется исходный автор и отдельно записывается последний редактор. Имя и роль берутся из семейного профиля; технические идентификаторы не показываются. Старым событиям с неизвестным автором никто не назначается задним числом, даже после редактирования. Если участник пока не определён, приложение не угадывает его по имени или положению в списке семьи.

Имена и роли родителей синхронизируются в существующем JSON-payload ребёнка; автор и последний редактор — в payload события. Дополнительные поля обратно совместимы с прежними записями и не требуют нового типа записей или изменения схемы CloudKit. Доставка между устройствами следует обычному циклу синхронизации iCloud.

Профиль и измерения

В приложении четыре вкладки «Сегодня», «История», «Статистика» и «Малыш». Нажатие на имя ребёнка на главном экране открывает вкладку «Малыш». В компактной шапке видны имя, возраст при подтверждённой дате рождения и статус дневника. Аватар общий с вкладкой «Сегодня»: используется закреплённая фотография, последний снимок при отсутствии закрепления или логотип с медвежатами для пустого альбома. По кнопке с карандашом можно изменить имя, дату и необязательное время рождения. Своё имя и роль родителя можно указать в настройках даже в личном дневнике без второго участника и iCloud.

Карточки веса, роста и окружности головы идут в ряд при обычных размерах текста и в одну колонку при крупных размерах доступности. Нажатие открывает историю и график. Через «Добавить измерение» можно выбрать показатель и сразу ввести значение. В редакторе профиля секция «При рождении» принимает известные показатели по одному или вместе. После подтверждения даты рождения и сохранения они появляются в обычной истории под этой датой и с указанным временем, если оно известно. Сохранение профиля без измерений оставляет секцию доступной, а первое заполнение или явный пропуск скрывают её. Первоначальные записи можно исправить или удалить в истории. Если позже исправить дату или время рождения, время уже записанных измерений сохранится.

Общие стили

Общие цвета, метрики и карточки находятся в Sources/DesignSystem.swift и Sources/DesignComponents.swift; правила для агентов описаны в DESIGN.md и AGENTS.md. Нативные формы, диалоги и Dynamic Type сохраняются. Работоспособность интерфейса проверяют обычные UI-тесты; отдельной галереи и сравнения PNG нет.

Структура

  • Sources — интерфейс, модель и хранение данных.
  • Resources — ресурсы приложения.
  • WidgetExtension — экран блокировки и Dynamic Island.
  • Tests и UITests — автоматические проверки.
  • Documentation — настройка и результаты проверок.
  • Scripts — команды проверки проекта.

Текущий выпуск — 1.3.1 (1), доступен в TestFlight группе parents: Apple подтвердила VALID / IN_BETA_TESTING, минимальная iOS — 26.0. Полный прогон: 64 теста прошли, 1 opt-in PhotoKit пропущен по условию. Тесты, подпись и экспорт успешны; workflow остался красным из-за промежуточного HTTP 500 загрузчика Apple, хотя загрузка завершилась и сборка стала доступна. Подробности — в TestFlight.md, состав проверок — в матрице.

В выпуск 1.1.6 вошли Live Activities, обычные виджеты, авторство событий и общие стили. В том прогоне выполнялись четыре UI-сценария Live Activities; проверяются реальные системные кнопки, фоновое состояние и та же завершённая запись после перезапуска. Полные локальные прогоны также дали 106/106 на iOS 26.0.1 и iOS 27.0. Доставка новых полей авторства между двумя физическими устройствами в этот прогон не входила.

После подключения к общему дневнику старый автоматически созданный стартовый «Малыш» может скрыться из основного переключателя. Удалить его можно в разделе «Семья» после подтверждения с количеством записей. Общий и именованные дневники, а также профиль с другим принятым участником сохраняются; события автоматически не переносятся. В семье доступны имена родителей, роли «Папа» / «Мама» / «Родитель» и отдельная отметка «Это вы». Профили родителей синхронизируются в существующем payload ребёнка; локальный JSON-кэш и ревизии отдельных профилей помогают восстановить конкурентные изменения. Нового развёртывания схемы CloudKit для этих полей не требуется; проверка между двумя Apple ID остаётся отдельным сценарием. Подробные журналы и локальные сборки хранятся в исключённой из Git папке Artifacts; краткая сводка доступна в Documentation/test-summary.json.

Правила хранения, миграций и конфликтов описаны в Data.md. Иконка подготовлена по приложенному референсу; исходник и промпт — Branding.md.

RTK необязателен: скрипт проверок использует его только при наличии в системе.

В Info.plist задано ITSAppUsesNonExemptEncryption = false: текущий MVP использует только системное шифрование Apple. При добавлении собственной криптографии или сторонних криптобиблиотек декларацию необходимо пересмотреть.

Автозагрузка в TestFlight по тегам vX.Y.Z проверена успешным CI v1.1.6; запуск, секреты и ограничения описаны в TestFlight.md. Сборка 1.1.6 (1) обработана Apple и доступна внутренней группе parents.

Оба ручных App Store профиля CI разрешают App Group group.dev.dimensi.malysh и используют один действующий сертификат. Подписанный выпуск приложения с расширением проверен в 1.1.6; CloudKit/APNs основного приложения сохранены.

Переиспользуемые инструкция и промпт для настройки выпуска в другом проекте: инструкция и готовый промпт. Шаблоны не содержат секретов; настройки этого репозитория описаны отдельно в документации выше.

Виджеты

Домашний экран: Small, Medium и Large. Экран блокировки: Rectangular, Circular и Inline. Обычные виджеты показывают завершённые события выбранного ребёнка, активные таймеры остаются в Live Activities. Для установки требуется App Group в профилях обеих целей. Архитектура, переходы, приватность и проверки.

Фотографии ребёнка

Камера сохраняет исходник в системные «Фото» до добавления в семейный дневник. Импорт через PhotosPicker поддерживает несколько снимков и не создаёт повторные копии в «Фото». Семья получает отдельные ограниченные по размеру копии через существующий CloudKit Sharing. Галерея открывается через аватар и блок фотоальбома во вкладке «Малыш». Блок показывает до трёх последних снимков или пустое состояние. Из блока можно сразу добавить фотографию. Удаление из галереи сохраняет системные фотографии. Разрешения, хранение, повторы, Shared Photo Library и проверки на устройствах.

About

Малыш — offline-first нативный дневник ухода за младенцем для iPhone. SwiftUI, Core Data и CloudKit Sharing.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

0