Подтвердить что ты не робот

Создание кросс-платформенного приложения Windows, Mac OS X

Я хотел бы создать приложение, работающее как на Windows, так и на Mac OS X. Я бы тоже как это использовать лучшее из того, что платформа, на которой он работает, может предложить в отношении Frameworks, API и т.д. Есть ли способ сделать это без необходимости писать код Objective-C, а затем код С#? Я думал о С++ в качестве альтернативы, но мне было интересно, есть ли что-нибудь еще. Приложение будет основано на графическом интерфейсе (хотя я точно не знаю, что он еще сделает)

-G.

4b9b3361

Ответ 1

Хорошо, что вы думаете о переносимости на ранней стадии - это намного сложнее "закрепить" после факта.

Существуют различные кросс-платформенные комплекты, но IMHO все они немного отстают от предоставления "родного" вида и ощущения на всех поддерживаемых платформах. На Mac (что я использую) сторонники таких наборов всегда хотят упомянуть, что они используют собственные средства управления. Это хорошее начало, но это не вся поездка. Другие вопросы, рассмотренные в Руководства по человеческому интерфейсу Apple, включают в себя то, как должны быть организованы элементы управления, как обозначать ярлыки кнопок, какие стандартные сочетания клавиш следует использовать, и др.

Даже Microsoft должна была узнать трудный путь об опасностях, связанных с попыткой написать кросс-платформенный графический интерфейс, с злополучным Word 6.0 для Mac.

IMHO, лучший подход - использовать конструкцию MVC, с модельным уровнем, написанным на стандартном портативном С++, и представлением и контроллером слоев с использованием встроенного инструментария для каждой платформы. Для версии Mac Carbon и С++ всегда были интересной опцией, которая теперь больше не поддерживается, поэтому вы хотели бы использовать Cocoa, используя Objective-C в представлении и Objective-C ++ в своих контроллерах, чтобы установить мост языковой разрыв. Ваша версия Windows может также скомпилировать вашу модель как "управляемый С++" и использовать любой язык .NET для контроллеров и представлений.

Ответ 2

Посмотрите Real Studio. Шутки в сторону. Вы можете написать приложение в Real Studio и развернуть его в Windows, Mac OS X и Linux.

Изменить: настоящая студия теперь Xojo.

Ответ 3

wxWidgets - это кросс-платформенная библиотека С++, которая является практическим выбором. Но я согласен с Sherm - все библиотеки кроссплатформенности действительно создают более низкий интерфейс для собственных приложений.

У каждой ОС была сложнее использовать разную семантику пользовательского интерфейса (заказы кнопок и т.д.), поэтому, когда вы можете добиться хорошего внешнего вида, получить "чувство" прямо на каждой платформе через один уровень представления практически невозможно.

В зависимости от того, что вы в конечном итоге делаете, вы можете найти веб-интерфейс лучше (например, встраивать веб-сервер в приложение и показывать страницы HTTP в браузере). Тогда вы избегаете проблем L & F!

В качестве альтернативы вы можете решить, что у вас будет совсем нестандартный L & F, и перейдите к чему-то вроде wxWidgets или Tcl/Tk.

Ответ 4

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

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

Ответ 5

Мое предложение, используйте Python. Python интегрируется как с Objective-C, так и с С# (IronPython). Просто избегайте новых качеств нового языка, и вы в порядке.

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

Ответ 7

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

Существует ряд других подобных проектов, но они являются одними из лучших и более известных. Для остальной части вашего кода все, что угодно, зависит от конкретной системы, конечно, должно быть написано с использованием отдельного кода на С++ для взаимодействия с API Win32 или системным API OS X, где это необходимо. При этом вы можете обнаружить, что можете избежать большей части системного кода, используя обширные библиотеки, такие как Boost.

Другими предложениями будут такие вещи, как использование файла конфигурации вместо реестра Windows или файла plist на mac. Вместо этого стремитесь для платформы-агностических подходов, где это возможно, чтобы свести к минимуму места, где вам нужно писать код с помощью системных API.

Ответ 8

Вы должны использовать лучшие инструменты, доступные для каждой ОС.

Код C/С++ можно отделить от GUI и использовать в каждой отдельно разработанной программе.

Прежде чем принимать решение, взгляните на кросс-платформенные приложения, разработанные с помощью переносных наборов инструментов, таких как Qt или wxWidgets. По моему опыту они никогда не отшлифованы, как их родные коллеги, особенно на Mac.

Ответ 9

Предстоящий QT-Creator, возможно, стоит посмотреть: текст ссылки

Ответ 10

Если вы разработчик Windows, используйте либо Qt, либо С# Winforms; если вы разработчик Mac, вы можете попробовать Cocotron (http://www.cocotron.org/), но он не на 100% закончен, хотя коммерческие приложения были отправлены вместе с ним.

Ответ 11

спасибо за все ваши ответы. Я занимаюсь некоторыми исследованиями и играю с WPF и CAnimation и т.д. Похоже, что использование модели C/С++ и индивидуальный графический интерфейс для каждой платформы - лучший способ. Спасибо за вашу помощь.

Ответ 12

Также проверьте fltk, wxWidgets очень хорош и богат, но также очень большой...

Ответ 13

Как уже упоминалось, возможно создание привлекательного кросс-платформенного графического интерфейса в Java как на Windows, так и на Mac. Однако, если вы хотите, чтобы ваше приложение сочеталось и вел себя так, чтобы оно "ощущалось" как приложение, разработанное с нуля для платформы, на которой оно работает, вам действительно нужно разработать GUI и пользовательский интерфейс для каждой версии приложение отдельно.

Если вы проанализируете, что будет делать ваше приложение, и подумайте, что есть значительная часть кода/логики, которые могут быть разделены между платформами, тогда пишите эту часть переносимым способом на языке, который доступен в обеих системах. C, С++, Java, Python, Ruby и т.д. Если не существует значимой части, то есть большая часть кода будет для GUI, тогда есть меньше случаев для обмена любым кодом вообще.

В случае, когда есть значительная часть общего кода, я бы предложил изучить Python и Ruby в качестве языков реализации, так как есть привязки Cocoa для этих языков на Mac и Windows с использованием IronPython и IronRuby вы можете использовать повторное использование этого кода в приложении .Net.

Ответ 14

Пока вы не привязаны к языкам, похоже, что Java - хороший кандидат. Сопоставьте это с SWT для графического интерфейса, и у вас будет приложение для поиска на любой ОС, которое вам нравится.

Ответ 15

Я планирую сделать аналогичную вещь, и я подумываю о создании приложения С#/.NET Windows, а затем перенес его в OS X с помощью Mono. В моем приложении уже есть полностью (за исключением кнопок заголовка и кнопок угла) пользовательский интерфейс, поэтому различия в косметических ОС не должны сильно меня сильно влиять.

Я не уверен, что вы имеете в виду, используя лучшее из каждой платформы с точки зрения фреймворков и API и т.д. В целом, написание кросс-платформенного приложения означает запись в наименьший общий знаменатель и, следовательно, означает, что вы не получаете лучшее из каждой платформы.

Ответ 16

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

Моно, с другой стороны, может быть немного сложнее переносить, поскольку вам придется писать по крайней мере gui дважды, если вы планируете иметь собственные виджеты (либо winforms, либо GTK для Windows и CocoaSharp для Max), но вы можете написать бэкэнд только один раз и разработать интерфейс для каждой платформы.

Как я уже сказал, инструментальные средства Java GUI могут не чувствовать себя "родными" внутри OSX или даже в Windows, но они наверняка работают на обеих платформах, вы можете использовать Swing или AWT.

Что касается mono, вы можете использовать GTK или Winforms для обоих окон и OSX, но они все равно не будут чувствовать себя родными, но вы можете использовать CocoaSharp, которые привязываются к структуре Cocoa, но я не уверен в статусе проект (чтение: поддержка функций)

Ответ 17

Я второй Java. Он разработан как кросс-платформенное решение.

Другие упомянули Adobe Air.

Аналогично Adobe Air - Silverlight. Я считаю, что это (или будет) полностью перекрестная платформа.

Ответ 18

Вы можете создавать фантастические кросс-платформенные приложения с Java Swing. Это требует немного больше усилий, чтобы научиться этому.

Здесь рассмотрим некоторые из этих ссылок.

Ответ 19

Ребята из Magnetism Studios имеют хороший писать на Cocotron для создания исполняемого файла Windows с Xcode.

У меня нет опыта работы с Cocotron, но если мне нужно было написать приложение Windows с фоном разработки Mac, это было бы первым, что я попробовал.

Ответ 20

Если вы выберете язык С++, я определенно рекомендую для этого Qt. Ваше приложение может быть развернуто под Windows и Mac по требованию в OP, но также Linux, а теперь с последней версией на смартфонах с использованием iOS, Windows RT и Android.

Он хорошо документирован и очень активен в Интернете (в том числе на SO).

Единственной негативной точкой, которую я вижу, является инструмент Qt creator, который, IMHO, менее удобен для пользователя, чем исторические инструменты (например, Visual Studio, например), но на самом деле вы не вынуждены использовать его в качестве среды разработки Qt.

Ответ 21

Для полноты теперь стоит добавить Unity в список.

Было бы очень сложно создать собственное приложение для любой платформы, а общие инструменты GUI далеки от зрелых. Но это не просто игровой движок, и вы можете писать в С#/Mono, использовать приличный набор libs и развертывать в Win и OSX довольно безболезненно.