Objective-C para Windows

230

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

Cygwin y gcc? ¿Hay alguna manera de que pueda integrar esto de alguna manera 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 ensamblajes y enlaces en las DLL de Windows, lo que me da acceso a esas llamadas, pero no sé cómo hacerlo sin buscar en Google y obtener instrucciones poco a poco.

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

Luther Baker
fuente
55
Si solo lo está haciendo para iOS, puede usar iOS Build Environment de PM Baty ...
Cole Johnson el

Respuestas:

146

Ampliando las dos respuestas anteriores, si solo desea Objective-C pero no ninguno de los marcos de Cocoa, entonces gcc funcionará en cualquier plataforma. Puede usarlo a través de Cygwin u obtener MinGW. Sin embargo, si desea los marcos 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 implementa, como CoreGraphics y CoreData, aunque no puedo garantizar cuán completa 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 generalmente usa la última versión de gcc, también 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 usa una versión suficientemente nueva de gcc, podría usarlas. No pude usar Objective-C ++ con GNUStep hace unos años. 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 con archivos MAKE, por lo que solo puede compilar sus marcos de fábrica en OS X. También viene con instrucciones para compilar 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á solo, por lo que GNUStep es definitivamente el camino a seguir si está desarrollando en Windows en lugar de solo para Windows.

Para lo que vale, Cocotron tiene licencia bajo la licencia MIT, y GNUStep tiene licencia bajo la LGPL.

Michael Buckley
fuente
1
Siempre puede portar los marcos de Cocoa que son de código abierto. Ejemplo es CoreFoundation.
Cole Johnson
No todo el Core Foundation es de código abierto. Una gran cantidad es de código cerrado.
uchuugaka
X'D No sé por qué este chico obtuvo la mejor respuesta, ni siquiera intentó las cosas de las que está hablando. Deberían hacer una nueva insignia para respuestas bs. Sin ofender @michael. Es una lectura interesante.
Wolfpack'08
Sin ofender, pero para el registro, en el momento en que escribí esta respuesta, había estado luchando durante algunas semanas para compilar Objective-C para Windows, y había intentado utilizar tanto GNUStep como Cocoatron. Finalmente me vi obligado a reescribir el proyecto en C ++, debido a algunos errores del compilador en ese momento, y los ivars no se inicializaron a 0 en Windows. Hice referencia a "No he probado esas características", pero estaba hablando de las nuevas características de Objective-C 2.0, que solo habían estado disponibles en las plataformas de Apple durante menos de un año cuando se escribió esta respuesta, y acababa de aterrizar en GNUStep.
Michael Buckley
89

Usted puede utilizar Objective C dentro del entorno Windows. Si sigue estos pasos, debería funcionar bien:

  1. Visite el sitio web de GNUstep y descargue GNUstep MSYS Subsystem(MSYS para GNUstep), GNUstep Core(Bibliotecas para GNUstep) yGNUstep 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\Foundation1 y asegúrese de que Foundation.hexista
  4. Abra un símbolo del sistema y ejecútelo gcc -vpara verificar que GNUstep MSYSesté instalado correctamente (si obtiene un error de archivo no encontrado, asegúrese de que la bincarpeta GNUstep MSYSesté en su PATH)
  5. Use 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 cdal lugar 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 helloworldpara 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úrese de que la ruta de la carpeta sea similar a la mía, de lo contrario obtendrá un error
teshguru
fuente
1
Esta instalación sugerida no funcionó en mi PC porque ya instalé gcc que utilicé para nasm. Así que sólo corregí gcc -o helloworld...a c:\gnustep\bin\gcc -o helloworld...y funcionó. La alternativa sería modificar las Variables de entorno que no hice, ya que solo estaba viendo el Objetivo C. Gracias a teshguru por la respuesta al punto.
Martin Berger
Considere eliminar el formato de código alrededor de los nombres de las cosas. GNUstep MYSY no es código, es solo el nombre de un software. Si desea que algo se destaque, ¿tal vez considere envalentonarlo? Y si algo se conecta a una etiqueta, considere usar los delimitadores de etiqueta, pero no debería haber ninguna razón para poner nombres propios en delimitadores de etiqueta.
Wolfpack'08
cuando se usa yhis c: \ gnustep \ bin \ 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 funciona para mí
Dalvik
13

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 la documentación de Cocoa de Apple Inc. Esto incluye AppKit, Foundation, Objective-C runtime y API de soporte como CoreGraphics y CoreFoundation.

http://www.cocotron.org/

amrox
fuente
44
El proyecto Cocotron está diseñado para ser compilado cruzado desde XCode, no escrito en Windows y compilado allí.
Dan Udey
2
esta no es una buena respuesta, ni siquiera estoy seguro de por qué el OP eligió esto como 'la respuesta' porque CoCotron es para Mac y el OP quiere una solución basada en Windows.
cbrulak 03 de
Tiene razón: me emocioné un poco cuando leí esto: "El objetivo general es proporcionar soporte completo en cualquier plataforma viable, el proyecto está destinado a ser lo más portátil posible. Sin embargo, la mayor parte del trabajo en este momento es se centró en proporcionar soporte para Microsoft Windows. En particular, las versiones basadas en NT, 2000 hasta Vista ".
Luther Baker
13

WinObjC? Windows Bridge para iOS (anteriormente conocido como 'Project Islandwood').

Windows Bridge para iOS (también denominado 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 compatibilidad con la compatibilidad con la API de iOS. Si bien la versión final se realizará más adelante este otoño (lo que permite que el puente aproveche 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 la caída. El puente de iOS como un proyecto de código abierto bajo la licencia MIT. Dada la ambición del proyecto, facilitar a los desarrolladores de iOS crear y ejecutar aplicaciones en Windows.

Salmaan Ahmed tiene una publicación detallada sobre 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 qué es y qué no es el puente. Lo mejor de todo es que el código fuente para el puente iOS está en vivo en GitHub en este momento.

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

Lee Stott
fuente
9

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

Ejemplos.
Apple ha lanzado el código fuente al 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 del objetivo-c. ¿Por qué molestarse en duplicar el esfuerzo? Incluso hay un archivo de proyecto de Visual Studio que se puede usar para crear un archivo objc.dll. O si eres realmente vago, 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í una respuesta.

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

Matthieu Cormier
fuente
2
Lamento no haber respondido su pregunta en el grupo, para resumir: el APSL apesta y tanto el tiempo de ejecución como la FQ están debajo de ellos.
Christopher Lloyd
1
¿Qué apesta de la APSL? ( opensource.apple.com/license/apsl ) No es invasivo como la GPL. Si modifica el código cubierto, debe hacer que ese código esté disponible. El código cubierto sería cualquier modificación que realice en CoreFoundation, por ejemplo, pero no incluiría su programa real. También debe marcar claramente sus modificaciones. Esto es una molestia, pero vale la pena compensar el uso del código altamente probado de Apple, ¿no?
Matthieu Cormier
8
No creo que entienda cómo funciona la terminación, no es algo que puedan hacer a todos a la vez, el código tiene licencia bajo los términos y puede usarse bajo esos términos de forma indefinida. Lo que puede suceder es que Apple puede señalar a las personas / empresas que creen que han violado la licencia. La FSF ya hace esto con violaciones de la GPL, ¿realmente crees que Apple es más amigable con los desarrolladores que la FSF? Si crees que los términos son intrascendentes y sin sentido, estoy seguro de que puedes convencer a Apple legal de que los elimine.
Christopher Lloyd
8
Cabe señalar que Apple trabajó con la FSF en los cambios a la APSL y que la FSF considera que la versión 2.0 de la APSL es una licencia de software libre. gnu.org/philosophy/apsl.html
Sean
3
Desde mi punto de vista (como alguien que ha tratado con BSD, LGPL, MIT y otras licencias en un producto patentado), la licencia de Apple es MENOS restrictiva que la GPL, lo que francamente es una molestia. Si puedo obtener BSD, MIT o APSL, prefiero trabajar con ellos que con GPL.
Lloyd Sargent
8

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 funciones de Objective-C 2.0 en la plataforma Windows.

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

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

Sin embargo, si está feliz de vivir sin los extensos frameworks 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 la suya (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 The 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, la fuente Objective-C 2.0 se puede compilar 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 nativas de Windows GUI con el -mwindowsindicador. Por ejemplo:

g++ -mwindows MyFile.cpp

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

Efímera
fuente
6

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

usuario397362
fuente
este programa no pudo compilarse con osc. # import <Foundation / Foundation.h> int main (int argc, const char * argv []) {NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog (@ "Pruebas ... \ n..1 \ n ... 2 \ n .... 3"); [drenaje de la piscina]; devuelve 0; }
KIRAN KJ
5

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

open-c flite

Simplemente descargue la última fuente. No necesita compilar todo CF-Lite, hay una solución llamada objc.sln. Tendrá que arreglar algunas de las rutas de inclusión, pero luego se compilará bien. Incluso se incluye un proyecto de prueba para que pueda ver algunos archivos Object-c .m compilados 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 sea compatible.

Aaron Stainback
fuente
Descargué y ejecuté este proyecto usando Visual Studio 2013 y obtuve 30 instancias de este error. Error 64 error C2632: 'char' seguido de 'bool' es ilegal C: \ opencflite-code-248-trunk \ include \ c99 \ stdbool.h 20 1 objc
Adam Mendoza
4

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

Del Léame:

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 incluye con OS X 10.8.5. El puerto se puede compilar 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 bloqueos, dependen de un trabajo más serio en proyectos de terceros. Las limitaciones son:

• Solo 32 bits: 64 bits está en marcha

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

• Sin cierres / bloqueos, hasta que libdispatch los admita en Windows

• Sin excepciones, hasta que clang los admita en Windows

• No hay GC de estilo antiguo, hasta que a alguien le importe ...

• Elementos internos: sin vtables, sin soporte de gdb, simplemente malloc, sin optimizaciones previas: algunas de estas cosas estarán disponibles en la compilación de 64 bits.

• Actualmente se requiere un compilador de sonidos parcheados; 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.

insys
fuente
2

Obtenga GNUStep aquí

Obtén MINGW aquí

Instale MINGW Instale GNUStep Luego pruebe

raksa eng
fuente
0

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 el Emulador de Apple II http://virtualapple.org/ . Parece limitado a los juegos.

Cloud Cho
fuente
0

Antes que nada, olvídate de las herramientas GNUStep . Ni ProjectManager ni ProjectCenter pueden llamarse IDE. Con el debido 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

ctagsAdmite Objective-C desde r771 (asegúrate de elegir la versión 5.9 previa al lanzamiento y agregarla --langmap=ObjectiveC:.m.ha la línea de comando, mira aquí ), para que tengas un código decente / navegación de etiqueta.

Aquí hay un breve tutorial sobre cómo agregar compatibilidad con Objective-C al complemento Vim tagbar.

Emacs

Lo mismo se aplica al etagsenvío con Emacsen moderno, por lo que puede comenzar con Emacs Objective C Mode . YASnippet proporcionará plantillas útiles:

Ynnippet objc-mode

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

Eclipse

CDT apoya Makefileproyectos basados ​​en:

ingrese la descripción de la imagen aquí

- técnicamente puede construir sus proyectos Objective-C de forma inmediata (en Windows, necesitará 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 se puede desactivar, pero aún así ...). Si desea resaltar la sintaxis adecuada, puede agregar Eclim a su Eclipse y disfrutar de todas las buenas características de Eclipse y Vim (ver arriba).

Otro plugin prometedor de Eclipse es Colorer , pero aún no es compatible con Objective-C. Sin embargo, siéntase libre de presentar una solicitud de función.

SlickEdit

SlickEdit , entre otras características de un buen IDE, hace de soporte de Objective-C. Si bien es bastante complejo de aprender (aunque no tan complejo como Emacs), creo que esta es su mejor opción siempre que no le 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 parche de KDevelop (15 años, pero ¿a quién le importa?). Personalmente, no creo que KDevelop tenga características superiores en comparación con Emacsen , por lo 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 portátiles.

Bajo
fuente