В помощь мобильному разработчику

Разработать и опубликовать приложение за неделю при помощи Xamarin.Forms

Александр Алексеев

В течение нескольких праздничных дней я разработал приложение Scoreboard, предназначенное для отслеживания результатов спортивных мероприятий и настольных игр, которое сейчас доступно для iOS и Android!

Я не ожидал того, что мне удастся с нуля написать приложение для iOS и Android за эти праздники, но я это сделал. Все началось с того, что мы с Хизер играли в нереально веселую настольную игру Qwirkle (Квёркл), где частью игрового процесса является составление последовательностей блоков. Мы только начали изучать руководство по игре, как тут же выяснилось, что нам понадобятся ручка и бумага для подсчета игровых очков. Мы обыскали все вокруг и нашли лист бумаги, а в ящике с мусором отыскалась и ручка. Приблизительно на 20-й минуте, как я начал вести счет игре, он уже пошел на сотни. В этот момент меня осенило, что нужно создать приложение для подсчета игровых очков, как это сделано, например, в игре Sushi Go, в которую мы постоянно играем. В этот момент и родилась идея создания Scoreboard!

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






Впрочем я знал, что мог бы попытаться еще раз разработать приложение в течение одной недели, что я уже как-то раз провернул с проектом Meetup Manager в один из прошедших новогодних праздников. Здесь я опишу, каким был мой недельный путь по разработке приложения и последующей его дистрибуции.

 

Функции

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

  •  2-4 игрока
  • Возможность приостановления/возобновления текущей игры
  • Хранение всех игровых данных в локальной базе SQLite
  • Хранение данных игр и имен игроков (с возможностью редактирования)
  • Показ истории прошлых игр

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

 


Фреймворк приложения и плагины


Изначально было понятно, что для моих целей идеально подходит Xamarin.Forms. Поскольку пользовательский интерфейс был не слишком сложным, ему следовало быть практически одинаковым и на iOS и на Android. Чтобы также позволить в будущем выпустить приложение и для Windows. Кроме того, я работал с замечательным сообществом разработчиков, развивая проект Xamarin.Forms Community Toolkit, так что у меня была возможность использовать пререлизные пакеты в настоящем приложении. Честно говоря, у меня, вообще, не было проблем с использованием последней версии Xamarin.Forms, что само по себе просто отлично. Я повторно использовал имеющиеся у меня преобразователи и несколько пользовательских элементов управления из других приложений и через некоторое время уже запускал приложение. Мне также понравились новые шаблоны, предлагаемые по умолчанию для Android в альфа-канале. В случае с iOS я просто выбрал аналогичную цветовую гамму для подсветки.

Более всего в работе мне помогали плагины для Xamarin, и именно благодаря им я сумел создать свое приложение в столь сжатый срок. В течение последних двух лет я был много наслышан о плагинах, а теперь смог на практике оценить их преимущества, поскольку они дали мне все то, что требовалось для разработки приложения. И вот их перечень:

  • Плагин настроек: Это мой оригинальный плагин, который фактически контролирует каждый аспект этого приложения. Я сохраняю полное состояние игры в настройках, включая настоящие имена, очки, раунды, а также текущего игрока. Таким образом, я могу постоянно держать информацию наготове, даже если пользователь закроет, и затем повторно откроет приложение.
  • Пользовательские диалоги: Кому, вообще, могут не нравиться кроссплатформенные пользовательские диалоги? — Вопрос риторический. Они могут выглядеть и восприниматься по-разному, но они наверняка пригодятся для ввода текста, загрузки диалоговых окон, а также просто для оповещений.
  • Плагин «Поделиться»: Этот плагин используется нечасто, и, кроме того, мне постоянно хочется открыть настраиваемую вкладку в Chrome или SFSafariViewController вместо браузера.
  • MvvmHelpers: Начиная с 2015 года этот плагин стал для меня самым удобным решением, поскольку здесь есть все необходимое для MVVM, и эта возможность лучше ObservableCollections.
  • SQLitenet PCL: Мой хороший друг Франк вернулся и привнес замечательно оптимизированную и легкую библиотеку ORM SQLite-net. Мое приложение кэширует данные только локально и сохраняет всего несколько таблиц, поэтому данный плагин подошел просто идеально.

Между Xamarin.Forms и этими библиотеками приложение в iOS и Android совместно использует около 95% кода. И это просто великолепно.

 

Аналитика и отчетность об аварийном завершении

Эти две категории находятся в очень интересной для разработчиков Xamarin области. С Xamarin Insights, объединенном с Hockey App, и с вышедшим на первый план Mobile Center многим разработчикам сложно определиться с тем, что интегрировать в мобильные приложения. Raygun недавно спонсировал мероприятие Merge Conflict, и несколько недель тому назад я принял решение испытать его в каждом моем приложении, что мне очень понравилось! Raygun способен на очень многое в части мониторинга приложений в режиме реального времени и отчетности об аварийном завершении. При помощи всего лишь одной строки кода можно получить отчет о сбое, а благодаря нескольким — о выбранном экране, сетевых вызовах и даже пойманных исключениях. Таким образом у меня сейчас стандартизирована отчетность на всех приложениях:

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

 

Непрерывная интеграция и внедрение приложения

С того момента, как я нажал File->New Project мне стало ясно, что я бы совершенно точно не желал разрабатывать это приложение с нуля. Ведь я хочу, чтобы все было подписано, выровнено и готово к отправке в момент уведомления. Естественный выбор здесь — мое любимое решение CI/CD — Bitrise. И сама компания и их программный продукт просто великолепны. Спустя 20 минут мое приложение было полностью собрано, отмечено версиями, подписано, отправлено посредством dSYM в Raygun и готово к установке с фиксированием изменений и передачей на GitHub.

Bitrise

Никакого другого способа отправить это приложение настолько быстро, как в случае с Bitrise просто не существует.

 

Интеграция рекламы


Поскольку я пока что не настроен возиться с реализацией функции «покупок в приложении», я начал интегрировать рекламные объявления Google AdMob во все мои бесплатные приложения. Это приложение является максимально простым, включающим всего лишь несколько страниц. Но на главной странице подсчета очков, где пользователи будут проводить большую часть времени, располагается большой, хороший рекламный баннер. Он не слишком навязчивый, но зато остается на экране все время, когда кто-либо пользуется приложением. Кроме того, поскольку состояние игры сохраняется автоматически, если кто-то нажимает на очки, приложение позволяет легко возобновить прерванную игру.

На то, чтобы интегрировать рекламу при помощи AdMob потребовалось всего несколько минут. Кстати, я уже писал о том, как добавляется реклама в приложения Xamarin.Forms, будь то в случае с iOS или Android. Я просто вытащил код из Meetup Manager, зарегистрировал новое приложение… И готово! Профессиональный совет от Мотца: убедитесь также в том, Вы зашли на портал AdMob и выключили практически ВСЕ чувствительные категории для приложения. К сожалению, они включены по умолчанию и по-настоящему раздражают:

AdMob

 

Иконка приложения и графическое оформление


Если не выполнить данный пункт должным образом, то потом его исправление может занять много времени и запросто задержать выпуск приложения. Apple и Google предписывают строгие требования к размеру иконки и графическому оформлению приложения. Это касается приложения самого по себе, а также его представления в соответствующем магазине. Как только у меня имеется готовое название, цветовое решение и скриншот приложения я сразу же отправляюсь на Fiverr — портал фриланса, где можно заказать иконку для приложения у какого-нибудь дизайнера, однако, имейте в виду, что за уникальность придется переплатить. Это стоит около 40 $, но итог меня вполне устроил:

Иконка приложения

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

 

Тестирование


Поскольку мое время было ограничено, мне следовало выбрать такую форму тестирования приложения, которая позволила бы сделать это максимально быстро. Мы с Хизер играли во множество настольных игр в свободное время, что идеально подошло для тестирования. Поскольку логика приложения была достаточно простой, я до того особо его и не тестировал. Разумеется, это не значит, что я, вообще, ничего не сделал по части автоматических тестов. Я запустил крайне простой тестовый прогон приложения в Xamarin Test Cloud, чтобы сделать скриншот на каждой платформе, как я это обычно делаю, и создать несколько простых тестов для оценки работы программы. Мне хотелось также испытать другие механизмы автоматического тестирования, которые Google разрабатывает совместно с Firebase. Их Test Lab действительно аккуратный программный продукт, использующий Espresso и ряд других тестирующих фреймворков. Кроме того, у них также есть Robo-тест, который предназначен для автоматического исследования приложений. Я решил дать ему шанс, хотя когда Test Cloud обладали данной функцией она показывала неудовлетворительные результаты. Как и следовало ожидать, этот тест мало что сделал, помимо исследования страницы настроек.

Xamarin Test Cloud



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

 

И в заключение

Я всегда стараюсь предоставлять пользователям возможность сообщать о проблемах в приложении и получать обратную связь. Я создал максимально простой экран в приложении «настройки/сведения о приложении», где подсвечены: фреймворк, который я использовал, авторские права и ссылки на форум поддержки. Я не хотел организовывать собственный форум поддержки, так что я просто создал сообщество G+. Таким образом, любой пользователь сможет написать обратную связь, а разработчик получить об этом уведомление, если он того желает. Я использовал этот способ для нескольких приложений и он показал себя просто отлично.

Я надеюсь, что Вам будет небезынтересно ознакомиться с приложением Scoreboard, ведь сейчас оно доступно бесплатно:

 

Автор: James Montemagno
ИсточникСтатья в блоге автора

Александр Алексеев
Александр Алексеев

Xamarin - разработчик. Работаю с .NET платформой с 2012 года, программирую в основном с использованием C#. За это время успел поработать с ASP.NET, Entity Framework, MSSQL, Git

Логотип Realm

2 комментария

  1. Аватар Дмитрий Reply to Дмитрий

    Ссылки на приложения битые 🙁

Написать ответ