Erstellen einer Mac- und Windows-GUI-Anwendung

Ich plane eine GUI-Anwendung für Mac und Windows zu erstellen. Ich habe einige Nachforschungen in Bezug auf die Auswahl der Technologie angestellt, z. B. in Bezug auf Sprache, Bibliotheken und Build-Tools, damit ich so viel Code wie möglich zwischen den beiden Plattformen austauschen kann.

Die Hauptanforderungen sind:

Erfüllt die Anforderungen des Mac App Store.Natives Look & Feel für Mac und Windows.Sie müssen die Quartz Window Services auf dem Mac und die Windows-API auf Windows aufrufen.Speichern und Lesen von Daten mit SQLite.

Die Länge meines Beitrags ist außer Kontrolle geraten, daher habe ich meine Fragen als Zusammenfassung nach oben verschoben, während sich der Kontext weiter unten befindet.

FragenIch neige dazu, Python zu verwenden, um die Programmierung zu vereinfachen. Ist das die richtige Wahl für mich? Wenn nicht, warum wäre C ++ besser? Und wenn ja, wie genau werden py2app und pyobjc eingerichtet, um den Python zu kompilieren und eine eigenständige App zu erstellen, die XIBs für die GUI lädt?Habe ich Recht, dass ich plattformübergreifende GUI-Bibliotheken auf dem Mac nicht verwenden sollte, um eine nativere Oberfläche zu erhalten? Oder wäre ich mit QT oder wxWidgets besser dran?Wenn ich den falschen Weg gehe und / oder es bessere Lösungen gibt, die ich nicht in Betracht gezogen habe, machen Sie bitte darauf aufmerksam :)Meine bisherigen Forschungen und SchlussfolgerungenGUI-Bibliotheken

Für Mac habe ich die Verwendung von plattformübergreifenden GUI-Bibliotheken (wie QT) ausgeschlossen, da sie anscheinend nicht in der Lage sind, ein natives Erscheinungsbild für Macs zu bieten (nicht an der richtigen Stelle zu suchen und / oder schwierig zu schreibende Apps, die denen von Apple folgen) Human Interface Guidelines). wxWidgets sagt, dass es native Bibliotheken verwendet, aber diesPost erwähnt, dass wxPython möglicherweise private Objective-C-Aufrufe verwendet und wahrscheinlich nicht für den Mac App Store genehmigt wird. Schließlich müssten die Layouts für die beiden Plattformen wahrscheinlich noch variieren, auch wenn das Erscheinungsbild stimmt.

Daher plane ich, native Cocoa-GUI-Bibliotheken für die Mac-Benutzeroberfläche zu verwenden, erwäge jedoch weiterhin, wxWidgets für die Windows-GUI zu verwenden.

Sprache

Es scheint, dass meine beste Wahl für die Sprache für die Hauptanwendungslogik entweder C ++ oder Python ist. Es ist natürlich viel einfacher, plattformübergreifenden Code mit Python zu schreiben als mit C ++, aber es gibt immer Kompromisse.

Python

Vorteile: Viel schneller zu schreiben und einfacher zu pflegen. Robuste plattformübergreifende Bibliotheken, die die Entwicklungszeit drastisch verkürzen können.

Nachteile: Python zu verwenden bedeutet, PyObjC zu verwenden, das seit über einem Jahr nicht mehr aktualisiert wurde (aus Sicht von svn), und es ist mir unklar, ob es mit zukünftigen Versionen von Xcode und OSX noch funktioniert. Außerdem ist es ein Albtraum, eine vernünftige Build-Konfiguration mit PyObjc und py2app einzurichten und xibs für die grafische Benutzeroberfläche außerhalb von Xcode zu verwenden.

C ++

Vorteile: Einfacheres Einrichten der Build-Konfiguration und der Abhängigkeiten auf Mac und Windows. Läuft viel schneller als Python, obwohl die Leistung in meinem Fall keine große Rolle spielt.

Nachteile: Ich kenne C ++ nicht. Ich bin ziemlich gut mit C, aber es sieht nicht so aus, als würde es mir beim Schreiben von gutem C ++ sehr helfen. Ich habe den allgemeinen Eindruck, dass es viel schwieriger ist, plattformübergreifendes C ++ zu schreiben, aber ich könnte mich irren. Es gibt viele Posts über obskure Bugs. Boost sieht jedoch vielversprechend aus.

Erstellen Sie Tools

Das Einrichten von C ++ als Hauptsprache scheint auf beiden Plattformen recht einfach zu sein. Wenn ich Python verwende, scheint es auch einfach zu sein, es unter Windows einzurichten, da ich wxWidgets für die GUI und py2exe zum Bereitstellen verwenden würde.

Wie bei Mac und Python scheint die Standardauswahl pyobjc und py2app zu sein. Leider habe ich keine Beispiele für eine Build-Konfiguration mit py2app gefunden, die XIBs und Cocoa-Bibliotheken anstelle von QT oder wxWidgets verwendet. Ich möchte nicht, dass Xcode den Build verwaltet, da ich es vorziehen würde, dass die Python-Dateien und Anwendungsressourcen außerhalb des Xcode-Projektverzeichnisses abgelegt werden. Dies würde die Einrichtung für Windows erheblich vereinfachen und den Dateibaum übersichtlicher machen.

Edit bezüglich QT: Ich habe mir QT noch einmal angesehen und ein paar Stunden mit QT Designer gespielt. Die grundlegenden Elemente der Benutzeroberfläche (Schaltfläche, Textfeld, Bezeichnung) sehen genauso aus wie die Cocoa-Elemente. Ich habe auf einfache Weise ein QWindow und ein QTabView mit einigen Elementen zusammengestellt, und es sieht aus wie eine Cocoa-App. Es gab jedoch ein paar Minuspunkte:

Das Verhalten ist ein wenig anders, wie das Fehlen eines elastischen Bildlaufs. QTextEdit hat keinen blauen Schatten, der den Fokus anzeigt.QTableView sieht seinem Cocoa-Gegenstück nicht sehr ähnlich.Der Abstand zwischen den Elementen und der Abstand zur übergeordneten Ansicht entsprechen nicht den Richtlinien. Es ist meistens durch Ändern der Layouts zu beheben, muss aber überall durchgeführt werden, und ich bekomme es kostenlos mit Xcode.Fehlendes HUD-Element zur Erstellung des Inspektors. Dies ist etwas, was ich sehr wahrscheinlich in meiner App benötigen würde, zumindest für die Mac-Seite.Schlechte Unterstützung für die Barrierefreiheit.

Ich weiß, dass ich wählerisch bin, aber ich muss wählerisch sein, um eine gute Benutzeroberfläche zu erstellen. Insgesamt scheint QT eine gute Lösung für Windows zu sein, aber ich denke, ich bleibe bei Cocoa für Mac. Ich habe einige zusätzliche Untersuchungen an bestehenden Programmen durchgeführt und festgestellt, dassVLC, Chrom, undGetriebe Alle machen native GUIs für Mac, während VLC QT für Windows verwendet, Chrome ein benutzerdefiniertes Framework verwendet und Transmission GTK + und QT für Linux verwendet.

Ich glaube, ich habe mich für Cocoa GUI für Mac und Qt oder wxWidgets für Windows entschieden, aber für die gemeinsame Logik immer noch zwischen C ++ und Python aufgeteilt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage