Budowanie aplikacji Mac i Windows GUI

Mam zamiar zbudować aplikację GUI dla komputerów Mac i Windows. Prowadzę badania nad wyborem technologii, tak jak w języku, bibliotekach i narzędziach do budowania, dzięki czemu mogę udostępniać jak najwięcej kodu między dwiema platformami.

Główne wymagania to:

Spełnia wymagania Mac App Store.Natywny wygląd na komputerach Mac i Windows.Musisz wywołać Quartz Window Services na Macu i Windows API w Windows.Przechowuj i czytaj dane za pomocą SQLite.

Długość mojego posta wymknęła się spod kontroli, więc przeniosłem moje pytania na górę jako podsumowanie, a kontekst jest poniżej.

pytaniaJestem skłonny używać Pythona do łatwości programowania. Czy to dla mnie właściwy wybór? Jeśli nie, dlaczego C ++ będzie lepszy? A jeśli tak, to jak dokładnie uzyskać py2app i pyobjc, aby skompilować python i zbudować samodzielną aplikację, która ładuje XIB dla GUI?Czy mam rację, że nie powinienem używać wieloplatformowych bibliotek GUI na Macu ze względu na bardziej natywny interfejs? A może lepiej byłoby używać QT lub wxWidgets?Jeśli schodzę na złą ścieżkę i / lub istnieją lepsze rozwiązania, których nie rozważałem, proszę o wskazanie :)Moje dotychczasowe badania i wnioskiBiblioteki GUI

W przypadku komputerów Mac wykluczyłam korzystanie z wieloplatformowych bibliotek GUI (takich jak QT), ponieważ wydaje się, że nie są one w stanie zapewnić natywnego wyglądu i działania na Macu (wyglądają nie na miejscu i / lub trudno napisać aplikacje, które następują po Apple Wytyczne dotyczące interfejsu ludzkiego). wxWidgets mówi, że używa rodzimych bibliotek, ale tosłupek wspomina, że ​​wxPython może korzystać z prywatnych wywołań Objective-C i jest mało prawdopodobne, aby został zatwierdzony w Mac App Store. Wreszcie, nawet jeśli wygląd jest prawidłowy, układy prawdopodobnie będą musiały się różnić dla obu platform.

Dlatego planuję używać rodzimych bibliotek GUI Cocoa dla interfejsu Mac, chociaż nadal rozważam użycie wxWidgets dla GUI Windows.

Język

Wydaje mi się, że najlepszym wyborem dla języka dla głównej logiki aplikacji będzie C ++ lub Python. Oczywiście znacznie łatwiej jest napisać kod wieloplatformowy za pomocą Pythona niż C ++, ale zawsze są kompromisy.

Pyton

Plusy: Znacznie szybsze pisanie i łatwiejsze utrzymanie. Solidne biblioteki wieloplatformowe, które drastycznie skracają czas programowania.

Cons: Używanie Pythona oznacza używanie PyObjC, który nie był aktualizowany od ponad roku (jak widać z svn), i nie jest dla mnie jasne, czy będzie on nadal działał z przyszłymi wersjami Xcode i OSX. Ponadto, aby skonfigurować dowolną rozsądną konfigurację za pomocą PyObjc i py2app oraz użyć xibs do GUI, poza Xcode, jest koszmarem.

C ++

Plusy: Łatwiej skonfigurować konfigurację kompilacji i zależności na komputerach Mac i Windows. Działa znacznie szybciej niż Python, choć w moim przypadku wydajność nie jest dużym problemem.

Cons: Nie znam C ++. Jestem całkiem niezły w C, ale nie wygląda na to, że pomoże mi to w pisaniu dobrego C ++. Mam ogólne wrażenie, że znacznie trudniej jest napisać C ++ na różnych platformach, ale mogę się mylić. Istnieje wiele postów o niejasnych błędach. Boost wygląda obiecująco.

Buduj narzędzia

Konfigurowanie, jeśli używasz C ++ jako głównego języka, wydaje się dość proste na obu platformach. Jeśli korzystam z Pythona, wydaje się to również proste do skonfigurowania w systemie Windows, ponieważ używałbym wxWidgets dla GUI i py2exe do wdrożenia.

W przypadku komputerów Mac i Python standardowym wyborem wydaje się pyobjc i py2app. Niestety, nie znalazłem żadnych przykładów konfiguracji kompilacji z py2app, które używają bibliotek XIB i Cocoa zamiast QT lub wxWidgets. Nie chcę, aby Xcode zarządzał kompilacją, ponieważ wolałbym, aby pliki Pythona i zasoby aplikacji były umieszczone poza katalogiem projektu Xcode. Uprościłoby to znacznie konfigurację systemu Windows i sprawiło, że plik został oczyszczony.

Edytuj dotyczące QT: Zerknąłem na QT, spędzając kilka godzin grając z projektantem QT. Podstawowe elementy interfejsu użytkownika (przycisk, pole tekstowe, etykieta) wyglądają tak samo jak elementy kakao. Z łatwością stworzyłem QWindow i QTabView z kilkoma elementami i wygląda to jak aplikacja Cocoa. Było jednak kilka negatywów:

Zachowanie jest nieco wyłączone, jak brak elastycznego przewijania, QTextEdit nie ma niebieskiego cienia wskazującego fokus.QTableView nie przypomina swojego odpowiednika Cocoa.Odstępy między elementami, odstępy od widoku rodzica, nie przestrzegaj wytycznych. Jest to głównie możliwe do naprawienia, modyfikując układy, ale trzeba to robić wszędzie, a ja otrzymam je za darmo z Xcode.Brak elementu HUD w celu utworzenia inspektora. Jest to coś, czego prawdopodobnie potrzebowałbym w mojej aplikacji, przynajmniej dla strony Mac.Słabe wsparcie dostępności.

Wiem, że jestem wybredny, ale muszę być wybredny, aby stworzyć dobry interfejs użytkownika. Ogólnie QT wydaje się być dobrym rozwiązaniem dla Windows, ale myślę, że będę trzymać się Cocoa for Mac. Zrobiłem kilka dodatkowych badań w istniejących programach i znalazłem toVLC, Chrom, iTransmisja wszystkie tworzą natywne GUI dla Maca, podczas gdy VLC używa QT dla Windows, Chrome używa niestandardowej struktury, a Transmission używa GTK + i QT dla Linuksa.

Myślę, że zdecydowałem się na używanie Cocoa GUI dla Maca i Qt lub wxWidgets dla Windows, ale nadal dzielę między C ++ i Python dla wspólnej logiki.

questionAnswers(2)

yourAnswerToTheQuestion