Construyendo una aplicación GUI para Mac y Windows

Estoy planeando construir una aplicación GUI para Mac y Windows. He estado investigando las opciones de tecnología, como el lenguaje, las bibliotecas y las herramientas de compilación, para poder compartir la mayor cantidad de código posible entre las dos plataformas.

Los principales requisitos son:

Cumple con los requisitos de la Mac App Store.Aspecto nativo tanto en Mac como en Windows.Debe llamar a los servicios de ventana de cuarzo en Mac y a la API de Windows en Windows.Almacenar y leer datos utilizando SQLite.

La duración de mi publicación se ha salido de control, por lo que trasladé mis preguntas a la parte superior como un resumen, mientras que el contexto está más abajo.

PreguntasMe inclino por usar Python para la facilidad de programación. ¿Es esta la opción correcta para mí? Si no, ¿por qué C ++ sería mejor? Y si es así, ¿cómo puedo configurar exactamente py2app y pyobjc para compilar el python y crear una aplicación independiente que carga XIB para GUI?¿Tengo razón en que no debería usar bibliotecas de GUI multiplataforma en Mac por una interfaz más nativa? ¿O estaría mejor usando QT o wxWidgets?Si voy por el camino equivocado y / o hay mejores soluciones que no he considerado, señálelos :)Mi investigación y conclusiones hasta ahora.GUI bibliotecas

Para Mac, descarté el uso de bibliotecas de GUI multiplataforma (como QT) ya que no parece que sean capaces de proporcionar una apariencia nativa en Mac (aspecto fuera de lugar y / o difícil de escribir aplicaciones que siguen a Apple Directrices de interfaz humana). wxWidgets dice que usa bibliotecas nativas, pero estoenviar menciona que wxPython puede usar llamadas privadas de Objective-C y es poco probable que se aprueben para la Mac App Store. Finalmente, incluso si el aspecto es correcto, es probable que los diseños aún deban variar para las dos plataformas.

Por lo tanto, planeo usar las bibliotecas nativas de Cocoa GUI para la interfaz de Mac, aunque todavía estoy considerando usar wxWidgets para la GUI de Windows.

Idioma

Parece que mis mejores opciones de lenguaje para la lógica de la aplicación principal son C ++ o Python. Obviamente, es mucho más fácil escribir código multiplataforma con Python que con C ++, pero siempre hay concesiones.

Pitón

Pros: Mucho más rápido de escribir y más fácil de mantener. Robustas bibliotecas multiplataforma que pueden acortar drásticamente el tiempo de desarrollo.

Contras: Usar Python significa usar PyObjC, que no se ha actualizado en más de un año (como se ve en svn), y no me queda claro si seguirá funcionando con futuras versiones de Xcode y OSX. Además, configurar una configuración de construcción sana con PyObjc y py2app y usar xibs para GUI, fuera de Xcode, es una pesadilla.

C ++

Pros: Más fácil de configurar la configuración de compilación y las dependencias tanto en Mac como en Windows. Corre mucho más rápido que Python, aunque el rendimiento no es una gran preocupación en mi caso.

Contras: No sé C ++. Soy bastante bueno con C, pero no parece que eso me ayude mucho a escribir un buen C ++. Tengo la impresión general de que es mucho más difícil escribir C ++ multiplataforma, pero podría estar equivocado. Hay un montón de mensajes sobre errores oscuros. Sin embargo, Boost parece prometedor.

Construir herramientas

Configurar las cosas si usar C ++ como lenguaje principal parece bastante simple en ambas plataformas. Si uso Python, también parece sencillo de configurar en Windows, ya que usaría wxWidgets para la implementación de la GUI y py2exe.

En cuanto a Mac y Python, la opción estándar parece ser pyobjc y py2app. Desafortunadamente, no he encontrado ningún ejemplo de configuración de compilación con py2app que use bibliotecas XIB y Cocoa en lugar de QT o wxWidgets. No quiero que Xcode administre la compilación ya que preferiría que los archivos de Python y los recursos de la aplicación se coloquen fuera del directorio del proyecto de Xcode. Esto simplificaría enormemente la configuración de Windows y haría que el árbol de archivos estuviera más limpio.

Editar con respecto a QT: Eché otro vistazo a QT, pasé un par de horas jugando con el diseñador de QT. Los elementos básicos de la interfaz de usuario (botón, campo de texto, etiqueta) tienen el mismo aspecto que los elementos de cacao. Arme un QWindow y un QTabView con algunos elementos fácilmente, y se parece a una aplicación Cocoa. Sin embargo, hubo algunos negativos:

El comportamiento está un poco apagado, como la falta de desplazamiento elástico, QTextEdit no tiene la sombra azul que indica el enfoque.QTableView no se parece mucho a su contraparte de cacao.El espacio entre los elementos, el espacio a la vista principal, no sigue las pautas. La mayoría de las veces se puede arreglar ajustando los diseños, pero se debe hacer en todas partes y lo obtendré con Xcode de forma gratuita.Falta el elemento HUD para hacer el inspector. Esto es algo que muy probablemente necesitaría en mi aplicación, al menos para Mac.Soporte de accesibilidad pobre.

Sé que soy exigente, pero debo serlo para hacer una buena interfaz de usuario. En general, QT parece ser una buena solución para Windows, pero creo que seguiré con Cocoa para Mac. Hice una investigación adicional sobre los programas existentes y encontré queVLC, CromoyTransmisión todos hacen GUI nativas para Mac, mientras que VLC usa QT para Windows, Chrome usa un marco personalizado y Transmission usa GTK + y QT para Linux.

Creo que he decidido usar Cocoa GUI para Mac y Qt o wxWidgets para Windows, pero aún así me dividí entre C ++ y Python para la lógica compartida.

Respuestas a la pregunta(2)

Su respuesta a la pregunta