【问题标题】:Xcode/Swift 'filename used twice' build errorXcode/Swift“文件名使用了两次”构建错误
【发布时间】:2016-04-22 15:32:26
【问题描述】:

我是 Swift 新手,在我(可能)通过 CocoaPods 正确安装了第 3 方框架后遇到了一个错误。

错误如下。

<unknown>:0: error: filename "MainController.swift" used twice: '/Users/myname/Desktop/ProjectName/ProjectName/Controllers/MainController.swift' and '/Users/myname/Desktop/ProjectName/ProjectName/Controllers/MainController.swift'
<unknown>:0: note: filenames are used to distinguish private declarations with the same name
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1

据我从其他论坛收集到的信息,似乎很明显,我必须删除其中一个被使用两次的文件。但是我看不到它们将在哪里安装两次。如果我从 /Controllers 文件夹中删除文件,则错误将变为“找不到文件”等。

所以我的问题是,这些冲突的文件将位于何处以及如何安全地删除其中一个?或者更多的是只有一个文件但它被使用了两次 - 在这种情况下我该如何阻止它?

非常感谢。


好的,我觉得 cmets 迷路了,所以在这里澄清一下,看看是否可以触发答案,因为从昨天开始就无法构建和运行它。

我现在在 Pods->Pods/MainController 文件夹中只有 swift 文件。

当我构建时,我得到一个文件未找到。但是它正在寻找的文件位于 App->Controllers 文件夹中,我从中删除了它。如果我将文件放在那里,我会收到“使用两次”错误。

那么如何阻止它尝试在 Controller 中查找文件并在 Pod 中查找它?

谢谢

【问题讨论】:

    标签: ios swift xcode file compilation


    【解决方案1】:

    在目标的“Build Phases”“Compile Sources”设置中检查文件是否包含两次。 合并 project.pbxproj 时可能会发生这种情况。

    【讨论】:

    • 完美。我在重新定位后遇到了这个问题。谢谢!
    • 这是最常出现的问题。合并中具有不同路径的同一文件可能会导致此问题。
    • 你们都只是删除了Compile Sources中的一个重复文件吗?
    【解决方案2】:

    如果这是与核心数据相关的,并且您没有让 Xcode 在构建时为您生成实体(您自己手动创建它们),并且您遇到了这个问题,可能是您没有检查更新实体.xcdatamodelld 文件。发生的情况是 Xcode 将创建现有类的重复类,因为您告诉 Xcode 在运行时生成实体。

    在 Data Model Inspector 中,将“Module”更改为“Current Product Module”,将“Codegen”更改为“Manual/None”。

    【讨论】:

    • 我只需要更改名称字段中的名称。我不知道为什么这里有两个同名的实体。然后必须进行全面清理和重建。
    • 你拯救了我的一天!但奇怪的是,我使用的是 XCode 10.1 Create MangedObject Subclass,但 Module 和 Codegen 没有为我设置……也许是 XCode 的错误。
    • 在将 Codegen 更改为 Manual/None 之后,我不得不“Product > Clean Build Folder”并且错误消失了。
    • 拯救了我的一天。谢谢
    【解决方案3】:

    我通过从编译源中删除使用过的两次文件遇到了这个问题,如下图所示。选择文件,然后单击 -。然后清理并构建。

    【讨论】:

    • 工作解决方案??
    【解决方案4】:

    尝试搜索,如果您添加了相同的 ViewController - MainController.swift 两次。

    如果没有,则在代码库中搜索 class MainController

    关于 Pod,最好将所有 Pod 作为框架,

    所以尝试在您的Podfile 中使用'use_frameworks!',然后从终端重新安装 pod“pod install”。

    【讨论】:

    • 非常感谢 Ankit。通过搜索类,我找到了 2 个实例——一个在 Pods 中,一个在项目中。由于项目中的一个是 ViewController 的代码,我可以假设我删除 Pods 中的那个(整个 MainController 文件夹或只是其中的 swift 文件)?
    • 澄清一下 - 我有 Swift 文件的副本(因此还有类)。一个与所有其他 Swift 文件一起位于 /Controllers 文件夹中的主应用程序中。另一个是 Pods App->Pods 文件夹。 Pods App 似乎包含其他 3rd 方文件夹。如果我在主应用程序中删除 Swift 文件,我会收到文件未找到错误,但感觉这是需要删除的文件。那么我需要在 Pods 文件夹中指向一些东西吗?
    • 你能参考一下,你正在使用哪个 pod 文件。实际上,Pods 或本地 bundle 中的文件名不应该有相同的名称,因为在编译时,它会由于类引用而报错。这是其他开发人员也发现的问题之一:github.com/CocoaPods/CocoaPods/issues/4166
    • 好的,这是我的问题 - 我在 Build Phases>Compile Sources 中随机找到了对 /controllers/pagingmenucontroller 文件的引用。这似乎是一个可能的罪魁祸首,所以我删除了它,因为该文件不存在......现在我的桥接头失败了,因为 RestKit.h 无法找到,即使这以前从未成为问题。跨度>
    • 在我的情况下,项目设置中的双重输入>“构建短语”是问题所在。所以@josh 的答案对我来说是正确的答案。
    【解决方案5】:

    主要思想是……是的,检查重复的类。但就我而言,我没有。我有一个大项目,添加了 WatchKit,还有很多东西,有时我有一个“重复”的课程。我删除了副本,但问题仍然存在。为了解决这个问题,我这样做了:

    • 首先,在项目外部的文件夹中备份有问题的文件。
    • 删除重复文件和初始文件
    • 对于您的每个目标:转到构建阶段,并删除所有提及有问题的文件。
    • 再次将文件添加到您的项目中,瞧!

    【讨论】:

    • 谢谢!项目设置中的双重输入>“构建短语”是问题。
    • 很高兴它成功了,XCode 错误太疯狂了! @NikhilMathew
    【解决方案6】:

    要检查文件是否包含在编译源中两次而不滚动数百只苍蝇,请执行以下操作:

    • 在 Xcode 中选择文件
    • 转到右侧面板上的文件检查器(左上角图标)
    • 取消选中并再次选中目标复选框

    【讨论】:

      【解决方案7】:

      当您与 github 或类似工具进行合并时,这可以在您的 project.pbxproj 中。

      这可以解决在您喜欢的文本编辑器中打开 project.pbxproj删除重复声明

      希望能解决您的问题。

      【讨论】:

      • 是的,解决了这个问题。在 project.pbxproj 中合并后,相邻的 2 行声明了相同的文件名。谢谢!
      【解决方案8】:

      我会补充 Josh O'Conners 的回答,因为做出他建议的更改是我问题的根源。我确实必须通过点击 shift-option-command-k 来清理构建文件夹才能完成修复。

      【讨论】:

      • 我最喜欢的新键盘快捷键。
      【解决方案9】:

      在代码数据模型类的情况下。选择代码数据模型,然后选择实体,将“Codegen”的值更改为手动/无。

      这对我有帮助。

      【讨论】:

        【解决方案10】:

        我自己也遇到了这个问题。这是我第一次向项目添加新目标。

        添加新目标时,应单击现有目标并尝试复制它。

        您不应该从同一个模板创建目标。因为这会添加一个新的 AppDelegate、ViewController、SceneDelegate、plist、Main.Storyboard 和 Assets。它基本上会添加模板提供的所有内容,并且您的项目现在有 2 个失败。如果您随后将目标添加到 existing AppDelegate,那么您将收到上述错误。解决方法是:

        1. 删除所有重复文件
        2. 正如弗兰克所说:检查文件是否两次包含在目标的“构建阶段”“编译源”设置中。合并 project.pbxproj 时可能会发生这种情况。

        如果你复制,那么你得到的只是一个新的目标和一个 plist。一旦你得到这些,那么对于每个现有文件,你需要进入其文件检查器并将新目标添加到其目标列表中。

        【讨论】:

          【解决方案11】:

          我通过更改项目设置解决了这个两次文件名问题

          这里我附上了项目设置更改。

          Legacy build system.

          希望对你有帮助!!

          【讨论】:

          • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-29
          • 2013-01-21
          • 1970-01-01
          • 2022-07-20
          • 2018-02-28
          • 1970-01-01
          相关资源
          最近更新 更多