Как писать приложения для разных платформ? Linux, Mac, Windows и мобильные платформы

Мы хотим написать клиент для онлайн-сервиса, который должен быть доступен на как можно большем количестве платформ. Этот вопрос о том, какой язык программирования и фреймворк мы должны использовать для создания этого клиента. Требуются следующие платформы: Linux, Mac, Windows, iOS (iPhone, iPod, iPad) и Android. Чем больше, тем лучше.

Для мобильных платформ есть Titanium Mobile. . Я еще не пробовал эту штуку, на веб-сайте говорится, что вы можете разрабатывать как для iOS, так и для Android, используя веб-навыки, такие как Javascript. Я еще не знаю, сможете ли вы выполнить развертывание для обеих платформ, используя ОДИНАКОВЫЙ код. Было бы здорово!

Существует также Titanium Desktop, но мне не нравится идея, что полный исходный код используется совместно с окончательным приложением. Titanium делает это и для мобильных устройств, но изменить приложение, загруженное через App Store, не так просто.

Итак, как еще можно создать приложение, работающее как минимум на трех основных настольных платформах? Я думал, что c# с моно будет подходящим вариантом, но я только что понял, что вам нужно использовать моно с MonoMac, чтобы опубликовать его в Mac App Store и использовать такие вещи, как Growl. И поскольку MonoMac, естественно, доступен только для Mac, снова невозможно развернуть моноприложение на всех платформах, не переписав его, по крайней мере, для Mac. И было бы неплохо, если бы приложение выглядело «нативно» на всех платформах. Gtk# просто не выглядит хорошо на Mac. Это «хорошо» в Windows и отлично в Linux.

Я знаю, что мы могли бы использовать Objective-C для iOS и Mac, Java для Android, C#.net для Windows и C#.mono для Linux, но главное, что мы не хотим писать одно и то же приложение на множестве разных языков. . Это сильно усложнило бы разработку и обслуживание.

И мы предпочитаем языки с синтаксисом в стиле C, которые намного легче изучать нам, веб-разработчикам PHP. Кстати: нам не нравится Air, и я не уверен насчет Java, так как никогда ею не пользовался, но она также не выглядит «родной» и кажется довольно медленной.

Изменить:

Просто примечание: не будет проблемой создать собственную форму для каждой платформы, если хотя бы оставшийся код будет одинаковым. Можно ли использовать MonoMac, Gtk# и Win Forums в одном приложении C#? И я бы предпочел C# C++, так как у меня нет навыков в C++, поэтому сначала мне нужно проверить, насколько сложно писать на Qt.

Еще одно замечание: мы не планируем тратить много денег, и, поскольку нам нужно платить за программы Apple для разработчиков, мы хотим использовать бесплатные или дешевые технологии. Желательно с открытым исходным кодом.


person Eliasdx    schedule 15.03.2011    source источник
comment
Просто примечание: не будет проблемой создать собственную форму для каждой платформы, если хотя бы оставшийся код будет одинаковым. Можно ли использовать MonoMac, Gtk# и Win Forums в одном приложении C#? И я бы предпочел C# C++, так как у меня нет навыков в C++, поэтому сначала мне нужно проверить, насколько сложно писать на Qt. Спасибо.   -  person Eliasdx    schedule 16.03.2011


Ответы (7)


Просто используйте C# для всего вышеперечисленного.

Проект mono будет охватывать Mac и Linux, а monodroid удовлетворяет ваши требования к Android и monotouch позаботится об iPod/iPad/iPhone.

Что касается пользовательского интерфейса - mono имеет полную поддержку пространства имен System.Windows.Forms, поэтому вам не нужно использовать GTK#, если вы этого не хотите.

Я не думаю, что мне нужно упоминать о поддержке Windows;)

person Oded    schedule 15.03.2011
comment
@AbiusX - Какие еще есть варианты? И на чем вы это основываете? - person Oded; 16.03.2011
comment
@AbiusX - вы не отвечаете, почему C# не является хорошим выбором. Вы просто говорите мне свое мнение. - person Oded; 16.03.2011
comment
@AbiusX: Но на чем вы основываете свой выбор, поверьте мне, это не лучший выбор? - person Mike Cole; 16.03.2011
comment
Обратитесь к проценту использования языков программирования в Википедии, а также к количеству программного обеспечения, разработанного с помощью C # и Qt (также в Википедии), и, конечно же, к производительности Qt по сравнению с C # (это даже указано на веб-сайте XNA). - person AbiusX; 16.03.2011
comment
MonoTouch довольно дорог, если вы используете его для коммерческого приложения, и нет информации о ценах на монодроиды, возможно, он будет стоить столько же, сколько MonoTouch. Плюс планы разработчиков iOS / Mac. Много денег... - person Eliasdx; 16.03.2011
comment
@Eliasdx - В своем вопросе вы ничего не упомянули о стоимости ... Я должен был догадаться? - person Oded; 16.03.2011
comment
@Eliasdx - Просто говорю, что если вас беспокоит стоимость, вы должны указать это в своем вопросе. - person Oded; 16.03.2011
comment
Обе эти ссылки больше не загружаются. - person Aaron Franke; 29.06.2018

Если вы действительно хотите поддерживать все эти платформы из одного приложения, лучше всего будет создать веб-приложение. С HTML5 такое приложение можно даже кэшировать на устройстве и использовать, когда соединение недоступно. Кроме того, эта стратегия позволит настроить пользовательский интерфейс в зависимости от устройства, на котором запущено приложение.

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

person Caleb    schedule 15.03.2011
comment
+1. Ты подтолкнул меня на это. На самом деле, это единственный вариант настоящей кроссплатформенной работы, и даже это будет зависеть от того, насколько хорошо браузер поддерживает то, что вы пишете, и от того, как настроена ОС/устройство. - person David; 16.03.2011
comment
Каждый ищет способ писать нативные приложения для всех основных мобильных платформ без дополнительной работы. Его просто нет. Многие поставщики обещают подобные вещи, но то, что они должны предоставить, — это наименьший общий знаменатель «платформа внутри платформы», и вы обычно привязаны к их серверам (и их бухгалтерскому отделу). Если вы собираетесь использовать какую-то общую платформу, вы могли бы, по крайней мере, сделать это с открытыми стандартами на своем собственном сервере! И если OP - разработчик PHP, у них уже есть хорошее начало. Ваше здоровье. - person Caleb; 16.03.2011
comment
Без шуток. Кроссплатформенная разработка для мобильных устройств — это кошмар. Я вспоминаю ранние веб-дни, когда у Netscape были Layers и не было двух одинаково работающих браузеров, и я думал, что кросс-браузерная совместимость была легкой задачей по сравнению с попыткой решить, что делать с нативными мобильными приложениями. По крайней мере, тогда были общие элементы, которые работали ПОЧТИ во всех браузерах. Я сижу так долго, как могу, и придерживаюсь сети, даже если это оставляет меня в пыли. (Но на всякий случай я останавливаюсь на своей Java.) - person David; 16.03.2011
comment
Мы также собираемся написать веб-клиент, но нам нужно реальное приложение. Загрузка изображений, запись голоса, push-уведомления… просто невозможно на iOS с помощью Safari. - person Eliasdx; 16.03.2011

Лучшее решение, с которым я сталкивался за последние годы, — это Qt SDK. Отличная поддержка всех основных платформ, Symbian, OS X, Linux, Windows, Windows CE (мобильная версия), частичная поддержка Android и iOS и т. д.

Его основа — C++, но доступны привязки почти для каждого языка (например, C#). Много помощи и поддержки также покрыто.

Основные библиотеки Qt очень быстрые и обширные, и весь рабочий стол KDE (в Linux) сделан с их помощью. Известные программы, такие как VLC и VirtualBox, сделаны в Qt.

person AbiusX    schedule 15.03.2011
comment
Планируется ли поддержка Windows Phone 7? - person ukhardy; 16.03.2011
comment
Я понятия не имею, проверьте веб-сайт Qt. Но поскольку я поддерживаю его чистый C++, его можно легко портировать. - person AbiusX; 16.03.2011
comment
Как настроить среду разработки Qt и iPhone с помощью C# в Linux? - person Aaron Franke; 29.06.2018

Еще один относительно новый способ кросс-платформенной разработки – использовать Eto.Forms с открытым исходным кодом, который позволяет иметь одну кодовую базу пользовательского интерфейса, предназначенную для собственного инструментария каждой платформы. Это уровень абстракции пользовательского интерфейса, предназначенный для GTK#, MonoMac/OSX, WinForms и WPF.

Также в разработке находится порт для iOS.

person Curtis    schedule 21.01.2012

Java звучит как лучший вариант. Он кроссплатформенный, простой в понимании, имеет огромную пользовательскую базу и на нем основан андроид.

person pstanton    schedule 15.03.2011
comment
Я не думаю, что Java поддерживается на iOS. - person Roman Zenka; 16.03.2011
comment
Android также не поддерживает стандартные библиотеки Java, он использует только синтаксис. - person Ben Voigt; 16.03.2011
comment
Наряду с отсутствием поддержки на некоторых портативных устройствах и очень тяжелыми и медленными требованиями к интерпретатору виртуальной машины, Java является очень ортогональным языком программирования и, следовательно, не подходит для быстрого/продвинутого программирования. - person AbiusX; 16.03.2011
comment
Я считаю, что официальной поддержки Java на iPhone нет. - person ukhardy; 16.03.2011
comment
есть проект для кросс-компиляции на iphone - person pstanton; 16.03.2011
comment
@AbiusX - вопреки распространенному мнению (и фанатикам Qt), виртуальная машина Java на самом деле не такая уж «медленная» - даже год назад, поскольку именно так давно вы ответили. Это может быть медленнее в зависимости от выполняемых операций, но вы, похоже, говорите в общем смысле. Что касается того, где Java является ответом как хорошим кросс-платформенным решением (языком), я должен сказать, что не согласен. ИМХО, просто пишите оба нативно. Разработка под Android и iOS довольно проста для легких клиентов. Затем выберите моно для настольных приложений. Если вы хотите развернуть код везде, приготовьтесь потратить большие $$$ - person Lo-Tan; 10.07.2012

В зависимости от того, нужен ли вам режим автономного взаимодействия, похоже, вам следует разработать веб-приложение. Вы можете разработать мобильную версию и версию для ПК и, таким образом, поддерживать все вышеперечисленные платформы. Посмотрите на приложение youtube для Iphone, оно сохраняет ту же функциональность, что и приложение для iphone, но чисто html. Кроме того, браузеры с поддержкой html5 также могут работать в автономном режиме.

person Assaf Karmon    schedule 15.03.2011

Как бы безумно это ни звучало, попробуйте Flash/Flex — это кросс-платформа, код один раз, запускается везде, теперь компилируется в собственный код, например, на Android и iOS, а также плеер 10.1 поставляются повсюду. Мне пришлось решить именно эту проблему, и когда Flash Builder Burrito обслуживал мобильные устройства, после некоторого времени работы с ним я переключился с гибрида C#/Flash на Flash только для клиентов. (Наш бэкенд — C#/Node/C++ и т. д.).

В зависимости от ваших сроков и потребностей, это то, на что стоит обратить внимание.

Несколько случайных ссылок для ознакомления:

Блог опубликовать информацию о производительности и видео для одного приложения на нескольких устройствах

Разработка флеш-приложений и гибких приложений

person neo    schedule 01.04.2011