Итак, поговорим об ошибках запуска и ведения @ShopFella - продукта, которым я занимаюсь с прошлого лета и стараюсь активно развивать. Ну и заодно расскажу, как идея пришла мне в голову и как я сам себе облегчил жизнь
Небольшая предыстория: мы с моей женой @gromontova, будучи ещё студентами, переехали в Вену вместе и перед нами стал вопрос учёта финансов и бюджетирования. Она предложила выделять определённую сумму денег в неделю на еду и не превышать эту сумму во время похода(ов) в магазин
Чтоб придерживаться этой суммы мы выписывали в Заметках блюда, которые хотим готовить на неделе. Затем выписывали, какие продукты нам нужны и потом, будучи в магазине, отмечали купленные продукты и параллельно добавляли их цены в Калькуляторе
Идея была отличная, а вот реализация хромала. Если продукт нужно отложить, приходилось искать его цену, чтоб отнять в калькуляторе, скидки нужно было высчитывать самому итд
Как-то, выходя в магазин, я подумал: "А почему бы не написать быстренько приложение, которое объединяло бы список покупок, калькулятор и подсчёт всех нужных нам вещей". Так, спасибо #SwiftUI, за 15 минут и появилась первая версия @ShopFella
Накидать всё быстро было кайфово, но с первого релиза и до сих пор я имею дело со многими непродуманными концептами и сейчас речь пойдёт о них
Первой ошибкой было сохранять все данные в UserDefaults (не бейте). Со вторым же обновлением все сохранённые данные полетели.
Конечно, проблема была в моей криворукости, но всё же урок усвоен:
UserDefaults для простых вещей, которые нестрашно потерять
Действовать нужно было быстро и, поскольку я сохранял данные в виде JSONа, в этом же виде я начал сохранять всё в файл на диске. Во время открытия приложения я загружаю всё в память. До сих пор работает прекрасно
Забегу наперёд: не смотря на то, что работает прекрасно, я предвкушаю будущие проблемы и переписываю сейчас всё на CoreData.
Мне повезло в том, что я изначально написал хорошую модель. Она не менялась никак за весь год, только дополнялась, поэтому я не имел дело с миграциями.
Или тем, как бы оно называлось, когда я бы хранил в приложении обе модели, парсил бы одну, а сохранял бы другую
Меня можно понять: я не планировал развивать проект и "выводить его в люди", поэтому не продумывал многие вещи.
Но урок усвоен:
Думай о развитии продукта наперёд. Что может помешать новым фичам? Даже простой список идей и продумывание их технической имплементации поможет
Идём дальше: Accessibility (или Доступность, или a11y). До моей нынешней работы я понятия не имел, что это такое и ругался, что эта куча методов, которую Xcode предлагает в автокомплите кода – бессмысленная и только мешает
Кстати я до сих пор не понимаю, почему эти все методы на одном уровне со всеми остальными. Почему бы их не вынести на уровень ниже типа
.accessibility.label = ...
?Так вот до недавних пор для меня a11y ассоциировалась с помощью незрячим пользователям в использовании продукта. Как оказалось, Доступность куда шире!
Например доступность – это ещё и повышенный контраст, размер шрифта, отсутствие цвета у объектов, уменьшенное движение итд.
Поэтому если хотите, чтоб ваше приложение было очень крутым, то нужно обращать внимание не только на то, как вам оно выглядит, а и на то, как оно выглядит для пользователей с ограничениями.
Оказалось, что у меня проблемы с некоторыми вьюхами, которые я делал полупрозрачными и красивыми. Или они слишком выделялись при включённом повышенном контрасте, или их вообще не было видно.
Урок усвоен:
Тестируй свои вьюхи со всевозможными a11y примочками.
SwiftUI очень помогает в этом, кстати. Превьюхи, когда работают, можно настроить как-угодно. Мало того, можно вообще иметь 10 превьюх для одного вью. Каждая превьюха будет иметь свою комбинацию настроек. Как обычных, так и a11y.
Кстати, в a11y, l10n и подобных словах посередине цифры – это количество букв между первой и последней буквой. Такое вот сокращение. l10n – это localization. А какие именно слова выбираются для таких сокращений я, честно говоря, понятия не имею
Ещё один урок я вывел, не основываясь на ошибке. В силу своих знаний я решил сделать продукт доступным. Для незрячих в первую очередь (VoiceOver). @ShopFella не идеально доступное приложение, но я стараюсь.
Так вот приятный момент в жизни был, когда мне написала женщина с ограничениями на имейл и поблагодарила за то, что мой продукт помогает ей. Поверьте, это чувство лучше 1000 новых пользователей. Похвала от человека, который и вправду нуждался в твоём творении – высшая похвала
Из технических деталей всё, в следующем треде пойдут более продуктовые
Рома Мирзоян