Como os recursos Java são mapeados para recursos do iOS

O que são recursos Java

Recursos Java são arquivos de dados empacotados com aplicativos e bibliotecas Java. Esses recursos são carregados durante a execução: Class.getResource(String name), que retorna uma java.net.URL, ou Class.getResourceAsStream(String name), que retorna um java.io.InputStream. O método getResourceAsStream() normalmente é usado quando um recurso está disponível, já que gera uma IOException caso ele não esteja. O método getResource() retornará nulo se o recurso não estiver presente. Portanto, é útil testar recursos opcionais.

Caminhos e nomes de recursos

O J2ObjC localiza recursos procurando no pacote principal do aplicativo ([NSBundle mainBundle]), usando o caminho relativo ou absoluto do recurso:

Caminhos relativos

O método preferido de especificar caminhos de recursos é usar caminhos relativos. Os caminhos relativos não começam com uma barra ("/"). Ao ler um recurso com um caminho relativo, o nome do pacote da classe é modificado, mudando os pontos ('.') no nome do pacote para barras ("/"). Em seguida, o caminho relativo especificado na chamada de método Class.getResource(String name) ou Class.getResourceAsStream(String name) é anexado ao caminho do pacote.

Por exemplo, se um app tiver uma classe foo.bar.Mumble, o caminho base de todos os recursos relativos às classes desse pacote será /foo/bar. Quando Mumble.class.getResource("oops/error.jpg") é invocado, oops/error.jpg é anexado ao caminho do pacote. Portanto, o caminho completo do recurso é /foo/bar/oops/error.jpg.

Caminhos absolutos

Um recurso também pode ser acessado usando um caminho absoluto, iniciando o nome do recurso com uma barra ("/"). Os nomes dos pacotes são ignorados. Portanto, o J2ObjC localiza caminhos absolutos no pacote principal do aplicativo usando os caminhos exatamente como especificados nas referências Class.getResource(String name) ou Class.getResourceAsStream(String name) nas fontes Java do aplicativo. No exemplo acima, Mumble.class.getResource("/oops/error.jpg") tem um caminho de recurso completo de /oops/error.jpg, ignorando o nome do pacote foo.bar.

Como adicionar recursos a um app iOS

Para adicionar arquivos de recursos a um app iOS no Xcode, abra a guia "Build Phases" do destino. Então:

  • Clique no ícone + (na guia "General") e selecione "New Copy Files Phase".
  • Selecione "Recursos" como o Destino (não Recursos Java).
  • Especifique o diretório dos recursos.
  • Selecione + e adicione os arquivos à lista.

Independentemente de caminhos de recursos relativos ou absolutos serem usados, cada diretório de recursos requer uma fase de build de "Copiar arquivos" separada em um build do Xcode.

Exemplo

O projeto JreEmulation tem um app "JRE JUnit Tests" que executa os testes de unidade dessa biblioteca. Selecione as fases de build do destino para conferir várias fases de arquivos de cópia, uma para cada caminho relativo usado pelos recursos. Aqui, ClassTest.java carrega o mesmo recurso usando primeiro um caminho absoluto e depois um caminho relativo. O recurso do teste é incluído nesta fase de build "Copy Files":

Recursos do Xcode