2013-12-16 98 views
1

我目前正在使用的應用程序有一個非常奇怪的行爲。每當我通過XCode,iTunes或TestFlightApp安裝測試版本,應用程序就會正常啓動並運行得非常好。當我手動殺死應用程序並重新啓動時, 問題就出現了。然後顯示啓動圖像,這是最遠的應用程序 - 它只是凍結一段時間,然後操作系統擦除整個過程。崩潰日誌包含相當沒有用的信息,因爲它聲明 - 應用程序特定信息:未能及時啓動。 另外,在主辦方控制檯記錄以下:「應用程序」未能及時啓動

  • 注意:位置圖標現在應該在狀態爲「無效」
  • 警告:COM。 未能及時發佈
  • 警告:強制MyApp崩潰報告[7956] ...
  • 警告:完成崩潰報告。
  • 說明:退出的:(UIKitApplication COM [0x6a86]。):殺:9
  • 說明:(UIKitApplication:。com [0x6a86])節流重生:請問 開始在2147483625秒
  • 警告:應用程序'UIKitApplication:com。 。在研究的問題9

我已經花了一整天的時間: [0x6a86]」退出 與異常信號9:打死。只是澄清 - 任何UIApplication委託方法 (applicationDidBecomeActive,didFinishLaunchingWithOptions等)都不會執行任何同步工作或任何大量工作。 我注意到,如果在執行過程中沒有執行任何URL請求,則問題根本不會發生,即應用程序在被殺之前第二次正常運行。 只要提到問題出現在iOS 7下,但該應用程序也支持iOS 5和6。

[NSURLConnection sendAsynchronousRequest:request 
             queue:[NSOperationQueue currentQueue] 
          completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){if (nil == error) {         
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 
             (...)//creating ppError 
             if (nil == ppError) { 
              result = parsing(json, &ppError); 

              if (nil != ppError) { 
               result = nil; 
              } 
             } 
             dispatch_async(dispatch_get_current_queue(), ^{ 
              if (PPServiceReturnedInvalidTokenErrorCode == ppError.code) { 
              (...)//do some parsing stuff 

               [[NSNotificationCenter defaultCenter] postNotificationName:PPRequestManagerUserAuthenticationTokenDidExprireNotification 
                            object:self 
                           userInfo:userInfo]; 
              } 
              completion(result, ppError); 
             }); 
            }); 
           } 
           else { 
            completion(nil, ppError); 
           } 
          }]; 

這基本上是如何的所有請求都被製成,所以我認爲這一切都是正確的,但它是一個事實,如果我評論此代碼所描述的問題簡單地消失。

任何意見和建議將不勝感激。謝謝!

+0

使用工具來查看應用程序的功能以及代碼中的哪些部分耗費了大量時間。通常情況下,如果主線程被阻止,並且應用程序在啓動時需要超過10秒才能獲得響應,就會發生這種情況。 – Kerni

+0

在你的完成處理程序中,第二個dispatch_async(),你是否意味着分派到當前隊列?因爲這樣做什麼都不會做,所以你已經在當前隊列上定義了 –

+1

@PatrickGoley在當前隊列上的dispatch_async將代碼至少洗到下一個runloop。所以它「確實」。這個洗牌的副作用之一是當前的runloop結束,並告訴SpringBoard該應用程序已經及時啓動。 –

回答

0

終於解決了這個問題 - 問題是建立HTTP連接的第三方框架,這是項目的一部分,儘管未使用。它開始自己的線程並執行一個最終導致崩潰的任務。

要得出導致崩潰的原因很棘手,但Xcode 5上的Organizer確實做得很好。我使用了連接設備生成的符號化崩潰日誌,幸運的是堆棧跟蹤顯示了這個祕密。

我在想,不正確的構建配置是操作系統中的原因或錯誤。無論如何,感謝你的幫助!如果外面的人有類似的問題,我也很樂意提供幫助。