应用程序在首次启动后崩溃。

4
我已经在应用商店上发布了这个应用程序。我发布了一个更新版本,其中包含一些更改。该应用程序使用CoreData进行数据持久化。在发布到应用商店之前,我测试了新版本,它按照要求工作。但是,在提交并从应用商店更新后,每次启动后应用程序都会崩溃。我有那个崩溃报告,但对我来说毫无意义。我没有在CoreData中更改任何内容。 启动后,该应用程序显示一个UITableView,并且这个tableView正在从CoreData获取数据。
以下是崩溃报告。
Incident Identifier: 7A9713FF-40CB-45E0-961F-F4D1B003F2B5
CrashReporter Key:   891c38a57639ab8e2bcc3012687292ce9aa818f5
Hardware Model:      iPhone6,2
Process:             APPName [7461]
Path:                /var/mobile/Applications/A9028B70-0878-40FA-944B-584B15E49B69/APPName.app/APPName
Identifier:          co.identifier.app
Version:             2.5 (2.5)
Code Type:           ARM (Native)
Parent Process:      launchd [1]

Date/Time:           2014-03-13 09:39:17.309 +0000
OS Version:          iOS 7.0.6 (11B651)
Report Version:      104

Exception Type:  00000020
Exception Codes: 0x000000008badf00d
Highlighted Thread:  0

Application Specific Information:
co.identifier.app failed to launch in time

Elapsed total CPU time (seconds): 1.660 (user 1.660, system 0.000), 4% CPU 
Elapsed application CPU time (seconds): 0.304, 1% CPU

Thread 0:
0   libsystem_kernel.dylib          0x3a161fa8 __psynch_mutexwait + 24
1   libsystem_pthread.dylib         0x3a1c6f4d _pthread_mutex_lock + 305
2   CoreData                        0x2f595a91 -[_PFLock lock] + 21
3   CoreData                        0x2f5a6b35 -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 777
4   CoreData                        0x2f5a5777 -[NSManagedObjectContext executeFetchRequest:error:] + 611
5   APPName                         0x000ecc11 +[DataManager dataEntryEntity:] (DataManager.m:385)
6   APPName                         0x000ebca9 +[DataManager dataForDateKey:] (DataManager.m:126)
7   APPName                         0x000cff9d -[CalendarCell setDateKey:] (CalendarCell.m:820)
8   APPName                         0x000bd969 -[CalendarViewController tableView:cellForRowAtIndexPath:] (CalendarViewController.m:832)
9   UIKit                           0x32108311 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:] + 405
10  UIKit                           0x320b06c9 -[UITableView _updateVisibleCellsNow:] + 1797
11  UIKit                           0x320afeed -[UITableView layoutSubviews] + 181
12  UIKit                           0x31fd634f -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 343
13  QuartzCore                      0x31c5c93f -[CALayer layoutSublayers] + 139
14  QuartzCore                      0x31c58163 CA::Layer::layout_if_needed(CA::Transaction*) + 347
15  QuartzCore                      0x31c57ff5 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 13
16  QuartzCore                      0x31c57a09 CA::Context::commit_transaction(CA::Transaction*) + 225
17  QuartzCore                      0x31c5781b CA::Transaction::commit() + 311
18  UIKit                           0x32055a37 -[UIApplication _reportAppLaunchFinished] + 39
19  UIKit                           0x32040edb -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 1643
20  UIKit                           0x31fdba03 -[UIApplication handleEvent:withNewEvent:] + 3139
21  UIKit                           0x31fdacf9 -[UIApplication sendEvent:] + 69
22  UIKit                           0x3204031d _UIApplicationHandleEvent + 661
23  GraphicsServices                0x344ba76b _PurpleEventCallback + 607
24  GraphicsServices                0x344ba353 PurpleEventCallback + 31
25  CoreFoundation                  0x2f81c775 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 33
26  CoreFoundation                  0x2f81c70f __CFRunLoopDoSource1 + 343
27  CoreFoundation                  0x2f81aedb __CFRunLoopRun + 1403
28  CoreFoundation                  0x2f78546d CFRunLoopRunSpecific + 521
29  CoreFoundation                  0x2f78524f CFRunLoopRunInMode + 103
30  UIKit                           0x3203f5bf -[UIApplication _run] + 759
31  UIKit                           0x3203a841 UIApplicationMain + 1133
32  APPName                         0x000b6ba7 main (main.m:11)
33  libdyld.dylib                   0x3a0abab5 start + 1

每个更新应用的设备都会出现这个崩溃,但模拟器测试或通过TestFlight分发的测试构建中没有出现此问题。


2
你修改了数据模型吗?如果是这样,那就是原因。 - Martin Koles
2
它在抱怨你完成启动之前花费的时间量。由于主线程正在等待锁定,我的第一个问题是:是否有其他线程持有该锁并阻塞了你?(另一种可能性是当你填充表格单元格时,你只是做了太多工作,需要将其中一些工作移到后台执行。) - Phillip Mills
2个回答

1
正如菲利普在评论中所说,这个崩溃的原因是由于看门狗。
如果你的应用程序在方法-applicationDidFinishLauchingWithOptions:中长时间卡住,系统会杀死它。
原因可能是你正在主线程内执行一个昂贵的耗时任务,例如迁移、复制或删除大量文件。
你在测试中从未遇到过这种情况,可能是因为你使用的数据量很小,或者在调试模式下看门狗没有激活(不确定)。
不幸的是,我认为你应该尽快发布另一个版本来解决这个问题,解决方案可能是在后台线程上启动这些长时间运行的任务。 为了防止这些问题,始终在发布之前尝试使用自有分发更新旧应用程序。

在发布到应用商店之前,我确实进行了测试。但这对我来说完全是意外情况。无论如何,您是否知道任何可以将应用程序分发给任何用户的方法?目前,我只知道添加 UDID 的方法,然后只有那些设备才能安装该应用程序。 - Asad Ali
1
AD-HOC分发,需要UDIDs但是是发布版本而不是调试版本。我通常遵循这些步骤https://developer.apple.com/library/mac/Documentation/IDEs/Conceptual/AppDistributionGuide/TestingYouriOSApp/TestingYouriOSApp.html,你也可以在谷歌上搜索到更简单的教程。 - Andrea
我遵循这些指南。我想摆脱添加UDIDs。谢谢@Andrea。 - Asad Ali

0

来自 http://www.raywenderlich.com/23704/demystifying-ios-application-crash-logs

以下是一些常见的异常代码: 0x8badf00d:读作“吃了坏东西”!(如果你眯起眼睛,用字母替换数字。:p)这个代码表示应用程序由于看门狗超时而被iOS终止。基本上,应用程序启动、终止或响应系统事件的时间太长。

崩溃是因为等待时间过长,导致日志中列出的321个任务项之一引起的。

我真的很好奇你在日志中发送事件/处理事件项目。有没有可能在启动rootViewController之前等待某些东西?...它可能是核心数据,但如果有什么非常严重的问题,我会期望发生另一个错误而不是长时间等待。


你说得对,确实有些东西阻塞了主线程。但我不确定它是否会解决崩溃问题。我会进行测试的。感谢你的提示。 - Asad Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接