Приложение помогает пользователям формировать полезные привычки и контролировать их выполнение. Цели приложения:
- Контроль привычек по дням недели;
- Просмотр прогресса по привычкам;
- Приложение состоит из карточек-трекеров, которые создает пользователь. Он может указать название, категорию и задать расписание. Также можно выбрать эмодзи и цвет, чтобы отличать карточки друг от друга.
- Карточки отсортированы по категориям. Пользователь может искать их с помощью поиска и фильтровать.
- С помощью календаря пользователь может посмотреть какие привычки у него запланированы на конкретный день.
- В приложении есть статистика, которая отражает успешные показатели пользователя, его прогресс и средние значения.
Полное описание функциональных требований находится в техническом задании
- Убедитесь что на компьютере установлен Xcode версии 13 или выше.
- Загрузите файлы Tracker проекта из репозитория.
- Откройте файл проекта в Xcode.
- Запустите активную схему.
[In progress]
- Clean Swift & MVVM (SelectCategoryMVVM & Statistics modules)
- Navigation: Coordinator
- DI: на базе фабрик
- Persistence storage: Core Data & UserDefaults
- Layout: Anchors, CompositionalLayout
- Animation: ScrollView animation (Onboarding module)
- Snapshot Tests
- Fonts: YSDisplay
- "App": App и Scene delegates, глобальные объекты приложения: DI, навигация и сервисы
- "Models": Модели объектов
- "Modules": Содержит модули приложения (UI + код)
- "Library": Протоколы, расширения и утилиты
- "Resources": Ресурсы приложения: картинки, шрифты, локализация и другие типы ресурсов. А также файлы и группы файлов:
- Localization - строковые файлы и локализация info.plist
- Theme+.swift - расширения, которые содержат статические методы по поддержке работы с ресурсами приложения, форматтеры, константы, ключи локализации и некоторые дополнительные сервисные методы.
- LaunchScreen.storyboard
- Info.plist
- SnapshotTesting - написание Snapshot тестов, добавляется к таргету для тестов
- YandexMobileMetrica - набор библиотек для сбора статистики использования приложения
- Задачи по спринту выполняются в отдельной ветке sprint-X, где X - номер спринта
- По окончанию работ создается PR на вливание в ветку main и отдается на проверку
- После успешной проверки и получении апрува изменения вливаются в main через merge request (с опцией squash) и ветка для разработки удаляется
- main - стабильные версии приложения
- sprint-X - ветки для разработки
- Названия коммитов должны быть согласно гайдлайну
- Тип коммита должен быть только в нижнием регистре (feat, fix, refactor, docs и т.д.)
- Должен использоваться present tense ("add feature" not "added feature")
- Должен использоваться imperative mood ("move cursor to..." not "moves cursor to...")
feat:
- это реализованная новая функциональность из технического задания (добавил поддержку зумирования, добавил footer, добавил карточку продукта). Примеры:
feat: add basic page layout
feat: implement search box
feat: implement request to youtube API
feat: implement swipe for horizontal list
feat: add additional navigation button
fix:
- исправил ошибку в ранее реализованной функциональности. Примеры:
fix: implement correct loading data from youtube
fix: change layout for video items to fix bugs
fix: relayout header for firefox
fix: adjust social links for mobile
refactor:
- новой функциональности не добавлял / поведения не менял. Файлы в другие места положил, удалил, добавил. Изменил форматирование кода (white-space, formatting, missing semi-colons, etc). Улучшил алгоритм, без изменения функциональности. Примеры:
refactor: change structure of the project
refactor: rename vars for better readability
refactor: apply prettier
docs:
- используется при работе с документацией/readme проекта. Примеры:
docs: update readme with additional information
docs: update description of run() method
style: clean up
- корректирую/улучшаю стиль и читаемость кода, удаляю мертвый код
В проекте используются:
- SwiftLint - для обеспечения соблюдения стиля и соглашений Swift
brew update
brew install swiftlint
- Live Preview с помощью SwifUI
#if canImport(SwiftUI) && DEBUG
import SwiftUI
struct ViewProvider: PreviewProvider {
static var previews: some View {
let viewController = ViewController()
let labelView = viewController.makeWelcomeLabel() as UIView
let labelView2 = viewController.makeWelcomeLabel() as UIView
Group {
viewController.preview()
VStack(spacing: 0) {
labelView.preview().frame(height: 100).padding(.bottom, 20)
labelView2.preview().frame(height: 100).padding(.bottom, 20)
}
}
}
}
#endif
- Доска задач не используется
- Задачи описываются в issue и связываются с ветками для разработки
- Инструментом для дизайна является Figma
- Дизайн приложения