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
- 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.
- Haz clic en la pestaña Build Settings.
- 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: - Haz clic en el signo + y selecciona Agregar parámetro de configuración definido por el usuario.
- 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 carpetaj2objc/dist
si compilaste desde la fuente y la raíz esj2objc
. - 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
.
- Las rutas de búsqueda del framework agregan
- Para confirmar la configuración, busca
J2OBJC_HOME
. Deberías ver algo similar a lo siguiente:
Agregar una regla de compilación de J2ObjC
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 directorioMyProject
con tu fuente de Objective-C. En la Ejecutargit 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 grupoMyProject
, 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.
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.
Haz clic en la pestaña Reglas de compilación.
Haz clic en + para agregar una regla de compilación.
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:”.
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};
En el panel Output Files, haz clic en el botón + y agrega:
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h
.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):
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, ejecutals
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.