【问题标题】:Cycle inside ; building could produce unreliable results: Xcode Error内循环;构建可能会产生不可靠的结果:Xcode 错误
【发布时间】:2018-11-15 11:39:51
【问题描述】:

在使用 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 也有同样的结果。如何在不恢复到旧版构建系统的情况下解决此错误?

【问题讨论】:

  • 我遇到了类似的错误,并通过删除“派生数据”和清理项目来修复它。这对我来说就像一个魅力!

标签: ios xcode compile-time build-system


【解决方案1】:

我对 Cocoapods 也有同样的问题。

首先,移除 pod:

rm -rf ios/Pods

然后再次安装 pod:

cd ios && pod install && cd ..

然后运行你的应用,它现在应该可以工作了。

【讨论】:

    【解决方案2】:

    这个问题也有一段时间了。在 podfile 的末尾添加了以下块(这也将消除一些警告):

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        target.deployment_target = ios_version
        target.build_configurations.each do |config|
          config.build_settings['IOS_DEPLOYMENT_TARGET'] = 'iOS ' + ios_version
        end
      end
    end
    

    我还将use_frameworks! 移动到Podfile 的根目录。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这真的很糟糕,但这确实有效:(
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        Xcode:11.3.1 目标:XCUITest 目标

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            其实你只需要关注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前面。

            运行,编译成功。

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

            Xcode 10.2 & 斯威夫特 5

            【讨论】:

            • 这有效,但只有一次,然后在下一个构建命令中,问题又回来了。
            • 谢谢,这对我有用。我使用了 R.swift,这一步在“安装”中,但我错过了。
            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

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

              1、在File->Project Settings中将构建系统改为“Legacy Build system”

              2、编辑Scheme并选择Build部分下的“Parallelize Build”选项。

              【讨论】:

              • 这不相关。现代构建系统不会导致这种情况。
              【解决方案10】:

              在目标的Scheme中,找到标签Build,确保Find Implicit Dependencies没有勾选。这些步骤可能会奏效。

              【讨论】:

              • 当你说“关闭”时,你的意思是它应该有一个颜色和一个复选标记吗?或者它应该是空的,没有复选标记?
              • 嗨,@BenLeggiero。 “关闭”意味着它应该是空的,没有复选标记。
              【解决方案11】:

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

              在我的目标 c 头文件中,我有一个 #import "...-swift.h" 文件,然后在我的几个 swift 文件中,我将这些文件包含在上述导入中,从而导致了循环依赖。

              这是引导我找到解决方案的 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,这解决了我的问题。

              【讨论】:

                【解决方案12】:

                我已经尝试过这个页面上的东西,但唯一对我有帮助的是我制作了目标的副本并更新了副本的名称(删除了副本后缀),并删除了旧的,并做了 pod之后安装。

                【讨论】:

                  【解决方案13】:

                  你也许可以在这里解决这个问题:

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

                  【讨论】:

                    【解决方案14】:

                    Core_Data

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

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

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

                    【讨论】:

                      【解决方案15】:

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

                      【讨论】:

                      • 令人惊讶的是没有人对这个解决方案进行评价。很简单,但它必须是我们在深入研究问题之前应该尝试的第一件事。
                      • 是的,这为我解决了问题
                      【解决方案16】:

                      我在使用 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 上并且仍然相关。

                      【讨论】:

                      • 上周在 Xcode 10.1 (10B61) 上再次发生在我身上,它仍然有效。确保在执行步骤2.3. 之前执行Clean Build Folder(退出Xcode 也可能有帮助)。
                      • 工作就像一个魅力!
                      【解决方案17】:

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

                      但在某一时刻,我需要一个具有公共属性(在其对应的标题中定义)的 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 标头导入语句并使用 @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
                      

                      而且它没有后顾之忧。

                      【讨论】:

                      • 哇,非常感谢。一直在为此苦苦挣扎,但是当我彻底实施此建议时,问题已解决!
                      【解决方案18】:

                      您似乎需要更改 Pod 目标中构建阶段的顺序。对我来说,将标题移到其他标题之上是可行的。您可以在 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
                      

                      【讨论】:

                        【解决方案19】:

                        我在尝试在 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
                        

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

                        【讨论】:

                          【解决方案20】:

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

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

                          我使用以下步骤解决了它:

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

                          2) 进入构建阶段

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

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

                          【讨论】:

                            【解决方案21】:

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

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

                            Build Settings -> Apple Clang - Language - Modules

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

                            【讨论】:

                              【解决方案22】:

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

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

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

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

                              【讨论】:

                              • 问题的重点是迁移到最新的构建系统。
                              • 那么你应该提到你不希望改变构建系统的解决方案。另外,我已经提到,如果您想使用新的构建系统,那么您可以按照 Xcode 支持中心给出的步骤进行操作。此外,请在您投反对票时提供正当理由。谢谢! @SahilKapoor
                              • 谢谢你好心的陌生人。我唯一的兴趣是让我的构建再次工作以达到最后期限,所以你的答案正是我所需要的。
                              • 这不是解决问题的合适方法。构建系统不应该为了这么简单的事情而更改为 Legacy。
                              【解决方案23】:

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

                              【讨论】:

                              • +1 但我使用了一些细微的变化。我不需要在“Link Binary with Libraries”之前移动任何东西,我不会这样做,因为 Xcode 中的新默认项目不是那样的。我刚刚将“Copy Bundle Resources”移到“Copy Helper Tools”之前(它将一些命令行工具和一个帮助应用程序复制到 macOS 应用程序产品的 Contents/Helpers 中)。但是由于这两个的顺序应该有任何区别——它们只是复制文件——它没有意义。所以我提交了一个错误:42927301。我修改后的解决方案:交换各种 Copy XXX Build Phases 直到它工作:(
                              • 对我来说也是如此,我将我的 Copy Bundle Resources 移到了 Copy Files 阶段之上,并且现在它可以工作了。我会欺骗你的错误@JerryKrinock
                              • 对我来说,问题出在 Embed Frameworks 依赖项上,所以我将 Embed Frameworks 移到 Copy Bundle Resources 上方,这很有帮助。
                              【解决方案24】:

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

                              【讨论】:

                              • 这对我也有用。我做了一个干净的 pod 安装。
                              • 就我而言,我刚刚完成了一个 pod 安装,所以只需要清理构建文件夹。此错误仅在我允许 Xcode 更新构建设置后出现。
                              • 遇到了 Alamofire 的问题。在没有重新安装任何可可豆荚的情况下做了一个“清理构建文件夹”并且工作正常
                              【解决方案25】:

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

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

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

                              【讨论】:

                                【解决方案26】:

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

                                【讨论】:

                                • 在 Xcode 10.0 beta 4 (10L213o) 中遇到了这个错误——这个解决方法解决了它:-)
                                • 怎么做?你能一步一步解释吗?基本上,我有一个 Siri 套件的扩展,不能在模拟器上运行应用程序,但它可以在设备上运行
                                猜你喜欢
                                • 2019-02-22
                                • 2022-07-06
                                • 1970-01-01
                                • 2015-05-11
                                • 2013-09-13
                                • 1970-01-01
                                • 2021-02-09
                                • 2020-08-30
                                • 2017-11-15
                                相关资源
                                最近更新 更多