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) :
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:
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.