Дмитpий Hecтepук

Блог о программировании — C#, F#, C++, архитектура, и многое другое

Posts Tagged ‘blackberry

Как выглядит разработка для Blackberry 10

27 комментариев

Несмотря на то что мне повезло в жизни работать с достаточно продвинутыми IDE, я все же иногда смотрю на другие среды разработки дабы понять как же все там плохо, что можно улучшить, и главное понять какой же вообще разработческий experience у того кто пишет для этой системы. Вот недавно я решил узнать положение дел в стеке Blackberry, особенно если учесть что недавно был выпущен их Q10 (жаль что по нереальной цене).

Языки и Технологии

Вот у Android все понятно: программы пишутся на Java. Для iOS тоже все более менее понятно: нужно использовать Objective-C, хотя Xamarin предлагает разрабатывать эти приложения в Visual Studio на C# (я это делаю, т.к. хочется использовать R#, и отладка из Студии реально работает, но это дорогая опция). На нишевых платформах все очень неоднородно — под Windows Phone можно писать на C#, C++ или WinJS (это адское месиво из HTML, CSS и JS) а на WinJS для WP8 вроде как нельзя писать. На Blackberry, правда, все еще хуже. Варианты примерно такие:

  • Использовать Java, но это только для «старых» версий, т.е. не для современной BB10. Отпадает сразу.

  • Портирование приложений Android. Ход хороший, конечно, но уверен что реализовано не без косяков. К тому же, не катит для тех, у кого приложений нет вообще.

  • Адаптация приложений Adobe AIR. Та же ситуация что и с Андроидом, плюс я не знаю кто нынче вообще кроме Adobe использует AIR. Последнее приложение которое я видел на AIR был «тяжелый» TweetDeck, но потом он магически материализовал себя как приложение Google Chrome и потребность в Standalone версии отпала вообще.

  • С++. Аааааа! Для написания «современных» BB10 приложений нужно использовать С++!

Я ничего не имею против плюсов, но видев тот адъ который творился с использованием плюсов для Symbian (привет двухэтапное создание объектов), энтузиазма у меня особого не наблюдалось. Тем не менее, решил скачать SDK.

Создание проекта

Всегда интересно, что же предлагает IDE на момент создания проекта. Ведь для мобильных устройств нужно настроить как минимум deployment targets, а это та еще задача, пусть у BB10 еще и нет той фрагментации что у Андроида. Итак, поехали.

Cascades – это то как называется новый интерфейс BB10. Следующий этап – выбор шаблона проекта, при условии что мы решили делать UI а не игру на OpenGL:

Далее все интересней – после генерации проекта (был еще один скрин для названия, я его не стал приводить), появляется мегаокно настроек. Первое, что эта штука делает – это находит ваши девайся или симуляторы:

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

А вот это очень правильно хотя… если учесть как у них там дела… хотя нет, дела у них не так плохо:

Ну да ладно, я зарегился и BBRY (это их новый тикер, раньше был RIMM) уведомил меня о том что ждать часа этак 2.

Интересно, зачем 2 часа на то чтобы выдать ключи? Вероятно там, на том конце, кто-то пробивает мое имя в Гугле чтобы узнать, являюсь ли я of good character. Между прочим, character checks все еще существуют в реале, например для того чтобы получить британский паспорт или права, за вас должен поручиться резидент. Но в данном случае это как-то особенно странно. Дайте мне мои ключи!!!

QNX Momentix IDE

Blackberry поставляется со своей собственной IDE для разработки под названием Momentix IDE. Это только звучит красиво. На самом деле – это Eclipse со всеми вытекающими. Какими? Ну во-первых, система не понимает свой собственный синтаксис:

Автодополнение мало того что выглядит неаппетитно, да еще и тормозит впридачу.

Редактирование UI происходит на языке QML который, не являясь XML-образным, вообще непонятно как редактировать. То есть выглядит это например так:

Автодополнения тут нет вообще (а мы еще ругаемся на XAML), но зато ошибку он подсвечивает. Конечно, этот же QML можно редактировать и в визуальном редакторе:

Все бы хорошо но вот незадача: контролы почему-то нельзя тащить на редактор, зато можно тащить на еще один тулбокс под названием Outline:

Эмулятор

Признаюсь: я все еще зол на то что Microsoft заставляет пользователей устанавливать Windows 8 только для того чтобы воспользоваться ролью Hyper-V (которая, пакость, еще требует обновленных процов, Core 4 Quad якобы не катит, нужен core i7) под которой запускать эмулятор. Слава Рогам что с Blackberry все проще – вам просто дается VM под VMWare, и все.

Первое что замечаешь — это варианты запуска OS для разных устройств. То что все это в одной виртуалке – это удобно, не люблю когда плодят сущности. Что не очень радует так это наличие Safe Mode, что как бы намекает что «что-то может пойти не так». (И действительно, на практике у меня система после перезапуска просто показала черное окно без каких-либо намеков на активность.)

Должен признаться — QNX Neutrino, подпиленный под Blackberry, выглядит неплохо:

Конечно, UI этот не для фэнбоев Apple а скорее для людей которые просто хотят to get shit done, поэтому собственно мне Q10 и нравится (цена не нравится совсем, правда).

Ну да ладно, вся суть в том, что имея приложение в Momentix IDE, можно нехитрой манипуляцией запустить его в эмуляторе. К сожалению, при первом запуске я получил лишь:

Поначалу, до того как я добавил ключи (которых ждал 2 часа), не работало вообще ничего, я потерял много времени чтобы все полетело. Но потом все запустилось и я был очень рад увидеть свое (пусть и унылое) приложение:

К слову скажу, что и в симуляторе и в QNX IDE я словил массу багов, один раз переустановил симулятор полностью (не советую его перезапускать) а также потратил лишний час-два на вещи которые просто отказались интуитивно работать.

Пишем Код

У меня обычно первое желание в «плюсовом» проекте – подключить STL и Boost. Но перед этим хочется показать как вообще все происходит. Например, вот как можно создать новый класс:

Добавил #include <vector>, скомпилировал, вроде съело. Это значит что STL, как минимум, работает. Добавляю метод и тут оказывается что IDE добавляет в автодополнение все что вообще только можно:

Это же как сильно нужно ненавидеть разработчиков чтобы в список дополнения залить вообще все, что только можно найти на верхнем уровне. Самое интересное что что моей функции из заголовочного файла в списке вообще нет, что бред и сумасшествие. Да, что там, для member fields автодополнения тоже нет, есть разве что для this-> но дальше него дело не идет.

Решил сделать кнопку. Внезапно в начале ввода атрибута появился комплишн, уже что-то

Смарт-комплишна на этот enum (если это можно так назвать) конечно не было, увы. Кстати, точно так же как и в Visual Studio/XAML, тут есть визуальный редактор свойств, который наверняка может быть полезен:

Для обработки события кнопки можно писать код прямо в QML, что выглядит неидиоматично. Даже XAML не опускается до такого уровня:

Естественно, что поставить брейкпоинт в это место нельзя, т.к. это работает только в кодовых файлах. Кстати, для брейкпоинтов у меня не получилось даже потыкать в левый margin чтобы их ставить, пришлось лезть в меню. Только я запустил все это дело под дебагом, как…

Ну неужели так сложно помочь пользователю синхронизовать все это дело? Почему я должен беспокоиться о том, что последние скачанные пакеты не стыкуются? Еще примечательно что, в отличии от Visual Studio (да и большинства вменяемых IDE), Momentix IDE не восстанавливает window layout из дебажного в обычный после того как вы закрыли отладку. Как холодной рыбой по лицу, чесслово.

Еще интересно то, что дебаггер у меня не сработал где просили но зато сработал где не просили, а именно почему-то воткнулся в main() хотя моего брейкпоинта там не стояло.

Да, и что касается Boost, то нашел на просторах интернета проект, который как раз портирует Boost для Blackberry, так что если что, можно воспользоваться.

Заключение

Понятное дело что для того чтобы понять как все действительно хорошо нужно попользоваться системой месяц-другой. Мое субъективно ощущение что все могло бы быть намного хуже, и что надо благодарить Рога за то, что у Blackberry получилось хоть что-то. По крайней мере, Cascades — неплохая система, и я думаю что Q10 – неплохой девайс.

Другое дело что API сделанный на С++/QML полностью неинтуитивен. Например, вот как выглядит код создания UI из QML. Попробуйте догадаться что тут что.

Так что против BBRY тут два фактора: неудобный язык (все же Java или C# поудобнее будут), а также неудобная IDE. Много ли разработчиков захотят писать под эту платформу? Пока что относительно пустой магазин Blackberry World — плохо для экосистемы, но что если ее забросают недопроектами в стиле тех «соревнований» которые устраивает Microsoft? Этого-то точно не хотелось бы. Лучше мало, но качественно, чем 99% мусора.

У меня пока всё. Comments welcome.

Written by Dmitri

5 мая 2013 at 11:47

Опубликовано в IDE

Tagged with , , , , ,