由于今天扩展以单独的进程运行,因此我确定它们默认不会记录任何崩溃。 我认为我们需要单独在小部件中初始化Crashlytics。例如,在TodayViewController的viewDidLoad方法中。
- 有人已经在iOS / OS X扩展中使用Crashlytics吗? 如果是这样,你是怎么实现的?
- 我也想知道是否有意义为扩展创建一个单独的Crashlytics应用程序。
由于今天扩展以单独的进程运行,因此我确定它们默认不会记录任何崩溃。 我认为我们需要单独在小部件中初始化Crashlytics。例如,在TodayViewController的viewDidLoad方法中。
Crashlytics支持团队联系了我并提供了以下步骤。我测试了它们,现在我的iOS 8应用程序可以正常工作。
将Crashlytics运行脚本构建阶段添加到您的扩展目标中(复制/粘贴与您添加到主应用程序中的相同内容)
将Crashlytics.framework
添加到您的扩展链接库中
(例如,在其文件检查器中简单地检查扩展目标)
将Crashlytics.startWithAPIKey("yourApiKey")
添加到您的扩展视图控制器的initWithCoder
方法中。
(在苹果的今天扩展模板中,默认为TodayViewController
)
> 如果您还没有initWithCoder
方法,那么它之后应该看起来像这样:
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
Crashlytics.startWithAPIKey("yourApiKey")
}
init(coder aDecoder: NSCoder)
中执行了 Fabric.with([Crashlytics.self])
,它说 [Fabric] [Fabric +with] called multiple times. Only the first call is honored, please pass all kits you wish to initialize
。 - Oleksii NezhyboretsCrashlytics
在应用程序扩展上发生崩溃时是否调用CrashlyticsDelegate
?https://stackoverflow.com/q/61801745/9636 - Heath Borders这是 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 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的info plist中
这里是官方说明如何在iOS扩展中使用Crashlytics:
viewController
的initWithCoder
方法中:Fabric.with([Crashlytics.self])
然后...你就可以使用了!
如果您想将Crashlytics添加到iOS 8.0+的共享扩展中,maremmle的答案也适用。只需记得将[Crashlytics startWithAPIKey:@"apiKey"];
放在您的第一个ViewController的init
方法中。
请注意,在设备上执行操作和数据在仪表板上可见之间存在延迟。 特别是对于活跃用户。它需要大约20-30秒才能呈现扩展程序。但是当扩展被关闭时,可能需要多达5分钟才能减少活跃用户数。