2008-10-31 2 views
30

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

-G.

ответ

49

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

Доступны различные кросс-платформенные комплекты, но IMHO все они немного отстают от предоставления «родного» вида и ощущения на всех поддерживаемых платформах. На Mac (что я использую) сторонники таких наборов всегда хотят упомянуть, что они используют собственные средства управления. Это хорошее начало, но это не все путешествие. Другие вопросы, рассмотренные в Apple's Human Interface Guidelines, включают в себя: как должны быть организованы элементы управления, как следует использовать ярлыки кнопок, какие стандартные сочетания клавиш следует использовать и т. Д.

Даже Microsoft должна была learn the hard way об опасностях попыток написать кросс-платформенную GUI, с злополучным Word 6.0 для Mac.

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

3

Для GUI я бы посмотрел SDL или QT.

Кроме того, проверьте моно http://mono-project.com/Main_Page

+2

SDL - отличное решение для игр - но для графического интерфейса? Шутки в сторону? – 2008-10-31 04:09:32

+1

+1 для Qt. Не знаю о SDL. – jop 2008-10-31 04:58:13

0

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

+0

За исключением программ Java, как известно, «плохо» на Mac. Диалоговое окно «Файл» работает не так, как ожидалось, и все просто неправильно. (И я развиваюсь на Java, по крайней мере, некоторое время!) – 2008-10-31 04:54:02

+0

Даже с SWT? Это показалось мне странным, учитывая количество разработчиков, запускающих Eclipse на компьютерах Mac. – 2008-10-31 14:24:47

+0

>> Диалоговые окна файла не работают должным образом Это легко исправлено, просто используйте java.awt.FileDialog вместо javax.swing.JFileChooser – 2009-09-03 12:06:20

16

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

Редактировать: Real Studio теперь Xojo.

+2

Удивительно для меня, что это была единственная реальная опция для таргетинга всех 3 для несколько лет. – bruceatk 2008-11-02 23:26:55

+0

Я не знал, что существует OO, обновленная версия BASIC. NEAT! – EndangeredMassa 2008-12-21 01:12:36

2

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

6

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

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

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

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

0

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

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

3

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

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

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

3

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

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

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

4

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

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

0

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

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

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

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

0

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

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

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

1

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

0

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

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

  1. http://jidesoft.com/products/component.htm
  2. http://www.xerto.com/imagery.php
  3. http://www.jgraph.com/screenshots.html
  4. http://www.javootoo.com/
  5. http://www.formdev.com/screenshots/
  6. http://www.jidesoft.com/products/oss.htm
1

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

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

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

0

Ребята магнетизм Studios имеют хороший write up on using Cocotron построить Windows, исполняемый с Xcode.

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

2

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

4

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

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

0

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

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

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

0

Для полноты, сейчас стоит добавить Unity.

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

Смежные вопросы