Я планирую создать приложение с графическим интерфейсом для Mac и Windows. Я провел некоторое исследование выбора технологий, таких как язык, библиотеки и инструменты сборки, чтобы я мог использовать как можно больше кода между двумя платформами.
Основные требования:
Длина моего поста вышла из-под контроля, поэтому я переместил свои вопросы наверх в качестве резюме, а контекст ниже.
Для 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. Однако было несколько минусов:
Я знаю, что я придирчив, но нужно быть придирчивым, чтобы сделать хороший пользовательский интерфейс. В целом QT кажется хорошим решением для Windows, но я думаю, что буду придерживаться Cocoa для Mac. Я провел дополнительное исследование существующих программ и обнаружил, что VLC, Chromeи Transmissionсоздают собственные графические интерфейсы для Mac, в то время как VLC использует QT для Windows, Chrome использует собственную структуру, а Transmission использует GTK+ и QT для Linux.
Думаю, я решил использовать Cocoa GUI для Mac и Qt или wxWidgets для Windows, но по-прежнему разделяю C++ и Python для общей логики.