La plupart des types de projets Xcode sont compatibles avec les règles de compilation, ce qui permet aux développeurs de modifier comment les types de fichiers existants sont créés et pour définir comment les nouveaux types de fichiers sont créés. Les scripts J2ObjC sont conçus pour se connecter à des systèmes de compilation tels que Xcode.
Le projet j2objc-sample-reversi Exemple d'ajout de sources Java à un jeu iOS simple
Une compilation minimale nécessite de mettre à jour les paramètres de compilation, puis d'ajouter une règle de compilation J2ObjC.
Mettre à jour les paramètres de compilation
- Cliquez sur le projet dans le Navigateur de projets pour ouvrir l'éditeur de projet, puis assurez-vous que le cible d'application sélectionnée.
- Cliquez sur l'onglet Build Settings (Paramètres de compilation).
- Associez la bibliothèque d'émulation JRE (
jre_emul
) en ajoutant-ljre_emul
à Other Linker Flags. Le résultat doit se présenter comme suit: - Cliquez sur le signe +, puis sélectionnez Ajouter un paramètre défini par l'utilisateur.
- Nommez le paramètre
J2OBJC_HOME
et définissez sa valeur sur l'emplacement de J2ObjC. Cela devrait soit le dossier résultant de la décompression du fichier release zip ou le dossierj2objc/dist
si vous avez compilé une compilation à partir de la source et que votre racine estj2objc
. - Sous Search Paths (Chemins de recherche), modifiez les éléments suivants:
<ph type="x-smartling-placeholder">
- </ph>
- Framework Search Paths (Chemins de recherche de framework) ajoutent
${J2OBJC_HOME}/frameworks
- Library Search Paths (Chemins de recherche de la bibliothèque) ajoutent
${J2OBJC_HOME}/lib
(pour chaque configuration de compilation). - User Header Search Paths (Chemins de recherche d'en-têtes utilisateur) ajoutent
${J2OBJC_HOME}/include
.
- Framework Search Paths (Chemins de recherche de framework) ajoutent
- Confirmez vos paramètres en recherchant
J2OBJC_HOME
. Le résultat doit ressembler à ceci:
Ajouter une règle de compilation J2ObjC
Déterminez le répertoire racine de vos fichiers sources Java, que nous appellerons
$source-root
Le répertoire racine est celui qui contient de vos fichiers sources.Si vous utilisez git et souhaitez extraire vos fichiers Java d'un autre projet git, vous pouvez Ajoutez un sous-module pour suivre le projet avec votre code sources. Par exemple, supposons que votre projet Xcode (xcodeproj) se trouve dans
~/dev/MyProject
, vous avez probablement un autre répertoireMyProject
avec votre source Objective-C. Dans Exécution degit submodule add git@github.com:user/javaproject
dans le répertoire~/dev/MyProject/MyProject
Créez un répertoire~/dev/MyProject/MyProject/javaproject
avec la source pour votre projet Java. juste à côté de vos sources Objective-C. Vous pouvez ensuite faire glisser ce dossier dans votre projet Xcode. sous le groupeMyProject
, pour lequel Xcode duplique votre système de fichiers.${PROJECT_DIR}/MyProject/javaproject/src
correspond à$source-root
.Si vos sources Java se trouvent dans un groupe ou un répertoire de votre projet Xcode, la classe
$source-root
est${PROJECT_DIR}/__group_or_directory_name__
.En cas de doute, faites un clic droit sur ce groupe ou ce répertoire et sélectionnez Afficher dans le Finder pour afficher et utilisez le chemin absolu.
Par exemple, si vous avez un package Java
foo.bar
dans un répertoire appelé~/myproject/src
, les fichiers Java de ce package doivent se trouver dans~/myproject/src/foo/bar/**.java
, ce qui signifie~/myproject/src
est le répertoire racine de votre projet.Si les fichiers sources Java sont externes au projet Xcode, saisissez le chemin d'accès complet utilisé pour les répertoriant dans une fenêtre de terminal.
Cliquez sur le projet dans le Navigateur de projets pour ouvrir l'éditeur de projet, puis assurez-vous que le cible d'application sélectionnée.
Cliquez sur l'onglet Build Rules (Règles de compilation).
Cliquez sur le signe + pour ajouter une règle de compilation.
Dans l'option Process (Traiter) de la nouvelle règle, sélectionnez "Java source files" (Fichiers sources Java). L'option Utilisation doit être définie sur "Script personnalisé".
Dans la zone de texte du script personnalisé, ajoutez ce qui suit (n'oubliez pas de remplacer
$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};
Dans le panneau "Output Files" (Fichiers de sortie), cliquez sur le bouton +, puis ajoutez
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h
.Cliquez à nouveau sur le bouton +, puis ajoutez
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m
.
Lorsque vous avez terminé, le panneau des paramètres doit se présenter comme suit (remarque: à partir de la version 10.2, Xcode définit toujours DERIVED_FILES_DIR identique à DERIVED_FILE_DIR pour assurer la rétrocompatibilité):
Associer des bibliothèques supplémentaires
L'étape de compilation du lien (phase de compilation "Lier le binaire avec des bibliothèques" de Xcode) nécessite Les indicateurs spécifiques à J2ObjC, qui varient en fonction de la manière dont votre application utilise les classes Java traduites. Pour obtenir la liste complète, consultez la page Paramètres des liens obligatoires. En voici quelques-unes Exemples de bibliothèques supplémentaires que vous devrez peut-être associer:
- Pour utiliser le package
java.util.zip
, vous devez associer la bibliothèque libz.dylib en ajoutant-ljre_zip
à vos autres indicateurs Linker. - Pour générer des hachages sécurisés, vous devez ajouter le framework de sécurité à votre projet.
Déboguer les problèmes de compilation
Si Xcode signale un échec de compilation en suivant ces étapes, ouvrez Issue Browser. cliquez sur une erreur pour en examiner les détails. Cela montrera les détails de ce que la ligne de commande a été exécutée. Voici quelques erreurs courantes:
Impossible de résoudre le cours : très probablement, le
$source-path
que vous avez utilisé était incorrect. Recherchez l'option-sourcepath
dans la commande exécutée et assurez-vous qu'elle pointe vers la racine de vos fichiers sources Java."JreEmulation.h" fichier introuvable : il s'agit très probablement d'une erreur de recherche d'en-tête utilisateur. Paths (Chemins d'accès). Dans la commande de compilation, recherchez l'option
-I
avec le chemin d'accès. si tout semble correct, Copiez le chemin d'accès (et non -I) et, dans une fenêtre de terminal, exécutezls
avec ce chemin d'accès pour le vérifier. n'est pas une faute de frappe."_IOSClass_FromClass", référencé à partir de : ou "_OBJCCLASS$_Java" : la bibliothèque Search Paths (Chemins de recherche) est incorrect, ou vous avez oublié d'associer la bibliothèque d'émulation JRE en définissant Other Indicateurs Linker dans
-ljre_emul
. Vous devrez peut-être aussi associer des bibliothèques supplémentaires.Symboles non définis : _iconv* : lien dans la bibliothèque iconv requise.
Si le problème persiste, posez-lui la question j2objc-discussion