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
- Clique no projeto no Navegador do projeto para abrir o Editor do projeto e verifique se aplicativo está selecionado.
- Clique na guia Build Settings.
- Vincule a biblioteca de emulação JRE (
jre_emul
) adicionando-ljre_emul
a Outras sinalizações do vinculador. O código vai ficar assim: - Clique em + e selecione Adicionar configuração definida pelo usuário.
- 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 pastaj2objc/dist
se você tiver compilado a partir da origem e sua raiz forj2objc
. - 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
.
- Os caminhos de pesquisa do framework adicionam
- Confirme suas configurações pesquisando por
J2OBJC_HOME
. Você vai ver algo semelhante a:
Como adicionar uma regra de build J2ObjC
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órioMyProject
com a origem do Objective-C. Na O diretório~/dev/MyProject/MyProject
executagit 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 grupoMyProject
, 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.
Clique no projeto no Navegador do projeto para abrir o Editor do projeto e verifique se aplicativo está selecionado.
Clique na guia Criar regras.
Clique em + para adicionar uma regra de criação.
Na opção Processo da nova regra, selecione "Arquivos de origem Java". A opção Usando precisa ser "Script personalizado:".
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};
No painel "Output Files", clique no botão + e adicione:
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h
.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):
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, executels
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.