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

в 15:16, , рубрики: blackberry, blackberry 10, blackberry world, tizen, разработка, метки: , , , ,

Продуктивная прокрастинация: разработка под 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 языках).

Продуктивная прокрастинация: разработка под BlackBerry и Tizen
Что произошло 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. Одно меня безумно огорчило – это требование иметь круглую иконку. Это… это… ну как-то совсем не по-человечески. Я нарисовал отличную иконку из трех кружочков, но меня заверили, что она не пройдет.

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

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

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

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

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

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

А вот что получилось результате месяца работы:
Продуктивная прокрастинация: разработка под BlackBerry и Tizen

Теперь пришло время 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/

Спасибо.

Автор: guskov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js