2012-03-26 49 views
4

所以我有我真棒的應用程序,完美地運行在模擬器或在設備插入。我上載的iPhone應用程序崩潰的AppDelegate之前完成加載

然後,如果我創建一個IPA和部署我的設備,或使用TestFlight,甚至提交給App Store。當我嘗試啓動應用程序時,該應用程序大部分時間都會崩潰。

甚至沒有符號化的崩潰報告不給我任何信息。

我已經使用TestFlight,以便它可以幫助我找出應用程序崩潰的位置,但是應用程序在TestFlight啓動之前崩潰。

下面是我的一些代碼(main.m文件):version3contentAppDelegate.m的

#import <UIKit/UIKit.h> 
#import "version3contentAppDelegate.h" 

int main(int argc, char *argv[]) { 

    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([version3contentAppDelegate class])); 
    } 
} 

,並開始:

#import "TestFlight.h" 
#import "version3contentAppDelegate.h" 
#import "RootTableViewController.h" 
#import "AppsFeedTableViewController.h" 
#import "AboutShmoopModalViewController.h" 

@implementation version3contentAppDelegate 

@synthesize window, shmoopCoreData, tabBarController; 



#pragma mark - 
#pragma mark Application lifecycle 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    NSLog(@"applicationDidFinishLaunching"); 

    [TestFlight takeOff:@"3f3618576288d96d598646d060a4f26a_NzUyMjEyMDEyLTAzLTI2IDE3OjIxOjQzLjgyNzQwNg"]; 
... 

正如你可以看到TestFlight代碼是在的開始didFinishLaunching。這意味着如果它在那之後會崩潰的話,我會在TestFlight上有一個崩潰報告,這是我沒有的。

會有人知道爲什麼會發生這種情況嗎? 該項目最初是在舊的xcode上開發的,適用於舊版iphone,目前它是一個xcode 3項目。但是我在設備上使用iOS 5.1在XCode 4.3上進行編程。

+0

如何在所有異常上設置斷點? – CodaFi 2012-03-26 23:19:28

+0

但是我不能斷點,因爲只有在Adhoc上,或者在Apple Store上提交後纔會崩潰? (我可能是錯的) – xtrimsky 2012-03-26 23:33:50

+0

這沒有意義......部署不會更改代碼。你之前如何得到崩潰(我想我的意思是說:你怎麼知道它崩潰了)?你可以複製它嗎? – CodaFi 2012-03-26 23:36:49

回答

1

按照您的要求,這裏是我的評論:

它進入didFinishLaunching如果它顯示啓動畫面。不過,我注意到你並沒有使用ARC。難道你是在過度釋放一些東西嗎?重構你的項目,看看是否有幫助

5

如果它在你的設備上崩潰,那麼你將有一個崩潰日誌來看看。

其次,根據我的經驗,應用程序崩潰的主要原因是:didFinishLaunchingWithOptions:是由於加載耗時過長的資源造成的。

iOS有一個監視程序計時器,它監視應用程序,如果它們花費很長時間去做某些事情,就會殺死它們。裝載,卸載等通常是幾秒鐘,如果它們花費的時間比定時器殺死它們更長,假設它們被掛起。

該計時器在仿真器中因調試原因而被禁用,這就是爲什麼這些崩潰僅在實際設備測試期間出現的原因。

一旦你有本地設備的崩潰日誌,請檢查給出的代碼,如果它是0x8badf00d,那麼它是看門狗定時器將會終止你的應用程序。注意錯誤代碼8-bad-food :-)

然後,您需要查看代碼並儘可能多地移動到後臺線程,以便didFinishLaunchingWithOptions:方法可以儘快完成。

2

它可能是TestFlight發佈本身的崩潰 - 我只花了相當一段時間來追蹤一個非常類似的問題,其中AdHoc測試部署是隨機的,有時會打開,特別是[TestFlight takeOff:...]行,回溯顯示它崩潰了。

從設備中獲取崩潰日誌(在所有出現在啓動畫面後崩潰的情況下,我都有崩潰日誌),並嘗試使用symbolicatecrash來轉儲轉儲 - 在我的情況下,除了將調用的applicationDidFinishLaunching:withOptions行轉換爲testflight之外的任何內容。

0

它是一個Xcode的問題。如果您未使用自動佈局和大小類,請刪除啓動xib文件。 崩潰將得到解決。