Начало работы

Во-первых, либо:

Чтобы перевести исходный файл Java (например, 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

Чтобы скомпилировать переведенный файл:

j2objcc -c Hello.m

j2objcc — это сценарий-оболочка, который вызывает ваш компилятор C (обычно clang, он же LLVM, компилятор Apple C/C++/Objective-C ). Чтобы создать исполняемый файл:

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

j2objcc пересылает любые параметры, которые вы указываете для компилятора Objective-C. Например, для перевода и сборки с использованием символов отладки используйте флаг -g :

j2objcc -g -o hello Hello.m

Часто задаваемые вопросы

Когда я запускаю j2objcc , он жалуется, что «Foundation/Foundation.h» не найден.

Если компиляция не удалась из-за того, что Foundation/Foundation.h не найден, проблема в том, что iOS SDK не найден (именно там находится этот заголовок).

  1. Убедитесь, что у вас установлен Xcode.
  2. Установите инструменты командной строки, запустив xcode-select --install .
  3. Запустите xcodebuild -showsdks , который должен показать хотя бы один SDK для OS X, iOS и симулятора iOS.
  4. Если это не помогло, удалите приложение Xcode и перейдите к шагу 1.

Какие флаги принимает j2objcc ?

Сценарий j2objcc — это всего лишь оболочка компилятора Objective-C clang. Запустите man cc или man clang , чтобы просмотреть список параметров.

При компиляции с помощью j2objcc файлы заголовка моего проекта (.h) не могут быть найдены.

Компилятору необходимо знать каталог, в котором находятся переведенные файлы, используя -I <directory> . Итак, если файлы были созданы с помощью j2objc -d foo/bar ... , то для команды j2objcc потребуется -Ifoo/bar . Если в команде j2objc не указан выходной каталог, то -I. необходимо добавить.

Как запустить в Windows или Linux?

J2ObjC — это инструмент iOS, предназначенный для разработки в Mac OS X. Вы не можете скомпилировать переведенный код, поскольку для него требуется OS X или iOS SDK от Apple, что требует, чтобы его SDK использовались только на Mac.

Однако, поскольку переводчик J2ObjC создан на чистом Java, перевод можно выполнить и в других системах. В Linux сценарий j2objc должен работать без изменений. Для использования Windows требуется либо CygWin , либо прямой вызов Java. Чтобы вызвать переводчик без сценария j2objc, используйте следующее, где J2OBJC_DIR — это каталог, в котором был разархивирован файл дистрибутива J2ObjC:

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