Website development
Development for Tizen
29 October 2013

Продуктивная прокрастинация: разработка под BlackBerry и Tizen



Я не фанат Android. И еще больший «не фанат» Java. Поэтому, когда передо мной встала задача закончить портирование моего iOS/Mac/Win8/WP приложения на Android, я предпочел заняться чем угодно, лишь бы оттянуть этот счастливый момент: съездил на собеседование в Москву на позицию iOS разработчика в Британию (провалил), сделал вне очереди две карты к моей стратегической игре, посмотрел фильм «Кадры» («The Internship» – право, не стоило), сделал себе понтовые наклейки на MacBook и… выделил два раза по две недели на портирование того же приложения под BlackBerry и Tizen.

Вот об этих четырех неделях моей жизни я и расскажу под катом.

PS. Не спешите минусовать, никуда я не денусь, и сделаю порт приложения на Android… после того, как портирую под все остальное…

Я рискну разместить этот пост не в «Я пиарюсь», ибо, давайте уж честно – много на BlackBerry в России не «напиаришь», а Tizen вообще еще не вышел. На остальных платформах мое приложение и так распиарено до нужного мне уровня, и опять же, Россия – это малая копеечка. Если что, прошу не банить, а просто перенести… спасибо. Я не буду явно называть приложение, внимательный читатель найдет его ниже в скриншотах.

Все случилось спонтанно. Я оказался на Хакатоне в рамках MobileFest’13 в Питере, где познакомился с главой российского отделения BlackBerry. Рассказав о своем приложении для iOS/WP/W8/Mac, я спросил, нет ли возможности получить BB девайс для разработки. Через минуту девайс был у меня.

Под BlackBerry 10 можно писать с использованием HTML5, Adobe Air, перепаковывать Android приложения и писать Native приложения на C++. Что ж… ни одной из этих технологий я не владею. HTML — не мое, Air – без комментариев, про Java — см. выше. Значит, выбираем «прямой» способ: C++. На плюсах я писал последний раз лабораторную работу в институте году эдак в 1998, поэтому купил книгу по Qt (так ни разу и не открыл, продам дешево ).

Про регистрацию на BlackBerry Developer портале писать особо нечего. Идем и регистрируемся. Для вывода денег указывается PayPal аккаунт (выплат пока не получал, прошло еще меньше месяца, как мой продукт в магазине BlackBerry World).

SDK скачивается, устанавливается и готово к работе. IDE на основе Eclipse, но работает очень шустро. Симуляторы в виде образов VMWare – грузятся и работают без нареканий.

Документация общего плана для BB Native SDK — на хорошем уровне, все описано хоть и не очень детально, зато ясно куда копать. А вот документация по самим классам на уровне: функция возвращает результат, принимает параметр time, который означает, вы не поверите, время… Однако, это тоже не является сколь-нибудь существенной проблемой. На StackOverflow есть ответы на некоторые вопросы, на остальные можно найти ответы или задать их на форуме разработчиков.

Qt мне очень понравился. Модель SIGNAL-SLOT позволяет обходиться без написания делегатов и не плодить «лишние» классы (интерфейсы, делегаты и т.д.). Я люблю «короткий» код, и концепция Builder саб-классов пришлась мне по душе. Билдер класс возвращает сам себя, при этом имеет сеттер-методы для большинства свойств объекта, например:
ScaleTransition *transition1 = ScaleTransition::create(noteView).fromX(1).toX(0).fromY(1).toY(0).duration(300).autoDeleted(true);

QLM? Никакого QML, только хардкор. Я не люблю описательные языки интерфейса, и уж, тем более, с вкраплениями скриптов на ненативном языке. Кроме того, я считаю, что работа с объектами интерфейса исключительно из кода сильно помогает на начальном этапе разработки глубже вникнуть в идеологию фрэймворка (да, XIB и StoryBoard под iOS — тоже не мой выбор…)

Сам по себе BlackBerry Cascades (GUI фрэймворк) очень стройный. Имеются все необходимые компоненты, свойства, анимации и т.д. Даже если делать пару шагов в сторону от стандартного интерфейса, проблем не возникает. Обработчики жестов работают великолепно, отрисовывается все очень быстро, ресурсы читаются мгновенно.

C какими «фичами» пришлось столкнуться:
1) Если контрол повернут на какой-то угол, то тапы обрабатываются не в пределах контрола, а в пределах bounding box (не знаю, как перевести). Так можно запросто получить тап с координатами [10,-20], например. Пришлось обрабатывать вручную.
2) Необходимо задавать картинку для нажатого состояния графической кнопки (в моем случае это ОЧЕНЬ много кнопок –> растущий размер приложения), поэтому пришлось «изголяться» с прозрачной кнопкой, имеющей в нажатом состоянии затемненное изображение поверх, собственно, картинки. Cocoa Touch (iOS), например, сама затемняет картинку для нажатого состояния, если она не задана.
3) Что-то не то с поддержкой Unicode. Так, например, символы “☐☒" отображаются как-то вроде “a-a=a/”. Разбираться не стал, сделал через картинки (в моем случае это даже более подходящее решение).
4) В системе всего один шрифт с четырьмя начертаниями (Normal, Italic, Bold и Bold Italic) и какие-то мутные описания, что никакие другие нельзя использовать, хотя они вроде как есть. Отложил custom fonts на следующие версии.

Как и планировалось, на 11-й день разработки продукт был готов и отправился на проверку в магазин BlackBerry World. Тут Вам не Apple. Меньше суток, и «ключик наш». Что можно отметить про админку магазина: 10 ключевых слов максимум, описание на любых языках, но скриншоты только на английском (я об этом узнал, когда подготовил по 8 скриншотов на 6 языках).

Если Вы пишете приложение с использованием Native Framework, то можно обязательно нужно подать заявку на присвоение приложению бэйджика “Built for BlackBerry”. Такие приложения показываются в магазине в отдельной группе Built For BlackBerry (в дополнение к общей свалке). «Знающие люди» утверждают, что пользователи с большей охотой покупают нативные приложения. О чем, собственно, свидетельствует и график продаж ниже. Хоть какие-то продажи начались с 12 октября, когда мне выдали бэйджик. Хочу отметить, что для получения бэйджа необходимо наличие Privacy Policy (не на продукт, а в профиле компании, о чем я, опять же, узнал, когда сделал PP на продукт на 6 языках).


Что произошло 27 октября – я не знаю. Но радуюсь.

Из приятного: команда цензоров магазина работает быстро, отвечает на вопросы адекватно, с желанием помочь. Обещали включить продукт в ежемесячную всемирную рассылку клиентам BlackBerry (пока что-то не получил).

Сама же платформа BB 10 мне, как пользователю, очень понравилась. Стройная, шустрая, без кнопочки Home (ни физической, ни виртуальной). Даже хотел себе купить BlackBerry Q10 (тот, который с физической клавиатурой), но пока решил отложить.

Отдельная благодарность главе российского отделения BlackBerry Андрею Киселеву за поддержку на всех этапах работы над программой, до и после. Когда я «брикнул» тестовый телефон, второй мне выслали курьерской почтой на следующий же день.



Итак, BlackBerry версия в магазине, а за Android браться все так же неохота… И на помощь приходит Tizen!

По сравнению с разработкой для BB, разработка под Tizen – это борьба. Но… приятная борьба. Текущая версия Tizen SDK 2.2 еще очень далека от совершенства, но… обо всем по-порядку.

Благодаря представителям Samsung и Intel на Хабре я вышел на российское подразделение Самсунг, где мне сначала посоветовали приехать 23 октября в Москву на семинар и там уже получить тестовый девайс. К счастью, мне удалось убедить абсолютно адекватных и дружелюбных менеджеров что к 23-му числу я уже предоставлю приложение, а девайс мне нужен раньше. Через 6 дней, после оформления всех бумажных формальностей, тестовый аппарат оказался у меня.

Регистрацию разработчика тоже описывать смысла нет. SDK тоже скачивается, устанавливается, и готово к работе. IDE тоже на основе Eclipse, но безумно тормозная (у меня MacBook i7, 8GB, SSD. Заметим BB IDE на том же Eclipse у меня летает). Эмулятор на основе QEMU. Я не знаю, что означают эти буквы, я бы назвал его SSEE – Super Slow Emulator Ever (никаких галочек про хардварное ускорение я не нашел, или не смог включить). Тут без тестового девайса никак.

Писать можно на C++ или HTML5. Я думаю, мой выбор Вам ясен… Прочитав HIG и ознакомившись со структурой фрэймворка, приступаем к работе. И скука сразу покидает нас…

Первое, на что я наткнулся – это отсутствие компонента ImageView. Button есть, Label есть, Panel есть, Slider есть, TextArea есть… все есть. А ImageView нет. Но нам надо писать, а не плакать, поэтому в зависимости от ситуации используется своя реализация ImageView (с AspectRatio и InterpolationQuality) или… Button в disabled режиме с картинкой. Если кому надо – могу поделиться компонентом.

Далее, некорректно читаются JPEG файлы (с сильным сжатием), Tizen подтверждают баг и советуют временно использовать метод с явным указанием формата. К тому моменту я, правда, понял, что он мне вообще не нужен…
Tizen::App::Application::GetInstance()->GetAppResource()->
GetBitmapN(resourceName, BITMAP_PIXEL_FORMAT_ARGB8888).

У компонента Label забыли сделать свойства для задания правого поля, и оно порядка 20 px, с чем ничего не поделать. А у EditArea не только правое поле забыли, но и установка левого поля не работает для значений меньше 20 px. Приходится решать версткой. Я уже молчу, что забыли EditArea сделать свойство FontStyle (Normal, Bold, Italic)… это никак не обойдешь.

Как задать, чтобы Native приложение работало только в портретном режиме «по-людски» — тоже не понятно, приходится везде, где только можно, прописывать формы и фрэйм как Tizen::Ui::IOrientationEventListener, и там уже колдовать.

Обработчики жестов работают отвратительно. Например PinchGestureRecognizer ведет себя отлично, если два пальца ориентированы ЮЗ-СВ (юго-запад – северо-восток), но компонент нещадно колбасит, если наоборот. Смешивать обработчики с низкоуровневыми обработчиками тапов у меня вообще не получилось. В результате вся обработка — только по тапам (как в старые добрые до iOS 3.2 времена).

А где же вращение контролов? А его нет. Нет ни .transform как в iOS, ни .RotationZ как в BlackBerry, ни .RenderTransform как в Win8. Зато есть RotationAnimation! Но не тут-то было… конечным углом для Rotation Animation может быть только значение 0 градусов… Ценно. Но и тут можно схитрить. Если задать в качестве начального угла поворота требуемый Вам, в качестве конечного — 0, и в качестве duration — 2147483647 (примерно 21 день), то можно добиться требуемого результата (и подергивать по таймеру периодически).
GetControlAnimator()->StopAllAnimations(); 
GetControlAnimator()->StartUserAnimation(ANIMATION_TARGET_ROTATION, 
RotateAnimation(_note->GetAngle(), 0, 2147483647, ANIMATION_INTERPOLATOR_DISCRETE));

Очень порадовало наличие Scene Manager (workflow). Это что-то вроде iOS StoryBoard, но сильно проще. В виде диаграммы задаются формы и параметры анимаций переходов, далее пишутся (заполняются) фабрика форм и фабрика панелей (если применимо), и все переходы между сценами осуществляются буквально в 1 строку кода. На такое я согласен.

Tizen Store доступен только на прием приложений, процедура также не заслуживает внимания. Делаем package, пишем описание, постим скриншоты, иконку и… через сутки получаем approve. Одно меня безумно огорчило – это требование иметь круглую иконку. Это… это… ну как-то совсем не по-человечески. Я нарисовал отличную иконку из трех кружочков, но меня заверили, что она не пройдет.



Для публикации платных приложений необходимо подавать дополнительную заявку (пока это вообще не актуально), но я прошел эту процедуру за один день. Можно привязать PayPal, а можно банковский счет (USD). Сходил в банк, взял красивую бумажку о наличии счета, и вместе с копией паспорта залил на форму на сайте. Пусть будет заранее.

Ради чего еще я полез в Tizen — это участие в Tizen App Challenge (http://tizenappchallenge.com/) с призовым фондом $4 040 000. Авось что и перепадет (прием заявок до 1 ноября). И, пожалуй, я возлагаю большие надежды на то, что приложение, которое будет в магазине в день его открытия, имеет бОльшие шансы на успех (так было с iOS версией, которая была готова к выходу первого iPad).

Как это ни странно, из всех 6 платформ, на которые я портировал свое приложение, пожалуй, наиболее интересной оказался Tizen. В плане новых ощущений, какой-то, не знаю… свежести? SDK еще допилят и приведут в более стройный вид. Ничуть не жалею о потраченных 12 днях.

Сама же Tizen OS на тестовом устройстве пока не сильно впечатляет. Нет, с ней все в порядке, но какая-то она не законченная. Хотя, она и есть незаконченная. Официальный релиз ожидается в начале следующего года, и, как я слышал, интерфейс оставлен на конец разработки.

Выражаю благодарность представителям компаний Samsung и Intel: Екатерине Филенко, Ренату Няжеметдинову, Кириллу Чувилину и Кириллу Данилову за помощь в разработке, получении устройств, за отличный мастер-класс в Москве 23 октября и вообще — за позитивный настрой и участие.

А вот что получилось результате месяца работы:


Теперь пришло время Android… хотя… может FireFox OS? Как у них там дела?

Сразу отвечу на вопросы (которые задавались на предыдущие посты про это приложение):
1) Да, действительно 12 календарных дней на все. И не надо мне рассказывать про две недели на архитектуру, месяц на разработку, месяц на QA и неделю пред-продакшэн. Это удел «корпораций».
2) Нет, это не пустая трата времени. Это хороший опыт, новые знакомства и в общем, за следующую пару лет продаж, — кругленькая сумма дохода (за две недели работы).
3) С BlackBerry я сейчас уже получаю больше, чем с Win8+WP за то же самое приложение (но это, скорее, минус в огород MS). А живу я за счет iOS.
4) Я не знаю, кто и зачем покупает мое приложение. Но кто-то и зачем-то покупает. И это здорово.

Готов ответить на любые вопросы, чем смогу – помогу.

Ссылки:
BlackBerry Developer portal: developer.blackberry.com
Tizen Developer portal: developer.tizen.org
BlackBerry World: appworld.blackberry.com

Спасибо.

+45
17.7k 66
Comments 65