iOS swift 应用程序构建因 Xcode 14+ 中的循环依赖错误而失败

问题描述 投票:0回答:3

我有一个带有两个静态库的 swift iOS 应用程序 - lib1 和 lib2(比如说)。 Lib2 依赖于 Lib1(即它导入 Lib1 以使用其类型)。 Lib1 和 Lib2 设置为 AppTarget 的依赖项(构建后,生成 .app 文件)。

构建 Lib1 时出现以下循环依赖错误。构建其他目标时也观察到类似的错误。

SwiftDriverJobDiscovery normal x86_64 Compiling <FileName1>.swift (in target '<Lib1>' from project '<ProjectName>')
error: Cycle inside <Lib1>; building could produce unreliable results.
Cycle details:
→ Target '<Lib1>': Libtool /Users/<user-name>/<some-path>/<Lib1>.a normal
○ Target '<Lib1>' has Swift tasks not blocking downstream targets
○ Target '<Lib1>': SwiftGeneratePch normal x86_64 Compiling bridging header
○ Target '<Lib1>': SwiftCompile normal x86_64 Compiling <FileName2>.swift /Users/<user-name>/<some-path>/<Filename2>.swift
○ Target '<Lib1>': SwiftGeneratePch normal x86_64 Compiling bridging header
Raw dependency cycle trace:
target:  ->
node: <all> ->
command: <all> ->
node: /Users/<user-name/<some-path>/<Lib1>.a -> command: P1:target-<Lib1>-6d14b29d8d3402955e18e7b7c2cd5bd8502d5dd7097f7536813aba73cac1c1d5-:Debug:Libtool /Users/<user-name>/<some-path>/<Lib1>.a normal ->
node: /Users/<user-name>/<some-path>/x86_64/<FileName3>-8014457a59adc1f8a995a14873eb809b.o ->
command: P0:target-<Lib1>-6d14b29d8d3402955e18e7b7c2cd5bd8502d5dd7097f7536813aba73cac1c1d5-:Debug:SwiftDriver Compilation <Lib1> normal x86_64 com.apple.xcode.tools.swift.compiler ->
CYCLE POINT ->
customTask: <SwiftDriverJob identifier=-4908891831242875468 arch=x86_64 variant=normal job=<PlannedSwiftDriverJob [target(7)]:GeneratePch <Lib1> dependencies=["target(8)", "target(9)", "target(10)"]> isUsingWholeModuleOptimization=false compilerPath=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc> ->
customTask: <SwiftDriverJob identifier=-4908891831242875468 arch=x86_64 variant=normal job=<PlannedSwiftDriverJob [target(8)]:Compile <Lib1> <FileName2>.swift dependencies=["target(7)"]> isUsingWholeModuleOptimization=false compilerPath=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc> ->
customTask: <SwiftDriverJob identifier=-4908891831242875468 arch=x86_64 variant=normal job=<PlannedSwiftDriverJob [target(7)]:GeneratePch <Lib1> dependencies=["target(8)", "target(9)", "target(10)"]> isUsingWholeModuleOptimization=false compilerPath=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc>

在上面的错误消息中,FileName1 和 FileName2 是使用中间 ObjC++ 桥接层调用 C++ 方法的 swift 文件。我有两个名为 FileName3 但扩展名不同的文件 - .swift 和 .mm。由于 FileName2 在这里被称为 .o,我认为它指的是 FileName3.mm(即 ObjC++ 文件)。

我已经彻底检查了代码中是否存在任何形式的循环依赖(例如,两个类相互依赖 - 正如许多 stackoverflow 帖子中提到的那样),但这一切都很好。 更重要的是,相同的构建可以在 Xcode 13.x 上运行。更新到 Xcode 14.x 后,我收到此循环依赖错误。

但是在错误消息的最后三行中,您可以看到循环依赖。

  • 第一步:[Target(7)]生成pch并依赖于[target(8), target(9), target(10)]
  • 第二步:[Target(8)]编译FileName2.swift,依赖于[target(7)]

Target(7) 依赖于 target(8),target(8) 依赖于 target(7)。什么是目标(7)、目标(8)等?我在哪里可以找到它到底是什么样的目标?

我使用cmake设置依赖项并生成Xcode项目。

这个错误是什么?我在这里缺少什么? 我已经被困了好几天了,任何帮助将不胜感激。

ios xcode cmake pch
3个回答
6
投票

在我的项目中,问题是我有一个重复的文件,我不小心从遗留项目中复制了该文件。由于两个文件定义了相同的类,因此存在冲突问题是有道理的。删除其中一个重复项解决了问题。


0
投票

花了这么多时间寻找,这就是答案。

查看 ctietze 在 Apple 论坛中对 这篇文章 的回答

默认写入 com.apple.dt.XCBuild EnableSwiftBuildSystemIntegration 0

禁用新的构建系统后,我不再收到循环依赖错误。


0
投票

就我而言,Xcode 恢复了文件,因此有两个文件引用。

在项目导航器(CMD+1)中,搜索构建错误中出现的文件名。

© www.soinside.com 2019 - 2024. All rights reserved.