Per iniziare

Innanzitutto:

Per tradurre un file di origine Java (ad esempio Hello.java):

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

Per compilare il file tradotto:

j2objcc -c Hello.m

j2objcc è uno script wrapper che richiama il compilatore C (normalmente clang, anche noto come LLVM, il compilatore C/C++/Objective-C di Apple). Per creare l'eseguibile:

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

j2objcc inoltra qualsiasi opzione specificata per il compilatore Objective-C. Ad esempio, per tradurre e creare con simboli di debug, utilizza il flag -g:

j2objcc -g -o hello Hello.m

Domande frequenti

Quando eseguo j2objcc, mi risulta che "Foundation/Foundation.h" non sia stato trovato.

Se la compilazione non riesce perché non viene trovato Foundation/Foundation.h, il problema è che non è stato trovato l'SDK per iOS (quindi si trova l'intestazione).

  1. Assicurati di aver installato Xcode.
  2. Installa gli strumenti a riga di comando eseguendo xcode-select --install.
  3. Esegui xcodebuild -showsdks, che dovrebbe mostrare almeno un SDK per OS X, iOS e iOS Simulator.
  4. Se il problema persiste, elimina l'applicazione Xcode e vai al passaggio 1.

Quali segnalazioni richiede j2objcc?

Lo script j2objcc è solo un involucro attorno al compilatore Objective-C, ovvero al clang. Esegui man cc o man clang per elencare le relative opzioni.

Durante la compilazione con j2objcc, non è possibile trovare i file di intestazione (.h) del mio progetto.

Il compilatore deve conoscere la directory in cui si trovano i file tradotti, utilizzando -I <directory>. Quindi, se i file sono stati generati con j2objc -d foo/bar ..., il comando j2objcc richiede -Ifoo/bar. Se nel comando j2objc non è stata specificata alcuna directory di output, è necessario aggiungere -I..

Come posso eseguire l'esecuzione su Windows o Linux?

J2ObjC è uno strumento iOS per lo sviluppo su Mac OS X. Non puoi compilare alcun codice tradotto perché richiede un SDK OS X o iOS di Apple, che a sua volta richiede l'utilizzo degli SDK solo su Mac.

Tuttavia, poiché il traduttore J2ObjC è puro Java, la traduzione può essere eseguita su altri sistemi. Su Linux, lo script j2objc non dovrebbe funzionare. L'utilizzo di Windows richiede CygWin o il richiamo diretto di Java. Per richiamare il traduttore senza lo script j2objc, utilizza quanto segue, dove J2OBJC_DIR è la directory in cui è stato decompresso il file di distribuzione di J2ObjC:

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