Создание приложения с графическим интерфейсом для Mac и Windows

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

Основные требования:

  1. Соответствует требованиям Mac App Store.
  2. Естественный внешний вид как для Mac, так и для Windows.
  3. Необходимо вызвать Quartz Window Services на Mac и Windows API на Windows.
  4. Сохранение и чтение данных с помощью SQLite.

Длина моего поста вышла из-под контроля, поэтому я переместил свои вопросы наверх в качестве резюме, а контекст ниже.

Вопросы

  1. Я склоняюсь к использованию Python для простоты программирования.Это правильный выбор для меня? Если нет, то почему С++ лучше? И если да, то как мне настроить py2app и pyobjc для компиляции python и создания отдельного приложения, которое загружает XIB для графического интерфейса?
  2. Прав ли я, что не должен использовать кроссплатформенные библиотеки GUI на Mac ради более родного интерфейса? Или мне лучше использовать QT или wxWidgets?
  3. Если я иду по неверному пути и/или есть лучшие решения, которые я не рассматривал, пожалуйста, укажите на них :)

Мои исследования и выводы на данный момент

Библиотеки GUI

Для Mac, Я исключил использование кросс-платформенных библиотек графического интерфейса (например, QT), поскольку не похоже, что они могут обеспечить нативный внешний вид на Mac (выглядят неуместно и/или трудно писать приложения, которые следуют рекомендациям Apple по человеческому интерфейсу). ). wxWidgets говорит, что использует нативные библиотеки, но в этом сообщенииупоминается, что wxPython может использовать приватные вызовы Objective-C и вряд ли будет одобрен для Mac App Store. Наконец, даже если внешний вид выглядит правильно, макеты, вероятно, все равно должны различаться для двух платформ.

Поэтому я планирую использовать родные библиотеки графического интерфейса Cocoa для интерфейса Mac, хотя по-прежнему рассматриваю возможность использования wxWidgets для графического интерфейса Windows.

Язык

Мне кажется, что лучшим языком для основной логики приложения является C++ или Python. Очевидно, что писать кросс-платформенный код на Python гораздо проще, чем на C++, но всегда есть компромиссы.

Python

Плюсы:Гораздо быстрее писать и легче поддерживать. Надежные кроссплатформенные библиотеки, которые могут значительно сократить время разработки.

Минусы: Использование Python означает использование PyObjC, который не обновлялся более года (как видно из svn), и мне неясно, будет ли он работать с будущими версиями Xcode и OSX. Кроме того, настроить любую разумную конфигурацию сборки с помощью PyObjc и py2app и использовать xibs для графического интерфейса пользователя за пределами Xcode — это кошмар.

C++

Плюсы:Легче настроить конфигурацию сборки и зависимости как на Mac, так и на Windows. Работает намного быстрее, чем Python, хотя в моем случае производительность не имеет большого значения.

Минусы:Я не знаю C++. Я неплохо разбираюсь в C, но не похоже, что это сильно поможет мне в написании хорошего C++. У меня сложилось общее впечатление, что написать кроссплатформенный C++ намного сложнее, но я могу ошибаться. Есть много сообщений о непонятных ошибках. Хотя Boost выглядит многообещающе.

Инструменты сборки

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

Что касается Mac и Python, то стандартным выбором, похоже, являются pyobjc и py2app. К сожалению, я не нашел примеров конфигурации сборки с py2app, которая бы использовала библиотеки XIB и Cocoa, а не QT или wxWidgets. Я не хочу, чтобы Xcode управлял сборкой, так как я бы предпочел, чтобы файлы Python и ресурсы приложения были размещены за пределами каталог проекта Xcode. Это значительно упростит настройку для Windows и сделает файловое дерево чище.

Правка относительно QT:Я еще раз взглянул на QT, потратив пару часов на игры с дизайнером QT. Основные элементы пользовательского интерфейса (кнопка, текстовое поле, метка) выглядят так же, как элементы Cocoa. Я легко собрал QWindow и QTabView с некоторыми элементами, и это выглядит как приложение Cocoa. Однако было несколько минусов:

  • Немного странное поведение, например отсутствие эластичной прокрутки, QTextEdit не имеет синей тени, указывающей на фокус.
  • QTableView не очень похож на аналог Cocoa.
  • Расстояние между элементами, расстояние до родительского вида не соответствует рекомендациям. В основном это можно исправить, настроив макеты, но это нужно делать везде, и я получил бы это с помощью Xcode бесплатно.
  • Отсутствует элемент HUD для создания инспектора. Это то, что мне, скорее всего, понадобится в моем приложении, по крайней мере, для Mac.
  • Плохая поддержка специальных возможностей.

Я знаю, что я придирчив, но нужно быть придирчивым, чтобы сделать хороший пользовательский интерфейс. В целом QT кажется хорошим решением для Windows, но я думаю, что буду придерживаться Cocoa для Mac. Я провел дополнительное исследование существующих программ и обнаружил, что VLC, Chromeи Transmissionсоздают собственные графические интерфейсы для Mac, в то время как VLC использует QT для Windows, Chrome использует собственную структуру, а Transmission использует GTK+ и QT для Linux.

Думаю, я решил использовать Cocoa GUI для Mac и Qt или wxWidgets для Windows, но по-прежнему разделяю C++ и Python для общей логики.

12
задан Community 23 May 2017 в 12:33
поделиться