Cómo compilar J2ObjC

Requisitos

  • Sistema Apple Mac OS X
  • La versión más reciente de Xcode
  • JDK 17 instalado
  • Apache Maven
  • (Recomendado, pero no obligatorio) Fuente de Protocol Buffer de Google

Configuración de Mac

  • Para instalar las herramientas de línea de comandos de Xcode, ejecuta el siguiente comando:
sudo xcode-select --install
  • Agrega a .bash_profile:
export JAVA_HOME=`/usr/libexec/java_home -v 17`
  • Si Maven no está instalado (prueba mvn -version en una terminal), usa Homebrew:
brew install maven

Crea una bifurcación del proyecto J2ObjC

Para bifurcar el proyecto de J2ObjC, abre su página principal y haz clic en el botón Fork:

Bifurcar

Selecciona el nombre de tu cuenta de GitHub y la bifurcación se creará en unos segundos.

A continuación, clona una copia de tu bifurcación en tu sistema local para el desarrollo. Primero, haz clic en el [botón Clonar o descargar] y, luego, en el botón Copiar al portapapeles:

Clonar

Luego, clona en un directorio local:

git clone (Command-V)  # Paste the copied URL

Instala protobuf y abseil

Debes tener instalado protobuf C++ antes de poder compilar J2ObjC.

Para instalar el paquete binario de protobuf, usa Homebrew:

brew install protobuf

La compilación de C++ de Protobuf ahora depende de la biblioteca de Abseil, por lo que también debes instalarla:

brew install abseil

Debes establecer PROTOBUF_ROOT_DIR en la raíz donde está instalado protobuf. Por lo general, es el valor predeterminado de Homebrew /usr/local. Agrega lo siguiente a tu .bash_profile:

export PROTOBUF_ROOT_DIR=/usr/local # or your custom Homebrew dir

Para verificarlo, ejecuta $PROTOBUF_ROOT_DIR/bin/protoc --version.

Cómo compilar J2ObjC

Para compilar desde una línea de comandos en una ventana de Terminal, ejecuta lo siguiente:

# Build just the translator and libraries
make dist

# Build the protocol buffer compiler and runtime for J2ObjC
make protobuf_dist

# Build everything that is included in the project's
distribution bundles
make all_dist

Prueba de J2ObjC

Para realizar pruebas desde una línea de comandos en una ventana de Terminal, ejecuta lo siguiente:

# Run translator and library unit tests
make test

# Run all unit tests, including for protocol buffers
make test_all

Cómo limpiar una compilación

# Remove all files generated by the build
make clean

Compilaciones en paralelo

La compilación de J2ObjC admite compilaciones paralelas, que se especifican con la marca -j<n>, en la que n es la cantidad máxima de tareas simultáneas. El máximo depende de la velocidad de tu sistema. Te sugerimos que comiences con -j4. Aumenta la cantidad para reducir los tiempos de compilación si tu sistema puede controlarlo y disminúyela si make falla con errores del sistema.

Compilación de arquitecturas de iOS de 32 bits

Las arquitecturas de iOS de 32 bits ("iphone" y "simulator") no se compilan de forma predeterminada. Para compilar j2objc con estos, primero debes especificarlos en la variable de entorno J2OBJC_ARCHS:

$ export J2OBJC_ARCHS="iphone simulator"
$ make -j8 all_dist

Especificar un subconjunto de arquitecturas compatibles generalmente se puede usar para acelerar las compilaciones locales, ya que solo se especifican las arquitecturas que necesita tu app. Por ejemplo, para compilar solo el iOS de 64 bits (“iphone64”) y su simulador asociado (“simulator64”), define J2OBJC_ARCHS="iphone64 simulator64" antes de ejecutar make.

Cómo compilar la distribución completa

Aunque el equipo de j2objc ya no publica distribuciones prediseñadas en GitHub debido a sus limitaciones de tamaño de archivo, aún se puede usar la secuencia de comandos "compilar todo en un solo paso":

$ scripts/build_distribution.sh HEAD-<current-date> $PROTOBUF_ROOT_DIR

Esta secuencia de comandos tarda mucho en ejecutarse porque se compila cada arquitectura para cada paquete de j2objc. Sin embargo, es muy útil si hay errores generales de compilación, ya que se compila solo con el conjunto mínimo de variables de entorno. Si la secuencia de comandos build_distribution se ejecuta correctamente, pero los pasos de compilación normales no, revisa si alguna variable de entorno local está configurada de forma incorrecta.