Сравнение между Corona, Phonegap, Titanium

310

Я веб-разработчик и хочу перенести свои веб-продукты на iPhone. Один из продуктов похож на Google Maps: показать карту на экране телефона, вы можете перетащить или изменить размер карты и просмотреть некоторую информацию, которую мы добавляем на карту.

Я знаю, что есть некоторые технологии, которые позволяют использовать HTML, CSS и Javascript для разработки собственных приложений для iPhone. Я определил несколько:

Есть ли другие, похожие продукты? Каковы различия между ними? какой я должен выбрать?

Микки Шайн
источник
1
Существует также Adobe FLEX, который может создавать приложения для iPhone по состоянию на июнь 2011 года. Adobe.com/products/flex
neoneye
1
Проверьте это. Чувак, это сравнение с точки зрения. savagelook.com/blog/portfolio/…
Хикмат Хан

Ответы:

368

Я зарегистрировался в stackoverflow только для того, чтобы прокомментировать самый голосующий ответ сверху. Плохо то, что stackoverflow не позволяет новым пользователям оставлять комментарии. Поэтому я должен сделать этот комментарий более похожим на ответ.

Ответ Рори Блайта содержит несколько важных моментов о двух мобильных фреймворках javascript. Однако его ключевые моменты неверны. Правда в том, что Titanium и PhoneGap больше похожи, чем отличаются. Они оба предоставляют функции мобильного телефона через набор API-интерфейсов JavaScript, а логика приложения (html, css, javascript) работает внутри встроенного элемента управления WebView.

  1. PhoneGap - это не просто встроенная оболочка веб-приложения. Через API-интерфейс JavaScript PhoneGap «веб-приложение» получает доступ к функциям мобильного телефона, таким как геолокация, камера акселерометра, контакты, база данных, файловая система и т. Д. По сути, любая функция, которую предоставляет SDK мобильного телефона, может быть «соединена» с мир JavaScript С другой стороны, обычное веб-приложение, которое работает в мобильном веб-браузере, не имеет доступа к большинству этих функций (главная причина - безопасность). Поэтому приложение PhoneGap - это скорее мобильное приложение, чем веб-приложение. Конечно, вы можете использовать PhoneGap, чтобы обернуть веб-приложение, которое вообще не использует API PhoneGap, но это не то, для чего PhoneGap был создан.

  2. Titanium НЕ компилирует ваш html, css или javascript код в «собственные биты». Они упакованы как ресурсы для исполняемого пакета, во многом как встроенный файл изображения. Когда приложение запускается, эти ресурсы загружаются в элемент управления UIWebView и запускаются там (как, конечно, javascript, а не собственные биты). Не существует такого понятия, как компилятор javascript-to-native-code (или to -jective-c). Это делается так же, как и в PhoneGap. С архитектурной точки зрения эти две основы очень похожи.

Теперь они отличаются? Да. Во-первых, Titanium кажется более функциональным, чем PhoneGap, соединяя больше функций мобильного телефона с javascript. Наиболее заметно, что PhoneGap не предоставляет много (если таковые имеются) нативных компонентов пользовательского интерфейса для javascript. Титаниум, с другой стороны, имеет комплексные API-интерфейсы пользовательского интерфейса, которые можно вызывать в javascript для создания и управления всеми видами собственных элементов управления пользовательского интерфейса. Используя эти интерфейсы API, приложение Titanium может выглядеть более «родным», чем приложение PhoneGap. Во-вторых, PhoneGap поддерживает больше платформ для мобильных телефонов, чем Titanium. API-интерфейсы PhoneGap являются более общими и могут использоваться на различных платформах, таких как iPhone, Android, Blackberry, Symbian и т. Д. Titanium, по крайней мере, на данный момент, в первую очередь ориентирован на iPhone и Android. Некоторые из его API-интерфейсов зависят от платформы (например, API-интерфейсы iPhone).

Так что, если вы хотите, чтобы приложение выглядело «родным», Titanium - лучший выбор. Если вы хотите легче переносить ваше приложение на другую платформу, PhoneGap будет лучше.

Обновлено 13.08.2010: Ссылка на ответ сотрудника Titanium на вопрос Микки.

Обновлено 12/04/2010: Я решил ежегодно публиковать этот пост, чтобы постоянно обновлять информацию. Многие вещи претерпели изменения за год, что сделало часть информации в первоначальном посте устаревшей.

Самое большое изменение пришло от титана. Ранее в этом году Appcelerator выпустил Titanium 1.0, который значительно отличается от предыдущих версий с точки зрения архитектуры. В версии 1.0 элемент управления UIWebView больше не используется. Вместо этого вы вызываете API-интерфейсы Titanium для любых функций пользовательского интерфейса. Это изменение означает пару вещей:

  1. Пользовательский интерфейс вашего приложения становится полностью нативным. В вашем приложении больше нет веб-интерфейса, поскольку нативные API-интерфейсы Titanium контролируют все ваши потребности в пользовательском интерфейсе. Titanium заслуживает большого уважения благодаря новаторству на границе «Cross-Platform Native UI». Это дает программистам, которые предпочитают внешний вид родного интерфейса, но не любят официальный язык программирования, альтернативу.

  2. Вы не сможете использовать HTML или CSS в своем приложении, так как веб-представление исчезло. (Примечание: вы все еще можете создавать веб-представление в Titanium. Но есть несколько функций Titanium, которые вы можете использовать в веб-представлении.) Titanium: вопросы и ответы: Что случилось с HTML и CSS?

  3. Вы не сможете использовать популярные библиотеки JS, такие как JQuery, которые предполагают существование объекта DOM. Вы продолжаете использовать JavaScript в качестве языка кодирования. Но это в значительной степени единственная веб-технология, которую вы можете использовать, если перейдете на Titanium 1.0 в качестве веб-программиста.

Видео Titanium: что нового в Titanium 1.0.

Теперь, Titanium 1.0 компилирует ваш JavaScript в "нативные биты"? Нет. Appcelerator наконец-то решил эту проблему с помощью этого блога для разработчиков: Titanium Guides Project: JS Environment. Мы, программисты, более настоящие люди, чем сотрудники отдела маркетинга, не так ли? :-)

Перейдите к PhoneGap. Не так много нового, что можно сказать о PhoneGap. Я считаю, что разработка PhoneGap не была очень активной, пока IBM не присоединилась к нему позже в этом году. Некоторые люди даже утверждали, что IBM вносит в PhoneGap больше кода, чем Nitobi. Это правда или нет, но хорошо знать, что PhoneGap активно разрабатывается.

PhoneGap продолжает основываться на веб-технологиях, а именно на HTML, CSS и JavaScript. Похоже, что PhoneGap не планирует связывать нативные функции пользовательского интерфейса с JavaScript, как это делает Titanium. Хотя веб-интерфейс по-прежнему отстает от собственного интерфейса по производительности и внешнему виду, он быстро устраняется. Существуют две тенденции в веб-технологиях, которые обеспечивают яркую функциональность мобильного веб-интерфейса с точки зрения производительности:

  1. Двигатель JavaScript движется от переводчика к виртуальной машине. JavaScript - это JIT, скомпилированный в собственный код для более быстрого выполнения. Двигатель Safari JS: SquirrelFish Extreme

  2. Рендеринг веб-страниц переходит от использования CPU к использованию ускорения GPU. Интенсивные графические задачи, такие как переход страниц и трехмерная анимация, становятся намного более плавными благодаря аппаратному ускорению. GPU Ускоренное наложение в Chrome

Такие улучшения, которые происходят от настольных браузеров, быстро доставляются в мобильные браузеры. Фактически, начиная с iOS 3.2 и Android 2.0, управление мобильным веб-представлением стало намного более производительным и дружественным к HTML5. Будущее мобильного Интернета настолько многообещающе, что привлекло в город большого ребенка: JQuery недавно анонсировала свой мобильный веб-фреймворк. На мой взгляд, благодаря JQuery Mobile, предоставляющему гаджеты пользовательского интерфейса, и PhoneGap, предоставляющему функции телефона, они вместе создают идеальную мобильную веб-платформу.

Я должен также упомянуть Sencha Touch как еще один фреймворк для мобильных устройств с пользовательским интерфейсом. Версия 1.0 Sencha Touch была недавно выпущена по модели двойного лицензирования, которая включает GPLv3. Sencha Touch работает с PhoneGap так же, как JQuery Mobile.

Если вы программист GWT (как и я), вы можете попробовать GWT Mobile , проект с открытым исходным кодом для создания мобильных веб-приложений с GWT. Он включает в себя оболочку PhoneGap GWT, которая позволяет использовать PhoneGap в GWT.

DennisJZH
источник
10
Хм ... вы говорите, что "PhoneGap - это не просто встроенная оболочка веб-приложения". Вы продолжаете обсуждать доступ, который он предоставляет вам к собственным функциональным возможностям устройства. Я думаю, что я рассмотрел это, когда написал: «Помимо того, что PhoneGap предоставляет мост, это мост между JavaScript и собственными API-интерфейсами устройств. Итак, вы пишете JavaScript с API-интерфейсами PhoneGap, и PhoneGap затем делает соответствующий соответствующий нативный вызов. В этом отношении отличается от развертывания простого старого веб-приложения. " Если вы зарегистрировались только для того, чтобы опровергнуть мое заявление, вы должны прочитать его полностью. Я знаю, что мои сообщения длинные, но ... все же.
Рори Блит
5
Я мог бы быть более понятным, но детали того, какие API-интерфейсы сложны, поскольку со временем они меняются от устройства к устройству, что вы можете сделать (это значительно улучшилось, но матрица функций для разных платформ претерпела немало изменений). Я написал об одном из ключевых отличий, и то, что я написал, является правильным - фактически, это соответствует тому, что вы написали. Вы просто попали в подробности о том, к каким API вы можете получить доступ.
Рори Блит
9
Что касается Titanium и «нативных битов», я думаю, что моя ошибка заключалась в том, что я читал это на их сайте - прямо на главной странице Appcelerator: «они работают отлично, потому что мы компилируем Titanium в нативный код для пиковой производительности». Возможно, вам следует написать им, чтобы они знали, что они не правы. Проверьте это: tinyurl.com/yzlzvk5
Рори Блит
6
Для получения дополнительной информации ознакомьтесь с часто задаваемыми вопросами о Titanium - первая тема «Мобильные веб-приложения или нативные мобильные приложения» кратко освещает проблему. Я бы опубликовал здесь цитату, но я думаю, что вы бы предпочли получить ее непосредственно у компании, поскольку, я полагаю, они являются авторитетными специалистами по своему продукту: tinyurl.com/ya9topg
Рори Блит
4
Деннис, спасибо за отличный ответ. Вы все еще разрабатываете с Titanium? Можете ли вы прокомментировать теперь, когда 1.7 приземлился?
PaulM
193

Из того, что я собрал, вот некоторые различия между ними:

  • PhoneGap в основном генерирует нативные оболочки для веб-приложений . Он выплевывает проект WhwhatYourPlatformIs, вы его создаете и развертываете. Если мы говорим об iPhone (именно на этом я и провожу свое время), то, похоже, он не сильно отличается от создания средства запуска веб-приложений (ярлык, который получает собственный значок Springboard, поэтому вы можете запустить его как ( например ) родное приложение). Само приложение по-прежнему html / js / и т. Д. И работает внутри размещенного в браузере элемента управления. Помимо этого, PhoneGap является мостом между JavaScript и собственными API-интерфейсами устройств. Таким образом, вы пишете JavaScript против API PhoneGap, и PhoneGap затем делает соответствующий соответствующий собственный вызов. В этом отношении он является отличается от развертывания простой старый веб - приложение.

  • Титановый источник компилируется до собственных битов. То есть ваш html / js / etc. они не просто присоединяются к проекту, а затем размещаются внутри элемента управления веб-браузера - они превращаются в собственные приложения. Это означает, например, что интерфейс вашего приложения будет состоять из собственных компонентов пользовательского интерфейса. Есть способы получить нативный внешний вид без использования нативного приложения, но ... ну ... какой кошмар обычно бывает.

Они похожи в том, что вы пишете все свои вещи, используя типичные веб-технологии (html / js / css / blah blah blah), и что вы получаете доступ к встроенным функциям через пользовательские API-интерфейсы JavaScript.

Но, опять же, приложения PhoneGap (PhonGapps? Я не знаю ... это глупое имя? Проще сказать - я знаю это) начинают свою жизнь как веб-приложения и заканчивают свою жизнь как веб-приложения. На iPhone ваш html / js / etc. выполняется только внутри элемента управления UIWebView, и JavaScript-API PhoneGap, которые вы вызываете в js, направляются в нативные API-интерфейсы.

Приложения Titanium становятся родными приложениями - они просто разработаны с использованием технологии веб-разработки.

Что это на самом деле означает ?

  1. Титановое приложение будет выглядеть как «реальное» приложение , потому что, в конечном счете, это является «реальным» приложением.

  2. PhoneGap приложение будет выглядеть как веб - приложение , приютили в элементе управления браузера , потому что, в конечном счете, это является веб - приложение , приютили в элементе управления браузера.

Что подходит вам?

  • Если вы хотите писать собственные приложения, используя навыки веб-разработчика, Titanium - ваш лучший выбор.

  • Если вы хотите написать приложение с использованием навыков веб-разработчика, которое вы могли бы реально развернуть на нескольких платформах (iPhone, Android, Blackberry и все остальное, что они решили включить), и если вы хотите получить доступ к подмножеству функций собственной платформы (GPS, акселерометр и т. д.) через единый JavaScript API, PhoneGap, вероятно, то, что вы хотите.

Вы можете спросить: почему я хотел бы написать PhoneGapp (я решил использовать имя), а не веб-приложение, размещенное в Интернете? Разве я не могу получить доступ к некоторым встроенным функциям устройства таким образом, но при этом иметь удобство истинного веб-развертывания вместо того, чтобы заставлять пользователя загружать свое «родное» приложение и устанавливать его?

Ответ таков: потому что вы можете отправить свой PhoneGapp в App Store и заплатить за него. Вы также получаете эту иконку запуска, которая усложняет для пользователя забыть о вашем приложении (я гораздо чаще забуду о закладке, чем значок приложения).

Вы, конечно, могли бы взимать плату за доступ к вашему веб-приложению, но сколько людей действительно пройдут этот процесс, чтобы сделать это? В App Store я выбираю приложение, нажимаю кнопку «Купить», ввожу пароль, и все готово. Это устанавливает. Через несколько секунд я им пользуюсь. Если бы мне пришлось использовать чей-то единый интерфейс для мобильных веб-транзакций, что, вероятно, означает необходимость выстукивать мое имя, адрес, номер телефона, номер CC и другие вещи, которые я не хочу использовать, я почти наверняка не смог бы не пройти через это. Кроме того, я доверяю Apple - я уверен, что Стив Джобс не собирается регистрировать мою информацию, а затем выставляет кучу непослушных подписок на журналы на мой CC за пинки.

В любом случае, за исключением того, что задействованы технологии веб-разработки, PhoneGap и Titanium сильно отличаются друг от друга - до такой степени, что они внешне сопоставимы.

Кстати, я ненавижу веб-приложения, и если вы читаете обзоры iTunes App Store, пользователи довольно хорошо их замечают. Я не буду называть никаких имен, но у меня на телефоне есть пара «приложений», которые выглядят и работают как мусор, и это потому, что они являются веб-приложениями, которые размещены внутри экземпляров UIWebView. Если бы я хотел использовать веб-приложение, я бы открыл Safari и, перейдите к нему. Я купил iPhone, потому что хочу вещи, которые есть у iPhone. У меня нет проблем с использованием, скажем, шикарного веб-приложения Google в Safari, но я бы почувствовал себя обманутым, если бы Google просто вставил закладку в Springboard, представив веб-приложение как нативное.

Должны идти. У моей девушки такое выражение лица, которое вы можете прекратить использовать на компьютере в течение трех секунд.

Рори Блит
источник
22
Проблема с ответом состоит в том, что это в основном НЕПРАВИЛЬНО. Смотрите ответ DennisJZH ниже.
JBWIV
9
@jbwiv - проблема с вашим комментарием в том, что он в основном основан на ответе DennisJZH, который в основном НЕПРАВИЛЬЕН. Смотрите мои ответы ниже. Для того, чтобы избежать дальнейшей путаницы, я предлагаю вам взять и посмотреть на официальную документацию на продукцию , а также прочитать мой пост в полном объеме . Большое спасибо.
Рори Блит
15
@ Мэтью - О, у gf определенно есть приоритет :). Поскольку эти вопросы не имеют значения в основном потому, что изменения происходят (если я неправильно понял ваш смысл, я извиняюсь), то факт, что люди действительно хотят получить ответы на вопросы, которые существуют прямо сейчас. Мы могли бы утверждать, что ничего из этого не имеет значения, поскольку Земля в будущем просто будет готовиться Солнцем, поскольку оно сжигает свое топливо и расширяется, разрушая нашу планету, но ... это дает нам что-то делать, пока мы ждем.
Рори Блит
2
@Matthew - Кроме того , этот человек является желание попробовать что- то новое. Это может быть не так, как вы предпочитаете, но это все еще ново. Вам все еще нужно узнать о разработке для iPhone (прочитайте документы по руководству по пользовательскому интерфейсу и т. Д.) Нет никаких веских причин пытаться отвлечь кого-то от попыток достичь чего-то только потому, что вы не видите в этом ценности. Например, я ненавижу грибы, но не пытаюсь мешать другим людям есть их. Я понимаю, что они любят грибы так же, как я люблю шафран, и я знаю, что не хочу, чтобы кто-то пытался отобрать у меня шафран только потому, что им это не нравится.
Рори Блит
1
Да, но если вы настоящий мастер веб-технологий, я уверен, что никто не сможет понять, что ваше «веб-приложение» на самом деле не является нативным приложением. В тех случаях, когда очевидно, что приложение является «веб-приложением», завернутым в UIWebView, это означает, что создатель не потратил время и не позаботился о том, чтобы сделать его достаточно высокого качества.
trusktr
62

Я прохожу курс разработки для 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. Добавлена ​​скорость отладки проб и ошибок.]

user288299
источник
1
С выпуском 1.4 Titanium я теперь изучил файлы .apk, доставленные из Titanium, и они просто не очень хороши. Они работают, но полный каталог сборки там как бы упакован. Это означает, что незначительные недостатки сборки, такие как копирование заставки в три разных места во время сборки, внезапно потребляют, так как у меня большое изображение с заставкой, около 1 Мб памяти в телефоне. И это только для очень простого варианта hello-world. Исходный код javascript также копируется в сборки и в файлы .apk и, таким образом, доставляется всем клиентам.
user288299
Выпуск 1.5 уже выпущен и, как говорят, является основным переписыванием для платформы Android. Я не буду проверять это, так как мне нужно сейчас изучать разработку под Android.
user288299
Выпуск 1.5 уже выпущен и, как говорят, является основным переписыванием для платформы Android. Я не буду проверять это, поскольку мы перешли к изучению нативной разработки для Android. Как мы сегодня узнали о жизненном цикле на нативном Android, я полагаю, что проблемы, которые у меня возникали с некоторыми окнами, теряющими переменное содержимое во второй раз, когда они отображались, были вызваны тем, что Titanium не сохранил состояние до состояния onPause () жизненного цикла. developer.android.com/guide/topics/fundamentals.html#lcycles . Вызов Titanium.Map.MapView.hide () и позже show () может просто убить ваши локальные переменные для карты
user288299
1
Только что поиграл с 1.7, ваше описание так правильно. Эта платформа очень популярна, с ужасной производительностью и бесчисленными часами работы по поиску. Если у вас есть ресурсы в начале проекта, постройте собственный для каждой платформы.
Джонатон Креснер
25

Corona SDK (Ansca Mobile) использует Lua в качестве языка кодирования. Смотрите lua.org для получения дополнительной информации о Lua.

Несмотря на то, что мы планируем добавить дополнительные элементы веб-интеграции и нативного пользовательского интерфейса, основное внимание будет уделяться приложениям с интенсивной графикой, таким как разработка игр, а не веб-технологиям. Другими словами, мы не предполагаем, что люди пишут приложения Corona полностью на Javascript / HTML / CSS.

Эван Кирхгоф
источник
У вас есть какой-либо план или шкала времени для сценариев с пользовательским интерфейсом. Я немного поработал с Луа и очень хочу любить Корону. Для неигровой разработки Titanium кажется немного впереди.
2010 года
4
Привет Урок. У нас есть встроенные функции пользовательского интерфейса, которые появятся в выпуске 1.1 (ETA позже на этой неделе!), А вскоре появятся и другие. Тем не менее, я чувствую, что Titanium состоит в том, что они проделали отличную работу, разоблачая большое количество нативных элементов пользовательского интерфейса, в то время как мы собираемся сосредоточиться на наиболее важных элементах пользовательского интерфейса, в то же время прикладывая больше усилий для разработки анимации и рендеринга. Причина заключается в том, что (i) уже есть хорошие продукты для приложений только для пользовательского интерфейса, (ii) пользовательский интерфейс является самой дружественной частью Cocoa (условно говоря!), Но (iii) все, что связано с анимацией OpenGL, является болезненной точкой на iPhone в момент.
Эван Кирхгоф
Кажется, Corona подходит для разработки игр, а не приложений, верно?
Антифафе
18

Я работаю с Titanium уже больше недели и чувствую, что хорошо чувствую его слабость.

1) Если вы надеетесь использовать один и тот же код на нескольких платформах, удачи! Вы увидите что-то вроде backgroundGradient и будете удивлены, пока не обнаружите, что версия для Android не поддерживает это. Тогда придется вернуться к использованию градиентного изображения, может также использовать его для обеих версий, чтобы сделать код проще, верно?

2) Много странного поведения, на Titanium android sdk вам нужно понять, что такое «тяжелое» окно, просто чтобы заставить работать кнопку «назад», или даже лучше отслеживание событий ориентации. Это не то, чем на самом деле является платформа Android, а то, как Titanium пытается заставить их API работать.

3) Тебя бросают в темноту, все падает, и ты должен начать комментировать код, а затем, когда найдешь его, никогда не используй его. Есть определенные очевидные ошибки, такие как ориентация и проценты на Android, которые были проблемой более шести месяцев.

4) Ошибки ... есть много ошибок, и о них будут сообщать, сидеть месяцами, исправляться через несколько дней. Я удивлен, что они даже планируют выпустить Black Berry Mobile SDK, когда есть много других проблем с Android.

5) Титаниум Iphone и Android-движки Titanium полностью отличаются. В версии для Android вы можете загружать удаленные файлы javascript, включать и использовать библиотеки, такие как mootools, jquery и так далее. Я был на небесах, когда узнал об этом, потому что мне не нужно было продолжать компилировать приложение для Android. Процесс установки Android apk занимает так много времени! Iphone ничего из этого не возможно, также версия iphone имеет гораздо более быстрый движок javascript.

Если вы держитесь подальше от множества собственных частей пользовательского интерфейса, т.е. вместо этого используйте setInterval для обнаружения изменений ориентации, привязки к градиентным изображениям, забудьте о кнопке «Назад», создайте собственную анимацию, забудьте заголовок окна, панели инструментов и панель инструментов. Вы действительно можете сделать API, который работает на обоих, который не требует много переписывания. Но в этот момент он такой же вялый, как веб-приложение.

Так стоит ли это того? Ведь боль, стоит каждой минуты. Вы можете абстрагировать логику и просто создать разные интерфейсы для каждого, а не для других. Титан позволяет вам быстро наносить жидкие аппликации. Вы теряете мощные возможности компоновки каждой платформы, но если вы думаете, что все просто, все может быть сделано на одном языке.

Почему не веб-приложение? На рынке Android-телефонов начального уровня генерация веб-просмотра ужасно медленная и потребляет много памяти, которую вы могли бы использовать для более сложной логики.

Джозеф Монтанес
источник
9

родной mapkit поддерживается в Titanium

jhaynie
источник
8

Сделать виджеты HTML5 похожими на виджеты iphone - это одно, но сделать их одинаково хорошо работающими - совсем другое дело. Производительность html5-анимаций (даже простых переходов просмотра), прокрутка длинных списков, отзывчивость на жесты чувствуют себя липкими и резкими. Пользователь iPhone заметит разницу.

Существуют также некоторые различия в видах жестов, которые поддерживаются различными устройствами, что также приводит к проблемам с кодом конкретной платформы и удобству использования.

Я останусь с родными приложениями, я думаю.

user158678
источник
7

Rhomobile Rhodes ( http://rhomobile.com/products/rhodes ) очень похож на подход к PhoneGap, но является единственной платформой с:

  1. шаблон Model View Controller (как предоставляют большинство веб-платформ)
  2. объект реляционного менеджера
  3. поддержка всех популярных смартфонов (включая Windows Phone 7)
  4. размещенная служба разработки (не просто размещенная сборка): http://rhohub.com
  5. полный отладчик и эмулятор без SDK в RhoStudio IDE
  6. поддержка синхронизированных автономных данных
Адам Блум
источник
6

Для тех, кто интересуется Titanium, я должен сказать, что у них нет очень хорошей документации, некоторые классы, свойства, методы отсутствуют. Но многое "документировано" в их примере приложения KitchenSink, так что это не так уж плохо.

гёдзо кудор
источник
5

Насколько я понимаю, PhoneGap предоставляет API-интерфейсы Javascript для большинства API-интерфейсов iPhone.

Титаниум кажется проще для веб-разработчиков. Это простой XML-файл для создания основного приложения TabView, а затем все в области содержимого контролируется HTML / JS. Я также знаю, что Titanium обеспечивает доступ к некоторым из фреймворков через JavaScript (в частности, к информации о местоположении, идентификатору телефона и т. Д.).

ОБНОВЛЕНИЕ: Titanium добавил Maps API в версии 0.8 своего фреймворка.

Джексон Миллер
источник
Согласно «Titanium кажется более легким для веб-разработчиков». заявление. Вы имеете в виду легче, чем родное право? Поскольку PhoneGap, кажется, больше соответствует кому-то с опытом веб-разработчика, чем Titanium ...
Сергей
4

Вы должны изучить цель c и программировать нативные приложения. Не полагайтесь на то, что, по вашему мнению, облегчит жизнь. Apple позаботилась о том, чтобы проще всего было использовать их родные инструменты и язык. Для ваших 100 строк javascript я могу сделать то же самое в 3 строках кода или вообще без кода в зависимости от элемента. Посмотрите несколько уроков - если вы понимаете javascript, тогда задача c не сложна. Обходные пути печальны, и Apple может подключить вас к сети в любое время.

TouchGameDev
источник
3
Apple может отключить ... вот что я имею в виду
Микки Шайн
6
Цитата: «Apple позаботилась о том, чтобы самый простой способ - использовать их родные инструменты и язык». Они действительно не имеют. Если бы они хотели это сделать, они бы предоставили, скажем, поддержку Python. Будет сбор мусора (который сам по себе уменьшит частоту сбоев - большинство приложений для iPhone написаны ужасно). Я копаю ObjC, и, как и вы, я бы лучше использовал его, чем js, но это был не вопрос оп. Кроме того, MonoTouch делает разработку проще, чем любой из этих вариантов. Я могу создать свойство в одну строку; получить ссылку на папку Document с одной строкой ... и так далее. Кусочки Apple могут быть значительно улучшены.
Рори Блит
6
Хорошее решение для Apple - предоставить собственную альтернативу ObjC. Что-то для приложений, которым не нужен уровень контроля, который дает вам ObjC. Особенно для корпоративных приложений, где разработчики должны сосредоточиться на функциональности, а не на подсчете ссылок и атрибутах свойств. Или, по крайней мере, автоматизировать большую часть этого с Xcode и компилятором. Дайте мне переключатель, который позволяет сделать некоторые предположения, и это можно обойти в коде, где разработчик выбирает (например: сохранить и @synthesize свойства моего объекта по умолчанию - и, как "настоящий" ObjC 2.0, создать мои вспомогательные локальные объекты для меня). И т.д.
Рори Блит,
2
По сути, давайте напишем приложения для iPhone на C #. :)
Джастин
3

Из упомянутых вами решений ни одно из них не дает вам прямого доступа к инфраструктуре MapKit, представленной в OS 3.0.

Поскольку HTML-виджеты Карт Google не так хороши, как MapKit (например, см. Google Локатор), вам, вероятно, лучше всего разработать собственное сенсорное приложение Cocoa или выбрать решение, которое вы можете расширить, чтобы добавить интеграцию MapKit. PhoneGap является расширяемым таким образом (он с открытым исходным кодом, так что это по умолчанию), и некоторые другие решения также могут быть.

редактировать: Titanium теперь имеет поддержку MapKit

rpetrich
источник
Спасибо. Но есть ли существенная разница между PhoneGap и Titanium?
Микки Шайн
1
MapKit уже давно доступен в Titanium.
Джейни
@jhaynie: Спасибо. Я пересмотрел этот ответ, чтобы отразить, что у Titanium теперь есть поддержка (не было, когда он был написан в сентябре)
rpetrich
1

Я пробовал корону. Это было хорошо, пока я не обнаружил, что он не поддерживает потоковое аудио в формате mp3. Итак, я остановился прямо там. Я думаю, что если я действительно хочу стать разработчиком приложений для iphone, я должен изучить obj c. Все, что я хотел сделать приложение, которое имеет список радиостанций, и вы нажимаете на них, оно начинает играть.

netmastan
источник
2
Corona поддерживает воспроизведение файлов MP3 ( developer.anscamobile.com/reference/index/mediaplaysound )
Люк Степневский,