在AppDelegate完成加载之前,我的iPhone应用程序在Load上崩溃

时间:2012-03-26 22:55:42

标签: iphone objective-c ios xcode

所以我有一个非常棒的应用程序,可以在模拟器上或插入设备时完美运行。

然后,如果我创建一个IPA并将其部署在我的设备上,或使用TestFlight,甚至提交到App Store。当我尝试启动它时,应用程序会在大部分时间内崩溃。

即使没有符号化的崩溃报告也不会给我任何信息。

我已经使用过TestFlight,因此它可以帮助我弄清楚应用程序崩溃的位置,但应用程序在TestFlight启动之前崩溃。

以下是我的一些代码(main.m):

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

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

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

和version3contentAppDelegate.m的开头:

#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上发布崩溃报告,我没有。

有人会知道为什么会这样吗? 该项目最初是在旧的icode上开发的,用于旧的iphone,目前是一个xcode 3项目。但我正在XCode 4.3上使用iOS 5.1在设备上编程。

4 个答案:

答案 0 :(得分:6)

如果它在您的设备上崩溃,那么您将看到崩溃日志。

其次,根据我的经验,应用程序崩溃的主要原因:didFinishLaunchingWithOptions:是由于加载资源需要花费很长时间才能加载。

iOS有一个看门狗定时器,可以监视应用程序并杀死它们,如果它们花费太长时间来做某些事情。装载,卸载等通常是几秒钟,如果它们需要更长的时间,计时器会杀死它们,假设它们已挂起。

由于模拟器中的调试原因,此计时器被禁用,这就是为什么这些崩溃仅在实际设备测试期间出现的原因。

从本地设备获得崩溃日志后,请检查给定的代码,如果是0x8badf00d,那么看门狗定时器会杀死您的应用。请注意错误代码8-bad-food: - )

然后你需要查看你的代码并尽可能多地移动到后台线程,以便didFinishLaunchingWithOptions:方法可以尽快完成。

答案 1 :(得分:2)

这可能是TestFlight发布本身的崩溃 - 我花了很长时间追踪一个非常类似的问题,其中AdHoc测试部署是随机的,有时会在打开时崩溃,特别是[TestFlight takeOff:...]行回溯显示它崩溃了。

从设备上获取崩溃日志(在所有这些情况下,它在启动屏幕后崩溃我遇到崩溃日志),并尝试使用symbolicatecrash转换转储 - 在我的情况下,除了调用testflight的applicationDidFinishLaunching:withOptions行之外,它没有翻译任何内容。

答案 2 :(得分:1)

根据您的要求,这是我的评论:

如果显示启动画面,它会进入didFinishLaunching。不过我注意到你没有使用ARC。难道你是在过度释放某些东西吗?重构您的项目并查看是否有帮助

答案 3 :(得分:0)

Xcode存在问题。如果您没有使用自动布局和大小类,则删除启动xib文件。 崩溃将得到解决。