Construindo um aplicativo Mac e Windows GUI

Estou planejando construir um aplicativo GUI para Mac e Windows. Eu tenho feito algumas pesquisas nas escolhas de tecnologia, como na linguagem, bibliotecas e ferramentas de construção, para que eu possa compartilhar o máximo de código possível entre as duas plataformas.

Os principais requisitos são:

Atende aos requisitos da Mac App Store.Aparência nativa no Mac e no Windows.Precisa chamar o Quartz Window Services no Mac e a API do Windows no Windows.Armazene e leia dados usando o SQLite.

A duração do meu post ficou fora de controle, então mudei minhas perguntas para o topo como um resumo, enquanto o contexto está mais abaixo.

QuestõesEu estou inclinado a usar o Python para facilitar a programação. Essa é a escolha certa para mim? Se não, por que o C ++ seria melhor? E se sim, como faço para configurar py2app e pyobjc para compilar o python e construir um aplicativo independente que carregue XIBs para GUI?Estou certo de que não devo usar bibliotecas GUI de plataforma cruzada no Mac para uma interface mais nativa? Ou seria melhor usar o QT ou o wxWidgets?Se eu estou indo pelo caminho errado e / ou há soluções melhores que eu não considerei, por favor, indique-as :)Minha pesquisa e conclusões até agoraBibliotecas GUI

Para o Mac, descartei o uso de bibliotecas GUI multiplataforma (como o QT), já que não parece que elas são capazes de fornecer uma aparência nativa no Mac (parecer fora de lugar e / ou difícil de escrever aplicativos que sigam o da Apple). Diretrizes de Interface Humana). wxWidgets diz que usa bibliotecas nativas, mas issopostar menciona que o wxPython pode usar chamadas privadas do Objective-C e é improvável que seja aprovado para a Mac App Store. Por fim, mesmo que a aparência esteja correta, os layouts provavelmente ainda precisarão variar para as duas plataformas.

Portanto, pretendo usar bibliotecas de GUI Cocoa nativas para a interface do Mac, embora ainda considere o uso de wxWidgets para a GUI do Windows.

Língua

Parece que minhas melhores escolhas de linguagem para a lógica principal do aplicativo são C ++ ou Python. Obviamente, é muito mais fácil escrever código entre plataformas com Python do que com C ++, mas sempre há tradeoffs.

Python

Prós: Muito mais rápido para escrever e manter mais fácil. Bibliotecas robustas de plataforma cruzada que podem reduzir drasticamente o tempo de desenvolvimento.

Contras: Usar o Python significa usar o PyObjC, que não foi atualizado em mais de um ano (como visto no svn), e não está claro se ele ainda funcionará com futuras versões do Xcode e do OSX. Além disso, configurar qualquer configuração de compilação sã com PyObjc e py2app e usar xibs para GUI, fora do Xcode, é um pesadelo.

C ++

Prós: Mais fácil de configurar a configuração de compilação e dependências no Mac e no Windows. Funciona muito mais rápido que o Python, embora o desempenho não seja uma grande preocupação no meu caso.

Contras: Eu não sei o C ++. Eu sou muito bom com C, mas não parece que vai me ajudar muito a escrever um bom C ++. Tenho uma impressão geral de que é muito mais difícil escrever C ++ em várias plataformas, mas posso estar errado. Existem muitos posts sobre bugs obscuros. Boost parece promissor embora.

Construir ferramentas

Configurando as coisas, se usar o C ++ como a linguagem principal parece bastante simples em ambas as plataformas. Se eu uso Python, também parece simples de configurar no Windows, uma vez que eu usaria wxWidgets para a GUI e py2exe para implantar.

Quanto ao Mac e Python, a escolha padrão parece ser pyobjc e py2app. Infelizmente, não encontrei nenhum exemplo de configuração de compilação com py2app que use bibliotecas XIBs e Cocoa, em vez de QT ou wxWidgets. Eu não quero que o Xcode gerencie a compilação, pois eu preferiria que os arquivos Python e os recursos do aplicativo fossem colocados fora do diretório do projeto Xcode. Isso simplificaria muito a configuração do Windows e tornaria a árvore de arquivos mais limpa.

Editar sobre QT: Dei mais uma olhada no QT, passando algumas horas brincando com o designer do QT. Os elementos básicos da interface do usuário (botão, campo de texto, rótulo) têm a mesma aparência dos elementos Cocoa. Eu montei um QWindow e um QTabView com alguns elementos facilmente, e parece um aplicativo Cocoa. No entanto, houve alguns negativos:

Comportamento é um pouco fora, como a falta de rolagem elástica, QTextEdit não tem a sombra azul indicando o foco.QTableView não se parece muito com sua contrapartida de cacau.Espaçamento entre elementos, espaçamento para exibição pai, não segue as diretrizes. É basicamente solucionável ajustando os layouts, mas precisa ser feito em todos os lugares e eu consegui com o Xcode de graça.Falta o elemento HUD para fazer o inspetor. Isso é algo que eu provavelmente precisaria no meu aplicativo, pelo menos para o lado do Mac.Suporte de acessibilidade ruim.

Eu sei que estou sendo exigente, mas preciso ser exigente para fazer uma boa interface do usuário. O QT geral parece ser uma boa solução para o Windows, mas acho que vou me ater ao Cocoa para Mac. Fiz uma pesquisa adicional em programas existentes e descobri queVLC, cromadaeTransmissão todos fazem GUIs nativas para Mac, enquanto o VLC usa o QT para Windows, o Chrome usa um framework personalizado e o Transmission usa o GTK + e o QT para Linux.

Acho que decidi usar Cocoa GUI para Mac e Qt ou wxWidgets para Windows, mas ainda dividir entre C ++ e Python para a lógica compartilhada.

questionAnswers(2)

yourAnswerToTheQuestion