【问题标题】:App rejected for crash on persistenstore creation应用程序因创建持久存储时崩溃而被拒绝
【发布时间】:2015-05-09 04:02:28
【问题描述】:

我的应用程序在启动时因崩溃而被拒绝,在符号化崩溃日志后,我有这个:

Incident Identifier: --
CrashReporter Key:   --
Hardware Model:      xxx
Process:             BUDGT [1029]
Path:                /private/var/mobile/Containers/Bundle/Application/F5D98A63-AF73-4A76-A80C-EA57B4E41082/BUDGT.app/BUDGT
Identifier:          --.BUDGT
Version:             1 (4)
Code Type:           ARM-64 (Native)
Parent Process:      launchd [1]

Date/Time:           2015-05-08 18:09:23.379 -0700
Launch Time:         2015-05-08 18:09:23.142 -0700
OS Version:          iOS 8.3 (12F70)
Report Version:      105

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x0000000197acb270 __pthread_kill + 8
1   libsystem_pthread.dylib         0x0000000197b6916c pthread_kill + 108
2   libsystem_c.dylib               0x0000000197a42b14 abort + 108
3   BUDGT                           0x000000010009ee5c -[AppDelegate persistentStoreCoordinator] (AppDelegate.m:222)
4   BUDGT                           0x000000010009e96c -[AppDelegate managedObjectContext] (AppDelegate.m:153)
5   BUDGT                           0x00000001000a0abc -[Factory setupDataHandler] (Factory.m:54)
6   BUDGT                           0x00000001000a0830 -[Factory init] (Factory.m:30)
7   BUDGT                           0x00000001000a07c4 __25+[Factory defaultFactory]_block_invoke (Factory.m:22)
8   libdispatch.dylib               0x0000000197985950 _dispatch_client_callout + 12
9   libdispatch.dylib               0x0000000197986828 dispatch_once_f + 92
10  BUDGT                           0x00000001000a0794 +[Factory defaultFactory] (once.h:68)
11  BUDGT                           0x000000010009dab8 -[AppDelegate application:didFinishLaunchingWithOptions:] (AppDelegate.m:17)
12  UIKit                           0x000000018a5c318c -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 400
13  UIKit                           0x000000018a7da850 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2372
14  UIKit                           0x000000018a7dd204 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1500
15  UIKit                           0x000000018a7db774 -[UIApplication workspaceDidEndTransaction:] + 180
16  FrontBoardServices              0x000000018e3193c4 __31-[FBSSerialQueue performAsync:]_block_invoke_2 + 28
17  CoreFoundation                  0x0000000185ac8278 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 16
18  CoreFoundation                  0x0000000185ac7380 __CFRunLoopDoBlocks + 308
19  CoreFoundation                  0x0000000185ac59a4 __CFRunLoopRun + 1752
20  CoreFoundation                  0x00000001859f12d0 CFRunLoopRunSpecific + 392
21  UIKit                           0x000000018a5bc438 -[UIApplication _run] + 548
22  UIKit                           0x000000018a5b6fa8 UIApplicationMain + 1484
23  BUDGT                           0x000000010009da38 main (main.m:16)
24  libdyld.dylib                   0x00000001979b2a04 start + 0

这意味着它一定在我的AppDelegateabort() 失败了

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{

    if (persistentStoreCoordinator != nil)
    {
        return persistentStoreCoordinator;
    }
    NSError *error = nil;
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"database.sqlite"];
    NSPersistentStoreCoordinator *psc = persistentStoreCoordinator;
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

    NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType
                                                 configuration:nil URL:storeURL
                                                       options:options error:&error];
    if (!store) {
        NSLog(@"Unresolved Error");
        abort();   // This is line 222 of AppDelegate
    }


    return persistentStoreCoordinator;
}

像这样获取目录:

- (NSURL *)applicationDocumentsDirectory {
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

还有这样的妈妈:

- (NSManagedObjectModel *)managedObjectModel {
    if (managedObjectModel != nil)
    {
        return managedObjectModel;
    }
    managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil] ;

    return managedObjectModel;
}

苹果拒绝消息:

我们无法审核您的应用,因为它在启动时崩溃。

我个人无法重现该问题。

我的设备和模拟器的更新 - 以及干净的构建都运行良好,没有任何问题。

我在此应用程序中更改的内容是:

  • 支持应用组(coredata 容器不在应用组容器中)
  • 更改为 cocoapods 进行链接
  • 添加了 WatchKit 应用
  • 添加了今日扩展
  • 迁移所有视图以使用 AutoLayout(砌体)

但是我没有通过应用程序组容器访问核心数据,它仍然只位于手机上(并且应该留在那里)我正在将应用程序组用于不同的事情(通过它传递简单的消息)。

有什么想法可能导致应用程序在启动时与苹果审查团队崩溃?

部署目标是 iOS 8.2(适用于所有应用和扩展)

更新

我只是手动将提交的存档(应用商店提交的原始版本)安装到清洁的设备上。一切正常。没有问题,没有崩溃。

我还能检查什么?

【问题讨论】:

  • @SebastianFlückiger 我看到这个abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button在这篇文章的一行代码中评论了-stackoverflow.com/questions/9650317/…
  • 作为@Jesster2k10 的后续行动,您在addPersistentStoreWithType 方法调用上有一个您不使用的错误参数。如果您在用户日志消息的对话框中使用了错误消息,而不仅仅是中止,那么您将对错误有一个很好的了解。
  • @Jesster2k10 是的,这是 ios 应用程序的默认中止消息。但同样 - abort 语句不是真正的问题,问题在于它已经到达(现在我用错误处理替换了它)。
  • @SebastianFlückiger 好的,我现在有了更好的理解。
  • @SebastianFlückiger 删除应用程序不会删除某些内容,包括钥匙串条目和应用程序组创建的共享区域。

标签: ios objective-c xcode core-data ios-app-group


【解决方案1】:

嗯...答案很简单。我的应用程序没有任何问题。

“感谢您的回复。经过进一步审查,我们发现 应用程序不再在启动时崩溃。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多