0

J2OBJC を組み込みの内部 Xcode 設定として使用している Ionic/iOS プロジェクトで循環依存の問題が発生しています。

J2OBJC ドキュメントに記載されているように、イオン プロジェクトにビルド ルールと設定を設定しました。必要に応じてライブラリ、ユーザー ヘッダー、およびフレームワークの検索パスを追加し (最初はアプリ ターゲットのみ、アプリ ターゲットとワークスペースの両方で試しました)、ユーザー定義の $J2OBJC_HOME を作成しました (これはおそらく要件の一部ではありません)。 $PROJECT_DIR も追加しました。また、Javaビルドルールをそのまま追加しました

"if [ ! -f "${J2OBJC_HOME}/j2objc" ]; then echo "J2OBJC_HOME が Settings.xcconfig で正しく定義されていません。現在は '${J2OBJC_HOME}' に設定されています"; exit 1; fi; "${J2OBJC_HOME}/ j2objc" -d ${DERIVED_FILE_DIR} -sourcepath "${PROJECT_DIR}/App" --no-package-directories -use-arc --prefix Flowers=JOE -g ${INPUT_FILE_PATH};"

シミュレーターと iPhone の両方をビルドし、両方で実行しましたが、動作しているようです。ただし、プロジェクトのアーカイブに移動すると (.ipa を作成できるようになります)。循環依存エラーが発生します。プロジェクトを新たに開始する、検索パスに異なる URL を使用する、再帰的および非再帰的を使用する、ドキュメントを数回チェックする、フォーラムを参照するなど、さまざまなことを試しましたが、まだ解決策がありません。どんなアイデアでも大歓迎です!

4

2 に答える 2

0

私は、この循環依存の問題を 1 か月半にわたって抱えてきました。私はほとんどすべてを試しました。
私はどこでも見てきました..トム・ボールから2つの返信を得ました. ツールを使用して Java から Objc に変換された大きなプロジェクトになると、xcode は作成されたサブディレクトリを認識しません。最善の解決策は、bash を使用して独自のスクリプトを作成することだとわかりました。私はいくつかの調査を行い、すべての Java ファイルを再帰的に見つけて j2objc スクリプトをそれらに適用する方法を見つけました。これにより、すべての Objc ファイルが同じディレクトリ レイアウトに出力されます。(Xcode の j2objc スクリプト ルールのように、すべてを 1 つのフォルダーにまとめるのではなく、適切なレイアウトを維持します)。

私のbuild.shファイルは次のとおりです。自由にコピーしてください-

!/ビン/バッシュ

Objective C フォルダを消去する

rm -rf /ObjC_Output

Java フォルダに移動

CDジャバ

j2objc を実行し、すべてを ObjC に出力します

j2objc -d ../ObjC_Output $(find . -name "*.java")

Java フォルダから飛び出す

CD ..

前の組織を削除

rm -rf /Users/me/Projects/プロジェクト名/mobile-app-front-end/app/ios/app/app/org

ObjC_Output への cd

新しい ObjC プロジェクト ファイルを XCode プロジェクトにコピーします。

cp -R ./ObjC_Output/* /Users/me/Projects/プロジェクト名/mobile-app-front-end/app/ios/app/app/org

すべてのファイルを Xcode プロジェクトに自動的にコピーして戻します。好きなように自由に実行してください。また、j2objc をパスに追加することを忘れないでください。ターミナルで ./builder.sh などのスクリプトを実行します。

また、Xcode が objC プロジェクト フォルダーを認識できるようにするには、Xcode プロジェクトのトップ ディレクトリを追加して再帰的にする必要があります。

この場合、Xcode に j2objc スクリプトを含める必要はありません。通常どおり、デフォルトのリンカー パス、ライブラリ検索パス、およびユーザー ヘッダー検索パスをすべて含めるようにしてください (j2objc のドキュメントを参照)。

この解決策のために髪を引っ張る必要がありました..だから、必要に応じて気軽に助けを求めてください.

于 2020-01-22T15:48:03.307 に答える