如何使用Crashlytics与iOS / OS X今天查看扩展?

时间:2014-11-26 09:54:46

标签: ios crashlytics today-extension ios-extensions osx-extensions

由于今天扩展程序作为一个独立的进程运行,我确信它们不会记录任何崩溃的开箱即用。我假设我们需要分别在小部件上初始化Crashlytics。例如。在viewDidLoad。{/ p>的TodayViewController方法中

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

5 个答案:

答案 0 :(得分:28)

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

  1. 将Crashlytics运行脚本构建阶段添加到您的扩展程序目标(复制/粘贴您添加到主应用程序中的目标)

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

  3. Crashlytics.startWithAPIKey("yourApiKey")添加到扩展程序的视图控制器的initWithCoder方法中。 (在Apple今天的扩展模板中,默认情况下称为TodayViewController

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

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

答案 1 :(得分:8)

这是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;
}

并将构建阶段中的Fabric 运行脚本复制到Today Extension目标,并将Info plist中的Fabric条目从主应用程序复制到Today Extension的信息plist

答案 2 :(得分:6)

以下official how-to介绍了如何在iOS扩展程序中使用Crashlytics:

  • 将此行添加到viewController initWithCoder方法Fabric.with([Crashlytics.self])
  • 复制&#34; Fabric&#34;来自主应用的Info.plist中的词典并粘贴到您的扩展程序的Info.plist中。
  • 将运行脚本构建阶段从主应用程序的目标复制/粘贴到您的扩展程序的运行脚本构建阶段。

而且......你很高兴去!

答案 3 :(得分:5)

如果您想添加Crashlytics以在iOS 8.0+上共享扩展程序,来自maremmle的答案也适用。只需记住将[Crashlytics startWithAPIKey:@"apiKey"];放在第一个ViewController的init方法中。

答案 4 :(得分:1)

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

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

  1. 活跃用户
  2. 每位用户的应用总时间中位数
  3. 它适用于配套应用。 所以我想知道Answers SDK将如何确定这一点。最符合逻辑的似乎是监控UIApplication通知。 由于扩展的生命周期与ViewController相关,因此不会发布这些UIApplication通知。因此,Fabric不知道扩展何时处于活动状态。

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

    1. 在Extensions主ViewController的'viewDidLoad'中,发布UIApplicationDidBecomeActiveNotification,它将触发Fabric的开始。
    2. 在关闭扩展程序之前(通过completeRequestReturningItems:completionHandler:cancelRequestWithError:)发布UIApplicationWillResignActiveNotification。这将触发Fabric停止。
    3. 请注意,设备上的操作与数据在控制板中显示的时间之间存在延迟。 特别是对于活跃用户。展示扩展后大约需要20-30秒。但是,当关闭扩展时,可能需要最多5 分钟才能减少活动用户数。