0

我的 Ionic/iOS 项目使用 J2OBJC 作为内置的内部 Xcode 设置时遇到循环依赖问题。

如 J2OBJC 文档中所述,我已经在我的 ionic 项目中设置了构建规则和设置。我已经根据需要添加了库、用户标题和框架搜索路径(首先只有应用程序目标,并且还尝试了应用程序目标和工作区)并创建了用户定义的 $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

1

Xcode 不能再在 Header Search Paths 和 User Header Search Paths 中处理相同的标题搜索路径。您可能在这两个中都有“$(J2OBJC_HOME)/include”。因此,将其从 Header Search Paths 中删除,并将其保留在 User Header Search Paths 中。

于 2019-12-04T17:15:26.863 回答
0

我已经有一个半月的循环依赖问题了。我几乎什么都试过了。
我到处找了.. 得到了汤姆鲍尔的 2 条回复。当涉及到使用该工具从 java 转换为 Objc 的大型项目时,xcode 将无法识别所创建的子目录。我发现最好的解决方法是使用 bash 创建自己的脚本。我做了一些研究并想出了如何递归地查找所有 java 文件并将 j2objc 脚本应用于它们,它将在同一目录布局中输出所有 Objc 文件。(为您保留一个漂亮的布局,而不是像 Xcode 上的 j2objc 脚本规则那样凌乱的文件夹)。

我的 build.sh 文件如下,随意复制它-

!/bin/bash

清理Objective C文件夹

rm -rf /ObjC_Output

移动到 Java 文件夹

光盘Java

运行 j2objc 并将所有内容输出到 ObjC

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

跳出Java文件夹

光盘..

删除以前的组织

rm -rf /Users/me/Projects/project-name/mobile-app-front-end/app/ios/app/app/org

cd 到 ObjC_Output

将新的 ObjC 项目文件复制到 XCode 项目中。

cp -R ./ObjC_Output/* /Users/me/Projects/project-name/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 回答