Всем привет, меня зовут Константин. Я являюсь основателем Madmind Studio. Вы могли уже читать о нашем приложении Evaluate.Day, на просторах этого ресурса. Сегодня речь пойдет о нашем новом приложении — Rency. Это простой конвертер валют. Основная идея, которую мы пытались заложить в это приложение — простота. Хотелось сделать приложение, которое требовало бы минимум движений для получения результата.
С чего все началось…
Что объединяет почти все конверторы валют в App Store? Они работают, как конвертеры. Алгоритм действий пользователя следующий: во-первых, надо выбрать валюту, в которую вы хотите конвертировать. Во-вторых, выбрать валюту, из которой необходимо конвертировать. Может понадобится еще установить курс, но, как правило, они подтягиваются из интернета. В-третьих, ввести сумму для перевода. Итак, спустя три или четыре шага, получаем результат. Нам хотелось сократить все эти действия и оставить по-возможности только последнее. Так появилась концепция ввода только одного значения, где приложение покажет результат в обе стороны.
Стандартная клавиатура не нравилась нам, а наша Apple.
Чем плоха стандартная клавиатура? Ничем. Хотя, есть у нее один минус. Цифровой клавиатуры нет под iPad. Вводить цифры со стандартной клавиатуры не очень-то удобно. Нам хотелось обеспечить одинаковый пользовательский опыт для владельцев iPhone и iPad. Поэтому было решено использовать свою клавиатуру.
Клавиатуру надо было убрать, но и показать, что она есть. Начальный экран выглядит пусто и не понятно: что делать и на что нажимать? Мы оставили небольшую полоску внизу экрана, за которую можно вытянуть клавиатуру. Делать это тоже не всегда удобно, можно просто тапнуть по экрану и появится клавиатура.
Из-за клавиатуры мы получили первый отказ от Apple. В купертино решили, что наша клавиатура копирует поведение и внешний вид Control Center и стандартного наборщика номера, что вводит пользователей в заблуждение. Недолго удивляемся такому повороту событий, думаем и исправляем.
Концепция работы с приложением.
Нужно было понять, как осуществить поставленную задачу и убрать два или три лишних шага. Ответ пришел сам собой. Как часто вы хотели перевести деньги из одной валюты в другую, и ни одна из них не являлась вашей основной валютой? Согласитесь, такое происходит не часто. Поэтому при первом старте мы просим пользователя уточнить его основную валюту. По умолчанию берется из настроек iOS. Также, мы просим доступ к его данным. На их основе выстраивается список валют для конвертации.
Работа без интернета.
С самого начала работы над приложением было понятно, что оно должно работать без интернета. А когда приложение подключается к нему, то не должно сильно нагружать сеть. Единственное, от чего не получилось отказаться, это от запроса курсов валют. К счастью, курсы меняются не с космической скоростью, и резкие колебания — это скорее исключение, чем правило. Поэтому приложение запрашивает курсы не чаще, чем раз в три часа, или же при смене основной валюты.
Rency определяет необходимые для перевода валюты, исходя из страны, в которой находится пользователь и соседних стран. Соответсвенно, необходимо понимать какие у страны есть соседи. Да и без интернета неплохо понять по координатам, в какой стране пользователь.
Для первого случая был написан скрипт, который собирал данные о странах из разных источников, сравнивал их и компоновал только нужную нам информацию в JSON. Так что приложение носит эти данные с собой.
Со второй проблемой дела обстояли не так хорошо. Удалось найти библиотеку, которая по ширине и долготе определяла страну. Это было то, что нужно.
Заключение
Приложение Rency не является сложным, это довольно простая утилита, котороя призвана как можно проще решить конкретную задачу. Но как это бывает, в процессе работы приходит огромное количество идей, все они записаны, отсортированы и доработаны, так что Rency ждет еще не одно обновление и получение дополнительного функционала.

P.S.
Вот несколько промокодов специально для читателей Cocoa Developers Club:
AN37WXPJMKM3
7KPE7EP9FH4M
J7Y7N3Y6TE7Y
EPEKAYWJNJJN
KFLT9FJW9KYL
F7WLFFT674LP
LY4YJJPA3NPH
7ERXN7FFYYH9
J9TN9ARW6XLK
E9TJ7WTEPYWJ


