Ответ 1
Обзор
Как сообщается Тим Андерсон
Кросс-платформенная разработка - это большая проблема, и она будет продолжаться до тех пор, пока не наступит день, когда все используют одну и ту же платформу. Android? HTML? WebKit? IOS? Окна? Xamarin? Титановый? PhoneGap? Corona? ЕСС.
Иногда я слышу, что он сказал, что существуют по существу два подходадля кросс-платформенных мобильных приложений. Вы можете использовать встроенную браузера и напишите веб-приложение , завершенное как родное приложение, так как в Adobe PhoneGap/Cordova или аналогичный подход Sencha, или вы можете использовать кросс-платформенный инструмент , который создает собственный приложения, такие как Xamarin Studio, Appcelerator Titanium или Embarcardero FireMonkey.
Однако во второй категории существует разнообразие. В частности, они различаются в зависимости от степени, в которой они абстрагируют пользователя интерфейс.
Вот компромисс. Если вы создаете свою кросс-платформенную структуру, вы может заставить ваше приложение работать практически одинаково на каждой платформе. Если вы используете дизайн пользовательского интерфейса на всех платформах, сложно Сделайте свой дизайн одинаково правильным во всех случаях. Это может быть лучше принять подход, принятый большинством игр, используя дизайн, который отличительные для вашего приложения и сделать добродетелью его согласованности в платформ, хотя он не имеет собственного внешнего вида и любая платформа.
edit Xamarin v3 в 2014 году начал предлагать выбор Xamarin.Forms, а также чистый родной, который все еще следует за философия, упомянутая здесь (освободилась от встроенного редактирования, потому что такой отличный ответ)
Xamarin Studio, с другой стороны, не пытается предоставить общую инфраструктуру графического интерфейса:
Мы не пытаемся предоставить слой абстракции пользовательского интерфейса, который работает на всех платформах. Мы считаем, что это плохой подход, который приводит к самые низкие общие знаменательные пользовательские интерфейсы. (Нат Фридман Тиму Андерсону)
Это правильно; но недостатком является стремление поддерживать два или более пользовательских интерфейсов для вашего приложения.
Сравнение о PhoneGap и Titanium хорошо сообщается в блоге Kevin Whinnery.
PhoneGap
Цель PhoneGap - разрешить веб-приложения на основе HTML. развертываться и устанавливаться как собственные приложения. Сеть PhoneGap приложения обернуты в оболочку собственного приложения и могут быть установленных через собственные приложения для нескольких платформ. Кроме того, PhoneGap стремится предоставить общий собственный набор API который обычно недоступен для веб-приложений, таких как базовые доступ к камере, контакты устройства и датчики, которые еще не браузер.
Чтобы разработать приложения PhoneGap, разработчики создадут HTML, CSS, и JavaScript в локальном каталоге, так же, как разработка статический веб-сайт. Подход к качеству пользовательского интерфейса собственного качества в браузер - нетривиальная задача - в Sencha работает большая группа веб-сайтов программисты, посвятившие полный рабочий день решению этой проблемы. Даже поэтому на большинстве платформ в большинстве браузеров сегодня производительность пользовательского интерфейса с собственным качеством и отзывчивость просто не возможна, даже с каркасом, продвинутым как Sencha Touch. Это браузер уже "достаточно хорош"? Это зависит от ваших требований и чувств, но он, несомненно, менее хорош, чем собственный пользовательский интерфейс. Иногда гораздо хуже, в зависимости от браузера.
PhoneGap не так по-настоящему кросс-платформенный, как можно было бы верить, не все функции одинаково поддерживаются на всех платформах.
-
Javascript - это не язык программирования приложений, слишком много глобальных взаимодействий, а разные библиотеки не очень хорошо сосуществуют. Мы потратили много часов, пытаясь заставить knockout.js и jQuery.mobile хорошо играть вместе, и у нас все еще есть проблемы.
-
Фрагментированный ландшафт для фреймворков и библиотек. Слишком много вариантов, и слишком много не достаточно зрело.
-
Как ни странно, для нужд нашего приложения может быть достигнута достойная производительность (но не с jQuery.Mobile). Мы попробовали jqMobi (не очень зрелый, но быстрый).
-
Очень ограниченная возможность взаимодействия с другими приложениями или возможностями cdevice, и в любом случае это не будет кросс-платформой, так как в HTML5 нет никаких стандартов в HTML5, за исключением нескольких, таких как геолокация, камеры и локальные базы данных.
Аппликатор Titanium
Цель Titanium Mobile - обеспечить высокоуровневую, межплатформенную среду JavaScript и API для мобильных (сегодня мы поддерживаем iOS, Android и Windows Phone. Титан фактически имеет больше общего с MacRuby/Hot Cocoa, PHP или node.js, чем с PhoneGap, Adobe AIR, Corona или Rhomobile. Титан построен на двух утверждениях о мобильная разработка: - Существует ядро мобильных API разработки, которые могут быть нормализованы на разных платформах. Эти области должны быть нацелены на повторное использование кода. - Существуют специфичные для платформы API-интерфейсы, пользовательские интерфейсы и функции, которые разработчики должны учитывать при разработке для этой платформы. Для этих вариантов использования должен существовать определенный для платформы код, чтобы обеспечить наилучший возможный опыт.
Итак, по этим причинам Титан не является попыткой "написать один раз, работать везде" . То же, что и Xamarin.
Титан собирается сделать следующий шаг в направлении, аналогичном таковому Xamarin. На практике они будут делать два слоя разной глубины: слой Titanium (в JS), который дает вам пчелу JS-of-Titanium. Если вы хотите перейти на более низкий уровень, создали дополнительный слой (называемый Hyperloop), где (всегда с JS), чтобы перезвонить вам непосредственно на собственные API SO
Xamarin (+ MVVMCross)
Xamarin (первоначально подразделение Novell) за последние 18 месяцев вывел на рынок свою собственную среду IDE и оснастку для Visual Studio. подчеркивающей предпосылкой Mono является создание разрозненных мобильных приложений используя С# при сохранении собственных стратегий разработки пользовательского интерфейса.
В дополнение к созданию визуальной дизайнерской платформы для разработки приложений, у них есть интегрированные комплекты для тестирования, встроенные библиотечная поддержка и хранилище компонентов стиля Nuget. Недавно они предоставил визуальный дизайн iOS через их IDE, освободив разработчика от открытия XCode. В Visual Studio теперь все три платформы поддерживается и набор облачных тестов находится на горизонте.
С самого начала Xamarin предоставил богатый визуальный дизайн Android опыт. Мне еще нужно загрузить или открыть Eclipse или любую другую среду IDE кроме того Xamarin. Что действительно удивительно, так это то, что я могу использовать LINQ для работы с коллекциями, а также для создания пользовательских делегатов и событий что освободит меня от objective-C и ограничений Java. Многие из библиотеки, которые я испортил, как Newtonsoft JSON.Net, работает отлично во всех трех средах.
По моему мнению, есть несколько ОГРОМНЫХ преимуществ, включая
- Собственная производительность
- легче читать код (IMO)
- проверяемость
- общий код между клиентом и сервером
- поддержка (хотя Xam может сделать лучше на bugzilla)
Обновление для меня - это использование Xamarin и MVVMCross в сочетании. Это все еще совершенно новая структура, но она родилась из опыта нескольких других фреймворков (таких как MvvmLight и monocross), и теперь она используется в нескольких выпущенных кросс-платформенных проектах.
Заключение
Мой выбор, зная все эти кадры, заключался в выборе инструмента разработки на основе потребностей продукта. В общем, однако, если вы начнете использовать инструмент, с которым вам удобно (даже если он требует более высоких начальных накладных расходов) после того, как вы будете использовать его навсегда.
Я выбрал Xamarin + MVVMCross, и я должен сказать, что доволен этим выбором. Я не боюсь подходить к Native SDK для обновлений программного обеспечения или видеть ограниченную функциональность системы или самую тривиальную особенность графических элементов. Хороший структурированный код записи (DDD + SOA) очень полезен, чтобы иметь основной проект, совместно используемый с реализацией реализаций С#.
Ссылки и ссылки
- http://www.theregister.co.uk/Print/2013/02/25/cross_platform_abstraction/
- http://kevinwhinnery.com/post/22764624253/comparing-titanium-and-phonegap
- http://forums.xamarin.com/discussion/1003/your-opinion-about-several-crossplatform-frameworks#Comment_3334
- http://azdevelop.azurewebsites.net/?page_id=181
- https://github.com/MvvmCross/MvvmCross
- http://pierceboggan.com/post/51671827932/binding-third-party-objective-c-libraries-in