2015-03-03 2 views
0

У меня есть приложение, которое падает при запуске в обзоре магазина приложений, но отлично работает на устройствах и на тренажерах. Вот особенности.App Crashes при запуске в обзоре App Store - отлично работает на устройствах

Приложение написано для IOS 7 и проходит тестирование на IOS 8.x. Я символизировал журналы сбоев от Apple, и он сбой при первой попытке доступа к информации, хранящейся в предварительно заполненном базовом блоке данных sqlite db.

Этот код делает дб копию при запуске:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (__persistentStoreCoordinator != nil) 
    { 
     return __persistentStoreCoordinator; 
    } 

    NSURL *storeURL = [[self applicationDocumentsDirectory]  URLByAppendingPathComponent:@"CC.sqlite"]; 
    NSArray *paths =  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *storePath = [documentsDirectory  stringByAppendingPathComponent: @"CC.sqlite"]; 

    // Check if the sqlite store exists 
    if (![[NSFileManager defaultManager] fileExistsAtPath:storePath]) { 
     NSLog(@"sqlite db not found... copy into place"); 

     // copy the sqlite files to the store location. 
     NSString *bundleStore = [[NSBundle mainBundle] pathForResource:@"CC" ofType:@"sqlite"]; 
     [[NSFileManager defaultManager] copyItemAtPath:bundleStore  toPath:storePath error:nil]; 

    } 
    else { 
     NSLog(@"Already exists"); 
    } 
    NSError *error = nil; 
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator  alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    NSDictionary *options = @{ NSSQLitePragmasOption :  @{@"journal_mode" : @"DELETE"} }; 


    if (![__persistentStoreCoordinator  addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL  options:options error:&error]) 
    { 
       NSLog(@"error %@, %@", error, [error userInfo]); 

    } 

    return __persistentStoreCoordinator; 
} 

Мы запускаясь пару сотен раз на различных устройствах ИСН (несколько различных людей) без проблем на всех, но неизменно получают стартап авария в Apple.

Из журнала сбоев видно, что приложение (во время просмотра магазина приложений) пытается получить доступ к несуществующему sqlite db через Core Data, но я не знаю, почему это происходит только в Apple, и почему я не могу воспроизвести ошибку. Я не уверен, какую дополнительную информацию можно добавить к вопросу, но при необходимости будет обновляться по мере необходимости.

Любые советы с благодарностью получил ....

+0

Могли ли они делать тест, чтобы увидеть, как вы справляетесь база данных не существует? Возможно, это по дизайну. –

+0

Возможно, но для приложения, которое полностью зависит от существования db ... кажется спорным. Я бы не знал, что делать в случае такого катастрофического сбоя в производственной среде .... – jmf1205

+0

Вы проверили комплект, который отправляется в Apple, чтобы подтвердить, что база данных включена? – Paulw11

ответ

0

Я отвечу на свой вопрос здесь, хотя изменения кода, которые я сделал, пытаясь решить проблему делает размещение кода не очень полезно.

Мне пришлось поместить операции базы данных запуска в блок завершения. Это включало перемещение всего в мой первоначальный диспетчер представления запуска и отключение кнопок панели вкладок, когда база данных была инициализирована.

Что-то происходило, когда в базовую базу данных данных SQL требовались определенные элементы, прежде чем они были полностью предварительно загружены, что привело к сбою.

Подробнее о блоках можно найти here