我是Swift的新手,在我(可能)通过CocoaPods正确安装第三方框架后,我正在努力解决错误。
错误如下。
<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文件夹中删除该文件,则该错误将变为&#39; file not be&#39;等
所以我的问题是,这些冲突的文件将在何处定位,如何安全删除其中一个?或者更多的是,只有一个文件,但它被使用了两次 - 在这种情况下我该如何阻止它?
非常感谢。
好的,我觉得评论已经丢失,所以我在这里澄清一下,看看是否可以触发答案,因为自昨天以来无法构建和运行。
我现在只有Pods-&gt; Pods / MainController文件夹中的swift文件。
当我构建时,我找不到找到的文件。然而,它正在寻找的文件位于App-&gt; Controllers文件夹中,这是我从中删除它的地方。如果我把文件放在那里,我会使用两次&#39;错误。
那么如何阻止它试图在控制器中找到该文件并在Pod中查找它?
由于
答案 0 :(得分:141)
检查文件未包含在目标&#34;构建阶段&#34; &#34;编译来源&#34;设置。 合并project.pbxproj。
时可能会发生这种情况答案 1 :(得分:76)
如果这是与核心数据相关的,并且您没有Xcode在构建时为您生成实体(您自己手动创建它们),并且您遇到此问题,可能是您没有检查更新实体.xcdatamodelld文件。会发生什么是Xcode将创建现有类的重复类,因为您告诉Xcode在运行时生成实体。
在数据模型检查器中,将“模块”更改为“当前产品模块”,将“Codegen”更改为“手动/无”。
答案 2 :(得分:11)
主要思想是......是的,检查重复的课程。但就我而言,我没有。我有一个大项目,添加了WatchKit,很多东西,在某些时候我有一个“重复”类。我删除了副本,但问题仍然存在。为了解决这个问题,我做到了这一点:
答案 3 :(得分:8)
尝试搜索,如果您添加了两次相同的ViewController - MainController.swift
。
如果没有,请在代码库中搜索class MainController
。
关于Pods,最好使用所有Pod作为框架,
请尝试在'use_frameworks!'
中使用Podfile
,然后从终端重新安装广告连接“pod install
”。
答案 4 :(得分:7)
答案 5 :(得分:5)
当您与 github 或类似工具合并时,可以在 project.pbxproj 中。
这可以解决在您喜欢的文本编辑器中打开 project.pbxproj 和删除重复声明的问题。
希望能解决您的问题。
答案 6 :(得分:3)
我会补充Josh O&Conners的回答,因为他推荐的修改是我问题的根源。我必须通过按shift-option-command-k来清理build文件夹以完成修复。
答案 7 :(得分:2)
答案 8 :(得分:0)
对于代码数据模型类。选择代码数据模型,然后选择“实体”,将“代码生成”的值更改为“手动/无”。
对我有帮助。
答案 9 :(得分:0)
我只是自己遇到了这个问题。这是我第一次为项目添加新目标。
添加新目标时,应单击现有目标并尝试将其复制。
您不应从同一模板创建目标。这样,将添加一个新的AppDelegate,ViewController,SceneDelegate,plist,Main.Storyboard和Assets。基本上,它将添加模板提供的所有内容,并且您的项目现在每个失败都有2个。然后,如果将目标添加到现有 AppDelegate中,则会收到提到的错误。解决方法是:
如果重复,那么您得到的只是一个新目标和一个plist。一旦获得了这些文件,则对于每个现有文件,都需要进入其文件检查器,并将新目标添加到其目标列表中。
答案 10 :(得分:-1)