所以我有一个非常棒的应用程序,可以在模拟器上或插入设备时完美运行。
然后,如果我创建一个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在设备上编程。
答案 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文件。 崩溃将得到解决。