it-swarm.com.ru

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

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

-Г.

32
armahg

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

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

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

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

49
Sherm Pendley

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

Правка: Real Studio сейчас Xojo .

16
Robert S.

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

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

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

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

6
Jamie Love

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

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

4
dkretz

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

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

4
Jason Baker

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

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

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

3
Jay

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

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

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

3
titaniumdecoy

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

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

3
BenB

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

3
TheMarko

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

2
armahg

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

2
Paul Betts

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

1
Malkocoglu

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

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

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

1
orj

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

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

0
Dirk Stoop

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

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

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

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

0
Gustavo Rubio

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

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

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

0
Armstrongest

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

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

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

0
jpo38

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

0
James Van Huis

Вы можете создавать фантастические кроссплатформенные приложения с помощью 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
0
Swapnonil Mukherjee

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

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

0
MusiGenesis

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

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

0
pieSquared