如何在iOS / OS X中使用Crashlytics今天查看扩展



由于今天扩展作为单独的进程运行,我相信它们不会记录任何开箱即用的崩溃。我假设我们需要在小部件上单独初始化 Crashlytics。例如,在TodayViewControllerviewDidLoad方法中。

  • 是否有人已经在任何iOS/OS X扩展中使用Crashlytics?如果是这样,您是如何实施的?
  • 我也想知道在 Crashlytics 中仅为扩展创建一个单独的应用程序是否有意义。

Crashlytics支持与我取得了联系,并提供了这些步骤。我测试了它们,它现在适用于我的iOS 8应用程序。

  1. 将 Crashlytics 运行脚本构建阶段也添加到扩展的目标(复制/粘贴您添加到主应用的相同内容)

  2. Crashlytics.framework添加到扩展的链接库(例如,只需在其文件检查器中检查扩展名目标)

  3. Crashlytics.startWithAPIKey("yourApiKey")添加到扩展的视图控制器的initWithCoder方法。(在苹果的今日扩展模板中,它默认称为TodayViewController

    >如果您还没有initWithCoder方法,之后它应该如下所示:

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Crashlytics.startWithAPIKey("yourApiKey")
    }
    

以下是Twitter自己的实现指南:

https://twittercommunity.com/t/integrate-fabric-crashlytics-with-ios-8-extension/28905

因此,复制库,例如,如果您使用的是CocoaPods,则可以将Fabric和Crashlytics添加到扩展目标:

在 Podfile 中:

target :TodayExtension do
  pod 'Fabric'
  pod 'Crashlytics'
end

并运行pod install.并且不要忘记将Build Active Architecture Only设置为 NO ,否则您可能会收到链接器错误

然后在您的 TodayViewController 中:

#import <Fabric/Fabric.h>
#import <Crashlytics/Crashlytics.h>
...
-(id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    [Fabric with:@[CrashlyticsKit]];
    return self;
}
并将

构建阶段的结构运行脚本复制到今日扩展目标,并将结构条目从主应用程序的信息列表复制到今日扩展的信息清单中

以下是描述如何在iOS扩展中使用Crashlytics的官方操作方法:

  • 将此行添加到viewControllerinitWithCoder方法Fabric.with([Crashlytics.self])
  • 从主应用的 Info.plist 复制"结构"词典,并粘贴到扩展的 Info.plist 中。
  • 将运行脚本生成阶段
  • 从主应用的目标复制/粘贴到扩展的运行脚本生成阶段。

而且......你好走!

如果您想添加 Crashlytics 以在 iOS 8.0+ 上共享扩展,来自 maremmle 的答案也有效。只要记住[Crashlytics startWithAPIKey:@"apiKey"];从你的第一个 ViewController init方法中。

感谢您的所有说明,它在我的共享扩展中工作正常。

我确实注意到,对于我的共享扩展,"结构答案"仪表板显示以下各项的实际数据:

  1. 活跃用户
  2. 每位用户在应用中花费的总时间中位数

它适用于配套应用程序。所以我想知道答案SDK将如何确定这一点。最合乎逻辑的似乎是监视UIApplication通知。由于扩展的生命周期与视图控制器相关,因此不会发布这些 UIApplication 通知。因此,Fabric 不知道扩展何时处于活动状态。

因此,我实现了以下解决方案,该解决方案在 Fabric 仪表板中提供了上述数据:

  1. 在扩展主视图控制器的"viewDidLoad"中,发布UIApplicationDidBecomeActiveNotification,这将触发Fabric的启动。
  2. 在关闭扩展之前(通过 completeRequestReturningItems:completionHandler: 或 cancelRequestWithError:)post UIApplicationWillResignActiveNotification.这将触发结构的停止。

请注意,在设备上执行操作与数据在仪表板中可见之间存在延迟。特别是对于活跃用户。显示扩展后大约需要 20-30 秒。但是,当扩展关闭时,活动用户最多可能需要 5 分钟才能减少。

最新更新