Building J2ObjC

Conditions requises

  • Système Apple Mac OS X
  • La dernière version de Xcode
  • JDK 11 installé
  • Apache Maven
  • (Recommandé, mais pas obligatoire) Source Google Protocol Buffer

Configuration Mac

  • Installez les outils de ligne de commande Xcode en exécutant la commande suivante:
sudo xcode-select --install
  • Ajoutez ceci au fichier .bash_profile :
export JAVA_HOME=`/usr/libexec/java_home -v 11`
  • Si Maven n'est pas installé (essayez mvn -version dans un terminal), utilisez Homebrew:
brew install maven

Créer un fork du projet J2ObjC

Pour créer un fork du projet J2ObjC, ouvrez sa page principale, puis cliquez sur le bouton "Fork" (Fork) :

Fork

Sélectionnez le nom de votre compte GitHub. La fourchette sera créée en quelques secondes.

Ensuite, clonez une copie de votre fork sur votre système local pour le développement. Commencez par cliquer sur le bouton [Cloner ou télécharger], puis sur le bouton Copier dans le presse-papiers:

Cloner

Clonez ensuite le dépôt dans un répertoire local:

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

Installer protobuf et abseil

Vous devez installer protobuf C++ avant de pouvoir compiler J2ObjC.

Pour installer le package binaire protobuf, utilisez Homebrew:

brew install protobuf

La compilation C++ de Protobuf dépend désormais de la bibliothèque Abseil. Installez-la également:

brew install abseil

Vous devez définir PROTOBUF_ROOT_DIR sur la racine où protobuf est installé. Normalement, il s'agit de /usr/local, la valeur par défaut de Homebrew. Ajoutez les éléments suivants à votre .bash_profile:

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

Pour le vérifier, exécutez $PROTOBUF_ROOT_DIR/bin/protoc --version.

Créer J2ObjC

Pour créer à partir d'une ligne de commande dans une fenêtre de terminal, exécutez:

# 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

Tester J2ObjC

Pour tester à partir d'une ligne de commande dans une fenêtre de terminal, exécutez:

# Run translator and library unit tests
make test

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

Nettoyer un build

# Remove all files generated by the build
make clean

Builds parallèles

La compilation J2ObjC prend en charge les compilations parallèles, qui sont spécifiées à l'aide de l'indicateur -j<n>, où n est le nombre maximal de tâches simultanées. La valeur maximale dépend de la vitesse de votre système. Nous vous recommandons de commencer par -j4. Augmentez ce nombre pour réduire les temps de compilation si votre système peut le gérer, et diminuez-le si la compilation échoue avec des erreurs système.

Créer des architectures iOS 32 bits

Les architectures iOS 32 bits ("iphone" et "simulator") ne sont pas compilées par défaut. Vous pouvez compiler j2objc avec ces éléments en les spécifiant d'abord dans la variable d'environnement J2OBJC_ARCHS:

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

Spécifier un sous-ensemble d'architectures compatibles peut généralement être utilisé pour accélérer les compilations locales, en spécifiant uniquement les architectures dont votre application a besoin. Pour créer uniquement iOS 64 bits ("iphone64") et son simulateur associé ("simulator64"), par exemple, définissez J2OBJC_ARCHS="iphone64 simulator64" avant d'exécuter make.

Créer la distribution complète

Bien que l'équipe j2objc ne publie plus de distributions précompilées sur GitHub en raison de ses limites de taille de fichier, le script "tout compiler en une seule étape" peut toujours être utilisé:

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

L'exécution de ce script prend beaucoup de temps, car chaque architecture pour chaque package j2objc est compilée. Toutefois, il est très utile en cas d'échecs de compilation généraux, car il ne compile qu'avec l'ensemble minimal de variables d'environnement. Si le script build_distribution réussit, mais que les étapes de compilation normales ne le font pas, vérifiez si des variables d'environnement locales sont définies de manière incorrecte.