2009-10-29 17 views
5

Estoy considerando escribir una aplicación de escritorio multiplataforma, inicialmente para Mac/Windows, pero eventualmente para Linux también.Objetivo C <-> Mono puente

Actualmente, planeo estructurarlo de este modo:

  • Mac interfaz de usuario mediante Cacao C/Objetivo/Interface Builder
  • de Windows interfaz de usuario mediante WPF
  • En el futuro, Linux interfaz de usuario usando GTK #
  • comerciales capas de acceso/de datos en C# - es decir .NET en Windows, Mac Mono/Linux

Esto, obviamente, será bien en Windows, estoy p Estoy seguro de que estará bien en Linux/Gnome en función de las aplicaciones GTK # que he visto. Poner en Mono en el Mac, sin embargo ... Calculo que tengo estas opciones:

  • ObjC#
  • Dumbarton (se ve un poco muertos)
  • Monobjc (esto significaría escribir la interfaz de usuario de Mac en C# en lugar de Objective C - no tan interesado en este)

Mi pregunta: ¿alguien ha tenido alguna experiencia en la construcción de aplicaciones de una manera similar? ¿Alguna recomendación? ¿Estoy loco?

FYI - estoy bastante exigente con interfaces de usuario de escritorio ser "uno" con sus sistemas operativos host, así que no estoy interesado en WinForms/soluciones torpe Java/QT ...

+0

Una pregunta algo similar - http://stackoverflow.com/questions/719895/building-cocoa-uis-for-os-x-with-c-and-mono –

+0

¿Qué es Dumbarton? –

+0

Parece que el enlace de Dumbarton está muerto, lo he actualizado. –

Respuesta

2

Si alguien tropieza en este ...

MonoMac parece que va a ser la forma más obvia hacia adelante.

1

Por lo que vale la pena, vengo del lado de Mac aquí, pero creo que mis comentarios son universalmente aplicables.

Dado su deseo declarado de escribir aplicaciones con interfaz de usuario específica de la plataforma, creo que ObjC# es la única opción razonable. Hay montones de recursos en la implementación de interfaces de usuario de Mac en Objective-C; Creo que sería una pérdida de tiempo intentar traducir todos los consejos que encuentres a Monobjc, especialmente cuando te topas con una API que quiere hacer girar algunos punteros y pasar un controlador de función y oh no, ¿qué haces ahora? . Lo único que puede compartir entre aplicaciones es el código del modelo; Postulo que no hay razón para tratar de mantener las cosas en el mismo idioma en el lado de la presentación a menos que piense que no puede o no podrá familiarizarse con Objective-C.

+0

Sí, tiendo a estar de acuerdo, tengo un poco de experiencia en Objective C, y definitivamente preferiría construir la UI de Mac en Objective C. Entonces, ¿alguien por ahí tiene alguna experiencia con ObjC# o Dumbarton, es decir, llamar al Mono CLR desde Objective C para acceder a los modelos compilados con C# (y no a la inversa, que parece ser el uso de Monobc/Cocoa #)? –

0

He estado trabajando en una aplicación comercial de escritorio para Mac durante 2 años escrita en C#. Tenemos una biblioteca escrita en Objective C, con funciones C simples expuestas. Nuestro código C# PInvuelve en las funciones C simples.

Originalmente, la aplicación utilizaba MonobjC, sin embargo, MonobjC resultó demasiado incómodo para trabajar con él. Muchas API de Mac no se traducen muy bien en C#, o necesita ser un experto en semántica de Objective C y MonobjC para realizar una llamada de función simple. El sistema de paso de mensajes de Objective C no siempre se traduce en una llamada a un método C#.

Cuando evalué MonoMac, era menos maduro que MonobjC.No tuve la impresión de que haya mejorado realmente con respecto a MonobjC, a excepción de que se mantuvieron consistentes con el estilo y los patrones de MonoTouch.

Por lo tanto, recomiendo usar alguna forma de Invocación Inicial en el Objetivo C desde C#, o siguiendo la guía Incrustar Mono. http://www.mono-project.com/Embedding_Mono

0

Eche un vistazo a Dubrovnik. Esta es una versión actualizada de Dumbarton que incluye un generador de código.

El generador de código alivia en gran medida la necesidad de codificar la API incrustada directamente. Simplemente apunte el generador a sus conjuntos gestionados e integre la salida Obj-C en su proyecto.

Cuestiones relacionadas