Большинство типов проектов Xcode поддерживают правила сборки, которые позволяют разработчикам изменять способ построения существующих типов файлов и определять способ построения новых типов файлов. Сценарии J2ObjC специально разработаны для подключения к системам сборки, таким как Xcode.
Проект j2objc-sample-reversi — это пример того, как добавить исходники Java в простую игру для iOS.
Минимальная сборка требует обновления параметров сборки, а затем добавления правила сборки J2ObjC.
Обновите настройки сборки
- Щелкните проект в Навигаторе проектов , чтобы открыть Редактор проектов и убедиться, что выбрана цель приложения.
- Откройте вкладку «Настройки сборки» .
- Свяжите библиотеку эмуляции JRE (
jre_emul
), добавив-ljre_emul
к другим флагам компоновщика . Это должно выглядеть так: - Нажмите + и выберите «Добавить пользовательскую настройку» .
- Назовите параметр
J2OBJC_HOME
и установите его значение в местоположение J2ObjC. Это должна быть либо папка, полученная в результате распаковки zip-архива , либо папкаj2objc/dist
если вы скомпилировали из исходного кода и ваш корень —j2objc
. - В разделе «Пути поиска» измените следующее:
- Пути поиска платформы добавляют
${J2OBJC_HOME}/frameworks
- Пути поиска в библиотеке добавляют
${J2OBJC_HOME}/lib
(для каждой конфигурации сборки). - Пути поиска в заголовке пользователя добавляют
${J2OBJC_HOME}/include
.
- Пути поиска платформы добавляют
- Подтвердите свои настройки, выполнив поиск
J2OBJC_HOME
. Вы должны увидеть что-то похожее на это:
Добавление правила сборки J2ObjC
Определите корневой каталог ваших исходных файлов Java, который мы назовем
$source-root
. Корневой каталог — это каталог, содержащий верхний пакет ваших исходных файлов.Если вы используете git и хотите получить файлы Java из другого проекта git, вы можете добавить подмодуль , отслеживающий проект с помощью исходных кодов Java. Например, предположим, что ваш проект Xcode (xcodeproj) находится в
~/dev/MyProject
, тогда у вас, вероятно, есть другой каталогMyProject
с исходным кодом Objective-C. В каталоге~/dev/MyProject/MyProject
запуститеgit submodule add git@github.com:user/javaproject
, чтобы создать каталог~/dev/MyProject/MyProject/javaproject
с исходным кодом для вашего проекта Java рядом с исходными кодами Objective-C. . Затем вы можете перетащить эту папку в свой проект Xcode в группуMyProject
, в которой Xcode отражает вашу файловую систему.${PROJECT_DIR}/MyProject/javaproject/src
— это$source-root
.Если ваши исходные коды Java находятся в группе или каталоге вашего проекта Xcode,
$source-root
равен${PROJECT_DIR}/__group_or_directory_name__
.Если у вас есть сомнения, щелкните правой кнопкой мыши эту группу или каталог и выберите «Показать в Finder», чтобы просмотреть каталог и использовать абсолютный путь.
Например, если у вас есть пакет Java
foo.bar
в каталоге~/myproject/src
, файлы Java этого пакета должны находиться в~/myproject/src/foo/bar/**.java
— это означает~/myproject/src
— корневой каталог вашего проекта.Если исходные файлы Java являются внешними по отношению к проекту Xcode, введите полный путь, используемый при их перечислении в окне терминала.
Щелкните проект в Навигаторе проектов , чтобы открыть Редактор проектов и убедиться, что выбрана цель приложения.
Откройте вкладку «Правила сборки» .
Нажмите + , чтобы добавить правило сборки.
Для параметра «Обработка» нового правила выберите «Исходные файлы Java». Параметр « Использование» должен быть «Пользовательский сценарий:».
В текстовом поле пользовательского сценария добавьте следующее (не забудьте заменить
$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};
На панели «Выходные файлы» нажмите кнопку «+» и добавьте:
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h
.Нажмите кнопку + еще раз и добавьте
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m
.
Когда вы закончите, панель настроек должна выглядеть примерно так (примечание: начиная с версии 10.2 Xcode по-прежнему определяет переменную DERIVED_FILES_DIR так же, как DERIVED_FILE_DIR, для обратной совместимости):
Связывание дополнительных библиотек
На этапе построения ссылки (этап сборки Xcode «Связывание двоичных файлов с библиотеками») необходимы флаги, специфичные для J2ObjC, которые различаются в зависимости от того, как ваше приложение использует переведенные классы Java. Полный список см. в разделе «Необходимые настройки ссылки» . Вот несколько примеров того, какие дополнительные библиотеки вам могут понадобиться:
- Чтобы использовать пакет
java.util.zip
, вы должны связать библиотеку libz.dylib, добавив-ljre_zip
к другим флагам компоновщика . - Чтобы выполнить безопасную генерацию хэша, вы должны добавить Security Framework в свой проект.
Отладка проблем сборки
Если Xcode сообщает об ошибке сборки при выполнении этих шагов, откройте Навигатор проблем и щелкните ошибку, чтобы просмотреть подробности. Это покажет подробную информацию о том, какой оператор командной строки был выполнен. Вот несколько распространенных ошибок:
Класс не может быть разрешен . Скорее всего, вы использовали неправильный
$source-path
. Найдите параметр-sourcepath
в выполняемой команде и убедитесь, что он указывает на корневой каталог ваших исходных файлов Java.Файл «JreEmulation.h» не найден . Скорее всего, проблема в неправильном значении путей поиска в заголовке пользователя . Найдите в команде сборки параметр
-I
с указанием пути; если все выглядит нормально, скопируйте путь (не -I) и в окне терминала запуститеls
с этим путем, чтобы убедиться, что нет опечатки.«_IOSClass_FromClass», ссылка на: или «_OBJC CLASS $_Java» — либо пути поиска библиотеки неверны, либо вы забыли связать библиотеку эмуляции JRE, установив для других флагов компоновщика значение
-ljre_emul
. Вам также может потребоваться подключить дополнительные библиотеки.Неопределенные символы: _icv* — Ссылка на необходимую библиотеку iconv .
Если у вас по-прежнему возникают проблемы, обратитесь в группу j2objc-discuss .