27 January 2012

А стоит ли разрабатывать под Nokia?

Smartphones
From Sandbox
Здравствуйте, уважаемые хабравчане!

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

История. Начало.

Мое знакомство с разработкой под мобильную платформу Symbian от компании Nokia началось в начале 2009 года, когда я в некоторой степени поддался ажиотажу, царившему после выхода первых iPhone и Nokia 5800. До этого смартфонов у меня никогда не было — я учился на третьем курсе университета, только начинал подрабатывать — в общем, типичные студенческие полуголодные будни. В итоге скопил денег и взял свежую Nokia 5800. Выбор пал именно на Nokia, потому что до этого были телефоны только этой марки, да и комплектация была на очень высоком для того времени уровне. Так как учился на IT-специальности, то вскоре мне захотелось пощупать этот телефон с точки зрения разработчика.

Symbian C++

В то время под Symbian писали либо на Java, либо на C++. Так как C++ был мне хорошо знаком в то время, то я решил изучить его «диалект» для Symbian. Признаюсь честно, изучение новой платформы давалось с некоторым трудом:
  • новые концепции Leave-исключений (облегченный аналог исключений C++);
  • двухфазные конструкторы объектов, стеки с объектами в Leave-функциях (те функции, которые могут «выбросить» исключение, а память при этом чистить надо);
  • возня с получением сертификатов и подписью пакетов;
  • написание правил сборки и сама система сборки пакетов;
  • написание диалоговых окон через файлы с ресурсами и подключение этих файлов;
  • комбинация из 3-х идентификаторов (UID) и различные права доступа (capabilities);
  • настройка SDK была достаточно запутанной, особенно когда этих SDK было несколько;
  • малое количество примеров и плохая документация.

В общем, те, кто работал с Symbian C++ хорошо помнят ужасы тех лет. Да, со временем, конечно, привыкаешь, но все равно в процессе разработки приходилось часто отвлекаться на эти мелкие и не только вещи. Собственно, ничего серьезного я в то время не написал — так, всякие шпаргалки к экзаменам и прочие «Hello, World». Никакого OVI Store в то время еще не было, были только анонсы. Тем не менее, я получил достаточно хороший опыт, который пригодился в будущем.

Появление Qt

К концу 2009 года я уже как-то подзабыл про разработку на Symbian C++ — не было особой мотивации, да и все больше времени занимала подработка. А тем временем Nokia запустила OVI Store, вышел новый iPhone 3GS, а рынок мобильных приложений переживал настоящий бум. Но в конце года произошло новое событие в мире Nokia — выпуск фреймворка Qt 4.6 с поддержкой Symbian и Maemo. Так уж получилось, что в то время я активно занимался разработкой на Qt, поэтому было грех не вспомнить былое и посмотреть, что изменилось. А изменилось достаточно многое:
  • появилась новая IDE Qt Creator на замену Carbide.c++, которая обеспечивала улучшенную интеграцию с Qt, удобную систему справки, автоматизированную систему сборки — теперь можно было с большей легкостью разрабатывать под Symbian на обычном C++ и с мощным набором графических компонентов, хоть на первых порах Qt под Symbian и не блистал скоростью;
  • появился улучшенный отладчик под Symbian, который умел «разворачивать» классы Qt;
  • упростилась система подписи и создания пакетов;
  • появился новый эмулятор Symbian.

В общем, были заметны подвижки Nokia в направлении упрощения разработки под Symbian, которая была не из легких. Но остались старые проблемы, где-то добавились новые:
  • Qt Creator был весьма сырой, часто падал после пересборки проекта (он грешит этим и по сей день);
  • скорость сборки была очень низкой — можно было запустить процесс и идти пить чай или читать статьи в Интернете, особенно долго и мучительно шла полная пересборка;
  • отладчик на 5800 глючил очень часто, переставал работать, и Qt Creator часто вообще не видел телефона;
  • выпущенный эмулятор работал под Windows, то есть чтобы проверить приложение на эмуляторе, нужно было его собрать под Windows — просто замечательно, а если оно у меня не собирается под Windows?
  • некоторые диалоги Qt выглядели очень убого (например, QInputDialog), а вот добавить их в старом виде в файле с ресурсами было делом не совсем тривиальным, потому что Qt Creator на такое не особо рассчитывался;
  • правила сборки все равно приходилось писать вручную.

Отдельно отмечу появившийся OVI Store. Поначалу регистрация была платная (50 евро), плюс при необходимости нужно было еще и на сертификат тратиться (сейчас регистрация стоит 1 евро). Но вот при подготовке к публикации и в процессе работы магазина выяснились «приятные» мелочи:
  • почему-то при обновлении приложения сперва может обновиться описание, а только через пару дней — сама программа. Замечательно, правда, когда пользователи получают приложение, не соответствующее описанию?
  • нормальные руководства по интерфейсу появились далеко не сразу, поэтому создалась, так сказать, помойка, где каждый выбрасывал что хотел;
  • время, отведенное на проверку приложения отделом QA перед публикацией, нигде четко не регламентировалось, поэтому у кого-то проверяли и месяц. Да и сейчас они могут проверять по две (!) недели обновление вашего приложения. Причем не факт, что результат будет положительным. И форум пестрит сообщениями, что проверяют приложения разные люди и при этом выносят разные вердикты;
  • нет абсолютно никакой обратной связи с покупателями приложения. Есть только дурацкая система рейтинга — даже нельзя спросить у человека подробностей ошибки, чтобы ее исправить. Причем львиная доля низкого рейтинга приходит из-за того, что у пользователя не загрузилось приложение (ау, Nokia, это разве проблема разработчика?);
  • магазин сделан сам по себе очень странно. Например, почему у некоторых приложений, у которых нет ни одного пользовательского рейтинга, уже стоит 5 звезд (это максимум)? За какие такие заслуги? Или почему можно поместить скриншоты только (внимание!) размером не более 256х256? Что на этом куске можно показать: обрывок экрана или картинку, на которой ничего не разглядишь, причем экраны-то не квадратные у телефонов! Этого маразма я до сих пор не могу понять;
  • сложилось впечатление, что Nokia плевать было на этот магазин, потому что они элементарно не могли описать все «подводные камни» подготовки приложения к публикации. Поясню на примере: Symbian нормально не воспринимает SVG, используется мобильная версия SVG Tiny. Но, видимо, и с ней есть проблемы. Когда делаешь значок приложения в SVG и добавляешь в Adobe Illustrator тень на объект, затем перегоняешь фирменной программой от Nokia в Tiny SVG, то на телефоне значок «размазывает». Видимо, тень не поддерживается. И только когда я случайно набрел на видеоролик с примером создания иконки на сайте самой Nokia, то узнал, что у них есть специальные действия (Actions) для Illustartor для создания теней. То есть, они прекрасно знали об этом косяке, но даже не написали ничего в wiki об этом! Почему нельзя было написать об этом, ведь не все смотрят кажущиеся очевидными 10-минутные ролики?
  • у Nokia много различных устройств, и надо на многих проверять, надо собирать под различные системы (сейчас это S60v5, Anna, Belle) — на это уходит уйма времени.


Учитывая все выше сказанное, подытожу: временами были периоды, когда банальная подготовка приложения и сама публикация отнимали больше времени, чем сама разработка, которая итак была не очень сладкой. Правда, теперь Nokia активно агитировала разработчиков переходить на Qt, пророча ему большое будущее.

Появление Harmattan и Qt Quick

Итак, Qt активно развивалось, улучшалась производительность, улучшался Qt Creator (с Symbian^3 перестал отваливаться телефон, а я тем временем перешел на аппарат N8). Сборка очень сильно ускорилась, и теперь я не тратил бессонные ночи на пустое ожидание. Все остальные ужасы наследия Symbian сохранились и никуда не думали деваться. Особенно «нравилось» то, что иногда не все можно было сделать в Qt Creator. Например, написать recognizer для какого-нибудь mime-типа (чтобы приложение автоматически могло открывать данный файл). Приходилось собирать его в отдельных SDK (аж в 3-х штуках) в виде отдельных библиотек, со своей магией UID-ов, потом добавлять правила сборки в Qt Creator руками. А добавление поддержки этого mime-типа в Qt-приложение — это тоже отдельная эпопея.

Но, как это часто бывает, враг подкрался незаметно. Теперь Nokia начала рекомендовать писать приложения на новом Qt Quick (язык на основе JS), возможности которого, мягко говоря, были бедны (хотите диалог открытия файлов — напишите сами!) по сравнению с полноценным Qt на основе QWidget. А разработку под мобильные платформы на основе QWidget Nokia объявила… устаревшей. Как говорится, не прошло и года. Нет, Nokia не запрещала и дальше писать на них приложения, но тут разработчиков ждали сюрпризы. Как вам тот факт, что, собрав ваше Qt-приложение под MeeGo (который, по сути, ведь Linux) без проблем, вы не сможете поменять ориентацию окна (только ландшафтный режим) при повороте телефона? На все возгласы получили один ответ: переписывайте на Qt Quick. Вот так вот просто. Плевать они хотели, что платформа MeeGo может не получить те приложения, которые под нее прекрасно собираются, а разработчики потеряют рынок сбыта.

И как обычно, сама подготовка приложения под MeeGo не была без сюрпризов. Например, банальная задача — отображение значка приложения в меню. Но, почему-то, дефолтные правила сборки в Qt Creator приводят к тому, что он не отображается. Не беда, ищем в Интернете, находим в wiki Nokia путь решения проблемы — надо класть значок в другую директорию. Хорошо, на эмуляторе все стало отображаться, но на самом устройстве ничего опять нет. Что за фокусы?
Особенно хочется отметить эмулятор для MeeGo. Это 400-метровая туша, которая долго грузится, очень медленно работает, и имеет всего пару кнопок (то есть там поиграть акселерометром или что-то подобное не получится). А на самом деле это обычный QEMU с натянутой «мордой» и образом прошивки. Браво, господа из Nokia, разрабатывать под MeeGo без самого устройства просто нереально.
В итоге, к данному моменту, чтобы разрабатывать на основные телефоны Nokia вам необходимы аппараты на базе: S60v5, Symbian^3 (Anna, Belle) и MeeGo. Неплохо, правда? Причем под разные аппараты свои наборы компонентов Qt Quick и виджетов Qt. Слабо разорваться на все стороны? В итоге разработку под MeeGo я уже не стал продолжать, ограничившись только S60v5 и Symbian^3.

Финальный акт. Windows Phone.

Разработчики под Nokia, видимо, уже привыкли что их вот так вот пинают, но то, что произошло в прошлом году, не ожидал никто. Nokia заявила, что переходит на Windows Phone, а Symbian потихоньку прикроют. Обалденный ход. Сегодня тебе говорят — пиши на Qt, завтра — пиши на Quick, а послезавтра — забудь все, что ты знал — мы переходим на Windows. Поначалу многие думали, что Qt портируют на Windows Phone, и все будет нормально, но эти мифы опровергли официальные люди. Да, многие были в шоке от такого поворота событий, и такого отношения к разработчикам.

На данный момент платформа достаточно новая и молодая, поэтому я еще не успел ее опробовать ввиду отсутствия времени и должного желания. Хотя интерес, признаюсь, есть.

В качестве эпилога

В ходе разработки под устройства Nokia я приобрел как навыки в программировании, так и получил опыт разработки под мобильные платформы. Не могу сказать, что я получил много положительных эмоций. Лично для себя сделал вывод, что Nokia весьма наплевательски относится к разработчикам, устраивая чехарду платформ и, фактически, обманывая прямо в лицо. Да, были попытки упростить процесс разработки, но видимо тот факт, что Symbian корнями уходит в далекое прошлое, в какой-то степени не дал осуществить задуманное. У компании не было четко выделенного и направленного вектора развития, и расплачивались за это разработчики в том числе. Принимаясь за разработку под Symbian и MeeGo сейчас, можно упростить процесс использованием Qt Quick, но от всех проволочек с магазином это не избавит. Будьте готовы к тратам времени помимо самой разработки.

Возможно, с приходом Windows Phone политика компании изменится, но это покажет только время.

p.S. Цель заработать какие-то большие деньги разработкой Nokia я не ставил, да и не хочется акцентировать внимание на своем приложении, поэтому я его и не называю. Обычно тут интересуются, а сколько же удалось заработать тем или иным способом? Для любознательных отвечу заранее: за год приложение принесло порядка 1500 евро, из них 30% ушли самой Nokia. Никакого продвижения я не осуществлял и рекламой не занимался. В общем, затраты на устройства окупились, и то хорошо :)
Tags: nokia qt symbian ovi qt quick qt creator
Hubs: Smartphones
+44
1.2k 21
Comments 92
Ads