在我的应用中,我想找出通过Crashlytics报告的上一次 session 崩溃的确切时间。我是这样设置Crashlytics的:
- (void) setUpCrashlytics
{
[[Fabric sharedSDK] setDebug:YES];
[CrashlyticsKit setDebugMode:YES];
[CrashlyticsKit setDelegate:self];
[Fabric with:@[[Crashlytics class]]];
}
[CrashlyticsKit crash];
CrashlyticsDelegate来获取上次 session 的崩溃时间:#pragma mark - CrashlyticsDelegate Methods
- (void) crashlyticsDidDetectReportForLastExecution:(CLSReport *) report completionHandler:(void (^)(BOOL)) completionHandler
{
BOOL isCrash = report.isCrash; //this is TRUE
NSDate *crashDate = report.crashedOnDate;
NSDate *reportCreation = report.dateCreated;
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
completionHandler(YES);
}];
}
最佳答案
Matt来自Crashlytics。
不幸的是,您发现了一个错误:(我已注意到它,并且我将确保对其进行检查。
我也想知道您打算如何使用此信息。这只是我以前从未听说过的用例。
另外,请记住,特定的委托回调是有问题的。正如我们在标题文档中指出的那样,该方法的API需要我们牺牲一些可靠性功能。我建议避免使用它,因为没有它,我们成功报告崩溃的能力会更好。是的,我们确实计划添加新的只读API来避免这种折衷。目前,仅当您有迫切需要而无法用其他方法满足的情况时,我才建议您这样做。
另外,由于它是在注释中显示的-永远不会为内存不足终止而调用此API。从技术上讲,这些不是崩溃,也没有这样的报告。我们使用的机制是完全不同的,并在此处的文档https://docs.fabric.io/apple/crashlytics/OOMs.html中进行了概述。我们使用试探法,并非(也不声称)是100%可靠的。很好。
希望这对您有所帮助-并访问我们的支持论坛/电子邮件以获取更多帮助。堆栈溢出更难监控:)
更新:
既然我了解了Radu想要达到的目标,我认为这里有用的更多信息。结果是使用此委托方法无法实现他想要的结果,实际上只会使情况变得更糟。
在初始化Crashlytics时(在-[Fabric with:]调用过程中),SDK将磁盘上的所有崩溃准备并排队到NSURLSession的后台上传工具中。这样做是因为我们要确保我们的上传过程不会因其他崩溃而中断。据我所知,这是我们实施所独有的功能,我们已经使用了多年,而且效果惊人。 Crashlytics基本上不会报告由于后续启动而导致的崩溃而导致的失败。
现在,为了确保它能尽可能好地工作,我们必须在启动过程中同步,和ot。因此,如果您在后台线程上启动Crashlytics / Fabric,或者在初始化SDK的同时进行后台工作,则会损害我们可靠地完成此过程的能力,避免再次发生潜在的崩溃。
但是,还有另一个问题。如果设置了委托并实现了此方法,则我们必须遵守API的合同,并询问委托是否可以在发送之前将报告放入队列。不管是好是坏,此API也不同步执行此操作。因此,当实现此委托方法时,您将打开一个大的时间窗,其中:
在调用委托和调用回调之间的时间内,您不会花更多时间发送报告。您只是在添加延迟之前,SDK才知道您已准许我们发送它们。
(就我个人而言,我发现此API非常有问题,并希望将其删除。但是,为了保持向后兼容性,我们需要对其进行保留。这是我的错,因为我没有实现不允许委托人取消报告的新API。这样的API不会延迟入队报告的时间,并且可以避免所有这些问题。总有一天,我们将拥有该API,最后可以弃用此API。)
因此,为了改进早期启动的崩溃处理,我建议以下内容:
唯一的例外应该确实是:
我也建议再次与我们的支持人员联系。丢失的崩溃很常见。由SDK问题引起的丢失崩溃很少见,受到监视,并且我们有大量的SDK端和后端端代码可以理解并最小化它们。
关于ios - 找出Crashlytics中的确切崩溃时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40975846/
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实