iOS:Crashlytics在初始化时崩溃。

23

在我的AppDelegate中,我调用

[Fabric with:@[CrashlyticsKit]];

一切都很顺利。现在我把我的代码拉到了另一台机器上,但是同一行代码出现了以下错误:

*** Terminating app due to uncaught exception 'FabricException', reason: '[Fabric] Value of Info.plist key "Fabric" must be a NSDictionary.'

我不知道我的项目的plist中是否有任何添加。有什么想法可以解决这个错误吗?


你尝试重新安装Fabric了吗? - Anton
需要进行更新。显然只是为了那个目标。我们还有另外三个目标已经拥有最新版本,而出现问题的那个却是旧版本。一旦我们通过Fabric更新了那个目标的Crashlytics,一切都正常了。 - Maxwell
@Maxwell请发布您自己的答案并将其标记为已接受。 - Juan Boero
8个回答

31

Fabric在安装时会自动将一段文本插入到您的应用程序的plist中。这些是必需的,如果它们不存在,Fabric在初始化时会抛出一个异常。

不幸的是,它实际上并没有告诉您它这样做了,所以我们在一个项目中遇到了这个崩溃,该项目的plist是由一个工具自动生成的,覆盖了Fabric添加的内容。

供参考,这是当前版本(截至2015年6月15日最新版本)的plist中Fabric部分的样子(不确定版本号在哪里)。

<key>Fabric</key>
<dict>
        <key>APIKey</key>
        <string>your-api-key</string>
        <key>Kits</key>
        <array>
                <dict>
                        <key>KitInfo</key>
                        <dict/>
                        <key>KitName</key>
                        <string>Crashlytics</string>
                </dict>
        </array>
</dict>

1
谢谢,这对我也有用。我开始使用CocoaPods来引用Crashlytics,但在我添加到plist之前,它也给了我同样的错误。 - jaygooby

5

使用Fabric应用程序解决此问题的另一种方法。

  1. 启动Fabric应用程序并使用您的用户ID登录。
  2. 单击“添加新应用程序”
  3. 选择您的.xcodeproj文件并按屏幕上的提示进行操作

不要在.info plist文件中手动添加Fabric密钥


2

我刚遇到了同样的问题,这是我的解决方法(感谢大家提供的线索)。

背景:当您在Xcode项目中有多个不同的目标时,仅通过在Mac Fabric应用程序中创建新应用程序似乎是不够的。

解决方案:如果您选择相同的项目(例如为您的专业版制作),Fabric应用程序将无法正确地处理专业版的.plist文件。因此,只需将非专业版.plist文件的Fabric词典条目复制并粘贴到专业版的版本中即可。API密钥位于组织级别,因此这是正确的做法。


2

我们需要更新Crashlytics来解决问题。我们已经为其他目标设置了最新的版本,并且那些正常工作,但是最新的更新版本(此帖子发布时为3.0.9)似乎修复了这个问题。


0
也许这看起来很奇怪,但我遇到了同样的问题,这就是我解决问题的方法。我有一个包含多个目标和方案的项目,还有两个额外的目标用于单元测试和UI测试。解决方案是在“管理方案”>“编辑”>“构建”下取消选中这些测试目标的“分析”、“运行”、“配置文件”和“归档”选项卡。请参见下面的图片:

enter image description here


0

将 Fabric 密钥类型从字符串更改为字典。转到“your-project-info.plist>Fabric>kits>item0>KitName”,将类型更改为字典。这个问题对我来说已解决。


0

我的建议: 在我的应用程序测试中,我添加了一个错误的配置到“myAppTests”的文件中,而不是“myApp”的文件中。所以就像Eugene提到的一样,请注意要添加在每个“.plist”文件中。


0
对我来说,原因是:
当您创建一个新目标时,会自动创建一个新的 Info.plist 文件。 因此,您需要将 Fabric 属性放到所有 Info.plist 文件中。
<key>Fabric</key>
<dict>
    <key>APIKey</key>
    <string>43336ce109856f4452829a8e6b6783886fefb</string>
    <key>Kits</key>
    <array>
        <dict>
            <key>KitInfo</key>
            <dict/>
            <key>KitName</key>
            <string>Crashlytics</string>
        </dict>
    </array>
</dict>

起初我错过了这个,只将这段代码放到了第一个 - 初始的 Info.plist 文件中。

当然,这是很久以前的事了,但您可能不希望您的Fabric API密钥被公开。也许您想将其从您的帖子中编辑掉。 - Darren Ehlers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接