由于今天扩展程序作为一个独立的进程运行,我确信它们不会记录任何崩溃的开箱即用。我假设我们需要分别在小部件上初始化Crashlytics。例如。在viewDidLoad
。{/ p>的TodayViewController
方法中
答案 0 :(得分:28)
Crashlytics支持与我取得联系并提供了这些步骤。我测试了它们,它现在适用于我的iOS 8应用程序。
将Crashlytics运行脚本构建阶段添加到您的扩展程序目标(复制/粘贴您添加到主应用程序中的目标)
将Crashlytics.framework
添加到扩展程序的链接库中
(例如,只需在文件检查器中检查扩展目标)
将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])
而且......你很高兴去!
答案 3 :(得分:5)
如果您想添加Crashlytics以在iOS 8.0+上共享扩展程序,来自maremmle的答案也适用。只需记住将[Crashlytics startWithAPIKey:@"apiKey"];
放在第一个ViewController的init
方法中。
答案 4 :(得分:1)
感谢所有说明,它在我的共享扩展程序中正常工作。
我注意到,对于我的共享扩展,Fabric Answers仪表板不显示实际数据:
它适用于配套应用。 所以我想知道Answers SDK将如何确定这一点。最符合逻辑的似乎是监控UIApplication通知。 由于扩展的生命周期与ViewController相关,因此不会发布这些UIApplication通知。因此,Fabric不知道扩展何时处于活动状态。
所以我实现了以下解决方案,它在Fabric Dashboard中提供了上述数据:
请注意,设备上的操作与数据在控制板中显示的时间之间存在延迟。 特别是对于活跃用户。展示扩展后大约需要20-30秒。但是,当关闭扩展时,可能需要最多5 分钟才能减少活动用户数。