Correspondance entre les ressources Java et les ressources iOS

Que sont les ressources Java ?

Les ressources Java sont des fichiers de données empaquetés avec des applications et des bibliothèques Java. Ces ressources sont chargées au moment de l'exécution, Class.getResource(String name), qui renvoie un java.net.URL, ou Class.getResourceAsStream(String name), qui renvoie un java.io.InputStream. La méthode getResourceAsStream() est normalement utilisée lorsqu'une ressource est censée être disponible, car elle génère une exception IOException dans le cas contraire. La méthode getResource() renvoie une valeur nulle si la ressource n'est pas présente. Il est donc utile de tester les ressources facultatives.

Noms et chemins d'accès aux ressources

J2ObjC localise les ressources en consultant le bundle principal de l'application ([NSBundle mainBundle]), à l'aide du chemin d'accès relatif ou absolu de la ressource:

Chemins relatifs

La méthode privilégiée pour spécifier des chemins d'accès aux ressources consiste à utiliser des chemins relatifs. Les chemins d'accès relatifs ne commencent pas par une barre oblique ("/"). Lors de la lecture d'une ressource avec un chemin d'accès relatif, le nom du package de la classe est modifié, en remplaçant les points (".") du nom du package par des barres obliques ("/"), puis le chemin relatif spécifié dans l'appel de la méthode Class.getResource(String name) ou Class.getResourceAsStream(String name) est ajouté au chemin d'accès au package.

Par exemple, si une application possède une classe foo.bar.Mumble, le chemin de base de toutes les ressources relatives aux classes de ce package est /foo/bar. Lorsque Mumble.class.getResource("oops/error.jpg") est appelé, oops/error.jpg est ajouté au chemin d'accès du package, de sorte que son chemin d'accès complet à la ressource est /foo/bar/oops/error.jpg.

Chemins absolus

Il est également possible d'accéder à une ressource à l'aide d'un chemin absolu en commençant le nom de la ressource par une barre oblique ("/"). Les noms de packages étant ignorés, J2ObjC localise les chemins d'accès absolus dans le bundle principal de l'application à l'aide des chemins d'accès exactement comme spécifié dans les références Class.getResource(String name) ou Class.getResourceAsStream(String name) dans les sources Java de l'application. Dans l'exemple ci-dessus, Mumble.class.getResource("/oops/error.jpg") présente le chemin d'accès complet à la ressource /oops/error.jpg, ignorant le nom du package foo.bar.

Ajouter des ressources à une application iOS

Pour ajouter des fichiers de ressources à une application iOS dans Xcode, ouvrez l'onglet "Build Phases" de la cible de compilation. Ensuite :

  • Cliquez sur l'icône + (dans l'onglet "Général") et sélectionnez "Nouvelle copie des fichiers".
  • Sélectionnez "Resources" (Ressources) comme destination (pas les ressources Java).
  • Spécifiez le répertoire des ressources.
  • Sélectionnez +, puis ajoutez le ou les fichiers à sa liste.

Que des chemins de ressources relatifs ou absolus soient utilisés, chaque répertoire de ressources nécessite une phase de compilation distincte de type "Copier les fichiers" dans une compilation Xcode.

Exemple

Le projet JreEmulation dispose d'une application"JRE JUnit Tests" qui exécute les tests unitaires de cette bibliothèque. Sélectionnez les phases de compilation de cette cible pour afficher plusieurs phases de copie de fichiers, une pour chaque chemin relatif utilisé par ses ressources. Ici, ClassTest.java charge la même ressource en utilisant d'abord un chemin absolu, puis un chemin relatif. La ressource de test est incluse à l'aide de la phase de compilation "Copy Files" (Copier les fichiers) suivante:

Ressources Xcode