Xcode ビルドルール

Xcode プロジェクト タイプの大部分はビルドルールをサポートしているため、デベロッパーは 既存のファイル形式の作成方法や、新しいファイル形式の作成方法を定義します。 J2ObjC スクリプトは、Xcode などのビルドシステムに接続するように意図的に設計されています。

j2objc-sample-reversi プロジェクトは、 Java ソースをシンプルな iOS ゲームに追加する方法の例です。

最小ビルドでは、ビルド設定を更新してから J2ObjC ビルドルールを追加する必要があります。

ビルド設定を更新する

  1. プロジェクト ナビゲータでプロジェクトをクリックして [プロジェクト エディタ] を開き、 アプリケーション ターゲットが選択されています。
  2. [Build Settings] タブをクリックします。
  3. -ljre_emul を [Other Linker Flags] に追加して、JRE エミュレーション ライブラリ(jre_emul)をリンクします。 次のようになります。 Xcode で JRE エミュレーション ライブラリをリンクする
  4. [+] をクリックして、[ユーザー定義設定を追加] を選択します。
  5. 設定に J2OBJC_HOME という名前を付け、値を J2ObjC のロケーションに設定します。これにより、 リリース zip を解凍した結果のフォルダのいずれかです。 ソースからコンパイルし、ルートが j2objc の場合は、j2objc/dist フォルダ。
  6. [Search Paths] で、次のように変更します。 <ph type="x-smartling-placeholder">
      </ph>
    • フレームワーク検索パス${J2OBJC_HOME}/frameworks を追加
    • [Library Search Paths] に(ビルド構成ごとに)${J2OBJC_HOME}/lib を追加します。
    • ユーザー ヘッダー検索パス${J2OBJC_HOME}/include が追加されました。
  7. J2OBJC_HOME を検索して設定を確認します。次のような出力が表示されます。 Xcode ビルド設定

J2ObjC ビルドルールの追加

  1. 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 プロジェクトの外部にある場合、 ターミナル ウィンドウに表示します。

  2. プロジェクト ナビゲータでプロジェクトをクリックして [プロジェクト エディタ] を開き、 アプリケーション ターゲットが選択されています。

  3. [Build Rules] タブをクリックします。

  4. [+] をクリックしてビルドルールを追加します。

  5. 新しいルールの [処理] オプションで [Java ソースファイル] を選択します。[用途] で [Custom script:] を選択します。

  6. カスタム スクリプトのテキスト ボックスに次のコードを追加します($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};
    
  7. [Output Files] パネルで [+] ボタンをクリックして、${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.h を追加します。

  8. もう一度 [+] ボタンをクリックし、${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}.m を追加します。

完了すると、設定パネルは次のようになります(注: 10.2 の時点では、Xcode では引き続き DERIVED_FILES_DIR 変数を後方互換性のために DERIVED_FILE_DIR と同じものにします)。

Xcode ビルドルール

追加ライブラリのリンク

リンクビルドステップ(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 グループ