Додаток з титану: створюємо програми за допомогою нової платформи Titanium



Щоб розробляти програми, є величезна кількість рішень. Але якщо це
необхідно робити швидко і під всі платформи відразу, щоб програма працювала і
на iPhone / iPad, і на Android, і на сусідньому комп'ютері з будь-віссю, то
варіантів майже немає. Єдина надійна технологія - Appcelerator Titanium,
одне з найсучасніших і просунутих рішень на сьогоднішній день.
Різні платформи були завжди, але сьогодні це розмаїття стало особливо
помітно. Поява Ubuntu і Mandriva дозволило багатьом користувачам відкрити для
себе Linux, хоча ще недавно багато хто з них про існування чого-небудь, крім
Windows (як же без неї?), Не підозрювали. Інші віровідступники зіскочили на
MacOS і тепер дивляться на інших зверхньо. А якщо зазирнути в кишеню? Мільйон
різних гаджетів, і адже, як на зло, у всіх різна платформа. Apple якимось
невероят ним способом підсадив мільйони людей на iPad / iPhone з iOS, Google лізе
у всі щілини ринку зі своїм Android OS, але ж є Windows Mobile, відразу
кілька платформ від Nokia, нікому невідомі у нас, але зате дико популярні
на заході телефони BlackBerry зі своєю власною ОС. Виходить справжній
зоопарк. А тепер подивимося на бідного програміста. Адже як же хочеться один
раз написати додаток, втілити всі свої думки та ідеї, а потім легким
рухом руки запускати програму скрізь. Але ж фіг!
Так, є Java, на якій, як передбачалося, програми будуть працювати
абсолютно скрізь, але тільки мало що вийшло. Якщо на десктопах
Java-додатки працюють ще більш менш (хоча багато хто при цьому морщать носом,
мовляв, "Ох, знову ця гальмівна Java"), то з мобільного стороною у платформи зараз
повний провал. Хоча всередині Android'а і лежить Java, вона сильно урізана і
підігнана під можливості смартфонів. Коротше кажучи, якщо захочеш писати під
все це різноманітність, готуйся освоювати під кожну платформу свою мову,
компілятор, обмеження платформи і API, а ще доведеться розщедритися - для iPad / iPod / iPhone
особливо не попишеш без реального пристрою і залізного маку.
Але лінь, як кажуть, двигун всієї ІТ-думки. Відносно недавно
з'явилися підприємливі хлопці з стартапу Appcelerator, які виклали в
відкритому вигляді спеціальний фреймворк і систему розробки Titanium. І ніхто,
можливо, не глянув би на їх творіння (зрештою, зараз же стільки
різних середовищ та фреймворків), якби не ті Чумові можливості, яка вона
відразу запропонувала. Ти пишеш програму один раз, використовуючи тільки єдину
систему API, а потім компіліруешь одним кліком під різні системи: Windows,
Linux, MacOS і... мобільні платформи! Але як?
Титановий скелет
Appcelerator Titanium - це не просто диво-компілятор. Це ціла система для
швидкої крос-платформенний розробки додатків, тестування, складання і
поширення на всіх доступних платформах, включаючи мобільні. Але це ще не
найголовніше. Адже в основі всього лежать стандартні веб-технології: HTML 5, CSS
і javascript. З урахуванням нинішніх трендів складно уявити щось інше. На
ділі це означає, що з Titanuim ти можеш розробляти програми для
десктопа, як якщо б ти верстав простий сайт, а потім просто скомпілювати і
отримати бінарний виконуваний файл. Мало того, як і у випадку з веб-додатками,
всю функціональність можна розробляти на звичних динамічних мовах:
Python, Ruby і навіть на PHP. Щоб ще раз усвідомити суть, повторю: як тобі ідея
створити знайомими веб-засобами повноцінне додаток, що в один клік
можна скомпілювати під Windows, Linux або смартфон на Android? Супер-рішення!
Створювати програми за допомогою Titanuim ти можеш в будь-якій зручній середовищі
розробки або навіть у Блокноті. У проект включаються необхідні файли:
графічні, стилі, HTML-сторінки і будь-які інші ресурси. Якщо доведеться щось
реалізовувати поза додатки, до твоїх послуг API-інтерфейс, який
надає Titanium. Це необхідно, щоб абстрагуватися від конкретних
платформ - тобі не треба думати: "А як, чорт візьми, відкрити файл на пристрої
Blackberry або створити діалогове вікно? ". Велика частина API доступна для всіх
пристроїв, а якщо якийсь функції немає, вона емулюється. Все це працює як
runtime-прошарок (для кожної платформи своя), але тебе це вже не турбує,
адже додаток працює тільки поверх свого середовища. Всередині програми лежить
кращий із сучасних веб-двигунів - Webkit, який використовується як рендер HTML / CSS,
а також як середовище виконання javascript-коду. Ця частина платформи завжди
доступу. Якщо ж ти хочеш писати на інших мовах, наприклад, PHP або Ruby, їх
інтерпретатори та необхідні бібліотеки будуть включені в додаток. Всередині
системи є API для зв'язки всіх мов разом, тому просто можеш писати на
тому, що краще знаєш, а потім зв'язати всі разом. Приємно, що розробники не
стали модифіковані базові дистрибутиви мов - наприклад, РНР можна оновити,
просто скопіювавши в SDK файли з офіційного дистрибутива.
Другим компонентом Titatium'а є спеціальний додаток для збирання
проекту, створене, звичайно ж, на своїй платформі. З його допомогою ти можеш
створити профіль програми, задати його базові параметри, а потім однією кнопкою
запустити і перевірити, що вийшло. На твоєму комп'ютері код буде запакований в
двійковий виконуваний файл, статично зв'язаний з runtime-платформою і виконаний. Якщо все
добре і правильно працює, сміливо переходь до останньої фази розробки.
Appcelerator використовує власну хмарну платформу для компіляції і
створення додатків для різних платформ, тому на комп'ютері ти зможеш
зібрати лише тестовий варіант програми для перевірки його роботи. Самі ж
виконувані файли для різних платформ будуть зібрані на потужностях компанії, а
тобі видадуть лише гарну сторінку з посиланнями на всі доступні варіанти.
Маленька обмовка: видадуть, лише якщо не глючить система збирання, яка
чомусь частенько обламує мене з компіляцією. На цьому етапі ти просто
вибираєш цільові платформи, а також варіант установки, який буде
використовуватися. Якщо не морочитися з приводу розміру програми, то можна
злінкувати рантайм і бібліотеки Titanium'а разом з самим додатком (такий
пакет називається bundled). Якщо ж хочеш отримати мінімальний інсталятор, то
вибери Network; тоді при установці програма сама завантажить необхідні йому
компоненти з Мережі. Якщо розробляєш щось комерційно цікаве, то
необов'язково викладати своє творіння відразу для всіх, програми можуть бути
приватними - тоді його зможуть поставити тільки ті, кому ти повідомиш посилання на
сторінку завантаження. Якщо ж ти зробив оновлення до вже існуючого додатком,
то всім користувачам буде розіслано повідомлення, що вийшла нова версія, і вони
зможуть швидко її встановити.
Titanium vs Adobe Air
"Так це ж те ж саме, що і AIR від Adobe", - можливо, вигукне
читач, знайомий з розробкою RIA-додатків на цій платформі. І буде
неправий, тому що, на відміну від AIR, Titanium пакує все застосування разом
із середовищем виконання. Це означає, що кожному додатку надається
своя окрема середовище, ніяк не пов'язана з іншими додатками. Вона легко
встановлюється разом з додатком. Для запуску AIR-додатків необхідно
встановити саме середовище. До того ж це середовище є поділюваної - однієї на
всі програми в системі. Звичайно, це не найкращим чином позначається
на швидкодії. До того ж, різні програми для AIR можуть вимагати
різні версії фреймворка і бібліотек, а це вже зовсім караул. І нарешті,
щоб добити тих, хто сумнівається, де AIR для 64-бітного Linux'а?
Розбираємося з API
Найцікавіша для тебе, як розробника, частина платформи - це її API.
Адже саме через нього будується додаток і використовує функціонал девайсів, на
яких буде працювати програма. Я не буду тобі переказувати зміст
документації, яка доступна на сайті, а краще розповім про ключові модулях,
які будуть корисні для створення додатків з унікальним функціоналом.
Додаток з титану: створюємо програми за допомогою нової платформи Titanium
Database - вбудована база даних SQLite, легко вбудовується в
додаток.
Network - найбагатший компонент для взаємодії клієнтів і
серверів. Згадай, скільки милиць треба, щоб додати функції спілкування в
реальному часі для веб-додатків: різні там Comet, WebSokets та інші
технології. Забудь, тут є все, що необхідно для прямої роботи з сокетами:
HTTP-клієнт і сервер, а також інші приємні бонуси на зразок вбудованого
компонента для IRC-чатів.
Worker - це модуль для побудови багатопоточності, взятий, як ти вже
здогадався, з специфікації HTML5. Якщо тобі треба щось робити у фоновому режимі,
щоб не вантажити додаток, просто створи воркера і дай йому завдання, вона буде
виконуватися паралельно в сусідньому потоці, обмінюючись повідомленнями з основним
додатком, ніяк не гальмуючи його.
UI - в цьому модулі доступна робота з буфером обміну, панеллю задач і
Треєм. Додаток на базі Titanium'а буде вести себе ідентично рідним системним
програмами, навіть не підозрюючи, що усередині насправді веб-сторінки на
javascript, доповнені можливостями HTML5.
Модулі для роботи з кодеками і мультимедіа. Поки що це слабке місце
платформи. От було б круто, якби вбудували відразу відео-кодеки, наприклад,
гучний гугловський VP8/WebM. Це б забезпечило можливість робити серйозні
мультимедійні додатки, порвавши на шматки найближчого конкурента, Adobe AIR, на
його ж полі.
Analytics - вбудована система для отримання докладної статистики
використання програми. Це щось типу Google Analytics, але для програми.
І, до речі, це дуже круто - видно, що розробники не тільки захопилися
крутизною своєї платформи, але і зрозуміли, що без таких речей у суворий світ
комерційних рішень не пробитися.
UpdateManager - модуль оновлень. Будь-який додаток розвивається і
доповнюється, і, щоб не змушувати користувачів повторно щось завантажувати і
ставити, в базовий API входить компонент UpdateManager, який бере всю цю
рутину на себе. Можеш спати спокійно: як тільки з'явиться нова версія
додатки, воно буде одразу доступно всім користувачам.
Треба сказати, що API для мобільних пристроїв трохи відрізняється від
десктопного. В основному це виражається в доступності деяких специфічних
модулів для роботи зі списком контактів, використання акселерометра і т.п.
Інші модулі практично ідентичні, тому, якщо тобі не треба використовувати
щось мобільне, то твоє додаток буде відразу працювати і на десктопах, і на
мобілках. Якщо ж хочеш крутості, то в мобільній версії платформи тобі доступна
інтеграція з Facebook, доступ до геолокаційні функцій пристрою, стеження за
жестами користувача (на кшталт перевороту або струшування телефону). Медіа-модуль
також вражає: є функції для роботи зі звуком і відео, роботи з вбудованою
камерою (якщо вона, звичайно, підтримується пристроєм). Робота з елементами
інтерфейсу, крім загальних функцій, має специфічне API для пристроїв на базі
Android і iPad / iPhone, тому тут код трохи ускладниться, щоб адекватно
підтримувати всі можливості пристроїв.
До речі, API є незалежним від мови, тому, навіть якщо ти на одній
сторінці підключиш код на PHP, Ruby і javascript, всі вони зможуть працювати з
однаковими об'єктами і методами платформи (при цьому розрізняючись синтаксисом
виконання функцій). Також будь-який код має доступ до DOM-дереву поточної сторінки
додатки. Шкода, правда, що для мобільних платформ доступний тільки код на
javascript, адже, правда, як туди запхати інтерпретатор РНР, який сам на
пару десятків мегабайт потягне?
Хімічний склад Тітаніум
Якщо тобі цікаво, що знаходиться всередині цієї системи, слухай. Для
побудови ефективної кроссплатформенной системи модулів на різних мовах
Appcelerator написали щось подібне для ядра ОС, тільки спрямоване на
взаємодія бібліотек. Kroll - це мікроядро на C + +, яке виступає
сполучною ланкою між усіма модулями і мовами, перетворює виклики методів
з різних мовних середовищ, забезпечує передачу параметрів в зрозумілому для
мови стилі та форматі. Для цього модуль, написаний на одному з
підтримуваних мов (javascript, C / C + +, Python, Ruby, PHP), повинен
використовувати Module API. З іншого боку, необхідно використовувати
спеціальний Binding API, специфічний для кожної мови, який і відповідає
за роботу з даними. Після реєстрації (зв'язування) модуля з ядром Kroll
можна прозоро викликати методи будь-яких мов і модулів. У майбутньому
планується додати підтримку Java, C # / Mono і Lua. Вихідні тексти ядра доступні
на Github.
Структура проекту
Тобі залишилося тільки розібратися в структурі проекту, щоб створити свою
першу програму на Titanium. Перш за все знадобиться аккаунт на сайті,
реєстрація безкоштовна. Далі просто - зсередини додаток складається з директорії
Resources, у якій зберігаються всі твої файли. По суті, це коренева директорія
проекту. Вище неї лежать лише службові файли для збірки - маніфест,
описує налаштування середовища (він створюється автоматично), ліцензія та файл
конфігурації tiapp.xml. У ньому є кілька опцій, які можуть бути
корисними. Наприклад, початковий, мінімальний і максимальний розмір вікна
додатки, прапор для включення повно екранного режиму. Тут же можна задати,
які з системних кнопок будуть доступні (на кшталт "згорнути", "розгорнути" і
"Закрити"), а також посилання на головну сторінку, яка завантажується при старті
додатки. Зазвичай це посилання на HTML-файл у директорії ресурсів. Але що, якщо
задати тут довільний URL сайту? Цілком очікувана річ. Вийде звичайне
десктопні програми, з інсталятором та іншими властивими фішками, але
відображає один тільки сайт. Так можна за два кліка зробити клієнт для
браузерної онлайн-ігри або будь-якого іншого веб-сайту, головне, щоб він коректно
працював в браузері на базі WebKit'а, не вимагав специфічних для браузера
модулів.
Для прикладу перетворимо сайт журналу в повноцінне десктопні програми. Для
цього досить створити новий проект у середовищі Titanium Developer, а потім,
відкривши в Блокноті файл tiapp.xml, відредагувати його наступним чином:
ru.ufrag.ucoz.www
Xaker WebApp
1.0
Vasja Pupkin
http://ufrag.ucoz.ru
default_app_logo.png
initial
Ufrag WebApp
http://ufrag.ucoz.ru
700
3000
0
500
3000
0
true
true
true
true
true
true
Додаток буде запускатися в повно екранному режимі, в якому є невеликий
баг - при натисканні на воно не виходить з нього, це треба реалізувати
самостійно. Я помітив ще один глюк в середовищі тестування - при запуску
додаток створює в директорії проекту папку dist, де і розміщується інсталяція проекту. Але при спробі тестової компіляції, по-перше, всі вихідні
файли проекту позначаються як read-only, а по-друге, повторно запустити
програму вже не вдається. Доводиться попередній дистрибутив видаляти вручну і
тільки потім запускати збірку вдруге.
Спробуй!
Як не крути, Titanium - це справжня знахідка! Який ще проект
надає зручний API і дозволяє розробляти додаток на звичному
мовою, а компілювати його під всі десктопні ОС і більшість мобільних
платформ? Та немає таких! При цьому API дуже простий і навіть приємний у роботі,
тому написати просте додаток або ж розширити функціонал сайту, перенісши
його в десктопний клієнт і додавши нові фічі - заняття всього на пару
вечорів. Якщо потрудитися, то можна також швидко зробити і програму для Android
або iPhone. Правда, в останньому випадку знадобиться Mac і платний акаунт
програми розробників Apple. Незважаючи на відомі скандали з Apple і прийомом
в AppStore програм, розроблених не на фірмовому інструментарії, за додатка
на базі Titanium можна не турбуватися - вони цілком нормально проходять всі
перевірки.
INFO
Якщо мова йде про мобільних платформах, то під віндою ти зможеш
розробляти програми лише для Android-пристроїв. Для цього необхідно
мати встановлені JDK і Android SDK. Розробка під пристрої Apple
доступна тільки під MacOS, незважаючи на те, що пункт iPad доступний в меню
типу додатків для всіх платформ.