内部循环; 建筑可能会产生不可靠的结果:Xcode 10错误


80

使用Xcode 10进行编译时,我尝试移至新的生成系统。但是,它给出以下错误:

Cycle details:
→ Target 'project' : LinkStoryboards

Target 'project' has compile command with input '/Users/project/Commons/Components/ScreenshotSharing/ViewController/AppShare.storyboard'

Target 'project' : ValidateEmbeddedBinary /Users/project/Xcode/DerivedData/project-hgqvaddkhmzxfkaycbicisabeakv/Build/Products/Debug-iphoneos/project.app/PlugIns/stickers.appex

Target 'project' has process command with input '/Users/project/Resources/Info.plist'

Target 'project' has compile command with input '/Users/project/Commons/Components/ScreenshotSharing/ViewController/AppShare.storyboard'

屏幕截图已添加

即使删除了问题文件,对于另一个xib / storyboard我也得到了相同的结果。如何在不恢复到旧版构建系统的情况下解决此错误?


我有类似的错误,并通过删除“派生数据”和清理项目来解决。这对我来说就像一种魅力!
Jayprakash Dubey

Answers:


62

对于Xcode 10构建系统有问题的任何人,请按照以下步骤进行修复:

  1. 在Xcode中,转到“文件”->“项目/工作区”设置。
  2. 将生成系统更改为旧版生成系统。

它将解决新Xcode的构建问题。

如果要使用新的构建系统,则可以从此Apple Xcode帮助页面找到故障排除帮助。


50
问题的全部重点是转移到最新的构建系统。
萨希尔·卡普尔

4
然后,您应该提到的问题是,您不希望通过更改构建系统来解决问题。另外,我已经提到,如果您想使用新的构建系统,则可以按照Xcode支持中心给出的步骤进行操作。另外,当您减票时,请提供有效的理由。谢谢!@SahilKapoor
Akshay Sunderwani

1
谢谢你,好心的陌生人。我唯一的兴趣是让我的构建再次工作以按时完成,因此您的答案正是我所需要的。
丹·洛尼

6
这不是解决该问题的适当方法。对于这种简单的事情,不应将构建系统更改为“旧版”。
Varun Goyal,

38

我在Cocoapods遇到了这个问题。解决方案是先清理构建文件夹,然后重新安装所有Pod,然后重新构建应用程序。问题就这样解决了。


2
这也为我工作。我做了一个干净的Pod安装。
Cloud9999Strife

就我而言,我刚刚完成了Pod安装,因此只需要清理build文件夹即可。仅在我允许Xcode更新构建设置后才会出现此错误。
斯通蒂普

遇到Alamofire的问题。做了一个“ Clean Build Folder”,没有重新安装任何可可豆,并且工作正常
kite_n_code

25

我通过在所有“复制文件”和“链接二进制文件与库”构建阶段之前转移“复制捆绑资源”构建阶段来解决我的问题


+1,但我使用了细微的变化。我不需要在“链接二进制文件与库”之前移动任何内容,因为Xcode中的新默认项目不是那样,所以我不需要这样做。我只是将“ Copy Bundle Resources”移到了“ Copy Helper Tools”(将一些命令行工具和一个助手应用程序复制到macOS应用程序产品的“ Contents / Helpers”)之前。但是,由于这两个命令的顺序应该有任何区别-它们只是复制文件-因此没有意义。因此,我提交了一个错误:42927301。我修改的解决方案:交换各种“复制XXX”构建阶段,直到起作用为止:(
Jerry Krinock,

2
对我来说,同样如此,我将“复制捆绑软件”资源移到了“复制文件”阶段上方,然后便可以正常使用了。我会骗你的虫子@JerryKrinock
Peter N Lewis

对我来说,问题出在Embed Frameworks依赖项上,所以我将Embed Frameworks移到了Copy Bundle Resources上方,这很有帮助。
Elena

19

Xcode 10的新构建系统可以检测到构建中的依赖项周期,并提供诊断信息来帮助您解决它们。修复这些依赖关系周期可以提高构建的可靠性,以便始终如一地生产出正确的产品(周期可能是需要删除派生数据的可能原因)。它还可以缩短构建时间,因为构建周期会导致构建图中的某些内容在每个构建中始终都是过时的,从而使每次构建时不必要地重新进行构建。

Xcode帮助中提供了有关解决某些常见类型的依赖性周期的文档:https : //help.apple.com/xcode/mac/current/#/dev621201fb0

也就是说,这种循环诊断看起来有些奇怪。听起来您可以通过重新安排构建阶段来解决它,但我认为诊断程序无法真正解释问题所在。如果您不介意,将非常感谢您针对此特定情况改进诊断程序的错误报告。您可以在https://bugreport.apple.com上提交一个。请提供您认为可能相关的项目详细信息;一个可以重现该问题的示例项目是理想的,但是,如果您无法附加该内容,则对项目结构的诊断和一些想法仍然很有帮助。


18

我遇到了Cocoapods的问题,发现了一个临时解决方法:

  1. 安装最新版本的cocoapods(1.5.3): sudo gem update cocoapods
  2. 删除您导出的数据: rm -rf ~/Library/Developer/Xcode/DerivedData/*
  3. pod install

在此处获取源代码,我正在使用Xcode 10 beta 4。

编辑:现在在Xcode 10.0上并且仍然相关。


上周在Xcode 10.1(10B61)上又再次发生了这种情况,但仍然有效。Clean Build Folder在执行步骤2.和之前,请确保执行(并且退出Xcode也可能会有所帮助)3.
gabuchan

像魅力一样工作!
旗手

15

Swift,Objective-C和CoreData之间的混合交互中,我遇到了类似的问题:在我的项目(用Swift编写)中,我也使用了Core Data的自动生成的Swift类。

但是有一点我需要一个具有公共属性(在其标头对应项中定义)的Objective C类,该类引用核心数据实体。

#import "ProjectName-Swift.h" // this is to import the swift entities into ObjC

@interface myObjCClass : NSObject

@property (nonatomic) MyCoreDataClass*myEntity;

@end

更改CoreData模型后,XCode尝试重新构建类,并且陷入指示的周期构建错误。

在最初的绝望时刻之后,由于我的项目中没有任何编译头阶段可以更改顺序,因此我发现解决方案非常简单:

在中,myObjCClass.h我删除了共享的Swift标头import语句,并使用@class指令对其进行了更改:

@class MyCoreDataClass; // tell the compiler I will import the class definition somewhere else

// the rest stays the same
@interface myObjCClass : NSObject

@property (nonatomic) MyCoreDataClass*myEntity;

@end

然后将#import "ProjectName-Swift.h"语句移到myObjCClass.m类定义文件中。

#import "myObjCClass.h"
#import "ProjectName-Swift.h"

@implementation myObjCClass

@end

它没有任何后顾之忧。


哇,非常感谢。整夜都在为此苦苦挣扎,但是当我彻底实施这个建议时,问题就解决了!
Erik van der Neut


11

实际上,您只需要注意Xcode的提示This usually can be resolved by moving the target's Headers build phase before Compile Sources,就可以做到。

当我遇到此问题时,Xcode会提示我:

:-1: Cycle inside XXXX; building could produce unreliable results. This usually can be resolved by moving the target's Headers build phase before Compile Sources.
Cycle details:
→ Target 'XXXX': LinkStoryboards
○ Target 'XXXX: Ditto Path/XXXX-Swift.h /Path/XXXX-Swift.h
○ Target 'XXXX has compile command for Swift source files
○ That command depends on command in Target 'XXXX: script phase “Run Script”

我只做了一件事就完美地解决了这个问题:

选择Target,然后选择Build Phase将移到Run Script的前面Compile Sources

运行,编译成功。

原理很简单,只需更改编译顺序即可。

图片1

Xcode 10.2和Swift 5


2
这有效,但只有一次,然后在下一个构建命令中,问题再次出现。
斯瓦蒂

6

我遇到了同样的问题:以下是错误

在目标“ Pods-MyAppName”和“ RxCocoa”之间的依存关系中循环;建设可能会产生不可靠的结果。通常可以通过在编译源之前移入目标的Headers构建阶段来解决此问题。循环路径:Pods-MyAppName→RxCocoa→Pods-MyAppName

我使用以下步骤解决了问题:

1)。在Pods-MyAppName项目中转到目标RxCocoa

2)进入建设阶段

3)拖动Headers阶段并将其移至Complile Sources构建阶段之上。

这解决了我的问题。希望能帮助到你!


6

在目标的中Scheme,找到标签Build,并确保Find Implicit Dependencies未选中该标签。这些步骤可能会起作用。


当您说“关闭”时,您是说它应该有一个颜色和一个复选标记吗?还是应该为空,没有复选标记?
Ben Leggiero

1
嗨,@ BenLeggiero。“关闭”表示应为空,没有复选标记。
Nh徐

3

我的解决方案只是清除Clean Build Folder然后重新构建。


令人惊讶的是,没有人对此解决方案评分。很简单,但这是我们必须首先尝试的一件事,然后再深入探讨这个问题。

3

我的问题与我的快速桥接头文件和目标c文件之间的周期性依赖关系有关。

在我的目标c头文件中,我有一个#import "...-swift.h"文件,然后在几个快速文件中,我将那些文件与上述导入一起包含进来,因此造成周期性依赖性。

这是导致我找到解决方案的StackOverflow:

目标C,由于循环依赖而导致的Swift互操作性问题

Swift桥接标头导入导入Hopscotch-Swift.h本身的文件时,如何防止循环引用

编辑:

我最终将上述文件转换为swift,这解决了我的问题。


2

看来您需要在Pods目标中更改构建阶段的顺序。对于我来说,将Headers移至其余所有位置均有效。您可以在Podfile中自动执行此操作:

require 'xcodeproj'

post_install do |installer|
  installer.pods_project.targets.each do |target|
    headers_phase = target.build_phases.find { |p| p.kind_of?(Xcodeproj::Project::Object::PBXHeadersBuildPhase) }
    if headers_phase
      puts "#{target.name}: Moving Headers build phase to top"
      target.build_phases.insert(0, target.build_phases.delete_at(target.build_phases.index(headers_phase)))
    end
  end
end

1

同样的问题Version 10.0 beta 3 (10L201y),我想拥有新的构建系统

问题已禁用 Enable Modules (C and Objective-C)

Build Settings -> Apple Clang - Language - Modules

启用后(设置为YES)摆脱了错误。


1

尝试在Xcode 10上归档项目时遇到了类似的问题。这是详细信息:

→ Target 'mytarget': CodeSign /path/to/mytarget.app

○ Target 'mytarget': SetGroup staff /path/to/mytarget.app

○ Target 'mytarget': SetMode u+w,go-w,a+rX /path/to/mytarget.app

○ Target 'mytarget': SetGroup staff /path/to/mytarget.app

通过设置$(USER)来修复它mytarget -> Build Settings -> Deployment -> Install Owner


1

核心数据

我有同样的问题和错误,但是当我为实体“创建NSManagedObject子类”时遇到了我的错误。因此,如果您认为自己的错误与我有关Core Data的错误相同,那么可能可以帮助您(并且对我有帮助)的是:

  • 在“ xcdatamodel”文件中单击您的实体
  • 转到右栏,单击“数据模型检查器”
  • 将“模块”更改为“当前产品模块”
  • 最后,将“ Codegen”更改为“ Manual / None”
  • 清洁和建造

我认为是因为在其他情况下,Xcode会自动创建一个文件,而当我们创建另一个文件时,则会导致冲突。


1

Xcode 10.2.1 /单元测试目标。我的单元测试目标独立于宿主目标,以缩短构建时间。取消签Find Implicit Dependencies入即可解决Scheme- Build选项,我在指定所有的依赖Build Settings- Compile Sources


0

您可能可以在这里解决此问题:

文件->工作区设置->构建系统:新的构建系统

工作区设置


0

我已经尝试过此页面上的内容,但是唯一对我有所帮助的是,我制作了目标的副本并更新了副本的名称(删除了副本后缀),然后删除了旧的副本,然后进行了pod安装。


0

在将Xcode更新到版本11.4后,我遇到了这个问题。降级到11.2.1可以修复它。


0

Xcode:11.3.1目标:XCUITest目标

  1. 运行命令以清理构建文件夹:rm -rf〜/ Library / Developer / Xcode / DerivedData / *

  2. 更改工作空间设置:选择“旧式构建系统”

在此处输入图片说明


-1

以下两个选项对我有用:文件->项目/工作区设置。

1,在文件->项目设置中将构建系统更改为“旧版构建系统”

2,编辑方案并在“构建”部分下选择“并行构建”选项。


没关系 现代的构建系统不会造成这种情况。
猛禽

-1

在LHS的项目窗格中,对于您的构建产品,请不要在RHS窗格的“目标成员身份”列表中选择它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.