Cómo compilar J2ObjC

Requisitos

  • Sistema Apple Mac OS X
  • La versión más reciente de Xcode
  • JDK 11 instalado
  • Apache Maven
  • Fuente de búfer de protocolo de Google (recomendado, pero no obligatorio)

Configuración de Mac

  • Para instalar las herramientas de línea de comandos de Xcode, ejecuta lo siguiente:
sudo xcode-select --install
  • Agrega a .bash_profile:
export JAVA_HOME=`/usr/libexec/java_home -v 11`
  • 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:

Fork

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

A continuación, clona una copia de la 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 en el 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++ para poder compilar J2ObjC.

Para instalar el paquete binario de protobuf, usa Homebrew:

brew install protobuf

La compilación de Protobuf C++ ahora depende de la biblioteca de Abseil, así que instálala también:

brew install abseil

Debes establecer PROTOBUF_ROOT_DIR en la raíz donde está instalado protobuf. Por lo general, ese es el /usr/local predeterminado de Homebrew. 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

Pruebas de J2ObjC

Para probar 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 en paralelo, que se especifican con la marca -j<n>, donde 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 acortar los tiempos de compilación si tu sistema puede manejarla y disminuyela si make falla con errores del sistema.

Cómo compilar 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 especifícalos en la variable de entorno J2OBJC_ARCHS:

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

En general, especificar un subconjunto de arquitecturas compatibles puede usarse para acelerar las compilaciones locales, ya que solo se especifican las arquitecturas que necesita tu app. Para compilar solo iOS de 64 bits ("iphone64") y su simulador asociado ("simulator64"), por ejemplo, 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 precompiladas en GitHub debido a las limitaciones de tamaño de los archivos, aún se puede usar la secuencia de comandos "compila todo en un solo paso":

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

Esta secuencia de comandos tarda mucho tiempo en ejecutarse porque se compila cada arquitectura para cada paquete de j2objc. Sin embargo, es muy útil si hay fallas 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 realiza correctamente, pero los pasos de compilación normales no, revisa si alguna variable de entorno local está configurada de forma incorrecta.