Reglas de compilación de Xcode

La mayoría de los tipos de proyectos de Xcode admiten reglas de compilación, lo que permite a los desarrolladores modificar cómo se crean los tipos de archivos existentes y cómo se crean los nuevos. Las secuencias de comandos de J2ObjC están diseñadas intencionalmente para conectarse a sistemas de compilación como Xcode.

El proyecto j2objc-sample-reversi es un ejemplo de cómo agregar fuentes de Java a un juego simple de iOS.

Una compilación mínima requiere actualizar la configuración de compilación y luego agregar una regla de compilación J2ObjC.

Cómo actualizar la configuración de compilación

  1. Haz clic en el proyecto en el Navegador de proyectos para abrir el Editor de proyectos y asegurarte de que el destino de la aplicación.
  2. Haz clic en la pestaña Build Settings.
  3. Para vincular la biblioteca de emulación de JRE (jre_emul), agrega -ljre_emul a otras marcas del vinculador. Se verá de la siguiente manera: Cómo vincular la biblioteca de emulación de JRE en Xcode
  4. Haz clic en el signo + y selecciona Agregar parámetro de configuración definido por el usuario.
  5. Asigna el nombre J2OBJC_HOME a la configuración y establece su valor en la ubicación de J2ObjC. Esto debería Puede ser la carpeta que resulta de descomprimir el archivo ZIP de actualización. o la carpeta j2objc/dist si compilaste desde la fuente y la raíz es j2objc.
  6. En Rutas de búsqueda, modifica lo siguiente:
    • Las rutas de búsqueda del framework agregan ${J2OBJC_HOME}/frameworks
    • Las rutas de búsqueda de bibliotecas agregan ${J2OBJC_HOME}/lib (para cada configuración de compilación).
    • Rutas de búsqueda de encabezado de usuario agrega ${J2OBJC_HOME}/include.
  7. Para confirmar la configuración, busca J2OBJC_HOME. Deberías ver algo similar a lo siguiente: Configuración de compilación de Xcode

Agregar una regla de compilación de J2ObjC

  1. Determina el directorio raíz de tus archivos fuente de Java, a los que llamaremos. $source-root El directorio raíz es el que contiene la parte superior de tus archivos fuente.

    • Si usas Git y quieres extraer los archivos Java de otro proyecto de Git, puedes agrega un submódulo que realice el seguimiento del proyecto con tu Java fuentes de datos. Por ejemplo, supongamos que tu proyecto Xcode (xcodeproj) se encuentra en ~/dev/MyProject y, luego, es probable que tengas otro directorio MyProject con tu fuente de Objective-C. En la Ejecutar git submodule add git@github.com:user/javaproject del directorio ~/dev/MyProject/MyProject para Crea un directorio ~/dev/MyProject/MyProject/javaproject con código fuente para tu proyecto de Java. junto con las fuentes de Objective-C. Luego, puedes arrastrar esa carpeta al proyecto Xcode en el grupo MyProject, que tiene Xcode duplica tu sistema de archivos. ${PROJECT_DIR}/MyProject/javaproject/src es $source-root.

    • Si tus fuentes de Java están en un grupo o directorio de tu proyecto de Xcode, el archivo $source-root es ${PROJECT_DIR}/__group_or_directory_name__.

    • Si tienes dudas, haz clic con el botón derecho en ese grupo o directorio y selecciona Mostrar en Finder para ver y usa la ruta de acceso absoluta.

    • Por ejemplo, si tienes un paquete de Java foo.bar en un directorio llamado ~/myproject/src, los archivos Java de ese paquete deberían estar en ~/myproject/src/foo/bar/**.java, lo que significa ~/myproject/src es el directorio raíz de tu proyecto.

    • Si los archivos fuente de Java son externos al proyecto de Xcode, ingresa la ruta de acceso completa que se usa cuando y enumerarlos en una ventana de Terminal.

  2. Haz clic en el proyecto en el Navegador de proyectos para abrir el Editor de proyectos y asegurarte de que el destino de la aplicación.

  3. Haz clic en la pestaña Reglas de compilación.

  4. Haz clic en + para agregar una regla de compilación.

  5. Para la opción Procesar de la regla nueva, selecciona "Archivos de origen Java". La opción Uso debería ser “Secuencia de comandos personalizada:”.

  6. En el cuadro de texto de la secuencia de comandos personalizada, agrega lo siguiente (recuerda reemplazar $source-root):

    if [ ! -f "${J2OBJC_HOME}/j2objc" ]; then echo "J2OBJC_HOME is not correctly defined, currently set to '${J2OBJC_HOME}'"; exit 1; fi;
    "${J2OBJC_HOME}/j2objc" -d ${DERIVED_FILE_DIR} -sourcepath "$source-root" --no-package-directories -g ${INPUT_FILE_PATH};
    
  7. En el panel Output Files, haz clic en el botón + y agrega: ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h.

  8. Vuelve a hacer clic en el botón + y agrega ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m.

Cuando termines, el panel de configuración debería ser similar al siguiente: (nota: a partir de la versión 10.2, Xcode aún define es la misma que la variable DERIVED_FILES_DIR para DERIVED_FILE_DIR para retrocompatibilidad):

Reglas de compilación de Xcode

Cómo vincular bibliotecas adicionales

El paso de compilación de vínculos (fase de compilación “Vincular binario con bibliotecas” de Xcode) necesita Marcas específicas de J2ObjC, que varían según la manera en que tu aplicación usa las clases de Java traducidas. Para obtener una lista completa, consulte Configuración de vínculos obligatoria. Estos son algunos ejemplos ejemplos de bibliotecas adicionales que podrías necesitar vincular:

  • Para usar el paquete java.util.zip, debes agregar la biblioteca libz.dylib -ljre_zip a tus otras marcas del vinculador.
  • Para generar un hash seguro, debes agregar el framework de seguridad a tu proyecto.

Cómo depurar problemas de compilación

Si Xcode informa un error de compilación con estos pasos, abre el Navegador de problemas y haz clic en un error para inspeccionar los detalles. Esto te mostrará los detalles de qué línea de comandos ejecuta una instrucción de directivas de grupo. Estos son algunos errores comunes:

  • No se puede resolver la clase: Lo más probable es que el $source-path que usaste sea incorrecto. Busca la opción -sourcepath en el comando ejecutado y asegúrate de que esté orientada al de los archivos fuente de Java.

  • “JreEmulation.h” archivo no encontrado: Lo más probable es que el problema sea una mala búsqueda de encabezado de usuario Paths. Busca en el comando de compilación la opción -I con la ruta de acceso. si se ve bien, Copia la ruta de acceso (no la -I) y, en una ventana de terminal, ejecuta ls con esa ruta para verificarla allí. no es un error tipográfico.

  • "_IOSClass_FromClass", cuya referencia es: o "_OBJCCLASS$_Java": Puede ser la Biblioteca Search Paths no es correcto, o bien olvidaste vincular la biblioteca de emulación de JRE configurando Other Marcas del vinculador como -ljre_emul. Es posible que también debas vincular bibliotecas adicionales.

  • Símbolos no definidos: _iconv*: Corresponde a un vínculo en la biblioteca de iconv obligatoria.

Si aún tienes problemas, pregúntale al grupo j2objc-debate.