Objetivo C para Windows

¿Cuál sería la mejor manera de escribir Objective-C en la plataforma de Windows?

Cygwin y gcc? ¿Hay alguna manera de integrar de alguna manera esto en Visual Studio?

En ese sentido, ¿hay alguna sugerencia sobre cómo vincular y usar el SDK de Windows para algo como esto? Es una bestia diferente, pero sé que puedo escribir el ensamblado y el enlace en las DLL de Windows, dándome acceso a esas llamadas, pero no sé cómo hacer esto sin buscar en Google y obtener instrucciones poco sistemáticas.

¿Alguien sabe de un buen recurso en línea o libro para hacer o explicar este tipo de cosas?

Ampliando las dos respuestas anteriores, si solo quiere Objective-C pero no ninguno de los frameworks de Cocoa, entonces gcc funcionará en cualquier plataforma. Puede usarlo a través de Cygwin u obtener MinGW. Sin embargo, si quiere los frameworks de Cocoa, o al menos un subconjunto razonable de ellos, entonces GNUStep y Cocotron son sus mejores apuestas.

Cocotron implementa muchas cosas que GNUStep no tiene, como CoreGraphics y CoreData, aunque no puedo garantizar cuán completa es su implementación en un marco específico. Su objective es mantener a Cocotron actualizado con la última versión de OS X para que cualquier progtwig viable de OS X pueda ejecutarse en Windows. Debido a que GNUStep generalmente usa la última versión de gcc, también se agrega soporte para Objective-C ++ y muchas de las características de Objective-C 2.0.

No he probado esas características con GNUStep, pero si utiliza una versión suficientemente nueva de gcc, es posible que pueda usarlas. No pude usar Objective-C ++ con GNUStep hace unos años. Sin embargo, GNUStep comstack desde prácticamente cualquier plataforma. Cocotron es un proyecto muy maccéntrico. Aunque probablemente sea posible comstackrlo en otras plataformas, se trata de archivos de proyecto de XCode, no de archivos make, por lo que solo puede comstackr sus marcos de fábrica en OS X. También incluye instrucciones para comstackr aplicaciones de Windows en XCode, pero no cualquier otra plataforma Básicamente, probablemente sea posible configurar un entorno de desarrollo de Windows para Cocotron, pero no es tan fácil como configurar uno para GNUStep, y estarás solo, por lo que GNUStep es definitivamente el camino a seguir si estás desarrollando Windows en lugar de solo para Windows.

Por lo que vale, Cocotron está licenciado bajo la licencia del MIT, y GNUStep está licenciado bajo la LGPL.

Puede usar Objective C dentro del entorno de Windows. Si sigues estos pasos, debería estar funcionando bien:

  1. Visite el sitio web de GNUstep y descargue el GNUstep MSYS Subsystem MSYS de GNUstep (MSYS para GNUstep), GNUstep Core (Bibliotecas para GNUstep) y GNUstep Devel
  2. Después de descargar estos archivos, instálelos en ese orden, o tendrá problemas con la configuración
  3. Navegue a C:\GNUstep\GNUstep\System\Library\Headers\Foundation 1 y asegúrese de que Foundation.h exista
  4. Abra un símbolo del sistema y ejecute gcc -v para verificar que GNUstep MSYS esté instalado correctamente (si obtiene un error de archivo no encontrado, asegúrese de que la carpeta bin de GNUstep MSYS esté en su PATH )
  5. Utilice este sencillo progtwig “Hello World” para probar la funcionalidad de GNUstep:

     #include  int main(void) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Hello World!."); [pool drain]; return; } 
  6. Regrese al símbolo del sistema y cd a donde guardó el progtwig “Hello World” y luego compílelo: 2

     gcc -o helloworld.exe .m -I /GNUstep/GNUstep/System/Library/Headers -L /GNUstep/GNUstep/System/Library/Libraries -std=c99 -lobjc -lgnustep-base -fconstant-string-class=NSConstantString 
  7. Finalmente, desde el símbolo del sistema, escriba helloworld para ejecutarlo

¡Todo lo mejor y diviértete con Objective-C!


NOTAS :

  1. Utilicé la ruta de instalación predeterminada: ajuste su línea de comando en consecuencia
  2. Asegúrate de que la ruta de tu carpeta sea similar a la mía, de lo contrario recibirás un error

También:

The Cocotron es un proyecto de código abierto que tiene como objective implementar una API Objective-C multiplataforma similar a la descrita por la documentación Cocoa de Apple Inc. Esto incluye AppKit, Foundation, Objective-C runtime y API de soporte como CoreGraphics y CoreFoundation.

http://www.cocotron.org/

WinObjC? Windows Bridge para iOS (anteriormente conocido como ‘Proyecto Islandwood’).

Windows Bridge para iOS (también conocido como WinObjC) es un proyecto de código abierto de Microsoft que proporciona un entorno de desarrollo Objective-C para Visual Studio / Windows. Además, WinObjC brinda soporte para la compatibilidad API de iOS. Mientras que la versión final ocurrirá más adelante este otoño (lo que permite al puente aprovechar las nuevas capacidades de herramientas que se enviarán con la próxima actualización de Visual Studio 2015),

El puente está disponible para la comunidad de código abierto ahora en su estado actual. Entre ahora y el otoño. El puente de iOS como un proyecto de código abierto bajo la licencia de MIT. Dada la ambición del proyecto, facilita a los desarrolladores de iOS la creación y ejecución de aplicaciones en Windows.

Salmaan Ahmed tiene una publicación en profundidad sobre el Windows Bridge para iOS http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/ sobre la discusión del comstackdor, tiempo de ejecución, integración IDE, y qué es y qué no es el puente. Lo mejor de todo, el código fuente para el puente de iOS está en vivo en GitHub en este momento.

El puente iOS admite aplicaciones Windows 8.1 y Windows 10 creadas para architectures de procesadores x86 y x64, y pronto agregaremos optimizaciones de comstackdor y soporte para ARM, que agrega soporte móvil.

Tengo sentimientos encontrados sobre el proyecto Cocotron. Me alegra que estén publicando el código fuente y compartiendo, pero no creo que estén haciendo las cosas de la manera más fácil.

Ejemplos.
Apple lanzó el código fuente al tiempo de ejecución de object-c , que incluye propiedades y recolección de basura. Sin embargo, el proyecto Cocotron tiene su propia implementación del tiempo de ejecución del objective-c. ¿Por qué molestarse en duplicar el esfuerzo? Incluso hay un archivo de Visual Studio Project que se puede usar para comstackr un archivo objc.dll. O si eres realmente flojo, puedes simplemente copiar el archivo DLL desde una instalación de Safari en Windows.

Tampoco se molestaron en aprovechar CoreFoundation, que también está abierto por Apple. Publiqué una pregunta sobre esto pero no recibí una respuesta.

Creo que la mejor solución actual es tomar el código fuente de múltiples fonts (Apple, CocoTron, GnuStep) y combinarlo con lo que necesita. Tendrás que leer muchas fonts, pero valdrá la pena el resultado final.

Soy consciente de que esta es una publicación muy antigua, pero he encontrado una solución que solo ha estado disponible más recientemente Y permite casi todas las características de Objective-C 2.0 en la plataforma de Windows.

Con la llegada de gcc 4.6, se agregó soporte para las características del lenguaje Objective-C 2.0 (bloques, syntax de puntos, propiedades sintetizadas, etc.) al comstackdor de Objective-C (consulte las notas de la versión para obtener más información). Su tiempo de ejecución también se ha actualizado para funcionar de forma casi idéntica al propio tiempo de ejecución Objective-C 2.0 de Apple. En resumen, esto significa que (casi) cualquier progtwig que comstackrá legítimamente con Clang en una Mac también comstackrá con gcc 4.6 sin modificaciones.

Como nota al margen, una característica que no está disponible es literales dictionary / array / etc ya que están codificados en Clang para usar las clases NSDictionary, NSArray, NSNumber, etc. de Apple.

Sin embargo, si está feliz de vivir sin los amplios marcos de trabajo de Apple, puede hacerlo. Como se señaló en otras respuestas, GNUStep y Cocotron proporcionan versiones modificadas de las bibliotecas de clases de Apple, o puede escribir su propia (mi opción preferida).

MinGW es una forma de obtener GCC 4.6 en la plataforma de Windows, y se puede descargar desde el sitio web de MinGW . Asegúrese de que cuando lo instale incluya la instalación de C, C ++, Objective-C y Objective-C ++. Si bien es opcional, también sugiero instalar el entorno MSYS.

Una vez instalado, la fuente Objective-C 2.0 se puede comstackr con:

gcc MyFile.m -lobjc -std=c99 -fobjc-exceptions -fconstant-string-class=clsname (etc, additional flags, see documentation)

MinGW también incluye soporte para comstackr aplicaciones nativas de GUI para Windows con el indicador -mwindows . Por ejemplo:

g++ -mwindows MyFile.cpp

Todavía no lo he intentado, pero me imagino que si ajusta sus clases de Objective-C en Objective-C ++ en la capa más alta posible, debería ser capaz de entrelazar con éxito la GUI nativa de Windows C ++ y Objective-C en la única aplicación de Windows.

Echa un vistazo a WinObjC :

https://github.com/Microsoft/WinObjC

Es un proyecto oficial de código abierto de Microsoft que se integra con Visual Studio + Windows.

Si solo quieres experimentar, hay un comstackdor de Objective-C para .NET (Windows) aquí: qckapp

Puede obtener un comstackdor objective c que funcione con Windows y juegue bien con Visual Studio 2008 \ 2010 aquí.

open-c flite

Solo descarga la última fuente. No necesita construir todo CF-Lite hay una solución llamada objc.sln. Tendrá que corregir algunas de las rutas de inclusión, pero luego se comstackrá muy bien. Incluso hay un proyecto de prueba incluido para que pueda ver algunos archivos object-c .m comstackdos y trabajando en Visual Studio. Una cosa triste es que solo funciona con Win32 no x64. Hay algún código de ensamblaje que debería escribirse para x64 para que lo admita.

Un bash reciente de portar Objective C 2.0 a Windows es el proyecto Subjetivo .

Del archivo Léame:

Subjetivo es un bash de llevar Objective C 2.0 con soporte ARC a Windows.

Este proyecto es una bifurcación de objc4-532.2, el tiempo de ejecución de Objective C que se incluye con OS X 10.8.5. El puerto se puede comstackr de forma cruzada en OS X usando llvm-clang combinado con el enlazador MinGW.

Existen ciertas limitaciones, muchas de las cuales son una cuestión de trabajo adicional, mientras que otras, como excepciones y lockings, dependen de trabajos más serios en proyectos de terceros. Las limitaciones son:

• Solo 32 bits: 64 bits en curso

• Enlace estático solamente: la vinculación dinámica está en marcha

• Sin cierres / bloques – hasta que libdispatch los admita en Windows

• Sin excepciones, hasta que clang los admite en Windows

• Sin GC de estilo antiguo – hasta que a alguien le importe …

• Internos: sin tablas, sin soporte gdb, simplemente malloc, sin preoptimizaciones, algunas de estas cosas estarán disponibles en la comstackción de 64 bits.

• Actualmente se requiere un comstackdor de clang parcheado; el parche agrega -fobjc-runtime = subj flag

El proyecto está disponible en Github , y también hay un hilo en el Grupo Cocotron que describe algunos de los avances y problemas encontrados.

Obtenga GNUStep aquí

Obtenga MINGW aquí

Instalar MINGW Instalar GNUStep y luego probar

Si te sientes cómodo con el entorno de Visual Studio,

Proyecto pequeño: jGRASP con gcc Proyecto grande: Cocotron

Escuché que hay emuladores, pero solo pude encontrar Apple II Emulator http://virtualapple.org/ . Parece limitado a los juegos.

Antes que nada, olvídate de las herramientas de GNUStep . Ni ProjectManager ni ProjectCenter se pueden llamar IDE. Con todo el respeto, parece que los chicos del proyecto GNUStep están estancados a finales de los 80 (que es cuando apareció NeXTSTEP por primera vez).

Empuje

ctags admiten Objective-C desde r771 (asegúrese de elegir la versión 5.9 de la versión --langmap=ObjectiveC:.mh y agregar --langmap=ObjectiveC:.mh a la línea de comandos, ver aquí ), por lo que tendrá un código decente de terminación / navegación de tags.

Aquí hay un breve tutorial sobre cómo agregar soporte para Objective-C al complemento de la barra de tags de Vim.

Emacs

Lo mismo se aplica a los etags enviados con Emacsen moderno, por lo que puede comenzar con el modo Emacs Objective C. YASnippet proporcionará plantillas útiles:

YASnippet objc-mode

y si desea algo más inteligente que la finalización del código basado en tags básicas , eche un vistazo a esta pregunta .

Eclipse

CDT admite proyectos basados ​​en Makefile :

enter image description here

– así que técnicamente puedes construir tus proyectos Objective-C de la caja (en Windows, necesitarás la cadena de herramientas Cygwin o MinGW ). El único problema es el editor de código que informará muchos errores contra lo que cree que es un código C puro (la verificación de código sobre la marcha puede desactivarse, pero aún así …). Si desea resaltar correctamente la syntax, puede agregar Eclim a su Eclipse y disfrutar de todas las buenas características de Eclipse y Vim (consulte más arriba).

Otro plugin prometedor de Eclipse es Colorer , pero aún no es compatible con Objective-C. No dude en presentar una solicitud de función sin embargo.

SlickEdit

SlickEdit , entre otras características de un gran IDE, admite Objective-C. Si bien es bastante complejo de aprender (no tan complejo como Emacs), creo que esta es su mejor opción siempre que no le importe comprarla (el precio es bastante asequible).

Además, tiene un plugin de Eclipse que puede usarse como una alternativa al editor independiente.

KDevelop

Se rumorea que existe un parche de KDevelop (15 años, pero ¿a quién le importa?). Personalmente, no creo que KDevelop sea ​​superior a la característica en comparación con Emacsen , así que no me molestaría en intentarlo.


Lo anterior también se aplica al desarrollo de Objective-C en Linux, ya que todas las herramientas mencionadas son más o menos portátiles.