Приложение не удалось запустить вовремя

Как я могу диагностировать эту ошибку?

Application Specific Information:
    MyApp failed to launch in time

    Elapsed total CPU time (seconds): 4913.443 (user 3868.270, system 1045.173), 56% CPU 
    Elapsed application CPU time (seconds): 0.010, 0% CPU

    Backtrace not available

    Unknown thread crashed with unknown flavor: 5, state_count: 1

    Binary Images:
    0x2fe00000 - 0x2fe26fff  dyld armv7  <a11905c8ef7906bf4b8910fc551f9dbb> /usr/lib/dyld

Вот мой метод didFinishLaunching:

#pragma mark -
#pragma mark Application lifecycle

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

        if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")) 
        {
            NSLog(@"NSZombieEnabled/NSAutoreleaseFreedObjectCheckEnabled enabled!");
        }

        // Override point for customization after application launch.
        [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];

        //Check for connectivity
        internetReach = [[Reachability reachabilityForInternetConnection] retain];
        [internetReach startNotifer];
        [self updateInterfaceWithReachability: internetReach];

        [window addSubview:navigationController.view];
        [window makeKeyAndVisible];

        return YES;
    }

Ответ 1

Вероятно, вы много работаете с настройками в приложении AppDelegate : метод didFinishLaunching.

Вы должны убедиться, что эта функция завершена как можно скорее. Любая работа по настройке, которая требует времени (например, доступ к сети), должна выполняться асинхронно в приложении. Пока это происходит, вы можете показать счетчик, чтобы указать пользователю, что приложение загружается.

Ответ 2

Чтобы добавить такую ​​информацию в ответ Филиппа Лейбаерт.
Если приложение займет много времени, чтобы запустить основной поток, он будет убит, чтобы приложение сработало.

  • Когда вы используете симулятор, он не будет разбиваться.
  • Когда вы используете свой iphone, подключенный к xcode , он не будет разбиваться.
  • Когда вы отправляете его в App Store, может быть принято, если тестер Apple использует быстрый iPhone
  • Когда ваши пользователи на медленном, как iPhone 3S , выйдут из строя

Способ проверки этого выпуска перед отправкой заключается в развертывании в testflight или с adhoc и его установке на более медленном устройстве, которое вы хотите поддерживать.

Ответ 3

Просто попробуйте разделить ваше приложение: didFinishLaunchingWithOptions: введите код метода для разных вызовов функций и сделайте эти вызовы в фоновом режиме, используя потоки, отличные от основного, и убедитесь, что приложение: doneFinishLaunchingWithOptions: метод возвращает как можно скорее

вы можете использовать

dispatch_async(dispatch_get_main_queue(), ^{
//put your code
}

Я решил проблему с помощью этого кода!