Firebase InAppMessaging 使用“-[NSBundle initWithURL:]: nil URL argument”使我的项目崩溃

Posted

技术标签:

【中文标题】Firebase InAppMessaging 使用“-[NSBundle initWithURL:]: nil URL argument”使我的项目崩溃【英文标题】:Firebase InAppMessaging crashing my project with "-[NSBundle initWithURL:]: nil URL argument" 【发布时间】:2019-02-03 19:01:51 【问题描述】:

我最近通过 cocoapods 将 Firebase In-App Messaging 添加到我的项目中。遵循文档中的设置过程后,我收到以下错误。如果有帮助,我最近也安装了 Admob,但直到我安装了应用内消息传递后才出现此错误。让我感到困惑的是:几乎没有任何代码可以设置它,那么我在哪里会得到一个 nil URL 错误?

起初,我不确定是 Firebase I.A.M.导致问题,但删除并重新安装后,问题消失然后再次出现。所以,我将描述我是如何安装 Firebase IAM 的。我使用此链接作为参考:

https://firebase.google.com/docs/in-app-messaging/get-started?authuser=0

    将它添加到我的 Podfile 中,使用 cocoapods 1.4.0

    在我的方案中添加了“-FIRDebugEnabled”

    获取我的实例 ID,并将其添加到控制台中的活动中

    仔细检查了我的方案

错误:

    Terminating app due to uncaught exception
    'NSInvalidArgumentException', reason: ' -[NSBundle initWithURL:]: nil URL argument'
    First throw call stack:
    (0x234b8cec4 0x233d5da40 0x234a93594 0x23554f6a8 0x23554f62c 
    0x10027a1b8 0x10248cdc8 0x10248ee28 0x10027a0f8 0x10027a2c0
    0x10027b518 0x100267038 0x100260888 0x100266e44 0x100267328   
    0x100264bd0 0x10248b824 0x10248cdc8 0x10248fc90 0x10249e1dc
    0x10249ebc8 0x2347a917c 0x2347abcec)
    libc++abi.dylib: terminating with uncaught exception of type NSException

在控制台中,我的实例 ID 出现,然后是更多信息,然后是错误,所以我不知道是什么原因导致它发生。这是我控制台中的一些输出:

     [Firebase/InAppMessaging][I-IAM700004] 1 messages were fetched successfully.
    [Firebase/InAppMessaging][I-IAM270005] No impression records update due to no change after applying the server message list
    [Firebase/InAppMessaging][I-IAM160010] There are analytics event trigger based messages, enable listening
    [Firebase/InAppMessaging][I-IAM160001] There are 0 test messages and 1 regular messages and 3 Firebase analytics events to watch after resetting the message cache
    [Firebase/InAppMessaging][I-IAM240002] Fetch is done. Start message rendering flow.

作为参考,当您搜索错误时,我查看了所有这些链接以及更多内容:

search 1 search 2 search 3 search 4

有什么想法吗?

【问题讨论】:

你找到解决办法了吗? 遗憾的是,我只是没有将它包含在我的应用程序中。如果您找到解决方案评论。我觉得我快弄明白了,所以如果你看一下链接,你可能会弄明白,但 idk 在任何地方都没有真正好的答案 您可以在这里提出/支持,希望他们帮助解决问题github.com/firebase/firebase-ios-sdk/issues/3090 【参考方案1】:

失败的原因是缺少 InAppMessagingDislayResources.bundle 文件。您需要 Copy Pods Resources Build Phase 脚本来复制和创建该文件。以下将恢复该构建阶段脚本。

-在 Xcode 中运行干净 -删除Pods目录 -删除Podfile.lock文件 -在项目目录中运行'pod install' -重启Xcode

【讨论】:

删除pods目录是什么意思--删除我的podfile? 应该有一个 Podfile.lock 文件,在同一个目录中将有一个名为 'Pods' 的文件夹删除它和 Podfile.lock。【参考方案2】:

我通过在资源路径为 nil 的位置放置断点开始调试应用程序。当您遇到断点时,该值为 nil 并显示 proj_name 是经过优化编译的 - 步进可能会表现得很奇怪.. 消息。

这使我们无法查看实际变量值,因为 pod 项目设置优化与 main & target 设置不同,因此更改为 None。

Pods > 项目设置 > 构建设置 > 代码生成

现在我可以看到主应用程序包的值/路径,但 proj_name.app 中仍然缺少 InAppMessagingDisplayResources.bundle,这提示复制文件时出错。发现在 Copy pod resource section 中检查了 Run script only when installed 的标志。取消选中它,应用程序并没有因为缺少捆绑包而崩溃。

目标设置 > 构建阶段 > 复制 Pod 资源

【讨论】:

以上是关于Firebase InAppMessaging 使用“-[NSBundle initWithURL:]: nil URL argument”使我的项目崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Firebase InAppMessaging 使用“-[NSBundle initWithURL:]: nil URL argument”使我的项目崩溃

从 Firebase 完成加载后如何使 UIRefreshControl 结束刷新

Firebase 使任务仅在主线程上执行,导致 Unity 冻结

Firebase 消息传递仅在发布版本中使应用程序崩溃

Firebase 实时数据库使快照更有价值

什么可能使已注销的用户能够绕过 Firebase 默认存储规则并访问存储桶?