Xcode プロジェクト タイプの大部分はビルドルールをサポートしているため、デベロッパーは 既存のファイル形式の作成方法や、新しいファイル形式の作成方法を定義します。 J2ObjC スクリプトは、Xcode などのビルドシステムに接続するように意図的に設計されています。
j2objc-sample-reversi プロジェクトは、 Java ソースをシンプルな iOS ゲームに追加する方法の例です。
最小ビルドでは、ビルド設定を更新してから J2ObjC ビルドルールを追加する必要があります。
ビルド設定を更新する
- プロジェクト ナビゲータでプロジェクトをクリックして [プロジェクト エディタ] を開き、 アプリケーション ターゲットが選択されています。
- [Build Settings] タブをクリックします。
-ljre_emul
を [Other Linker Flags] に追加して、JRE エミュレーション ライブラリ(jre_emul
)をリンクします。 次のようになります。- [+] をクリックして、[ユーザー定義設定を追加] を選択します。
- 設定に
J2OBJC_HOME
という名前を付け、値を J2ObjC のロケーションに設定します。これにより、 リリース zip を解凍した結果のフォルダのいずれかです。 ソースからコンパイルし、ルートがj2objc
の場合は、j2objc/dist
フォルダ。 - [Search Paths] で、次のように変更します。
<ph type="x-smartling-placeholder">
- </ph>
- フレームワーク検索パスに
${J2OBJC_HOME}/frameworks
を追加 - [Library Search Paths] に(ビルド構成ごとに)
${J2OBJC_HOME}/lib
を追加します。 - ユーザー ヘッダー検索パスに
${J2OBJC_HOME}/include
が追加されました。
- フレームワーク検索パスに
J2OBJC_HOME
を検索して設定を確認します。次のような出力が表示されます。
J2ObjC ビルドルールの追加
Java ソースファイルのルート ディレクトリを特定します。ルート ディレクトリを
$source-root
。ルート ディレクトリは、最上位レイヤが含まれるディレクトリで、 ソースコードのパッケージです。git を使用していて、別の Git プロジェクトから Java ファイルを pull する場合は、 Java でプロジェクトを追跡するサブモジュールを追加する あります。たとえば、Xcode プロジェクト(xcodeproj)が
~/dev/MyProject
にあるとします。 Objective-C ソースの別のMyProject
ディレクトリがある可能性があります。~/dev/MyProject/MyProject
ディレクトリでgit submodule add git@github.com:user/javaproject
を実行して Java プロジェクトのソースを含む~/dev/MyProject/MyProject/javaproject
ディレクトリを作成する 表示される場合もあります。そのフォルダを Xcode プロジェクトにドラッグできます。 Xcode がファイル システムをミラーリングしているMyProject
グループ。${PROJECT_DIR}/MyProject/javaproject/src
は$source-root
です。Java ソースが Xcode プロジェクトのグループまたはディレクトリにある場合、
$source-root
${PROJECT_DIR}/__group_or_directory_name__
です。わからない場合は、そのグループまたはディレクトリを右クリックして [Finder で表示] を選択すると、 絶対パスを使用します
たとえば、
~/myproject/src
というディレクトリに Java パッケージfoo.bar
がある場合、 パッケージの Java ファイルは~/myproject/src/foo/bar/**.java
に配置する必要があります。つまり、~/myproject/src
は、プロジェクトのルート ディレクトリです。Java ソースファイルが Xcode プロジェクトの外部にある場合、 ターミナル ウィンドウに表示します。
プロジェクト ナビゲータでプロジェクトをクリックして [プロジェクト エディタ] を開き、 アプリケーション ターゲットが選択されています。
[Build Rules] タブをクリックします。
[+] をクリックしてビルドルールを追加します。
新しいルールの [処理] オプションで [Java ソースファイル] を選択します。[用途] で [Custom script:] を選択します。
カスタム スクリプトのテキスト ボックスに次のコードを追加します(
$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};
[Output Files] パネルで [+] ボタンをクリックして、
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h
を追加します。もう一度 [+] ボタンをクリックし、
${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m
を追加します。
完了すると、設定パネルは次のようになります(注: 10.2 の時点では、Xcode では引き続き DERIVED_FILES_DIR 変数を後方互換性のために DERIVED_FILE_DIR と同じものにします)。
追加ライブラリのリンク
リンクビルドステップ(Xcode の「Link Binary With Libraries」ビルドフェーズ)には、 J2ObjC 固有のフラグ。変換された Java クラスをアプリケーションで使用する方法によって異なります。 完全なリストについては、必須のリンク設定をご覧ください。ここで紹介するのは リンクする必要がある追加ライブラリの例:
java.util.zip
パッケージを使用するには、次の行を追加して libz.dylib ライブラリをリンクする必要があります。-ljre_zip
をその他のリンカー フラグにします。- セキュア ハッシュを生成するには、セキュリティ フレームワークをプロジェクトに追加する必要があります。
ビルドの問題のデバッグ
上記のステップで Xcode からビルドエラーが報告された場合は、Issue Navigator を開いてください。 エラーをクリックして詳細を確認します。このコマンドで、実行するコマンドライン ツールと ステートメントが実行されました。一般的なエラーは次のとおりです。
クラスを解決できない - 使用した
$source-path
が正しくない可能性があります。 実行されたコマンドで-sourcepath
オプションを探し、これが参照されていることを確認します。 ルート ディレクトリに配置します。「JreEmulation.h」file not found - ほとんどの場合、ユーザー ヘッダー検索が原因です。 パス値。このパスでビルドコマンドの
-I
オプションを検索します。問題がなければ パス(-I ではない)をコピーし、ターミナル ウィンドウでそのパスを指定してls
を実行して確認します。 入力ミスではありません"_IOSClass_FromClass", 参照先: または "_OBJCCLASS$_Java" - ライブラリ 検索パスが正しくないか、その他を設定して JRE エミュレーション ライブラリをリンクするのを忘れています。 リンカーフラグを
-ljre_emul
にマッピング。追加のライブラリをリンクする必要がある場合もあります。未定義の記号: _iconv* - 必須の iconv ライブラリ内のリンク。
それでも問題が解決しない場合は、 j2objc-discuss グループ。