Создать кроссплатформенное приложение для Windows, Mac OS X - PullRequest
32 голосов
/ 31 октября 2008

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

-G.

Ответы [ 21 ]

49 голосов
/ 31 октября 2008

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

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

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

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

16 голосов
/ 31 октября 2008

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

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

6 голосов
/ 31 октября 2008

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

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

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

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

4 голосов
/ 31 октября 2008

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

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

4 голосов
/ 21 декабря 2008

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

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

3 голосов
/ 31 октября 2008

Для графического интерфейса я бы посмотрел в SDL или QT.

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

3 голосов
/ 31 октября 2008

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

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

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

3 голосов
/ 31 октября 2008

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

3 голосов
/ 31 октября 2008

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

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

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

2 голосов
/ 21 декабря 2008

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

...