У меня был Plan! и я его придерживался

от автора

     На самом деле, кроме плана был Xcode, одна идея и желание написать приложение на популярном в 2к19 языке Swift. Мысль заключалась в том, что следить за финансовыми сбережениями под подушкой или целями в разных местах сложно и, в некоторых случаях, долго.

image
И если Вам станет интересно, как то, что было до — стало тем, что справа, заходите под кат.

Часть 1. Цель оправдывает средства?

     Основная мысль заключалась в том, что несмотря на огромное количество аналогов (тысячи их), хотелось создать велосипед приложение настолько простое и понятное, насколько это вообще возможно. Альфа-версию в блокноте с превью я создал после того, как окончательно устал переходить и кликать в небезызвестном «хранителе монет» ради того, чтобы добавить 100 рублей на свой счет.

разработка Поэтому было решено, что следующие выходные пройдут не за сериальчиками, а за Xcode и за применением свифта в бою. Пусть я и айос-разработчик, однако в некоторых компаниях даже в продакшне все ещё используется objective-c.



До выходных я подключил девушку-дизайнера и немного проработал концепцию:

  • Добавление цели должно быть не сложнее, чем в два перехода, включая вбивание суммы
  • Нужна история транзакций
  • Важная часть — возможность отменить действие сразу же
  • Тёмная тема

Часть 2. Попробуем

Для реализации первой части хватило и UINavigationController. Был реализован сервис для генерации рутового контроллера в зависимости от следующих состояний:

  • Пользователь первый раз запустил приложение
  • Есть хотя бы одна активная цель
  • Есть завершённые цели, но нет активных

     Этим сценарием я попытался ускорить процесс создания цели и управления. Здесь и далее под целью подразумевается возможность накопить средства или управлять своим бюджетом.

разработка Основной экран — это UIPageViewController вверху и клавиатура, которую можно было бы заюзать как кастомный inputView, но ночь была темна и полна ужасов, и в итоге там разместился набор кнопок. Как могут знать iOS-разработчики, у нас не так много возможностей менять фон кнопки в состоянии хайлайта, поэтому я использовал категорию для генерации картинки по заданным настройкам темы и менял их для разных стейтов.



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

разработка     Пусть будут благословлены создатели NumberFormatter, которые позволили отобразить разряды в суммах так, как хочется разработчику. К слову, далеко не все приложения используют правильный вид отображения цифр.

     Я очень долго колебался между использованием CoreData, Realm и FMDB или своей прослойкой для sqlite, но в итоге чашу весов склонил в пользу FMDB. Просто потому, что захотелось.

разработкаОтмена транзакции — больная тема, т.к. хотелось это сделать как можно более интуитивно. Для этого я использовал кастомное UIView, и метод для соответствия с последней транзакцией. Сложности технической в этом нет, а вот то, что не переходя с экрана и с помощью <1 секунды можно отменить свое действие — стоит дорогого. Для баннеров и управления очередью (а вернее, показа последнего актуального) я использовал NotificationBannerSwift. А ссылки на все используемые опенсорсные компоненты будут внизу.

Даже не знаю зачем в предверии iOS 13 я решил реализовать тёмную тему, но что сделано, то сделано. Для этого можно было использовать разные подходы, но я реализовал смену тем с помощью кастомного класса и сервиса для управления между необходимыми отображениями. А сохранение настроек лежит в UserDefaults.

Для встроенной покупки (ну если кому-то вдруг приложение понравится), был использован стандартный фреймворк StoreKit и немного логики с обработкой стейтов транзакций.

Часть 3. Что получилось в итоге?

Plan!

Какие фреймворки и компоненты были использованы:

Есть ли планы?

Да, конечно есть. Планирую добавить экран для ввода пин-кода, возможность более интуитивно управлять бюджетом и поискать возможности для интеграции с ресурсами уровня повыше приложения за выходные, но понимаю, что шансов немного:)


ссылка на оригинал статьи https://habr.com/ru/post/461233/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *