Mac および Windows 用の GUI アプリケーションを作成する予定です。2 つのプラットフォーム間でできるだけ多くのコードを共有できるように、言語、ライブラリ、ビルド ツールなどのテクノロジの選択について調査を行ってきました。
主な要件は次のとおりです。
- Mac App Store の要件を満たしています。
- Mac と Windows の両方でネイティブなルック アンド フィール。
- Mac では Quartz Window Services を、Windows では Windows API を呼び出す必要があります。
- SQLite を使用してデータを保存および読み取ります。
投稿の長さが制御不能になったので、質問を要約として一番上に移動し、コンテキストはさらに下に移動しました。
質問
- 私は、プログラミングを容易にするために Python を使用することに傾いています。これは私にとって正しい選択ですか?そうでない場合、なぜC++の方が優れているのでしょうか? もしそうなら、py2app と pyobjc をセットアップして Python をコンパイルし、GUI 用に XIB をロードするスタンドアロン アプリをビルドするにはどうすればよいですか?
- よりネイティブなインターフェイスのために、Mac でクロスプラットフォームの GUI ライブラリを使用すべきではないというのは正しいですか? それとも、QT や wxWidgets を使用したほうがよいのでしょうか?
- 私が間違った道を進んでいる場合、および/または私が検討していないより良い解決策がある場合は、それらを指摘してください:)
これまでの私の研究と結論
GUI ライブラリ
Mac の場合、クロスプラットフォームの GUI ライブラリ (QT など) の使用を除外しました。Mac でネイティブのルック アンド フィールを提供できないように思われるからです (場違いに見えたり、Apple のヒューマン インターフェイス ガイドライン)。wxWidgets はネイティブ ライブラリを使用すると述べていますが、この投稿では、wxPython がプライベートな Objective-C 呼び出しを使用する可能性があり、Mac App Store で承認される可能性は低いと述べています。最後に、見た目が正しいとしても、2 つのプラットフォームでレイアウトを変える必要があるでしょう。
したがって、Windows GUI に wxWidgets を使用することをまだ検討していますが、Mac インターフェイスにはネイティブの Cocoa GUI ライブラリを使用する予定です。
言語
メイン アプリケーション ロジックの言語として、C++ または Python のいずれかを選択するのが最善のようです。C++ より Python でクロスプラットフォーム コードを書く方が明らかに簡単ですが、常にトレードオフがあります。
パイソン
長所:記述がはるかに速く、保守が容易です。開発時間を大幅に短縮できる堅牢なクロスプラットフォーム ライブラリ。
短所: Python を使用するということは、(svn からわかるように) 1 年以上更新されていない PyObjC を使用することを意味し、Xcode および OSX の将来のバージョンで引き続き機能するかどうかは不明です。また、PyObjc と py2app を使用して適切なビルド構成をセットアップし、Xcode の外部で GUI に xib を使用することは悪夢です。
C++
長所: Mac と Windows の両方でビルド構成と依存関係を簡単に設定できます。私の場合、パフォーマンスは大きな問題ではありませんが、Python よりもはるかに高速に実行されます。
短所:私は C++ を知りません。私は C がかなり得意ですが、それが優れた C++ を作成するのに役立つとは思えません。クロスプラットフォームの C++ を書くのはずっと難しいという一般的な印象を持っていますが、それは間違っているかもしれません。あいまいなバグに関する投稿がたくさんあります。ブーストは有望に見えますが。
ビルドツール
メイン言語として C++ を使用する場合の設定は、両方のプラットフォームで十分に簡単に思えます。Python を使用する場合、GUI に wxWidgets を使用し、デプロイに py2exe を使用するため、Windows でのセットアップも簡単に思えます。
Mac と Python に関しては、標準的な選択は pyobjc と py2app のようです。残念ながら、QT や wxWidgets ではなく XIB と Cocoa ライブラリを使用する py2app のビルド構成の例は見つかりませんでした。PythonファイルとアプリケーションリソースをXcodeプロジェクトディレクトリの外に配置したいので、Xcodeでビルドを管理したくありません。これにより、Windows のセットアップが大幅に簡素化され、ファイル ツリーがすっきりします。
QTに関する編集: QTデザイナーで数時間遊んで、QTをもう一度見てみました。基本的な UI 要素 (ボタン、テキストフィールド、ラベル) は、Cocoa 要素と同じように見えます。QWindow と QTabView をいくつかの要素で簡単にまとめると、Cocoa アプリのように見えます。ただし、いくつかのマイナス点がありました。
- 弾性スクロールがないなど、動作が少しずれています。QTextEdit には、フォーカスを示す青い影がありません。
- QTableView は、対応する Cocoa とあまり似ていません。
- 要素間の間隔、親ビューまでの間隔は、ガイドラインに従っていません。ほとんどの場合、レイアウトを微調整することで修正できますが、どこでも行う必要があり、Xcode で無料で入手できます。
- インスペクタを作成するための HUD 要素がありません。これは、少なくとも Mac 側では、私のアプリで必要になる可能性が非常に高いものです。
- アクセシビリティのサポートが不十分。
私はうるさいことを知っていますが、良いUIを作るにはうるさい必要があります. 全体的に QT は Windows 向けの優れたソリューションのようですが、私は Mac 向けの Cocoa に固執すると思います。既存のプログラムについてさらに調査を行ったところ、VLC、Chrome、およびTransmissionはすべて Mac 用のネイティブ GUI を作成し、VLC は Windows 用の QT を使用し、Chrome はカスタム フレームワークを使用し、Transmission は Linux 用の GTK+ および QT を使用することがわかりました。
Mac 用の Cocoa GUI と Windows 用の Qt または wxWidgets を使用することに決めたと思いますが、共有ロジックのために C++ と Python に分割されています。