iOS:Crashlytics 在初始化时崩溃

iOS: Crashlytics Crashing on Init

在我的 AppDelegate 中,我调用

[Fabric with:@[CrashlyticsKit]];

一切正常。现在我将我的代码拉到另一台机器上,同一行给我以下错误:

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

我不知道我的项目的 plist 中有任何添加。知道这个错误可能指的是什么以及如何解决它吗?

该解决方案要求我们更新 Crashlytics。我们设置的其他目标有最新版本并且工作正常,但最新更新(3.0.9 在这个 post 时)似乎解决了这个问题。

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

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

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

<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>

只需将 Fabric 密钥类型从字符串更改为字典。转到 your-project-info.plist>Fabric>kits>item0>KitName 并将类型更改为 Dictionary。我的问题已解决

使用 Fabric App 解决此问题的另一种方法。

  1. 启动 Fabric 应用并使用您的用户 ID 登录。
  2. 点击“添加新应用”
  3. Select 您的 .xcodeproj 文件并按照屏幕上的说明进行操作

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

这件事发生在我身上,我就是这样解决的(感谢大家提供线索。)

Context:当您的 Xcode 项目中有多个不同的目标时,通过在 Mac Fabric 应用程序中创建一个新应用程序,显然,还不够。

解决方案:如果您select同一个项目(例如,为您的 Pro 版本制作它)Fabric 应用程序没有正确接触 Pro 的 .plist . 因此,只需复制非专业版 .plist 的 Fabric 字典条目并将其粘贴到专业版中。 API 关键在组织级别,所以这是正确的方法。

可能这看起来很奇怪,但同样的问题发生在我身上,这就是我解决问题的方法。我有一个包含多个目标和方案的项目,我还有两个额外的单元测试目标和 UI 测试。解决方案是在管理方案 > 编辑 > 构建下的 "Analyse"、"Run"、"Profile" 和 "Archive" 选项卡中取消选中这些测试目标。见下图:

对我来说原因是:

当您创建新目标时 - 会自动创建一个新的 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 文件中。

我的两分钱: 在我的所有内容中,我错误地添加到 "myAppTests" 的 plist 而不是 "myApp" plist。 正如 Eugene 指出的那样,请小心添加每个 .plist。