Pregunta

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

¿Cygwin y gcc?¿Hay alguna manera de poder 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 que me dan acceso a esas llamadas, pero no sé cómo hacerlo sin buscar en Google y obtener instrucciones graduales.

¿Alguien conoce algún buen recurso en línea o de libros para hacer o explicar este tipo de cosas?

¿Fue útil?

Solución

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

Cocotron implementa muchas cosas que GNUStep no, como CoreGraphics y CoreData, aunque no puedo garantizar qué tan completa es su implementación en un marco específico.Su objetivo es mantener 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 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 usas una versión suficientemente nueva de gcc, es posible que puedas usarlas.Hace unos años no pude usar Objective-C++ con GNUStep.Sin embargo, GNUStep compila desde prácticamente 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 archivos MAKE, por lo que solo puedes compilar sus marcos listos para usar en OS X.También viene con instrucciones sobre cómo compilar aplicaciones de Windows en XCode, pero no en ninguna 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 tendrás que hacerlo solo, 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 tiene la licencia MIT y GNUStep tiene la licencia LGPL.

Otros consejos

poder utilice Objective C dentro del entorno Windows.Si sigue estos pasos, debería funcionar bien:

  1. Visita el Sitio web de GNUstep y descargar GNUstep MSYS Subsystem (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. Navegar 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 eso GNUstep MSYS esté instalado correctamente (si recibe un error de archivo no encontrado, asegúrese de que el bin carpeta de GNUstep MSYS está en tu 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 a donde guardaste el programa "Hello World" y luego lo compilaste: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 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 su carpeta sea similar a la mía; de lo contrario, obtendrá un error

También:

Cocotron es un proyecto de código abierto que tiene como objetivo implementar una API Objective-C multiplataforma similar a la descrita en la documentación Cocoa de Apple Inc..Esto incluye AppKit, Foundation, tiempo de ejecución Objective-C 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 con API de iOS.Si bien el lanzamiento final se realizará a finales de este otoño (lo que permitirá que el puente aproveche las nuevas capacidades de herramientas que se incluirá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.De aquí al otoño.El puente iOS como proyecto de código abierto bajo licencia MIT.Dada la ambición del proyecto, facilitar a los desarrolladores de iOS la creación y ejecución de aplicaciones en Windows.

Salmaan Ahmed tiene una publicación detallada sobre Windows Bridge para iOS http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/ discutir el compilador, el tiempo de ejecución, la integración IDE y qué es y qué no es el puente.Lo mejor de todo es que el código fuente del puente iOS ya está disponible. GitHub ahora mismo.

El puente iOS admite aplicaciones de Windows 8.1 y Windows 10 creadas para arquitecturas de procesador x86 y x64, y pronto agregaremos optimizaciones del compilador y compatibilidad con ARM, que agrega compatibilidad con dispositivos móviles.

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

Ejemplos.
Apple ha publicado el código fuente para 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 se puede utilizar para crear un archivo objc.dll.O si eres realmente vago, puedes simplemente 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 de Apple.publiqué un pregunta sobre esto pero no recibió respuesta.

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

Soy consciente de que esta es una publicación muy antigua, pero encontré una solución que solo estuvo disponible más recientemente Y habilita casi todas las funciones 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 de Objective-C (consulte las notas de lanzamiento 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 se compile legítimamente con Clang en una Mac también se compilará con gcc 4.6 sin modificaciones.

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á contento 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 usted puede escribir las suyas propias (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 del 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, el código fuente de 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 GUI nativas de Windows con el -mwindows bandera.Por ejemplo:

g++ -mwindows MyFile.cpp

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

Verificar 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 desea experimentar, aquí hay un compilador Objective-C para .NET (Windows): qckapp

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

flite abierto-c

Simplemente descargue la fuente más reciente.No es necesario compilar todo CF-Lite; existe una solución llamada objc.sln.Necesitará 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 Objective-C .m compilados y funcionando en Visual Studio.Lo triste es que solo funciona con Win32, no con x64.Hay algún código ensamblador que debería escribirse para x64 para que lo admita.

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

Del archivo Léame:

Subjetivo es un intento de traer el objetivo C 2.0 con el soporte de ARC a Windows.

Este proyecto es una bifurcación de OBJC4-532.2, el tiempo de ejecución del objetivo C que se envía con OS X 10.8.5.El puerto se puede compilar de forma cruzada en OS X usando llvm-clang combinado con el enlazador MinGW.

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

• Sólo 32 bits: 64 bits está en marcha

• Solo enlaces estáticos: los enlaces dinámicos están en marcha

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

• Sin excepciones, hasta que clang las admita en Windows

• No hay GC al viejo estilo, hasta que a alguien le importe...

• Internos:Sin vtables, sin soporte GDB, solo malloc, sin preoptimizaciones: algunas de estas cosas estarán disponibles bajo la 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 sobre el Grupo Cocotron, describiendo algunos de los avances y problemas encontrados.

Obtener GNUStep aquí

Obtener MINGW aquí

Instalar MINGW Instalar GNUStep Entonces prueba

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

Pequeño proyecto:jGRASP con gcc Gran proyecto:cocotrón

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

Primero que nada, olvídate de Paso GNU herramientas.Ni Gerente de proyecto ni Centro de proyectos se puede llamar IDE.Con todo respeto, parece que chicos de Paso GNU El proyecto está estancado a finales de los 80 (que es cuando Próximo paso apareció por primera vez).

Empuje

ctags soporte Objective-C desde r771 (asegúrese de elegir la versión preliminar 5.9 y agregar --langmap=ObjectiveC:.m.h a la línea de comando, ver aquí), por lo que tendrá una finalización de código/navegación de etiquetas decente.

Aquí hay un breve cómo sobre cómo agregar compatibilidad con Objective-C al complemento de la barra de etiquetas de Vim.

Emacs

Lo mismo se aplica a etags enviado con Emacsen moderno, para que pueda comenzar con Emacs Modo objetivo C. YASnippet proporcionará plantillas útiles:

YASnippet objc-mode

y si quieres algo más inteligente que el finalización de código básico basado en etiquetas, mira esto pregunta.

Eclipse

CDT apoya Makefile-proyectos basados ​​en:

enter image description here

- técnicamente puedes construir tus proyectos Objective-C listos para usar (en Windows, necesitarás el Cygwin o MinGW cadena de herramientas).El único problema es el editor de código, que informará muchos errores en lo que cree que es un código puro. C código (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 para usted Eclipse y disfruta de todas las buenas características de ambos Eclipse y Empuje (véase más arriba).

Otro prometedor Eclipse el complemento es colorante, pero aún no es compatible con Objective-C.Sin embargo, no dudes en presentar una solicitud de función.

Resbaladizo

Resbaladizo, entre otras características de un gran IDE, hace apoyo C objetivo.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 una Complemento de eclipse que se puede utilizar como alternativa al editor independiente.

KDesarrollar

Se rumorea que existe un KDesarrollar parche (15 años, pero ¿a quién le importa?).Yo personalmente no creo KDesarrollar tiene características superiores 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 portátiles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top