28

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

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

5 回答 5

30

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

  1. 将 Crashlytics Run Script Build Phase 添加到您的扩展程序的目标中(复制/粘贴您添加到主应用程序的内容)

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

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

    > 如果你还没有initWithCoder方法,之后应该是这样的:

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Crashlytics.startWithAPIKey("yourApiKey")
    }
    
于 2014-11-26T15:49:17.693 回答
8

这是 Twitter 自己的实现指南:

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

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

在 Podfile 中:

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

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

然后在你的 TodayViewController 中:

#import <Fabric/Fabric.h>
#import <Crashlytics/Crashlytics.h>

...

-(id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    [Fabric with:@[CrashlyticsKit]];
    return self;
}

并将构建阶段中的 Fabric Run Script复制到您的 Today Extension 目标,并将主应用程序的 info plist 中的 Fabric 条目复制到 Today Extension 的 info plist

于 2015-08-17T11:18:16.463 回答
6

以下是官方说明如何在 iOS 扩展中使用 Crashlytics:

  • 将此行添加到您viewControllerinitWithCoder方法中Fabric.with([Crashlytics.self])
  • 从主应用程序的 Info.plist 中复制“Fabric”字典并粘贴到扩展程序的 Info.plist 中。
  • 将运行脚本构建阶段从主应用程序的目标复制/粘贴到扩展程序的运行脚本构建阶段。

而且……你很高兴!

于 2016-06-23T22:33:27.033 回答
5

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

于 2015-05-19T20:34:55.603 回答
1

感谢您的所有说明,它在我的共享扩展中运行良好。

我确实注意到对于我的共享扩展,Fabric Answers 仪表板没有显示以下实际数据:

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

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

所以我实现了以下解决方案,它在 Fabric Dashboard 中提供了上述数据:

  1. 在 Extensions 主 ViewController 的“viewDidLoad”中,发布 UIApplicationDidBecomeActiveNotification,这将触发 Fabric 的启动。
  2. 在关闭扩展之前(通过completeRequestReturningItems:completionHandler:cancelRequestWithError:)发布 UIApplicationWillResignActiveNotification。这将触发 Fabric 的停止。

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

于 2017-05-24T12:51:28.237 回答