VEU.WathBody/1-docs/4-modules/m13-fenix-data-field/api_specs/01-project-manifest.md

5.0 KiB
Raw Permalink Blame History

Спецификация 01: проект Monkey C, манифест, таргеты, сборка

Источники: module_reqs разд. 1 (единица 1, решения гейта 1.3 № 2/4), Ф-2.8, tech-req ОВ-7, указание владельца 2026-10-19 (мультитаргет). Единица 1 + 9 (сборка).

1. Структура проекта

3-app\5-watch\FenixDataField\
  manifest.xml            — тип datafield, UUID, minApiVersion, продукты
  monkey.jungle           — таргетная матрица (якорь fenix6x)
  resources\
    layouts\layout.xml    — параметрический макет (спека 03)
    strings\strings.xml   — en (базовая) + ru (ПОДХОД/ОТДЫХ/зоны)
    settings\settings.xml — properties (спека 04)
  source\
    FenixDataField.mc     — класс поля: колбэки платформы, связка ядра
                            и отрисовки (спека 03 §4)
    SetTracker.mc         — ядро (спека 02)
    RestTimer.mc          — ядро (спека 02)
    ZoneCalc.mc           — ядро (спека 02)
    Vibe.mc               — паттерны вибраций + гистерезис (спека 04)
    FieldSettings.mc      — чтение/кламп properties (спека 04)
  test\
    ZoneCalcTest.mc       — (:test)-функции Toybox.Test (спека 02 §5)
    RestTimerTest.mc
    SetTrackerTest.mc
  bin\                    — выход сборки (в .gitignore)

2. Манифест

  • тип — data field (поле данных штатных активностей; элемент типа — по образцу SDK-сэмпла DataField; сверяется при установке SDK, шаг 3);
  • UUID — 34f470ff-b5d1-4141-ad06-c483fa79a1f8 (сгенерирован 2026-10-19, неизменен навсегда — идентификатор поля при обновлениях);
  • minApiVersion 2.1.0 — самый низкий API из используемого (Toybox.Test; остальное — 1.0.0–1.3.0), поле совместимо и со старыми CIQ-устройствами (мультичасовая инфраструктура);
  • products — fenix6x (якорь 280×280, CIQ ≤ 4.1.7); добавление модели = строка продукта + при необходимости свой макет (семейство квадратных MIP покрывается параметрическим — правка кода не требуется);
  • permissions — не запрашиваются: пульс приходит в compute(Activity.Info), вибрация — Attention.vibrate, сеть полю не нужна (Ф-2.7);
  • языки — en (базовая) + ru.

Отображаемое имя поля — «Феникс» (ru) / «Phoenix» (en): под ним поле появляется в списке полей профиля «Силовая».

3. Сборка (решение 2 гейта 1.3 — toolchain)

  • Connect IQ SDK (актуальная 9.2) устанавливается агентом в C:\tools\connectiq по прецеденту m09; JDK 21 уже установлен (C:\tools\jdk-21.0.12.1+1);
  • сборка — CLI monkeyc по каждому таргету матрицы из monkey.jungle; выход — .prg в bin\;
  • тесты — прогон (:test)-функций инструментарием SDK (симулятор); точную команду фиксирует шаг 3 по установленному SDK (спеки фиксируют сами тест-кейсы, не команду);
  • смок в симуляторе — поле добавляется в профиль Strength, симулируются пульс/Lap (шаг 3);
  • подпись для устройства — developer-ключ (генерация по инструкции Garmin, шаг 3), sideload на Fenix 6X — developer mode + Garmin Connect Mobile (инструкция — readme модуля, шаг 4).

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

4. Тесты (готовность сборки)

  1. Сборка таргета fenix6x проходит без ошибок компиляции/линковки.
  2. .prg появляется в bin\, размер разумный (< 200 КБ).
  3. Добавление второго таргета в monkey.jungle (любая модель семейства квадратных MIP) собирается без правок исходников — проверка мультитаргет-инварианта (инвариант 5) на CI-сборке агента.