Swift iOS 14 Firebase 警告——这个旧式函数定义之前没有原型

Ale*_*ign 2 ios firebase google-analytics-firebase swift

我有一个与 Firebase 集成的应用程序,可以使用 cocoapods 连接分析。它在 iOS 13 上运行良好,没有任何黄色警告,但是当我为目标 iOS 14 安装新的可可豆荚并构建应用程序时,我收到 6 条黄色警告消息

“XXXPods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m:130:20:这个旧式函数定义之前没有原型”

GULLogger.m 警告

当我在网上寻找答案时,只有少数人指着 Flutter。我没有这个应用程序的 Flutter,我认为我不需要它。有没有其他人有同样的问题?请如何为 iOS 14 静音?

我可以将 pod 降级到 iOS 13,但重点是更新版本。感谢您的任何帮助/指导

Tar*_*agi 6

因此,这是Xcode 12.5(我相信)中针对那些 SDK 中声明的旧 C 风格函数或使用该语法的任何旧风格代码的新警告。


这是什么意思?

不要留下参数列表的功能空白---使用无效

如果函数声明不包含参数,如在 double atof(); 中,这也意味着不对 atof 的参数进行任何假设;关闭所有参数检查。空参数列表的这种特殊含义旨在允许旧的 C 程序使用新的编译器进行编译。但是将它与新程序一起使用是个坏主意。如果函数接受参数,则声明它们;如果不需要参数,则使用 void。

所以你的函数原型应该是这样的:

int foo(void);
Run Code Online (Sandbox Code Playgroud)

这就是函数定义应该是这样的:

int foo(void)
{
    ...
    <statements>
    ...
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

与 int foo() 类型的声明(即不使用关键字 void)相比,使用上述的一个优点是,如果您使用像 foo(42) 这样的错误语句调用函数,编译器可以检测到错误。如果您将参数列表留空,这种函数调用语句不会导致任何错误。错误会悄无声息地传递,未被发现,代码仍会执行。


我们可以做什么?

可能会为 Firebase SDK 提出一张票来解决(如果还没有的话)。


这是多大的问题?

取决于实现细节。可能是简单如更换()(void)所有的这些功能。如上所述,否则可能会涉及更多。


Firebase 团队会定期维护 SDK,我们很快就会在即将发布的版本中看到对此的修复。


Pau*_*ien 6

跑步pod update

Firebase 在 2 月份引入 Xcode 12.5 后修复了此问题 github.com/google/GoogleUtilities/pull/8/files。