Regras de criação do Xcode

A maioria dos tipos de projeto do Xcode oferece suporte a regras de build, que permitem aos desenvolvedores modificar como tipos de arquivos existentes são criados e para definir como novos tipos são criados. Os scripts J2ObjC são projetados intencionalmente para conexão com sistemas de compilação como o Xcode.

O projeto j2objc-sample-reversi é um exemplo de como adicionar origens Java a um jogo simples para iOS.

Para criar um build mínimo, é necessário atualizar as configurações e adicionar uma regra de build J2ObjC.

Atualizar as configurações do build

  1. Clique no projeto no Navegador do projeto para abrir o Editor do projeto e verifique se aplicativo está selecionado.
  2. Clique na guia Build Settings.
  3. Vincule a biblioteca de emulação JRE (jre_emul) adicionando -ljre_emul a Outras sinalizações do vinculador. O código vai ficar assim: Como vincular a biblioteca de emulação JRE no Xcode
  4. Clique em + e selecione Adicionar configuração definida pelo usuário.
  5. Nomeie a configuração como J2OBJC_HOME e defina o valor como o local de J2ObjC. Isso deve seja a pasta resultante da descompactação do arquivo ZIP ou a pasta j2objc/dist se você tiver compilado a partir da origem e sua raiz for j2objc.
  6. Em Caminhos de pesquisa, modifique o seguinte:
    • Os caminhos de pesquisa do framework adicionam ${J2OBJC_HOME}/frameworks.
    • Os caminhos de pesquisa de biblioteca adicionam ${J2OBJC_HOME}/lib (para cada configuração de build).
    • Em Caminhos de pesquisa de cabeçalho do usuário, adicionamos ${J2OBJC_HOME}/include.
  7. Confirme suas configurações pesquisando por J2OBJC_HOME. Você vai ver algo semelhante a: Configurações de compilação do Xcode

Como adicionar uma regra de build J2ObjC

  1. Determine o diretório raiz dos arquivos de origem Java, que vamos chamar $source-root: O diretório raiz é o diretório que contém o dos arquivos de origem.

    • Se você está usando o git e quer extrair seus arquivos Java de outro projeto git, pode adicione um submódulo que acompanha o projeto com seu código de dados. Por exemplo, suponha que seu projeto Xcode (xcodeproj) esteja em ~/dev/MyProject, então provavelmente tem outro diretório MyProject com a origem do Objective-C. Na O diretório ~/dev/MyProject/MyProject executa git submodule add git@github.com:user/javaproject para crie um diretório ~/dev/MyProject/MyProject/javaproject com origem para seu projeto Java junto às fontes do Objective-C. Em seguida, arraste essa pasta para seu projeto Xcode no grupo MyProject, que tem o Xcode espelhando seu sistema de arquivos. ${PROJECT_DIR}/MyProject/javaproject/src é o $source-root.

    • Se as origens Java estiverem em um grupo ou diretório no projeto Xcode, o $source-root é ${PROJECT_DIR}/__group_or_directory_name__.

    • Em caso de dúvida, clique com o botão direito do mouse no grupo ou diretório e selecione Mostrar no Finder para ver e use o caminho absoluto.

    • Por exemplo, se você tiver um pacote Java foo.bar em um diretório chamado ~/myproject/src, os arquivos Java desse pacote precisam estar em ~/myproject/src/foo/bar/**.java, ou seja, ~/myproject/src é o diretório raiz do seu projeto.

    • Se os arquivos de origem Java forem externos ao projeto Xcode, insira o caminho completo usado ao e listá-los em uma janela de terminal.

  2. Clique no projeto no Navegador do projeto para abrir o Editor do projeto e verifique se aplicativo está selecionado.

  3. Clique na guia Criar regras.

  4. Clique em + para adicionar uma regra de criação.

  5. Na opção Processo da nova regra, selecione "Arquivos de origem Java". A opção Usando precisa ser "Script personalizado:".

  6. Na caixa de texto do script personalizado, adicione o seguinte (não se esqueça de substituir $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. No painel "Output Files", clique no botão + e adicione: ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h.

  8. Clique no botão + novamente e adicione ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m.

Ao terminar, o painel de configurações deve ser parecido com este (observação: desde a versão 10.2, o Xcode ainda define o DERIVED_FILES_DIR da mesma forma que DERIVED_FILE_DIR para compatibilidade com versões anteriores):

Regras de build do Xcode

Vincular outras bibliotecas

A etapa de criação do link (fase de criação "Vincular binário com bibliotecas" do Xcode) precisa Sinalizações específicas do J2ObjC, que variam dependendo de como o aplicativo usa classes Java traduzidas. Confira a lista completa em Configurações de link obrigatórias. Estes são alguns exemplos de quais bibliotecas adicionais você pode precisar vincular:

  • Para usar o pacote java.util.zip, é preciso vincular a biblioteca libz.dylib adicionando -ljre_zip às Outras sinalizações do vinculador.
  • Para fazer a geração de hash segura, é necessário adicionar o framework de segurança ao seu projeto.

Como depurar problemas de build

Se o Xcode relatar uma falha de compilação com essas etapas, abra o Issue Navigator e clique em um erro para inspecionar os detalhes. Isso mostrará os detalhes de qual linha de comando foi executada. Veja alguns erros comuns:

  • Não foi possível resolver a Classe: provavelmente, a $source-path que você usou estava incorreta. Procure a opção -sourcepath no comando executado e verifique se ela aponta para o diretório raiz dos seus arquivos de origem Java.

  • "JreEmulation.h" arquivo não encontrado: provavelmente, o problema é um problema de pesquisa de cabeçalho do usuário. Paths especificado. Pesquise a opção -I com o caminho no comando de build. se estiver tudo certo, copie o caminho (não o -I) e, em uma janela de terminal, execute ls com esse caminho para verificar. não é um erro de digitação.

  • "_IOSClass_FromClass", referenciada de: ou "_OBJCCLASS$_Java" - a Biblioteca Os caminhos de pesquisa estão incorretos ou você se esqueceu de vincular a biblioteca de emulação JRE definindo Outros Sinalizações do vinculador para -ljre_emul. Talvez também seja necessário vincular outras bibliotecas.

  • Símbolos não definidos: _iconv*: link na biblioteca iconv necessária.

Se ainda tiver problemas, pergunte grupo j2objc-discuss.