Mappatura delle risorse Java alle risorse iOS

Cosa sono le risorse Java

Le risorse Java sono file di dati pacchettizzati con applicazioni e librerie Java. Queste risorse vengono caricate in fase di runtime Class.getResource(String name), che restituisce java.net.URL, oppure Class.getResourceAsStream(String name), che restituisce java.io.InputStream. Il metodo getResourceAsStream() viene normalmente utilizzato quando una risorsa dovrebbe essere disponibile, poiché genera un IOException in caso contrario. Il metodo getResource() restituisce null se la risorsa non è presente, pertanto è utile testare le risorse facoltative.

Nomi e percorsi delle risorse

J2ObjC individua le risorse cercando nel bundle principale dell'applicazione ([NSBundle mainBundle]), utilizzando il percorso relativo o assoluto della risorsa:

Percorsi relativi

Il metodo preferito per specificare i percorsi delle risorse consiste nell'utilizzare percorsi relativi. I percorsi relativi non iniziano con una barra ("/"). Durante la lettura di una risorsa con un percorso relativo, il nome del pacchetto della classe viene modificato, i punti (".") nel nome del pacchetto vengono modificati in barre ("/"), quindi al percorso del pacchetto viene aggiunto il percorso relativo specificato nella chiamata al metodo Class.getResource(String name) o Class.getResourceAsStream(String name).

Ad esempio, se un'app ha una classe foo.bar.Mumble, il percorso di base per tutte le risorse relative alle classi del pacchetto è /foo/bar. Quando viene richiamato Mumble.class.getResource("oops/error.jpg"), viene aggiunto oops/error.jpg al percorso del pacchetto, quindi il suo percorso completo della risorsa è /foo/bar/oops/error.jpg.

Percorsi assoluti

È inoltre possibile accedere a una risorsa utilizzando un percorso assoluto facendo iniziare il nome della risorsa con una barra ("/"). I nomi dei pacchetti vengono ignorati, quindi J2ObjC individua i percorsi assoluti nel bundle principale dell'applicazione utilizzando i percorsi esattamente come specificati nei riferimenti Class.getResource(String name) o Class.getResourceAsStream(String name) nelle origini Java dell'applicazione. Nell'esempio precedente, Mumble.class.getResource("/oops/error.jpg") ha un percorso completo della risorsa pari a /oops/error.jpg e viene ignorato il nome del pacchetto foo.bar.

Aggiunta di risorse a un'app per iOS

Per aggiungere file di risorse a un'app per iOS in Xcode, apri la scheda Fasi di build della destinazione di build. Quindi:

  • Fai clic sull'icona + (nella scheda Generale) e seleziona Fase Nuova copia di file.
  • Seleziona "Risorse" come destinazione (non Risorse Java).
  • Specifica la directory delle risorse.
  • Seleziona + e aggiungi i file al suo elenco.

Indipendentemente dall'utilizzo di percorsi di risorse relativi o assoluti, ogni directory delle risorse richiede una fase di build di Copia File separata in una build Xcode.

Esempio

Il progetto JreEmulation ha un'app"JRE JUnit Tests" che esegue i test delle unità della libreria. Seleziona le fasi di creazione del target per visualizzare diverse fasi di copia file, una per ogni percorso relativo utilizzato dalle risorse. Qui, ClassTest.java carica la stessa risorsa utilizzando prima un percorso assoluto e poi un percorso relativo. La risorsa del test è inclusa utilizzando questa fase di build di Copia file:

Risorse Xcode