Cómo comenzar

Primero, debes hacer lo siguiente:

Para traducir un archivo fuente Java (por ejemplo, Hello.java):

public class Hello {
  public static void main(String[] args) {
    System.out.println("hello, world");
  }
}
j2objc Hello.java
translating Hello.java
Translated 1 file: 0 errors, 0 warnings

Para compilar el archivo traducido, haz lo siguiente:

j2objcc -c Hello.m

j2objcc es una secuencia de comandos de wrapper que invoca tu compilador de C (normalmente clang, también conocido como LLVM, el compilador C/C++/Objective-C de Apple). Para compilar el archivo ejecutable, haz lo siguiente:

j2objcc -o hello Hello.o
./hello Hello
hello, world

j2objcc reenvía las opciones que especifiques para el compilador de Objective-C. Por ejemplo, para traducir y compilar con símbolos de depuración, usa la marca -g:

j2objcc -g -o hello Hello.m

Preguntas frecuentes

Cuando ejecuto j2objcc, se queja de que no se encuentra "Foundation/Foundation.h".

Si la compilación falla porque no se encontró Foundation/Foundation.h, el problema es que no se encontró el SDK de iOS (es allí donde se encuentra ese encabezado).

  1. Asegúrate de tener Xcode instalado.
  2. Ejecuta xcode-select --install para instalar las herramientas de línea de comandos.
  3. Ejecuta xcodebuild -showsdks, que debería mostrar al menos un SDK para el simulador de OS X, iOS y iOS.
  4. Si eso falla, borra la aplicación de Xcode y ve al paso 1.

¿Qué marcas toma j2objcc?

La secuencia de comandos j2objcc es solo un wrapper alrededor del compilador Objective-C, clang. Ejecuta man cc o man clang para mostrar sus opciones.

Cuando compilas con j2objcc, no se pueden encontrar los archivos de encabezado (.h) de mi proyecto.

El compilador necesita conocer el directorio en el que residen los archivos traducidos mediante -I <directory>. Por lo tanto, si los archivos se generaron con j2objc -d foo/bar ..., el comando j2objcc necesita -Ifoo/bar. Si no se especificó ningún directorio de salida en el comando j2objc, se debe agregar -I..

¿Cómo ejecuto en Windows o Linux?

J2ObjC es una herramienta de iOS diseñada para desarrollar apps en Mac OS X. No puedes compilar ningún código traducido porque requiere un SDK de OS X o iOS de Apple, lo que requiere que sus SDKs solo se usen en Mac.

Sin embargo, como el traductor J2ObjC es Java puro, la traducción se puede realizar en otros sistemas. En Linux, la secuencia de comandos j2objc debería funcionar sin cambios. El uso en Windows requiere CygWin o invocar Java directamente. Para invocar al traductor sin la secuencia de comandos j2objc, usa el siguiente comando, en el que J2OBJC_DIR es el directorio donde se descomprimió el archivo de distribución J2ObjC:

java -Xbootclasspath:\lib\jre_emul.jar -jar J2OBJC_DIR\lib\j2objc.jar [j2objc-flags] [source files]