Для каких задач используем Swift: на примере приложения VPN-клиента

Для каких задач используем Swift: на примере приложения VPN-клиента

Коротко

  • 01
    Что за инструмент

    Swift — собственный язык программирования от Apple

  • 02
    Где используем

    VPN-клиент

  • 03
    Почему выбрали

    У заказчика уже было приложение на Swift для iOS. Его надо было починить и адаптировать для других платформ.

    Swift — нативный язык для устройств Apple, у него есть прямой доступ к системным функциям и «железу».

  • 04
    Результаты

    6 платформ, на которых работает приложение

    250 тысяч установок суммарно

    За 6 месяцев опубликовали обновленную версию

О проекте: приложение для VPN

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

Изначально заказчик нанял команду, которая предложила самую низкую цену. Она работала над приложением для App Store почти год, но получилось так себе. Программа тормозила: время отклика доходило до 15 секунд. В коде было много повторяющихся фрагментов, ошибок, некорректно работала оплата.

Команде OrbitSoft предстояло:

  1. Исправить ошибки приложения.
  2. Адаптировать его под разные устройства и ОС.
  3. Починить механизм платной подписки.

Задача осложнялась тем, что приложение уже было опубликовано в App Store: пока мы работаем над новой версией, старая должна работать и принимать оплату.

Какие задачи решили с помощью Swift

Разработку для iOS мы продолжили на Swift: нативный язык гарантирует скорость и качество работы приложения, а еще дает прямой доступ к возможностям устройства и операционной системы. Рассказываем, какие задачи решили с помощью Swift в проекте.

Переделали дизайн приложения. В старой версии интерфейс на различных устройствах отличался. Например, человек пользуется приложением на смартфоне и планшете, а выглядит оно по-разному. Или купил новый iPhone, скачал тот же VPN-клиент, а навигация непривычная — приходится заново искать нужные функции. Это неудобно, пользователи уходили, а компания теряла прибыль. Мы переписали код так, чтобы приложение выглядело одинаково на всех устройствах, а клиенты легко в нем ориентировались.

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

Мы сделали логику приложения привычной для клиента: сначала выбор тарифа, потом регистрация. Это потребовало изменения серверной части: мы добавили в программу ситуацию, когда человек подписался и закрыл приложение без создания аккаунта. Тогда при следующем входе приложение должно выяснить, оплачена ли подписка у этого незарегистрированного пользователя. Оно делает запрос к серверу и, получив положительный ответ, показывает экран создания аккаунта.

Теперь логика приложения понятна пользователям, данные об оплате всегда сохраняются, а компания не теряет клиентов.

Стартовые экраны: выбор тарифа, затем регистрация аккаунта

Адаптировали приложение под разные устройства и операционные системы. Мы переписали код приложения на Kotlin для Android и Android TV, на C# — для Windows. Код на Swift почистили от ошибок, заново адаптировали под планшеты. Версию под Mac собирались сделать с помощью Mac Catalyst. Эта технология автоматически переносит на Mac приложения для iPad. Но возникла проблема.

Apple сохраняет пароли в защищенном хранилище Keychain, а доставать их через Catalyst не получается. В результате, когда пользователь выбирает сервер VPN, программа вместо подключения требует пароль. Мы искали решение проблемы в сообществе разработчиков. Нашли несколько веток обсуждений на Stack Overflow, но и там ответов не было.

Скриншот ответа техподдержки Apple

Когда появится решение — неизвестно. Мы решили не ждать, и переписали код вручную. Так мы потратили больше ресурсов, но опубликовали версию под Mac без ошибок.

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

Мы починили механизм и настроили автоподписку. Теперь приложение продлевает тариф самостоятельно — пользователю не нужно каждый раз вводить платежные данные, а компания может рассчитывать на ежемесячный доход.

Мы починили механизм и настроили автоподписку. Теперь приложение продлевает тариф самостоятельно: пользователю не нужно каждый раз вводить платежные данные, а компания может рассчитывать на ежемесячный доход.

Не обошлось и без сложностей. У Apple неудобно организовано тестирование подписки: нужно заводить отдельный аккаунт, на котором тестируемое событие может наступить только 6 раз. Чтобы продолжить, нужен еще один тестовый Apple ID, потом еще и еще — нам в итоге понадобилось около пятидесяти. В официальной документации об этом не упоминается, но мы разобрались и успешно протестировали приложение.

Результаты

Первоначальное приложение размещено в App Store в августе 2020. Исправленную версию мы выкатили всего через полгода — в январе 2021. Со всеми доработками и улучшениями проект занял около 10 месяцев.

Приложение устанавливается на 6 платформ: iOS, MacOS, Android, Android TV, Fire OS, Windows.

Суммарно его установили более 250 000 раз.

В чем бы вы ни нуждались, мы можем помочь!

Расскажите нам, с какими проблемами вы сталкиваетесь в своем бизнесе. Мы с нетерпением ждем вашего ответа.

Получите ответ по смс

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