Objective C para Windows


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

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

A lo largo de esas líneas - ¿hay alguna sugerencia en cuanto a cómo vincular y utilizar el SDK de Windows para algo como esto. Es una bestia diferente, pero sé que puedo escribir el ensamblaje y el enlace en las DLL de Windows, lo que me da accesibilidad a esas llamadas, pero no se cómo hacer esto sin googlear y ser fragmentado dirección.

¿Alguien está al tanto de un buen recurso en línea o libro para hacer o explicar este tipo de cosas?

Author: Bill the Lizard, 2008-09-11

13 answers

Ampliando las dos respuestas anteriores, si solo desea Objective-C pero no cualquiera de los marcos Cocoa, entonces gcc funcionará en cualquier plataforma. Puedes usarlo a través de Cygwin o conseguir MinGW. Sin embargo, si desea los marcos Cocoa, o al menos un subconjunto razonable de ellos, entonces GNUstep y Cocotron son sus mejores apuestas.

Cocotron implementa un montón de cosas que GNUstep no, como CoreGraphics y CoreData, aunque no puedo dar fe de lo completa que es su implementación en un marco específico. Su objetivo es mantener a Cocotron actualizado con la última versión de OS X para que cualquier programa viable de OS X pueda ejecutarse en Windows. Debido a que GNUstep normalmente usa la última versión de gcc, también agregan 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 usa una versión suficientemente nueva de gcc, es posible que pueda usarlas. Hace unos años no pude usar Objective-C++ con GNUstep. Sin embargo, GNUstep compila desde casi cualquier plataforma. Cocotron es un proyecto muy centrado en mac. Aunque probablemente sea posible compilarlo en otras plataformas, viene con archivos de proyecto XCode, no makefiles, por lo que solo puede compilar sus frameworks desde el primer momento en OS X. También viene con instrucciones sobre cómo compilar aplicaciones de Windows en XCode, pero no en cualquier otra plataforma. Básicamente, es probable que sea posible configurar un entorno de desarrollo de Windows para Cocotron, pero no es tan fácil como configurar uno listo para GNUstep, y estarás por tu cuenta, por lo que GNUstep es definitivamente el camino a seguir si estás desarrollando en Windows en lugar de solo para Windows.

Por si sirve de algo, Cocotron está licenciado bajo la licencia MIT, y GNUstep está licenciado bajo la LGPL.

 145
Author: Michael Buckley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-27 19:09:05

Usted puede usar Objective C dentro del entorno Windows. Si sigue estos pasos, debería estar funcionando bien:

  1. Visite el sitio web de GNUstep y descargue GNUstep MSYS Subsystem (MSYS para GNUstep), GNUstep Core (Bibliotecas para GNUstep), y GNUstep Devel
  2. Después de descargar estos archivos, instale en ese orden, o tendrá problemas con la configuración
  3. Vaya a C:\GNUstep\GNUstep\System\Library\Headers\Foundation1 y asegurar que Foundation.h existe
  4. , Abra un símbolo del sistema y ejecute gcc -v para comprobar 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 programa "Hello World" para probar la funcionalidad de GNUstep:

    #include <Foundation/Foundation.h>
    
    int main(void)
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        NSLog(@"Hello World!.");
        [pool drain];
     return;
    }
    
  6. Vuelva al símbolo del sistema y cd donde guardó el programa "Hello World" y luego compílelo:2

    gcc -o helloworld.exe <HELLOWORLD>.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 ejecutar it

Todo lo mejor, y divertirse con Objective-C!


NOTAS :

  1. Usé la ruta de instalación predeterminada: ajuste su línea de comandos en consecuencia
  2. Asegúrese de que la ruta de la carpeta de la suya es similar a la mía, de lo contrario obtendrá un error
 89
Author: teshguru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-13 00:47:14

También:

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

Http://www.cocotron.org/

 13
Author: amrox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-11 18:26:08

WinObjC? Puente de Windows 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 proporciona soporte para la compatibilidad con la API de iOS. Mientras que el lanzamiento final ocurrirá a finales de este otoño (lo que permitirá a the bridge aprovechar las nuevas capacidades de herramientas que se enviarán con el próximo Visual Studio 2015 Actualización)

El puente está disponible para la comunidad de código abierto ahora en su estado actual. Entre ahora y la caída. El puente de iOS como un proyecto de código abierto bajo la licencia MIT. Dada la ambición del proyecto, por lo que es fácil para los desarrolladores de iOS para construir y ejecutar aplicaciones en Windows.

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

El puente de iOS es compatible con Windows 8.1 y Windows 10 aplicaciones creadas para arquitecturas de procesador x86 y x64, y pronto agregaremos optimizaciones de compilador y soporte para ARM, que agrega soporte móvil.

 13
Author: Lee Stott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-10 21:12:24

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

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

Tampoco se molestaron en aprovechar CoreFoundation, que también es de código abierto por Apple. Publiqué una pregunta sobre esto, pero no recibí respuesta.

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

 9
Author: Matthieu Cormier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-05 20:01:51

Soy consciente de que este es un post muy antiguo, pero he encontrado una solución que solo ha estado disponible más recientemente y habilita casi todas las características de Objective-C 2.0 en la plataforma Windows.

Con la llegada de gcc 4.6, se agregó soporte para las características del lenguaje Objective-C 2.0 (bloques, sintaxis de puntos, propiedades sintetizadas, etc.) al compilador Objective-C (ver las notas de la versión para más detalles). Su tiempo de ejecución también se ha actualizado para funcionar casi de manera idéntica a la de Apple Objective - C 2.0 tiempo de ejecución. En resumen, esto significa que (casi) cualquier programa que compile legítimamente con Clang en un Mac también compilará con gcc 4.6 sin modificaciones.

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

Sin embargo, si estás feliz de vivir sin los extensos frameworks de Apple, puedes hacerlo. Como se señaló en otras respuestas, GNUstep y el Cocotron proporciona 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 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 sugeriría instalar el entorno MSYS.

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

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

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

g++ -mwindows MyFile.cpp

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

 8
Author: Ephemera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-12 03:48:44

Echa un vistazo WinObjC :

Https://github.com/Microsoft/WinObjC

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

 7
Author: James Ko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-03 16:24:23

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

 6
Author: user397362,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-20 06:07:18

Puede obtener un compilador de objective c que funcionará con Windows y jugará bien con Visual Studio 2008\2010 aquí.

Open-c flite

Simplemente descargue la última fuente. No es necesario construir todo CF-Lite hay una solución llamada objc.sln. Tendrá que arreglar algunos de los caminos de inclusión, pero luego se construirá muy bien. Incluso hay un proyecto de prueba incluido para que pueda ver algo de objective-c.m archivos compilados y trabajando en visual studio. Una cosa triste es que solo funciona con Win32 no x64. Hay algún código ensamblador que tendría que ser escrito para x64 para que lo soporte.

 5
Author: Aaron Stainback,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-20 06:08:40

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

Del Readme:

Subjetivo es un intento 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 envía con OS X 10.8.5. El puerto se puede compilar de forma cruzada en OS X utilizando llvm-clang combinado con el enlazador MinGW.

Hay ciertas limitaciones muchas de las cuales son una cuestión de extra trabajo, mientras que otros, como excepciones y bloques, dependen de más trabajo serio en proyectos de terceros. Las limitaciones son:

* solo 32-bit-64-bit está en marcha

* Solo enlace estático: el enlace dinámico está en marcha

* Sin cierres / bloques-hasta que libdispatch los soporte en Windows

* Sin excepciones-hasta que clang las soporte en Windows

• No old style GC - hasta que a alguien le importe...

* Funcionamiento interno: sin vtables, sin soporte gdb, simplemente malloc, no preoptimizaciones-algunas de estas cosas estarán disponibles bajo el construcción de 64 bits.

* Actualmente se requiere un compilador 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.

 4
Author: insys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-01 15:23:36

Obtener GNUstep aquí

Obtener MINGW aquí

Instalar MINGW Instalar GNUstep Entonces Prueba

 2
Author: raksa eng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-20 13:53:42

Si se siente cómodo con el entorno de Visual Studio,

Pequeño proyecto: jGRASP con gcc Proyecto grande: Cocotron

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

 0
Author: Cloud Cho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-28 01:34:28

En primer lugar, olvídate de las herramientas GNUstep. Ni ProjectManagerni ProjectCenter se pueden llamar IDE. Con el debido respeto, parece que los chicos de GNUstep proyecto están atascados a finales de los 80-s (que es cuando NeXTSTEP apareció por primera vez).

Vim

ctags soporta Objective-C desde r771 (asegúrate de elegir la versión pre-release 5.9 y agrega --langmap=ObjectiveC:.m.h a la línea de comandos, ver aquí), para que tengas un código decente finalización / navegación de etiquetas.

Aquí hay un breve howto sobre cómo agregar soporte de Objective-C al complemento de Vim tagbar.

Emacs

Lo mismo se aplica a etags enviado con Emacsen moderno, por lo que puede comenzar con Emacs Modo Objetivo C. YASnippet proporcionará plantillas útiles:

YASnippet objc-mode

Y si quieres algo más inteligente que el basic tags-based code completion , echa un vistazo a esto pregunta.

Eclipse

CDT soporta proyectos basados en Makefile:

introduzca la descripción de la imagen aquí

Technically así que técnicamente puede construir sus proyectos de Objective-C fuera de la caja (en Windows, necesitará la cadena de herramientas Cygwin o MinGW). El único problema es el editor de código que reportará muchos errores contra lo que cree que es un código puro C (la comprobación de código sobre la marcha se puede desactivar, pero aún así...). Si desea una sintaxis adecuada destacando, usted puede agregar Eclim su Eclipse y disfruta de todas las buenas características de ambos Eclipse y Vim (ver arriba).

Otro plugin prometedor Eclipse es Colorer, pero todavía no soporta Objective-C. Sin embargo, no dude en presentar una solicitud de característica.

SlickEdit

SlickEdit entre otras características de un gran IDE, ¿ apoyo Objective-C., Aunque es bastante complejo de aprender (aunque no tan complejo como Emacs), creo que esta es tu mejor opción siempre que no te importe comprarlo (el precio es bastante asequible).

Además, tiene un complemento Eclipse que se puede usar como una alternativa al editor independiente.

KDevelop

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


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

 0
Author: Bass,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:34