在里面循环;构建可能会产生不可靠的结果:Xcode 10错误

时间:2018-06-05 21:39:40

标签: xcode10 build-system

我正在尝试使用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。如何在不恢复遗留构建系统的情况下解决此错误?

24 个答案:

答案 0 :(得分:33)

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

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

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

如果要使用新的构建系统,则可以找到故障排除帮助from this apple Xcode help page

答案 1 :(得分:25)

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

答案 2 :(得分:15)

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

在Xcode帮助中有关于解决一些常见类型的依赖循环的文档:https://help.apple.com/xcode/mac/current/#/dev621201fb0

那就是说,这个循环诊断看起来有点奇怪。听起来你可以通过重新安排你的构建阶段来解决它,但我不认为诊断真的解释了这个问题。如果你不介意的话,非常感谢关于改进这种特殊情况的诊断的错误报告。您可以在https://bugreport.apple.com处提交一个。请包括您认为可能相关的项目的所有详细信息;一个重现问题的示例项目是理想的,但是如果你不能附上它,那么项目结构的诊断和一些想法仍然有用。

答案 3 :(得分:14)

我通过移动'复制捆绑资源'来解决我的问题。在我的所有复制文件之前构建阶段' &安培; '将二进制文件链接到库'建立阶段

答案 4 :(得分:11)

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

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

来源here,我正在使用Xcode 10 beta 4。

编辑:现在在Xcode 10.0上并且仍然有用。

答案 5 :(得分:10)

我终于可以通过将主要目标Embed App Extensions中的Build Phases脚本移动到最后位置来解决此问题。

答案 6 :(得分:5)

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

  

在目标“ Pods-MyAppName”和“ RxCocoa”之间的依赖关系中循环;   建设可能会产生不可靠的结果。这通常可以是   通过在编译之前移动目标的标头构建阶段来解决   资料来源。循环路径:Pods-MyAppName→RxCocoa→Pods-MyAppName

我通过以下步骤解决了该问题:

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

2)进入构建阶段

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

这解决了我的问题。 希望对您有帮助!

答案 7 :(得分:3)

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

答案 8 :(得分:3)

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

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

array_map("unserialize", array_unique(array_map("serialize", $myArray)));

一旦我更改了CoreData模型,XCode便试图重新构建类,而我却陷入了指示的周期构建错误。

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

#import "ProjectName-Swift.h" // this is to import the swift entities into ObjC @interface myObjCClass : NSObject @property (nonatomic) MyCoreDataClass*myEntity; @end 中,我删除了共享的Swift标头import语句,并使用myObjCClass.h指令对其进行了更改:

@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

它没有任何后顾之忧。

答案 9 :(得分:1)

Xcode 10.2.1 /单元测试目标。我的单元测试目标独立于宿主目标,以缩短构建时间。通过取消选中Find Implicit Dependencies-Scheme选项中的Build来解决该问题,因为我在Build Settings-Compile Sources中指定了所有依赖项。

答案 10 :(得分:1)

Core_Data

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

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

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

答案 11 :(得分:1)

我的解决方案是先清理构建文件夹,然后重新构建。

答案 12 :(得分:1)

似乎您需要在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

答案 13 :(得分: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来解决此问题

答案 14 :(得分:1)

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

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

Build Settings -> Apple Clang - Language - Modules

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

答案 15 :(得分:0)

Xcode:11.3.1 目标:XCUITest目标

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

  2. 更改工作区设置:选择旧版构建系统

enter image description here

答案 16 :(得分:0)

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

答案 17 :(得分:0)

实际上,您只需要注意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 PhaseRun Script移动到Compile Sources的前面。

运行,编译成功。

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

enter image description here

Xcode 10.2& 斯威夫特5

答案 18 :(得分:0)

我发现的最好的临时修复(直到您解决根本问题)是对源代码进行简单的更改(即使是添加新行这样微不足道的更改),然后再试一次。我发现即使是一个空格更改也足以让它再次构建。但是,这绝对是暂时的,因为尝试几次后它可能会再次发生。

这比清理构建文件夹(我发现它也是临时的)要好,因为进行空白更改和重建比清理构建文件夹并重建(尤其是在大型项目中)要快得多。

答案 19 :(得分:0)

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

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

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

Objective C, Swift Interoperability issue due to circular dependency

How to prevent circular reference when Swift bridging header imports a file that imports Hopscotch-Swift.h itself

编辑:

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

答案 20 :(得分:0)

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

答案 21 :(得分:0)

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

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

Workspace Settings

答案 22 :(得分:-1)

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

答案 23 :(得分:-1)

我通过将“运行脚本”移到构建阶段的顶部来解决了这个问题。