Я беру курс на розробку Android / iPhone, і ми провели 8 тижнів з Titanium (не повний робочий день) (версія Titanium 1.4.2, а час - близько листопада 2010 року). Ось мій досвід.
Подвійне націлювання на Android на iPhone
Хоча посібники API стверджують, що функціонал доступний і для Android, і для iPhone, це не так. Значна частина матеріалів просто не працює на одній з платформ. Деякі речі працюють інакше.
Дуже багато людей у класі зробили додатки для iPhone, і вони не можуть змусити їх працювати на Android без великих переписувань. Я розробив простий дитячий додаток під назвою Animap (див. Ринок Android / Appstore у Швеції) і почав розробку під Windows. Як тільки ціль Android працювала, я відкрив проект на OS X. У ньому не відображаються будь-які складові для iPhone, лише для Android. Потрібно запустити подвійний цільовий проект в ОС X. (Добре, я скопіював відповідні файли в новий проект). Наступна проблема - анімації не працюють на iPhone (вони працюють на Android). Події прокрутки не працюють однаково на iPhone. (тобто на Android ви отримуєте подію недоторкання, коли користувач перестає прокручувати та відпускає палець з екрану, цього не відбувається на iPhone).
Оскільки це десь не згадується, вам в основному потрібно робити пробне та помилкове програмування спочатку на одній платформі, а потім на іншій платформі. За допомогою спроб і помилок я маю на увазі, що для отримання такого простого додатка, як Animap, що працює на іншій платформі, знадобиться близько двох днів. Вам також потрібно мати if (android), то ... або якщо (iphone) ... у всьому коді ...
Завантаження та налаштування
Ви повинні слідувати вказівкам до листа. Не намагайтеся використовувати java 64 біт. Він не буде компілювати демонстраційну програму KitchenSink 1.4.0. (1.3 працює добре!) Ви повинні розміщувати файли безпосередньо на диску C, оскільки довгі імена шляху дозволять зовнішній програмі не отримувати всіх параметрів командного рядка, якщо вони дістаються до довгих. (Хоча добре для невеликих програм) 1/3 разів, ланцюжок інструментів просто зупиняється, і вам потрібно знову натиснути «запуск». Тоді це, мабуть, спрацює ... дуже ненадійно. Симулятор не знайдеться під час запуску, і тоді потрібно просто вбити adb.exe за допомогою Ctrl + Alt + Delete та повторити спробу.
Підключення до мережі
У мережі Wi-Fi ви іноді втрачаєте пряме з'єднання, і Titanium виходить з ладу на вас (інтерфейс компіляції / розгортання). Якщо у вас немає робочого інтернету, він не запуститься, оскільки він не зможе увійти в систему на своїх серверах.
API
CSS, HTML і jQuery - вітер порівняно з цим. Титан нагадує будь-який інший старий інтерфейс GUI, і вам потрібно встановити деякі властивості для кожної кнопки / поля / тощо. Помилка поля - це просто, пам’ятаючи всі властивості, які потрібно встановити? Ви написали це великими літерами в потрібному місці? (оскільки компілятор не сприймає це, але він буде сприйматися як помилка виконання, якщо вам пощастить перевірити цю частину)
У Titanium речі просто порушуються, коли ви додаєте інший вигляд поверх елемента керування або клацніть десь ще в графічному інтерфейсі.
Документація
Кілька сторінок API містять символ Android, але вони повернуть нуль лише при спробі створити елемент керування. Вони не просто доступні на платформі Android, незважаючи на символи. Іноді Android згадується, щоб він не підтримував певний метод, але тоді весь API відсутній.
Кухонна мийка
Демонстраційний додаток. Я згадав, що він не компілюється, якщо ви помістите його в папку проектів Eclipse, оскільки шлях стає занадто довгим? Потрібно поставити на свій диск C у кореневій папці. На даний момент я використовую посилання symbolik (mklink / J ...)
Недокументовані методи
Ви повинні широко використовувати речі як label.setText ("Hello World"), щоб змінити мітку надійною, але це зовсім не документально.
Налагодження
Titanium.API.info ("Роздруківки - єдиний спосіб налагодження");
Редагування
API не доступні в будь-якому хорошому форматі, тому ви не можете отримати звичайне доповнення коду за допомогою допомоги тощо в Eclipse. Аптана, будь ласка, допоможіть!
Обладнання
Здається, що компілятор / інструменти не є багатопотоковими, тому швидкий комп'ютер із швидким жорстким диском є обов'язковим, тому що ви повинні зробити багато проб і помилок. Я згадував погану документацію? Ви повинні спробувати все там, оскільки ви не можете довіряти цьому!
Деякі позитивні речі
- Відкрите джерело
З попередніх проектів я пообіцяв собі, що ніколи більше не буду використовувати закритий джерело, оскільки ви не можете просто виправити речі, просто кинувши на це години та робочу силу. Важливо, коли ви запізнюєтесь на проект і вам потрібно поставитись за важкий термін. Це з відкритим кодом, і я зміг зрозуміти, чому ланцюг інструментів ламається, і насправді це виправити.
Bugdatabase
Він також відкритий. Ви можете просто побачити, що ви не самотні і вирішуєте рішення замість ще 4 годин, витрачених на випробування та помилки.
Громада
- Здається, активно на своїх форумах.
Клопи
- Титан 1.4 не є безпечним для потоків . Це означає, що якщо ви використовуєте потоки (використовуйте url: властивість у виклику createWindow) та програмуйте так, як потоки працюють і надсилають події з даними вперед і назад, ви натрапляєте на безліч дуже-дуже дивних речей - втрачені обробники, загублені windows, занадто багато подій, занадто мало подій і т. д. Це все залежить від термінів, якщо розміщення рядків коду в іншому порядку може збіти або залікувати вашу програму. Додавання вікна в інший file.js порушує ваше виконання app.js ... Це також втрачає внутрішні структури даних у Titanium, оскільки вони іноді можуть оновлювати внутрішні структури даних у паралелі, замінюючи щойно змінене значення чимось іншим.
Більшість проблем, які виникли у мене з Titanium, виникають з мого досвіду в таких системах, як OSE, які підтримують сотні потоків, подій та передачі повідомлень. Це повинно працювати в Titanium 1.4, але це просто не робиться надійно.
Javascript (який для мене новий) вмирає мовчки під час помилок виконання. Це також означає, що невеликі та поширені помилки, такі як неправильне написання імені змінної чи читання в нульовому покажчику, не збиваються, коли слід, і ви можете налагодити це. Натомість частини вашої програми просто перестають працювати, наприклад, eventhandler, тому що ви неправильно ввели / неправильно ввели персонаж.
Тоді у нас є більш прості помилки в Titanium, як і деякі параметри, які не працюють у функціях (що досить часто зустрічається на платформі Android).
Швидкість циклу налагодження проб і помилок Після запуску програми Titnium Developer на кількох комп'ютерах я помітив, що вузьким місцем є жорсткий диск. SSD-накопичувач на ноутбуці робить цикл збирання приблизно в 3-5 разів швидшим, ніж на 4200 об / хв. На робочому столі наявність подвійних накопичувачів в RAID 1 (смугастий режим) робить збірку приблизно на 25 відсотків швидшою, ніж на одному диску з дещо швидшим процесором, а також він обіграє ноутбук накопичувача SSD.
Підсумок
- З коментарів у цій темі, мабуть, ведеться боротьба за кількість платформ, за допомогою яких інструмент, подібний цій, може забезпечити додаток. Кількість API здається ключовою точкою продажу.
Це дуже сильно просвічується, коли ви починаєте його використовувати. Якщо ви подивитесь на відкриту помилку, ви побачите, що кількість помилок зростає швидше, ніж кількість виправлених помилок. Зазвичай це знак того, що розробники продовжують додавати більше функціональних можливостей, а не концентруватися на тому, щоб зменшити кількість помилок.
Будучи консультантом, який намагається поставити клієнтам досить прості додатки для багатоплатформних платформ - я не впевнений, що це насправді швидше, ніж займатися розробкою власних додатків на двох платформах. Це пов’язано з тим, що коли ви швидкості, ви швидко з Титанієм, але потім раптом дивитесь вниз і опиняєтесь в глибокій норі, що не знаєте, скільки годин потрібно витратити на вирішення проблеми. Ви можете просто НЕ обіцяти певну функціональність протягом певного терміну / часу / вартості.
Про себе: Я два роки використовував Python з wxPython. (що GUI непомітний, але ніколи не ламається так. Можливо, я не зрозумів модель нарізки, яку використовують Javascript і Titanium, але я не один, згідно з їхніми форумами відкритих дискусій, об’єкти GUI раптом використовують неправильний контекст / не оновлювавшись ... ???) до цього у мене є досвід програмування на C та ASM для мобільних пристроїв.
[редагувати - додана частина з помилками і не захищена нитками] [Редагувати - зараз працюю з нею місяць +, в основному на ПК, але деякі і на OS X. Додано подвійне таргетування iPhone та Android. Додано швидкість циклу налагодження проб і помилок.]