
Информация по healthkit в файле blood-oxygen/myoxygen/ReadmeHealth.txt


######### Тестирование ########
На данный момент я подвел все к рабочей версии, реализовав все необходимые методы. Поэтому в теории, если оно на реальном устройстве будет работать, то все отлично, и можно немного потестировать с передачей данных.
Главным индикатором проверки, что данные получаются от айфона - является надпись на часах, что данные получены. Ее можно попробовать получить, если на часах добавить значение кислорода или пульса, на айфон отправится информация, и должен прийти ответ, с записанными данными. В этот момент сработает метод получения (в теории), и изменится значение переменной, которая на любом из 2х экранов часов покажет надпись "Данные получены с айфона".

########## Запуск #########
На сималяторах:
1. Я запускаю "WatchMain" на часах, оно также обновляет приложение на айфоне
2. Я запускаю приложение на айфоне "myoxygen", чтобы отслеживать вывод в консоли, таким образом поддерживаются 2 рабочие консоли.

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


########## Кратко что где ###########
** Я поправлю еще местами код в финальной версии, чтобы все было аккуратнее, пройдусь по верстке и добавляю недостающие моменты в плане показов дисклеймера в начале и экрана покупки. Сейчас все мысли были о синхронизации **

Реализация принятия данных на айфоне: myoxygen/watch/WatchModelPhone.swift
Реализация принятия данных на часах: WatchMain Extension/testWatch/ViewModelWatch.swift

Основной метод передачи данных на часы и виджеты: myoxygen/api/TransferApi.swift

Вся основная логика передачи данных с айфона на часы: myoxygen/api/BufferIphoneApi.swift
Вся основная логика передачи данных с часов на айфон: WatchMain Extension/api/BufferWatchApi.swift

########### Прочая важная информация #############
Сейчас виджеты не отображают актуальные данные, но все необходимые методы написаны. Что работало - нужно добавить AppGroup, это может сделать только владелец аккаунта. Не знаю, как это лучше сделать, чтобы с гитом все нормально синхронизировать у меня и в вашем основном проекте, но после добавления - мне останется 1 метод там дописать и виджеты будут работать.

В проекте сейчас закомментированы методы подписки, чтобы не отправлять лишних запросов и консоль не нагружать. Я раскидал warning'и, на всех закомментированных местах, чтобы ничего не упустить, в финальной версии все верну.

############ пара слов об алгоритме ###########
У часов и телефона нет единого синхронизируемого хранилища, что очень неудобно, поэтому пришлось писать самому алгоритм синхронизации. В целом он не слишком сложный, но кода много, поэтому надеюсь, что то что написано - на реальном устройстве будет работать полноценно, иначе просто неудобно будет тестировать и искать как исправить, так как на симуляторе работает только в одно сторону, как упоминал ранее.

На часах данные пишутся в буфер. При каждом новом значении накопленные данные отправляются на айфон. Если айфон принимает данные - он отправляет ответ на часы, какие данные приняты. Эти данные удаляются из буфера. Таким образом буфер либо вообще не накапливается, когда данные сразу обновляются, либо копятся до первой же возможности. Также на часах хранится последнее актуальное значение. Оно обновляется либо при вводе данных, либо при получении с айфона, если там более актуальные данные.
На айфоне данные принимаются, проверяются на наличие дублирования, и добавляются только те, которых еще нет в хранилище. На айфоне свой буфер, но состоит только из одного значения, которое обновляется при каждом новом вводимом на айфоне значении.
