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) 上传图片
在IOS中安装firebase cocoapods时的未知参数-swift