Приложение iOS для изучения иностранных слов по наборам карточек.
Мы небольшая команда начинающих разработчиков, которых объеденяет школа IT GeekBrains. В рамках финального курса, нам предстояло создать приложение. Перед стартом написания, мы поставили перед собой следующие задачи:
- Научиться работать в команде при раработке продукта
- Научиться организовывать работу используя Task Manager
- Придумать проект, который мы в силах раработать
- Сформировать техническое описание
- Создать дизайн приложения
- Написать приложение
- Оформить ReadMe в репозитории
В итоге у нас получилось приложение, обзор ниже.
Создание списка | Обучение | Список слов |
---|---|---|
List.mov |
LearnReview.mov |
WardCardsReview.mov |
Пользователь, выбрав язык изучения, может легко создать свой список слов для изучения. Слова можно добавить через вставку или вводя по отдельности. Приложение сформирует перевод и найдет подходящие изображения для каждого слова. Пользователь на главноем экране увидит новый список. По нажатию на него, можно просмотреть получившиеся карточки, а если перевод и подобранное изображение не подойдут то можно загрузить свое изображение или изменить перевод слова. Изучение можно проходить по различным сценариям. Карточку для изучения можно сделать из частей: исходное слово, перевод и изображение. Отвечать на предложенную карточку можно через тестирование или набирая ответ на клавиатуре. Для понимания звучания, есть кнопка произнести слово вслух. Результаты прохождения каждого изучения списка сохранаются и формируются в статистику, так же пользователю будут показаны ошибки для работы над ними.
При первом открытии приложения, пользователь видит экран приветствия. Приложение просит выбрать родной язык и изучаемый. По кнопке "Начать" сценарий первого старта заканчивается и открывается основной экран со списками слов1.
Это главный экран, который пользователь будет видеть при последующих запусках приложения. Изначально экран пустой. Чтобы показать пользователю что делать дальше, показывается стрелочка, которая указывает на кнопку создания списка "+". После создания списка, пользователь может его увидеть на главном экране. При длительном нажатии на ячейку списка или по кнопке в верхнем правом углу, открывается меню для управления списком слов1. Если пользователь решит изучать другой язык, то он может сменить его по кнопке с изображением флага в верхнем правом углу экрана2.
Создание списка начинается по кнопке "+" на главном экране списоков. По нажатию, открыватся модальное окно с полями для названия, выбора цвета для ориентации и переключателем изображний для слов. По нажатию на "Создать список", пользователь попадает на экран набора слов. Экран позволяет создавать и редактировать слова, на нем есть всего три элемента: поле для ввода, кнопка создания и кнопка помощи. Слова можно вводить набирая с клавиатуры, а также вставлять уже готовый список слов, которые отделены символом запятой или переходом строки. Чтобы сориентировать пользователя, есть кнопка с вопросом, которая открывает окно с описанием возможностей. У списка есть минимальные требования колличества слов, подсказки с этой информацией отображается на кнопке в процессе набора слов. Для добавления в список слова, можно использовать кнопку Enter, запятую или кнопку +, которая появляется справа от поля в момент начала ввода слова. Чтобы удалить или исправить уже введенное слово необходимо удерживать его пару секунд, активируются поле удаления и редактирования. Пользователю необходимо перенести слово в нужное поле. Если пользователь не нажмет на кнопку создать карточки и захочет вернуться на предыдущий экран, то приложение предложит два варианта: выйти без сохранения или вернуться, чтобы не потерять созданный список12.
После создания списка слов, открывается экран с карточками. На нем можно просматривать карточки вместе с картинками, есть возможность редактировать или удалять. Отредактировать весь список слов можно по кругой кнопке справа внизу. На экран можно попасть по меню с главного экрана и в обзорном экране перед изучением3. Название и стиль списка можно сменить по нажатию на интуитивную кнопку в панели навигации.
Экран выполняет функцию редактирования карточки. Если сервис подобрал не верный перевод, то его можно изменить. А если не подходящее изображение, то сервис в карусели предлагает на выбор другие фотографии. Пролистав и выбрав нужное изображение в карусели, над карточкой меняется заглавный баннер. Последняя ячейка карусели является кнопкой, которая дает возможность загрузить свое изображение из галереи устройства. По нажатию на кнопку сохранить, карточка обновляется1.
Перед запуском изучения, пользовтелю предлагается выбрать индивидуальные настройки карточки слова и функции редактирования списока. По нажатию на кнопку настроек, открывается меню, где можно выбрать отображение вопроса и способ ответа. Экран создается по паттерну Strategy. За сохранение ответов пользователя отвечает Caretaker, который потом дает данные для экрана статистики и работы над ошибками1.
После каждого прохождения изучения, открывается экран результатов. Он состоит из двух частей: статистика и допущенные ошибки. Есть возможность пройти изучение снова по кнопке "Повторить"1.
Приложение поддерживает автоматическое переключение режима оформления.
Для работы мы используем сервис Weeek. Метод организации нашей работы - Scrum, задачи ведем в канбан досках.
Используются API сервисы для перевода и изображений. Сервис запроса в сеть написан с использованием Combine и Generic для переиспользования при получении различных типов данных: перевода или изображений к переводу4.
Flashspeak/FlashSpeak/FlashSpeak/Core/Extensions/URLSession.swift
Lines 13 to 43 in 800b2dc
Flashspeak/FlashSpeak/FlashSpeak/Service/NetworkService.swift
Lines 19 to 42 in 800b2dc
Перевод осуществялется силами Google. Приложение отправляет список слов и получает ответ в виде переведенного списка1.
Подбор изображений осуществляет сервис Unsplash. Приложение отправляет ключевое слово и код языка, а ответ приходит в виде ссылок на изображения. Сервис не всегда присылает подходящие фотографии, поэтому в будущем он заменится на альтернативный, это будет лего сделать, так как сетевой слой написан универсально с использованием generic функции41. Хранятся изображения в виде ссылок. При загрузке фотографий используется cache, а индивидуальные фотографии пользователя для карточек сохраняются в папку приложения1.
Используется ModelViewPresenter. Архитектура удобна в командной работе над проектом.
Использован для обмена данными и событиями между view
Паттерн отлично подошел при создании различных отображений карт в уроке. Пользователь может настроит карточку в настройках, а приложение создает для карты нужное view1.
Еще паттерн используется при формировании очереди вопросов для урока, согласно выбранным настройкам1.
Во вермя урока, есть много данных, а именно: ответы, ошибки, время. Их надо обработать, избавив классы от перегрузки кодом. Эту задачу сбора и сохранения во время прохождения урока берет на себя сaretaker1.
Используется для создания одного класса для менеджеров, которые обслуживают классы в различных частях приложения. Их несколько: менеджер базы данных, менеджер кеша изображений и другие.
Нужен для координации окон приложения. Так как мы отказалист от классических storyboard, которые при одноверменной работе вызывают ошибки и конфликты, то наиболее удобное решение - это Coordinator.1
Flashspeak/FlashSpeak/FlashSpeak/Coordinator/Coordinator.swift
Lines 11 to 29 in 800b2dc
События переходов в окнах описываются в едином файле router, который имеет closure для сообщения координатору события. Данные передаются через case в enum событиях.
Для создания комплекта файлов каждого окна, нужен builder. В нем можно настроить архитектуру и связи между делегатом и делегатами, передать данные.
Для написания интерфейса приложения выбрана классическая библиотека.
Используется для отрисовки графиков результатов, потому что имеет встроенную библиотеку Chart. Код встаивания через UIHostController
Хранение данных реализованно встроенной библиотекой. Она быстрая, не прибавляет веса приложению и покрывает задачи работы с данными.
Использование реактивного програмирования позволило уменьшить колличество делегатов и кода для связи объектов между друг другом.
Озвучивание иностранного слова полезно для обучения языку. По нажатию на кнопку speaker в уроке, слово синтезируется речь использую эту библиотеку.
Flashspeak/FlashSpeak/FlashSpeak/Core/Learn/Manager/LearnManager.swift
Lines 260 to 282 in 800b2dc
- CoreData3
-
UserDefaults3 Хранит значения ключей настроек обучения, профиля пользователя,
-
Config.xcconfig4 Хранит токены для API. Файл внесен в gitignore, чтоб токены не утекли в сеть.
- iOS 16.0+
- Xcode 14.3
Для запуска приложения, нужно внести токены API в Config.xcconfig.
Проект создан в рамках курса "Командная разработка на Swift" в школе GeekBrains. Преподаватель курса Александр Рубцов.
- Добавить интерактивный виджет урок
- Добавить трансфер списка слов на другой язык
- Сделать экран настроек приложения
- Сделать несколько списков слов по умолчанию при первом открытии приложения
- Добавить возможность сменить язык в приложении
- Заменить сервис изображений
- Добавить графики для отображения статистики
Сноски на реализованные части