2010-10-11 204 views
10

如何診斷此錯誤?應用程序無法及時啓動

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; 
    } 
+0

超過一個小時的安裝時間?天啊! – Chuck 2010-10-11 20:58:35

+0

不確定這是爲什麼?應用程序絕對不需要1小時設置!它的運行速度相當快,所以這個問題很重要。 – 2010-10-12 02:14:01

回答

28

你可能做了很多設置工作在你的AppDelegate的應用:didFinishLaunching方法。

您應該確保此功能儘快退出。任何花費時間的設置工作(例如網絡訪問)都應該在您的應用程序中異步完成。在發生這種情況時,您可以顯示一個微調器以向用戶指示該應用程序正在加載。

+0

查看更新的代碼。我只是在didFinishLaunching中使用Apple的Reachability代碼。 – 2010-10-12 14:52:02

+0

你不應該在didFinishLaunching中做到這一點。可達性檢查可能需要很長時間 – 2010-10-13 10:54:24

+4

這就是蘋果在他們的示例代碼中的地位。我應該在哪裏做可達性檢查? – 2010-10-15 07:18:55

5

爲了將這些信息添加到Philippe Leybaert的回覆中。
如果應用程序花費很多時間啓動主線程,則會被kill,所以應用程序將崩潰。

  • 當您使用模擬器時,它不會崩潰
  • 當您使用連接到xcode 的iPhone時,它不會崩潰
  • 當您發送它的App Store是可能,如果蘋果測試儀使用快速iPhone被接受
  • 當您在慢速像iPhone 3S 用戶會崩潰

方式測試此提交之前的版本是部署到testflight或與adhoc並將其安裝在您想要支持的較慢設備上。

+0

我希望我們的蘋果測試儀的設備墜毀!我們實際上是在應用商店中的應用中獲取此內容,並且它只會在某些用戶的設備上崩潰。 我已經在自己的設備上從App Store安裝了它,並且它完美地工作 - 我們還從TestFlight在測試設備上安裝了很多次,而且沒有問題。 因此,它不像你說的那麼明確。 – siburb 2013-07-10 01:39:17

+0

@whiskIT感謝您的信息。如果測試人員使用快速iPhon,這是有意義的。他不會看到該錯誤並驗證您的應用。 – 2013-07-10 05:25:24

+0

雖然使用連接到Xcode的iPhone不會崩潰,但您可以在Xcode中點擊**停止**,然後再次手動在iPhone上打開應用程序。它將會崩潰。這節省了通過Ad Hoc或TestFlight分發的麻煩。 – Hlung 2015-06-25 04:45:14

1

只要設法將您的應用程序:didFinishLaunchingWithOptions:方法中的代碼不同的函數調用和使用線程其他則主要使背景這些電話,並確保應用中:didFinishLaunchingWithOptions:方法儘快

將返回可以使用

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

我已經解決了使用此代碼的問題!