【问题标题】:Xcode shows many errors but program compiles and runs fine (in both simulator and device)Xcode 显示许多错误,但程序编译并运行良好(在模拟器和设备中)
【发布时间】:2012-08-14 22:42:56
【问题描述】:

安装 CocoaLumberjack 的日志压缩器类后,我遇到了这种烦人的行为:Xcode 抱怨有许多未声明的标识符并给了我很多错误(不是警告,而是带有红色图标的错误)。

问题是我可以很好地编译和运行我的 iPad 应用程序,但 Xcode 不会执行任何自动完成功能。我尝试清理构建文件夹(Product > option + Clean),并删除派生数据。我也重启了也没用。

正如您所想象的那样,这是一种痛苦的工作。我确实在以前版本的 Xcode 上发生过这种行为;它与我预编译的头文件中的内容有关,但使用上面的解决方案总是可以解决它。我目前使用的是 Xcode 4.4 (4F250)。

我得到的示例错误:

Semantic Error: use of undeclared identifier 'DDTTYLogger'

即使是我自己编写并且自安装 CocoaLumberjack 压缩器类后未更改的类也会发生上述情况。

【问题讨论】:

    标签: xcode compiler-errors


    【解决方案1】:

    经过多次尝试,我终于解决了这个问题:

    从我的 Prefix.pch 中删除最后一个 #import 并重新构建。会发生错误(显然)。放回线路并重新构建。不会显示任何错误,并且在 10 秒左右后,错误会再次出现。

    重复上面的操作,除了最后一个#import,删除最后两个导入,然后是三个、四个等。我这样做直到我删除了五个导入,当我把它们放回去等待时,Xcode 停止了抱怨。

    请注意,我根本没有想到这一点。我在某处的博客上阅读了此解决方案。

    奇怪的错误...

    【讨论】:

    • 天哪。我差不多两年前发布了这个,人们仍然遇到这个问题。 Xcode 错误修复史诗般的失败。
    • 这个技巧(触摸 .pch 文件)甚至修复了 Xcode 6 beta2 中的相同问题!谢谢一百万:-)
    • 是的 2 年过去了,bug 仍然存在.. 感谢您修复 btw。
    • 我只需要删除并重新插入最后一个#import。不需要回去一一完成。
    • Xcode 9.1 仍然存在。这太不可思议了。
    【解决方案2】:

    打开构建设置并将“Precompile Prefix Header”设置为“No”,这解决了我的问题。

    感谢:https://stackoverflow.com/a/7035492/936957

    【讨论】:

    • 这样做的缺点是,取决于您在 Prefix.pch 文件中有多少东西,这可能意味着大量额外的编译时间。在许多情况下需要很多时间。
    • 就我而言,我将其从“否”更改为“是”,并且成功了!谢谢
    【解决方案3】:

    我在所有最新版本的 Xcode(Objective-C 和 Swift 中)都经常遇到这些问题。

    我今天注意到我在一个特定的类文件中遇到了错误。我将它从它所在的一些额外目标中删除,错误终于消失了!

    我认为 Xcode 目前在处理多个目标时存在一些基本错误。我的理论是,如果没有构建另一个目标,您基本上会看到来自该目标的错误。无论如何希望这对某人有所帮助。

    【讨论】:

    • 这是正确答案。如果您添加一个在 Objective-C 代码中访问的新 Swift 类,为了让编译器识别这些类,您需要编译目标。编译后 -Swift.h 文件会自动生成,您将看到构建成功。但是,您描述的 Xcode 错误会导致 Xcode 在当前(成功构建)目标上显示来自您的 other 目标的此类错误。解决方案是切换到其他目标并构建它们。
    【解决方案4】:

    此问题可能是由于某些文件的“目标成员”设置不一样。

    示例

    一个 XYZ 类放在文件“a.swift”中,并在文件“b.swift”中使用。但是“a.swift”的“Target Membership”设置与b.swift的“Target Membership”设置不同。

    检查“目标会员”设置如下:

    【讨论】:

      【解决方案5】:

      我遇到了通过cocoapods 安装的库的问题。转到Build Settings 并搜索“允许框架模块中的非模块化包含”,然后将其设置为Yes 就可以了。

      【讨论】:

      • 这是一个双刃剑解决方案,因为它解决了问题中所述的问题,但会导致您的框架失去模块化,这可能会导致一大堆其他问题。如果您知道自己在做什么,请使用此解决方案
      【解决方案6】:

      还不错, 如果您遵循这些步骤-

      1-清理Xcode(Cmd+Shif+K).

      2- 清除派生数据(Cmd+Shift+G)

      输入这个路径(~/Library/Developer/Xcode/DerivedData/)

      3- 退出并再次打开 Xcode。

      【讨论】:

      • 在清除派生数据后在 Xcode 10.2.1 中遇到了同样的问题,它第一次工作,然后再次显示这些错误。奇怪,但重新启动我的 Mac 后它得到了解决。
      【解决方案7】:

      当我不小心按下时,我在 Xcode 10.1 上有它:

      Cmd+Shift+U -(为测试而构建

      尝试清理 (Cmd+Shift+K),然后:

      Cmd+Shift+R为运行构建

      【讨论】:

        【解决方案8】:

        更新到 Xcode 11 后,我遇到了同样的问题。我尝试了所有提到的建议(清理文件夹、打开/关闭不同的设置、重新启动 xCode),但没有任何帮助。另外,我有一个 C 语言的大项目,所以,我想继续使用预编译的头文件。

        终于发现简单重启Mac OS解决了问题!这是非常奇怪的行为,但无论如何我很高兴我找到了解决方案 - 当大量五颜六色的错误消息四处飘荡时,很难编码。

        【讨论】:

          【解决方案9】:

          对我来说,它有助于清理项目。 XCode->产品->清理

          【讨论】:

            【解决方案10】:

            我遇到了类似的问题。

            解决此问题的替代选项是 打开管理器并删除项目的派生数据或删除管理器项目选项卡中的所有项目。它工作正常..

            【讨论】:

            • 我尝试删除派生数据无济于事。没有尝试从管理器中删除所有项目。这似乎有点矫枉过正,但话说回来,我找到的解决方案也没有多大意义!
            【解决方案11】:

            我在 Xcode 5.1 中也遇到过同样的事情。

            我通过确保#import 之间没有空行来修复它

            【讨论】:

              【解决方案12】:

              我从 .pch 文件中删除了一些额外的空格和额外的行,它 xcode 停止抱怨

              【讨论】:

                【解决方案13】:

                这也发生在我身上,但清洁并没有解决它。所做的是退出并重新打开XCode。之后,所有的幻像错误都消失了。对于那些想知道的人,您在关闭时打开的选项卡在您重新打开时仍会打开。

                【讨论】:

                  【解决方案14】:

                  我最近遇到了这个问题。在某些情况下,可以通过删除DerivedData 中的ModuleCache 文件夹以及DerivedData 中的项目文件夹来解决此问题。请注意,在执行此操作之前必须退出 Xcode。

                  【讨论】:

                    【解决方案15】:

                    在 Xcode 版本 10.1 (10B61) 上运行,我将构建设置“增加预编译头文件的共享”设置为 NO。我在 .xcworkspace 中工作,许多项目共享相同的框架,并且没有 Objective-C 桥接头(这意味着我自己没有添加任何 obj-c 代码)。我不确定 Xcode 何时默认删除 .pch 文件,但我的项目中没有这些文件。

                    【讨论】:

                      【解决方案16】:

                      打开一个终端并创建一个可通过命令行访问的漂亮小功能...

                      nano ~/.bashrc

                      添加(在尖括号之间进行必要的替换)

                      cycle() {
                        git stash save "BACKUP"
                        git checkout <<SOME OTHER BRANCH>>
                        git branch -D $1
                        xcodebuild -allowProvisioningUpdates -workspace <<YOUR WORKSPACE>>.xcworkspace -scheme <<YOUR SCHEME>> -configuration Release clean
                        git checkout $1
                      }
                      

                      ^X并按照提示保存,然后输入source ~/.bashrc使其对当前终端会话可见。

                      确保你的分支被推送到原点,因为我们要删除它:)

                      使用cycle &lt;&lt;MY BRANCH&gt;&gt; 调用函数(一旦运行,您可能需要调用git stash pop 来恢复任何工作副本更改)

                      希望它对你有用! Xcode,开始你的游戏吧!

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多