🔥

Тред (Рома Мирзоян)


Итак, поговорим об ошибках запуска и ведения @ShopFella - продукта, которым я занимаюсь с прошлого лета и стараюсь активно развивать. Ну и заодно расскажу, как идея пришла мне в голову и как я сам себе облегчил жизнь

Небольшая предыстория: мы с моей женой @gromontova, будучи ещё студентами, переехали в Вену вместе и перед нами стал вопрос учёта финансов и бюджетирования. Она предложила выделять определённую сумму денег в неделю на еду и не превышать эту сумму во время похода(ов) в магазин

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

Идея была отличная, а вот реализация хромала. Если продукт нужно отложить, приходилось искать его цену, чтоб отнять в калькуляторе, скидки нужно было высчитывать самому итд

Как-то, выходя в магазин, я подумал: "А почему бы не написать быстренько приложение, которое объединяло бы список покупок, калькулятор и подсчёт всех нужных нам вещей". Так, спасибо #SwiftUI, за 15 минут и появилась первая версия @ShopFella
notion image

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

Первой ошибкой было сохранять все данные в UserDefaults (не бейте). Со вторым же обновлением все сохранённые данные полетели. Конечно, проблема была в моей криворукости, но всё же урок усвоен: UserDefaults для простых вещей, которые нестрашно потерять

Действовать нужно было быстро и, поскольку я сохранял данные в виде JSONа, в этом же виде я начал сохранять всё в файл на диске. Во время открытия приложения я загружаю всё в память. До сих пор работает прекрасно

Забегу наперёд: не смотря на то, что работает прекрасно, я предвкушаю будущие проблемы и переписываю сейчас всё на CoreData.

Мне повезло в том, что я изначально написал хорошую модель. Она не менялась никак за весь год, только дополнялась, поэтому я не имел дело с миграциями. Или тем, как бы оно называлось, когда я бы хранил в приложении обе модели, парсил бы одну, а сохранял бы другую

Меня можно понять: я не планировал развивать проект и "выводить его в люди", поэтому не продумывал многие вещи. Но урок усвоен: Думай о развитии продукта наперёд. Что может помешать новым фичам? Даже простой список идей и продумывание их технической имплементации поможет

Идём дальше: Accessibility (или Доступность, или a11y). До моей нынешней работы я понятия не имел, что это такое и ругался, что эта куча методов, которую Xcode предлагает в автокомплите кода – бессмысленная и только мешает

Кстати я до сих пор не понимаю, почему эти все методы на одном уровне со всеми остальными. Почему бы их не вынести на уровень ниже типа .accessibility.label = ...?

Так вот до недавних пор для меня a11y ассоциировалась с помощью незрячим пользователям в использовании продукта. Как оказалось, Доступность куда шире!

Например доступность – это ещё и повышенный контраст, размер шрифта, отсутствие цвета у объектов, уменьшенное движение итд.

Поэтому если хотите, чтоб ваше приложение было очень крутым, то нужно обращать внимание не только на то, как вам оно выглядит, а и на то, как оно выглядит для пользователей с ограничениями.

Оказалось, что у меня проблемы с некоторыми вьюхами, которые я делал полупрозрачными и красивыми. Или они слишком выделялись при включённом повышенном контрасте, или их вообще не было видно. Урок усвоен: Тестируй свои вьюхи со всевозможными a11y примочками.

SwiftUI очень помогает в этом, кстати. Превьюхи, когда работают, можно настроить как-угодно. Мало того, можно вообще иметь 10 превьюх для одного вью. Каждая превьюха будет иметь свою комбинацию настроек. Как обычных, так и a11y.

Кстати, в a11y, l10n и подобных словах посередине цифры – это количество букв между первой и последней буквой. Такое вот сокращение. l10n – это localization. А какие именно слова выбираются для таких сокращений я, честно говоря, понятия не имею

Ещё один урок я вывел, не основываясь на ошибке. В силу своих знаний я решил сделать продукт доступным. Для незрячих в первую очередь (VoiceOver). @ShopFella не идеально доступное приложение, но я стараюсь.

Так вот приятный момент в жизни был, когда мне написала женщина с ограничениями на имейл и поблагодарила за то, что мой продукт помогает ей. Поверьте, это чувство лучше 1000 новых пользователей. Похвала от человека, который и вправду нуждался в твоём творении – высшая похвала

Из технических деталей всё, в следующем треде пойдут более продуктовые

Рома МирзоянРома Мирзоян