Мысль о том, что наш мобильный аудио-гид по интересным местам Toozla нужно написать для платформы Symbian, нас посещала давно. Но до создания приложения руки дошли лишь в начале 2011 года — примерно за месяц до решения Nokia сделать ставку на Windows Phone 7. Впрочем, на наши планы это никак не повлияло: устройства на Symbian и в то время, и по сей день занимают большой процент на рынке.
Выбирая необходимый вариант разработки, мы исходили из трёх возможных путей.
Первый — использовать нативный Symbian SDK. Основным плюсом при выборе Symbian SDK был бы максимальный охват устройств, начиная с Symbian 3rd Edition. Однако на этом SDK писать программы довольно сложно (особенно, когда дело доходит до UI), поэтому этот вариант разработки мы быстро отмели.
Второй путь — использовать Qt SDK 1.0. Данный devkit вышел в середине 2010 года и был основан на Qt 4.6.3. В отличие от Symbian SDK, данный вариант позволял упростить разработку (особенно работу со специфичными для мобильных устройств API) и рассчитывать на кроссплатформенность. Среди минусов данного решения были меньший охват устройств (только Symbian v1 и Symbian v3) и, всё-таки, некоторая сложность разработки современного UI.
И третий — прибегнуть к использованию Qt SDK 1.1. В то время он находился в статусе бета-версии, в связи с чем и были связаны основные риски. С другой стороны, в данном SDK использовался Qt 4.7, в котором появилась поддержка QML. Благодаря QML, интерфейсы можно было создать быстро и качественно, при этом рассчитывая на кроссплатформенность. Кроме того, Qt Mobility содержал QML-контрол для отображения карт — как раз то, что нам было необходимо.
Выбрали мы в итоге, конечно, SDK 1.1 — в основном из-за наличия того самого QML-контрола и простоты написания UI.
Архитектура приложения была выбрана следующая: весь движок пишется на C++, а QML используется только для создания UI. Связь между движком и интерфейсом реализуется через слоты, сигналы и связывание данных.
Движок был написан без особых замечаний и проблем, а вот с UI, в силу незаконченности на тот момент Qt SDK 1.1, пришлось немного повозиться. Когда мы писали приложение, в SDK ещё не было стандартных контролов для мобильных девайсов, поэтому мы строили интерфейс из Rectangle, Text, Image ListView и MouseArea. Но, несмотря на это, мы могли без особых затрат строить довольно сложные контролы вроде нашего плеера с возможностью горизонтального скролла для выбора истории. Сейчас все необходимые компоненты в Qt Quick Components уже есть — просто мы чуть-чуть не дождались. :)
С гайдлайнами для дизайна приложений на тот период тоже была неразбериха, но, справедливости ради стоит отметить, что на данный момент Nokia эту проблему уже решила.
Qt SDK в себе содержит не эмулятор, а симулятор, так что в моём случае весь код компилировался для x86 и использовал для работы API Windows. Это приводит к тому, что приложение в симуляторе выглядит несколько иначе, чем на устройстве: другие шрифты и другое сглаживание, а главное — другая скорость работы. В симуляторе по сравнению со смартфоном все просто летает, и это дает чувство ложной безопасности. Если необходимо использовать Symbian API, то для сборки под симулятор приходится дифференцировать код #ifdef’ами. В любом случае тестировать работоспособность ПО нужно на живых устройствах — это правило касается вообще всех, а не только Qt-разработчиков.
За полгода с момента выпуска Qt SDK 1.1 Nokia прошла очень большой путь. Например, появились Qt Quick Components, так что можно быстро создавать приложения с нативными для Belle и Meego интерфейсами. Последняя версия вполне стабильна, и QML вместе с Qt Creator очень радуют. QML, на мой взгляд, вообще лучшее изобретение человечества в плане declarative UI: если сравнивать с другими мобильными платформами (Android, bada и даже WP7 c его XAML), то он однозначно выигрывает. Например, за счет компактности и возможности использования JavaScript прямо в разметке. В общем, я готов написать еще пару приложений на QML только потому, что мне нравится на нем писать ;-)
Сразу после появления Toozla в Магазине Nokia от компании поступило предложение портировать приложение на MeeGo. А почему бы и нет? Собственно, портирование прошло очень быстро и безболезненно. Основные затраты были понесены дизайнером, которому пришлось перерисовать весь интерфейс под другое разрешение экрана. С моей стороны портирование фактически свелось к своему набору некоторых QML-файлов и #ifdef’ам в местах вызовов нативных API. Трудозатраты меня как программиста — 2 дня, что вполне оправдывается количеством загрузок для N9.
После разработки Toozla для Symbian у меня остались довольно хорошие впечатления от программирования для этой платформы. В то время, когда я писал приложение, Qt имел свои недочёты и недостатки, но за QML и кроссплатформенность я компании Nokia готов всё простить. Сейчас же Qt SDK лишился множества своих «детских болезней» и стал очень привлекательным фреймворком.
Выбирая необходимый вариант разработки, мы исходили из трёх возможных путей.
Первый — использовать нативный Symbian SDK. Основным плюсом при выборе Symbian SDK был бы максимальный охват устройств, начиная с Symbian 3rd Edition. Однако на этом SDK писать программы довольно сложно (особенно, когда дело доходит до UI), поэтому этот вариант разработки мы быстро отмели.
Второй путь — использовать Qt SDK 1.0. Данный devkit вышел в середине 2010 года и был основан на Qt 4.6.3. В отличие от Symbian SDK, данный вариант позволял упростить разработку (особенно работу со специфичными для мобильных устройств API) и рассчитывать на кроссплатформенность. Среди минусов данного решения были меньший охват устройств (только Symbian v1 и Symbian v3) и, всё-таки, некоторая сложность разработки современного UI.
И третий — прибегнуть к использованию Qt SDK 1.1. В то время он находился в статусе бета-версии, в связи с чем и были связаны основные риски. С другой стороны, в данном SDK использовался Qt 4.7, в котором появилась поддержка QML. Благодаря QML, интерфейсы можно было создать быстро и качественно, при этом рассчитывая на кроссплатформенность. Кроме того, Qt Mobility содержал QML-контрол для отображения карт — как раз то, что нам было необходимо.
Выбрали мы в итоге, конечно, SDK 1.1 — в основном из-за наличия того самого QML-контрола и простоты написания UI.
Небольшие сложности
Архитектура приложения была выбрана следующая: весь движок пишется на C++, а QML используется только для создания UI. Связь между движком и интерфейсом реализуется через слоты, сигналы и связывание данных.
Движок был написан без особых замечаний и проблем, а вот с UI, в силу незаконченности на тот момент Qt SDK 1.1, пришлось немного повозиться. Когда мы писали приложение, в SDK ещё не было стандартных контролов для мобильных девайсов, поэтому мы строили интерфейс из Rectangle, Text, Image ListView и MouseArea. Но, несмотря на это, мы могли без особых затрат строить довольно сложные контролы вроде нашего плеера с возможностью горизонтального скролла для выбора истории. Сейчас все необходимые компоненты в Qt Quick Components уже есть — просто мы чуть-чуть не дождались. :)
С гайдлайнами для дизайна приложений на тот период тоже была неразбериха, но, справедливости ради стоит отметить, что на данный момент Nokia эту проблему уже решила.
Симулятор
Qt SDK в себе содержит не эмулятор, а симулятор, так что в моём случае весь код компилировался для x86 и использовал для работы API Windows. Это приводит к тому, что приложение в симуляторе выглядит несколько иначе, чем на устройстве: другие шрифты и другое сглаживание, а главное — другая скорость работы. В симуляторе по сравнению со смартфоном все просто летает, и это дает чувство ложной безопасности. Если необходимо использовать Symbian API, то для сборки под симулятор приходится дифференцировать код #ifdef’ами. В любом случае тестировать работоспособность ПО нужно на живых устройствах — это правило касается вообще всех, а не только Qt-разработчиков.
За полгода с момента выпуска Qt SDK 1.1 Nokia прошла очень большой путь. Например, появились Qt Quick Components, так что можно быстро создавать приложения с нативными для Belle и Meego интерфейсами. Последняя версия вполне стабильна, и QML вместе с Qt Creator очень радуют. QML, на мой взгляд, вообще лучшее изобретение человечества в плане declarative UI: если сравнивать с другими мобильными платформами (Android, bada и даже WP7 c его XAML), то он однозначно выигрывает. Например, за счет компактности и возможности использования JavaScript прямо в разметке. В общем, я готов написать еще пару приложений на QML только потому, что мне нравится на нем писать ;-)
Сразу после появления Toozla в Магазине Nokia от компании поступило предложение портировать приложение на MeeGo. А почему бы и нет? Собственно, портирование прошло очень быстро и безболезненно. Основные затраты были понесены дизайнером, которому пришлось перерисовать весь интерфейс под другое разрешение экрана. С моей стороны портирование фактически свелось к своему набору некоторых QML-файлов и #ifdef’ам в местах вызовов нативных API. Трудозатраты меня как программиста — 2 дня, что вполне оправдывается количеством загрузок для N9.
После разработки Toozla для Symbian у меня остались довольно хорошие впечатления от программирования для этой платформы. В то время, когда я писал приложение, Qt имел свои недочёты и недостатки, но за QML и кроссплатформенность я компании Nokia готов всё простить. Сейчас же Qt SDK лишился множества своих «детских болезней» и стал очень привлекательным фреймворком.