Règles de compilation Xcode

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

  1. 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.
  2. Cliquez sur l'onglet Build Settings (Paramètres de compilation).
  3. 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: Associer la bibliothèque d'émulation JRE dans Xcode
  4. Cliquez sur le signe +, puis sélectionnez Ajouter un paramètre défini par l'utilisateur.
  5. 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 dossier j2objc/dist si vous avez compilé une compilation à partir de la source et que votre racine est j2objc.
  6. 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.
  7. Confirmez vos paramètres en recherchant J2OBJC_HOME. Le résultat doit ressembler à ceci: Paramètres de compilation Xcode

Ajouter une règle de compilation J2ObjC

  1. 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épertoire MyProject avec votre source Objective-C. Dans Exécution de git 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 groupe MyProject, 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.

  2. 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.

  3. Cliquez sur l'onglet Build Rules (Règles de compilation).

  4. Cliquez sur le signe + pour ajouter une règle de compilation.

  5. 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é".

  6. 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};
    
  7. Dans le panneau "Output Files" (Fichiers de sortie), cliquez sur le bouton +, puis ajoutez ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h.

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

Règles de compilation Xcode

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écutez ls 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