Я прохожу курс разработки для Android / iPhone, и мы провели 8 недель с Titanium (не полный рабочий день) (версия была Titanium 1.4.2, а время было около ноября 2010 года) Вот мой опыт.
iPhone Android двойной таргетинг
Хотя в руководствах по API утверждается, что эта функциональность доступна как для Android, так и для iPhone, это не так. Многие вещи просто не работают на одной из платформ. Некоторые вещи работают по-другому.
Многие люди в классе делали приложения для iPhone, и они не могут заставить их работать на Android без серьезных переписываний. Я разработал простое детское приложение под названием Animap (см. Рынок Android / Appstore в Швеции) и начал разрабатывать под Windows. Как только цель для Android заработала, я открыл проект на OS X. Он не показывает никаких сборочных материалов для iPhone, только для Android. Вам необходимо запустить проект с двойной целью под OS X. (Хорошо, я скопировал соответствующие файлы в новый проект). Следующая проблема - анимации не работают на iPhone (они работают на Android). События прокрутки не работают так же на iPhone. (т.е. на Android вы получаете событие неприкосновения, когда пользователь прекращает прокручивать и отпускает палец с экрана, на iPhone это не происходит).
Поскольку это нигде не упоминается, вам необходимо в основном программировать методом проб и ошибок сначала на одной платформе, а затем на другой. Методом проб и ошибок я имею в виду, что на создание такого простого приложения, как Animap, на другой платформе потребуется около двух дней. Вам также нужно будет иметь if (android) then ... или if (iphone) ... по всему вашему коду ...
Скачать и настроить
Вы должны следовать инструкциям к письму. Не пытайтесь использовать Java 64 бит. Он не скомпилирует демонстрационное приложение KitchenSink 1.4.0. (1.3 работает нормально!) Вы должны поместить файлы непосредственно на диск C, поскольку длинные имена путей заставят внешнюю программу не получать все параметры командной строки, если они получат значение long. (Впрочем, для небольших программ). В 1/3 раза цепочка инструментов просто останавливается, и вы должны снова нажать «запуск». Тогда это, вероятно, будет работать ... очень ненадежно. Симулятор не будет найден при запуске, и тогда вам нужно просто убить adb.exe с помощью Ctrl + Alt + Delete и повторить попытку.
Подключение к сети
В Wi-Fi-сети вы иногда теряете работающее соединение, и Titanium падает на вас (интерфейс компиляции / развертывания). Если у вас нет работающего интернет-соединения, оно не запустится, так как не сможет войти на свои серверы.
API
CSS, HTML и jQuery - это бриз по сравнению с этим. Titanium напоминает любой другой старый графический интерфейс API, и вам нужно установить некоторые свойства для каждой кнопки / поля / и т. Д. Неправильно получить поле - просто вспомнить все свойства, которые нужно установить? Вы написали его заглавными буквами в нужном месте? (так как это не перехватывается компилятором, но будет рассматриваться как ошибка времени выполнения, если вам повезет протестировать эту часть)
В Titanium все просто ломается, когда вы добавляете другое представление поверх элемента управления или щелкаете где-то еще в GUI.
Документация
На нескольких страницах 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) и программируете так, как работают потоки, и отправляете события с данными назад и вперед, вы сталкиваетесь со множеством очень, очень странных вещей - потерянные обработчики, потерянные окна, слишком много событий, слишком мало событий и т. д. и т. д. Это все зависит от времени, размещение строк кода в другом порядке может привести к сбою или исцелению вашего приложения. Добавление окна в другой файл .js нарушает ваше выполнение app.js ... Это также уничтожает внутренние структуры данных в Titanium, поскольку они иногда могут обновлять внутренние структуры данных в paralell, перезаписывая только что измененное значение чем-то другим.
Большая часть проблем, с которыми я столкнулся с Titanium, связана с моим прошлым в системах реального времени, таких как OSE, которые поддерживают сотни потоков, событий и сообщений. Предполагается, что это работает в Titanium 1.4, но просто не надежно.
Javascript (который является новым для меня) умирает молча от ошибок во время выполнения. Это также означает, что мелкие и распространенные ошибки, такие как неправильное написание имени переменной или чтение в нулевом указателе, не дают сбоя, когда это необходимо, чтобы вы могли отладить его. Вместо этого части вашей программы просто перестают работать, например, обработчик событий, потому что вы потеряли или неправильно вставили символ.
Тогда у нас есть более простые ошибки в Titanium, например, некоторые параметры не работают в функциях (что, по крайней мере, довольно часто встречается на платформе Android).
Скорость цикла отладки проб и ошибок Запустив Titnium Developer на нескольких компьютерах, я заметил, что узким местом является жесткий диск. SSD-накопитель на ноутбуке делает цикл сборки примерно в 3-5 раз быстрее, чем на 4200 об / мин. На настольном компьютере наличие двух дисков в RAID 1 (чередующийся режим) делает сборку примерно на 25 процентов быстрее, чем на одном диске с несколько более быстрым ЦП, и это также лучше, чем у ноутбука с SSD.
Резюме
- Судя по комментариям в этой теме, похоже, идет борьба за количество платформ, для которых такой инструмент может предоставить приложение. Количество API, кажется, является ключевой точкой продажи.
Это очень сильно просвечивает, когда вы начинаете его использовать. Если вы посмотрите на открытый багтрекер, вы увидите, что количество ошибок продолжает расти быстрее, чем количество исправленных ошибок. Обычно это признак того, что разработчики продолжают добавлять больше функциональности, а не концентрироваться на уменьшении количества ошибок.
Как консультант, пытающийся доставить довольно простые приложения в мультиплатформенность для клиента - я не уверен, что это на самом деле быстрее, чем разработка нативных приложений на двух платформах. Это связано с тем, что когда вы набираете скорость, вы быстро используете Titanium, но затем вы неожиданно смотрите вниз и попадаете в такую глубокую яму, что не знаете, сколько часов нужно потратить на обходной путь. Вы можете просто НЕ обещать определенную функциональность в течение определенного срока / времени / стоимости.
О себе: я уже два года использую Python с wxPython. (этот GUI не отвечает, но никогда не ломается, как это. Возможно, я не понял модель потоков, используемую Javascript и Titanium, но я не одинок согласно их открытым дискуссионным форумам, объекты GUI внезапно используют неправильный контекст / не обновляется .. ???) до этого у меня есть опыт программирования на C и ASM для мобильных устройств.
[править - добавлена часть с ошибками, и она не защищена от потоков] [Правка - теперь работаю с ней в течение месяца +, в основном на ПК, но также на OS X Добавлено двойное нацеливание на iPhone и Android. Добавлена скорость отладки проб и ошибок.]