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

Posted

技术标签:

【中文标题】Swift iOS 14 Firebase 警告 - 这个旧式函数定义之前没有原型【英文标题】:Swift iOS 14 Firebase Warning - This Old-Style Function Definition Is Not Preceded By a Prototype 【发布时间】:2021-06-12 17:11:06 【问题描述】:

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

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

我在网上找答案的时候,只有寥寥无几,都指向Flutter。我没有这个应用程序的 Flutter,我认为我不需要一个。还有其他人有同样的问题吗?请问如何在 iOS 14 中静音?

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

【问题讨论】:

【参考方案1】:

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


什么意思?

do-not-leave-the-parameter-list-of-a-function-blank---use-void

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

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

int foo(void);

函数定义应该是这样的:

int foo(void)

    ...
    <statements>
    ...
    return 1;

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


我们能做什么?

可能会为 Firebase SDK 开一张票(如果还没有的话)。


这是一个多大的问题?

取决于实施细节。对于所有这些功能,可以像用(void) 替换() 一样简单。如上所述,可能会涉及更多。


Firebase 团队会定期维护 SDK,我们很快就会在即将发布的版本中看到解决此问题的方法。

【讨论】:

谢谢@Tarun,做到了!将所有这些函数的 () 替换为 (void) 可以消除黄色警告,并且功能不受影响。 Firebase 在 Xcode 12.5 推出后的 2 月修复了此问题 github.com/google/GoogleUtilities/pull/8/files。运行pod update 更新到最新版本。【参考方案2】:

运行pod update

Firebase 在 github.com/google/GoogleUtilities/pull/8/files 推出 Xcode 12.5 后于 2 月修复了此问题。

【讨论】:

简单有效!删除了我所有的错误。非常感谢!

以上是关于Swift iOS 14 Firebase 警告 - 这个旧式函数定义之前没有原型的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 和 ios 14 中访问 Firebase Firestore 文档的字段?

使用 Firebase 和 Swift (iOS) 上传图片

Firebase 与 Swift

在IOS中安装firebase cocoapods时的未知参数-swift

(Firebase Xcode 12 iOS 14)如何正确调用和设置孩子?

从firebase实时数据库IOS Swift中检索数据