Como começar

Primeiro:

Para converter um arquivo de origem Java (Hello.java, por exemplo):

public class Hello {
  public static void main(String[] args) {
    System.out.println("hello, world");
  }
}
j2objc Hello.java
translating Hello.java
Translated 1 file: 0 errors, 0 warnings

Para compilar o arquivo traduzido:

j2objcc -c Hello.m

j2objcc é um script de wrapper que invoca seu compilador C (normalmente clang, também conhecido como LLVM, compilador C/C++/Objective-C da Apple). Para criar o executável:

j2objcc -o hello Hello.o
./hello Hello
hello, world

j2objcc encaminha quaisquer opções especificadas para o compilador Objective-C. Por exemplo, para traduzir e criar com símbolos de depuração, use a flag -g:

j2objcc -g -o hello Hello.m

Perguntas frequentes

Quando executo o j2objcc, ele informa que "Foundation/Foundation.h" não foi encontrado.

Se a compilação falhar porque Foundation/Foundation.h não foi encontrado, o problema é que o SDK do iOS não foi encontrado (onde está esse cabeçalho).

  1. Verifique se o Xcode está instalado.
  2. Instale as ferramentas de linha de comando executando xcode-select --install.
  3. Execute xcodebuild -showsdks, que precisa mostrar pelo menos um SDK para OS X, iOS e iOS Simulator.
  4. Se isso falhar, exclua o aplicativo Xcode e vá para a etapa 1.

Quais flags são usadas pelo j2objcc?

O script j2objcc é apenas um wrapper em torno do compilador Objective-C, clang. Execute man cc ou man clang para listar as opções.

Ao compilar com j2objcc, os arquivos de cabeçalho (.h) do meu projeto não foram encontrados.

O compilador precisa saber o diretório em que os arquivos traduzidos residem, usando -I <directory>. Portanto, se os arquivos foram gerados com j2objc -d foo/bar ..., o comando j2objcc vai precisar de -Ifoo/bar. Se nenhum diretório de saída tiver sido especificado no comando j2objc, será necessário adicionar -I..

Como faço para executar no Windows ou no Linux?

J2ObjC é uma ferramenta para iOS desenvolvida para o Mac OS X. Não é possível compilar um código traduzido porque ele exige um SDK do OS X ou iOS da Apple, o que exige que os SDKs sejam usados apenas em Macs.

No entanto, como o tradutor J2ObjC é Java puro, a tradução pode ser feita em outros sistemas. No Linux, o script j2objc funcionará inalterado. O uso do Windows requer o CygWin ou a invocação direta do Java. Para invocar o tradutor sem o script j2objc, use o código abaixo, em que J2OBJC_DIR é o diretório em que o arquivo de distribuição J2ObjC foi descompactado:

java -Xbootclasspath:\lib\jre_emul.jar -jar J2OBJC_DIR\lib\j2objc.jar [j2objc-flags] [source files]