Sleeping Baby

Скачать в AppStore.

Ключевые используемые технологии:

UIKit, MVVM, Core Data, CloudKit, UserDefaults, Foundation, AVFoundation, Core Animations, Localization.

Краткое техническое описание:

  • Проект написан на UIKit;
  • В проекте использована верстка кодом за исключением ячеек на сцене Day.
  • Использована архитектура MVVM с использованием callback’ов, boxing’a и делегирования;
  • Бизнес-логика приложения, взаимодействие с базой данных, работа аудио-плеера и т.д. реализованы в отдельных сервисных слоях;
  • Проект соответствует принципам SOLID;
  • Данные сохраняются в Core Data и синхронизуются в облаке между устройствами пользователя посредством CloudKit;
  • Сохранение временных параметров приложения осуществляется в UserDefaults;
  • Реализована возможность загрузки фотографий пользователя из фотогалереи;
  • Приложение проверено на утечки памяти;
  • Приложение опубликовано в AppStore.

Ключевые возможности:

  • Ведите дневник активности (сны, бодрствования, кормления и т.д.) для нескольких детей. Приложение автоматически произведёт подсчет статистических данных для каждого дня.
  • Забудьте об опасении потерять все данные. Приложение автоматически синхронизует активность детей в вашем iCloud: вся информация доступна на любом вашем устройстве, подключенном к одной учетной записи iCloud.
  • Включайте высококачественные аудиозаписи для крепкого сна ребенка, не выходя из приложения. Воспроизводите звук на различных Bluetooth-совместимых устройствах (например, Bluetooth-колонки). Устанавливайте таймер выключения аудио для постепенного затухания аудио.

Детальное описание сцен:

Cкрин сцены Описание сцены
User
UserScene На сцене отображается список добавленных детей в виде табличного представления. Для хранения данных используется CoreData с автоматической синхронизацией в облаке (с использованием CloudKit). Табличная ячейка отображает базовую информацию о ребенке: его фотографию, возраст (количество дней склоняется в соответствии с NSStringPluralRule.
Day
DayFirst Сцена отражает активность ребенка за выбранный день. В качестве секций выступают Сны и Бодрствования, а активность, связанная с Кормлениями, Сцеживаниями отражается в виде рядов, соответствующего Сна или Бодрствования. В NavigationBar’e реализованы возможности по редактированию сведений о ребенке (titleView) и выбору текущей даты (rightBarButtonItem).
DatePicker Выбор необходимой даты осуществяется при помощи кастомного ViewController’a: DatePicker.
DayThird Для того, чтобы начать или закончить сон в текущий день достаточно просто нажать на кнопку “Начать/ закончить сон”, и событие произойдет в текущее время. Если же на кнопку нажать не в текущий день, то сразу выскочит окно с выбором времени, начиная с конца последеней активности выбранного дня, заканчивая 23:59 выбранного дня.
DayFourth В конце каждого дня представлена статистика, включающая информацию по активности за прошедшую ночь, текущий день, следующую ночь. В настройках можно отключить демонстрацию как отдельных статистических параметров, так и целых секций.
DayWakefulness При выборе секции с Бодрствованием вызывается AlertController с различными действиями (на слайде не представлены некторые из них, поскольку не удовлетворяют условиям).
DaySleep При выборе секции со Сном вызывается AlertController с различными действиями (на слайде не представлены некторые из них, поскольку не удовлетворяют условиям).
KidProfile
KidProfile При нажатии на titleView на NavigationBar’e на предыдущей сцене, происходит переход в профиль ребенка, где можно изменить его фотографию, имя, дату рождения, а также диапазон ночного сна, благодаря которому сны, начавшиеся внутри которого будут автоматически помечаться как ночные.
Sleep
Sleep Сцена редактирования сна. Реализована возможность установки времени начала и окончания сна при помощи DatePicker, указания дневной или ночной сон, места сна и примечания.
Nursing
Nursing Сцена редактирования кормления. Реализована возможность установки времени начала и окончания сна при помощи DatePicker, указания дневной или ночной сон, места сна и примечания.
AudioCollection
AudioCollection Во второй секции TabBar’a, “Аудио”, расположены несколько разделов аудио контента (пока доступен только один – “Окружение”), которые представлены в виде CollectionView, по тапу на которую происходит переход на сцену AudioTracks, в которой расположены аудиозаписи звуков природы и окружения, предметов быта.
AudioTracks
AudioTracks При нажатии на ячейку табличного представления, появляется аудио-плеер, реализованный в слое MainTabBar.
AudioPlayer
AudioPlayerVolume Первоначально запущенный трек проигрывается практически бесконечно (Int.max), однако, время проигрывания можно установить (диапазон: 10 – 240 минут). При установке таймера автоматически устанавливается плавное затухание звука в течение последних 10 минут проигрывания.
AudioPlayerMini Так как AudioPlayer реализован в MainTabBar, плеер доступен любом экране приложения (кроме сцен настроек). При появлении плеера происходит изменение нижнего инсета как табличного представления, так и ScrollView (сохраняется в UserDefaults), что позволяет оставить доступным контент, находящийся на ViewController’ах за AudioPlayer’ом в свернутом виде на всех сценах приложения.
AudioPlayerControlCenter Реализована возможность управления громкостью и воспроизведением аудио из Control Center’a, а также возможность передачи аудиоконтента по AirPlay.

GitHub

View Github