web-dev-qa-db-ja.com

クロスプラットフォームのWindows、Mac OSXアプリケーションを作成する

WindowsとMacOS Xの両方で実行されるアプリケーションを構築したいと思います。また、フレームワークやAPIなどに関して、実行されるプラットフォームが提供する最高のものを活用したいと思います。これは、Objective-Cコードを記述してからC#コードを記述する必要はありませんか?私は代替手段としてC++を考えていましたが、他に何かあるのではないかと思っていました。アプリはGUIベースになります(まだ正確にはわかりませんが)

-G。

32
armahg

早い段階で移植性について考えているのは良いことです。事後に「ボルトで固定」するのははるかに困難です。

さまざまなクロスプラットフォームキットが利用可能ですが、IMHOはすべて、サポートされているすべてのプラットフォームで「ネイティブ」なルックアンドフィールを提供するには少し足りません。 Mac(私が使用しているもの)では、そのようなキットの支持者は常に、ネイティブコントロールを使用していることを述べたいと思っています。それは良いスタートですが、それはすべての旅ではありません。 Appleのヒューマンインターフェイスガイドライン で対処されるその他の問題には、コントロールの配置方法、ボタンラベルの表現方法、使用する標準のショートカットキーなどがあります。

Microsoftでさえ 難しい方法を学ぶ Mac用の不運なWord6.0でクロスプラットフォームのGUIを書き込もうとすることの危険性について。

私見、より良いアプローチは、 [〜#〜] mvc [〜#〜] デザインを使用することです。モデルレイヤーは標準のポータブルC++で記述され、ビューレイヤーとコントローラーレイヤーはネイティブツールキットを使用します。プラットフォームごとに。 Macバージョンでは、CarbonとC++は以前は興味深いオプションでしたが、現在はサポートされていません。そのため、ビューでObjective-Cを使用し、コントローラーでObjective-C++を使用して、言語のギャップを埋めるCocoaを使用することをお勧めします。同様に、Windowsバージョンでは、モデルを「マネージC++」としてコンパイルし、コントローラーとビューに任意の.NET言語を使用できます。

49
Sherm Pendley

Real Studio を見てください。真剣に。 Real Studioでアプリを作成し、Windows、Mac OS X、およびLinuxにデプロイできます。

編集:Real Studioは Xojo になりました。

16
Robert S.

wxWidgets はクロスプラットフォームのC++ライブラリであり、実用的な選択肢です。しかし、私はShermに同意します。すべてのクロスプラットフォームライブラリは、ネイティブアプリケーションよりも劣ったUIを作成します。

各OSのUIセマンティクス(ボタンの順序など)が異なるため、見栄えは良くなりますが、1つのビューレイヤーを介して各プラットフォームで「感触」を正しく得ることはほぼ不可能です。

最終的に行うことによっては、Webインターフェイスの方が優れている場合があります(たとえば、アプリにWebサーバーを埋め込み、ブラウザーにHTTPページを提供します)。そうすれば、L&Fの問題を回避できます。

あるいは、完全に非標準のL&Fを使用することを決定し、wxWidgetsやTcl/Tkなどを選択することもできます。

6
Jamie Love

Adobe Flexは、AIRライブラリとともに、この種のことのための単一の高レベルの開発環境を提供するという優れた仕事をします。私は人々が両方のプラットフォームで交換可能に使用するいくつかのユーティリティを書きました。

また、興味があれば、投入されたブラウザへの妥当な移植性も得られます。しかし、その利点を考慮せずに、それはかなり良い解決策だと思います。

4
dkretz

私の提案は、Pythonを使用することです。 PythonはObjective-CとC#(IronPython)の両方と統合されます。言語の新しい最新のEdge機能の多くを避ければ、問題ありません。

確かに、それは無意識のうちに簡単ではありません。しかし、私はそれを主張したいと思いますすべきではありません無意識のうちに簡単です。設計者が、アプリケーションが別のプラットフォームに移植されたときにどのように機能するかを考慮しない場合、非常に明白になります。

4
Jason Baker

C++を使用することにした場合は、プラットフォームごとにGUIコードを複製する必要がないようにする優れたクロスプラットフォームGUIライブラリがいくつかあります。例えば:

他にも同様のプロジェクトがいくつかありますが、それらはより優れた、よりよく知られているプロジェクトの一部です。コードの残りの部分では、もちろん、システム固有のものはすべて、必要に応じてWin32APIまたはOSXのシステムAPIとインターフェイスするために、個別のC++コードを使用して作成する必要があります。そうは言っても、 Boost のような広範なライブラリを使用することで、システム固有のコードの多くを回避できる場合があります。

他の提案は、WindowsレジストリまたはMac上のplistファイルの代わりに構成ファイルを使用するようなものです。代わりに、システムAPIを使用してコードを記述しなければならない場所を最小限に抑えるために、可能な限りプラットフォームに依存しないアプローチを採用してください。

3
Jay

各OSで利用可能な最高のツールを使用する必要があります。

C/C++コードはGUIから分離して、個別に開発された各プログラムで使用できます。

決定を下す前に、QtやwxWidgetsなどのポータブルツールキットを使用して開発されたクロスプラットフォームアプリを確認してください。私の経験では、特にMacで、ネイティブの対応物ほど洗練されたことはありません。

3
titaniumdecoy

GUIについては、SDLまたはQTを調べます。

また、monoをチェックしてください http://mono-project.com/Main_Page

3
BenB

今後のQT-Creatorは一見の価値があるかもしれません: リンクテキスト

3
TheMarko

すべての回答に感謝します。私はいくつかの調査を行い、WPFやCAnimationなどをいじっています。C/ C++モデルを使用しているようで、プラットフォームごとに個別にGUIを実行するのが最善の方法です。あなたのすべての協力に感謝します。

2
armahg

Windows開発者の場合は、QtまたはC#Winformsを使用してください。 Mac開発者であれば、Cocotron( http://www.cocotron.org/ )を試すことができますが、商用アプリが同梱されていますが、まだ100%完成していません。

2
Ana Betts

また、チェックしてください fltk 、wxWidgetsはとても良くてリッチですが、とても大きいです...

1
Malkocoglu

他の人が述べているように、WindowsとMacの両方でJava)で見栄えの良いクロスプラットフォームGUIを作成することは間違いなく可能です。実行しているプラ​​ットフォーム用にゼロから設計されたアプリケーションのように感じます。実際には、アプリケーションのバージョンごとにGUIとユーザーエクスペリエンスを個別に開発する必要があります。

アプリケーションが何をするかを分析し、プラットフォーム間で共有できるコード/ロジックのかなりの部分があることがわかった場合は、両方のシステムで使用可能な言語でその部分を移植可能な方法で記述します。 C、C++、Java、Python、Rubyなど。重要な部分がない場合、つまりコードの大部分がGUI用である場合、コードを共有するケースはほとんどありません。

一般的なコードのかなりの部分がある場合は、実装言語としてPythonおよびRuby)を調べることをお勧めします。これらの言語にはCocoaバインディングがあります。 MacとWindowsでは、IronPythonとIronRubyを使用して、そのコードを.Netアプリケーションでも再利用できます。

1
orj

Magneticism Studiosのスタッフは、Xcodeを使用してWindows実行可能ファイルを構築するための素晴らしい Cocotronの使用について記述 を持っています。

私はCocotronの経験はありませんが、Mac開発のバックグラウンドを持つWindowsアプリを作成する必要がある場合は、これを最初に試します。

0
Dirk Stoop

JavaまたはMonoが頭に浮かびます。 Javaグラフィカルツールキットは最も優れたツールキットではないと主張する人もいるかもしれませんが、少なくとも私にとっては、アプリケーションを複数のプラットフォームに移植し、デプロイの問題を回避する最も簡単な方法のようです。

一方、Monoは、ネイティブウィジェット(Windowsの場合はwinformsまたはGTK、Maxの場合はCocoaSharp)を使用する場合は、少なくとも2回GUIを作成する必要があるため、移植が少し難しい可能性がありますが、作成することはできます。バックエンドは1回だけで、各プラットフォームのフロントエンドを開発します。

私が言ったように、Java GUIツールキットはOSX内でも、Windowsでも「ネイティブ」とは感じられないかもしれませんが、両方のプラットフォームで確実に機能します。SwingまたはAWTのいずれかを使用できます。

モノラルに関しては、WindowsとOSXの両方にGTKまたはWinformsを使用できますが、それでもネイティブとは感じられません。ただし、CocoaフレームワークにバインドされているCocoaSharpを使用できますが、プロジェクトのステータスがわかりません(読み取り:機能サポート)

0
Gustavo Rubio

私は2番目のJavaです。クロスプラットフォームソリューションとして設計されています。

他の人はAdobeAirについて言及しています。

AdobeAirに似ているのはSilverlightです。私はそれが完全にクロスプラットフォームである(またはそうなる)と信じています。

0
Armstrongest

C++言語を選択する場合は、間違いなく Qt をお勧めします。アプリケーションは、OPで要求されているようにWindowsとMacで展開できますが、Linuxでも展開できます。現在、iO、Windows RT、Android)を使用するスマートフォンの最新バージョンで展開できます。

それは十分に文書化されており、Web上(SOを含む)で非常にアクティブです。

私が見る唯一の欠点は、Qtクリエーターツールです。これは、IMHOでは、従来のツール(たとえば、Visual Studioなど)よりもユーザーフレンドリーではありませんが、実際にはIDE)として使用する必要はありません。 Qt開発用。

0
jpo38

言語に縛られていない限り、Javaが良い候補です。GUI用のSWTと組み合わせると、好きなOSでネイティブな外観のアプリを使用できます。 。

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

同様のことを計画しており、C#/。NET Windowsアプリケーションを作成し、Monoを使用してOSXに移植することを検討しています。私のアプリケーションにはすでに完全に(タイトルバーとコーナーボタンを除いて)カスタム描画されたユーザーインターフェイスがあるので、OSの外観の違いは私にあまり影響を与えないはずです。

フレームワークやAPIなどの点で各プラットフォームの長所を活用することの意味がわかりません。一般に、クロスプラットフォームアプリケーションを作成するということは、最小公分母に書き込むことを意味します。したがって、各プラットフォームを最大限に活用することを意味しますnot

0
MusiGenesis

完全を期すために、リストに nity を追加する価値があります。

どちらのプラットフォームでもネイティブに見えるアプリを作成するのは非常に難しく、一般的なGUIツールは成熟していません。しかし、それは単なるゲームエンジンではなく、C#/ Monoで記述し、適切な範囲のライブラリを利用して、WinとOSXにかなり簡単にデプロイできます。

0
pieSquared