I have a new app, which was rejected from the app store with this message:
We found that your app crashed on an iPhone 5 and iPad 3rd Gen running iOS 6.1, which is not in compliance with the App Store Review Guidelines.
Your app crashed when we:
1) Launched the app
This occurred when your app was used:
- On Wi-Fi
- On cellular network
But my build target settings for the app were Devices: iPhone Deployment target: 6.0
And my plist settings are: Target device family: iPhone iOS deployment target: 6.0
Here are the crash logs I got from Apple:
Incident Identifier: 9CA0955F-F59D-486C-8D73-8B3B61403EE4
CrashReporter Key: aca1b4fd3ac58a223f67f43ce5c768e6e94616f0
Hardware Model: xxx
Process: Fundraising [13707]
Path: /var/mobile/Applications/E4F866A6-D1B2-48F0-B471-913FAC78B0E3/Fundraising.app/Fundraising
Identifier: Fundraising
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2013-02-02 10:13:13.282 -0800
OS Version: iOS 6.1 (10B141)
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Crashed Thread: 0
Last Exception Backtrace:
(0x3445029e 0x3c2e997a 0x365e537c 0x3642758e 0x362b079c 0x36258c34 0x362586c8 0x36258116 0x37f4a59e 0x37f4a1ce 0x3442516e 0x34425112 0x34423f94 0x34396eb8 0x34396d44 0x362af480 0x362ac2fc 0x7a3aa 0x3c720b1c)
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x3c7e7350 __pthread_kill + 8
1 libsystem_c.dylib 0x3c75e11e pthread_kill + 54
2 libsystem_c.dylib 0x3c79a96e abort + 90
3 libc++abi.dylib 0x3bd38d4a abort_message + 70
4 libc++abi.dylib 0x3bd35ff4 default_terminate() + 20
5 libobjc.A.dylib 0x3c2e9a74 _objc_terminate() + 144
6 libc++abi.dylib 0x3bd36078 safe_handler_caller(void (*)()) + 76
7 libc++abi.dylib 0x3bd36110 std::terminate() + 16
8 libc++abi.dylib 0x3bd37594 __cxa_rethrow + 84
9 libobjc.A.dylib 0x3c2e99cc objc_exception_rethrow + 8
10 CoreFoundation 0x34396f1c CFRunLoopRunSpecific + 452
11 CoreFoundation 0x34396d44 CFRunLoopRunInMode + 100
12 UIKit 0x362af480 -[UIApplication _run] + 664
13 UIKit 0x362ac2fc UIApplicationMain + 1116
14 Fundraising 0x0007a3aa 0x79000 + 5034
15 libdyld.dylib 0x3c720b1c start + 0
Thread 1:
0 libsystem_kernel.dylib 0x3c7e7d98 __workq_kernreturn + 8
1 libsystem_c.dylib 0x3c735cf6 _pthread_workq_return + 14
2 libsystem_c.dylib 0x3c735a12 _pthread_wqthread + 362
3 libsystem_c.dylib 0x3c7358a0 start_wqthread + 4
Thread 2 name: Dispatch queue: com.apple.libdispatch-manager
Thread 2:
0 libsystem_kernel.dylib 0x3c7d7648 kevent64 + 24
1 libdispatch.dylib 0x3c707974 _dispatch_mgr_invoke + 792
2 libdispatch.dylib 0x3c707654 _dispatch_mgr_thread$VARIANT$mp + 32
Thread 3:
0 libsystem_kernel.dylib 0x3c7e7d98 __workq_kernreturn + 8
1 libsystem_c.dylib 0x3c735cf6 _pthread_workq_return + 14
2 libsystem_c.dylib 0x3c735a12 _pthread_wqthread + 362
3 libsystem_c.dylib 0x3c7358a0 start_wqthread + 4
Thread 4:
0 libsystem_kernel.dylib 0x3c7e7d98 __workq_kernreturn + 8
1 libsystem_c.dylib 0x3c735cf6 _pthread_workq_return + 14
2 libsystem_c.dylib 0x3c735a12 _pthread_wqthread + 362
3 libsystem_c.dylib 0x3c7358a0 start_wqthread + 4
Thread 5 name: WebThread
Thread 5:
0 libsystem_kernel.dylib 0x3c7d6eb4 mach_msg_trap + 20
1 libsystem_kernel.dylib 0x3c7d7048 mach_msg + 36
2 CoreFoundation 0x34425040 __CFRunLoopServiceMachPort + 124
3 CoreFoundation 0x34423d9e __CFRunLoopRun + 878
4 CoreFoundation 0x34396eb8 CFRunLoopRunSpecific + 352
5 CoreFoundation 0x34396d44 CFRunLoopRunInMode + 100
6 WebCore 0x3a37c500 RunWebThread(void*) + 440
7 libsystem_c.dylib 0x3c74030e _pthread_start + 306
8 libsystem_c.dylib 0x3c7401d4 thread_start + 4
Thread 0 crashed with ARM Thread State (32-bit):
r0: 0x00000000 r1: 0x00000000 r2: 0x00000000 r3: 0x3e2db534
r4: 0x00000006 r5: 0x3e2dbb88 r6: 0x208694e4 r7: 0x2fd879f4
r8: 0x208694c0 r9: 0x00000300 r10: 0x366ce04b r11: 0x1fd56aa0
ip: 0x00000148 sp: 0x2fd879e8 lr: 0x3c75e123 pc: 0x3c7e7350
cpsr: 0x00000010
I am learning about symbolication from these two pages: 1) http://www.raywenderlich.com/23704/demystifying-ios-application-crash-logs 2) Symbolicating iPhone App Crash Reports
I am confused with a few things: I do have the old archive which was made when I uploaded the app to iTunes. But they want me to have a .app file. Which file is that? Is that the archive? And which file is the myApp.app.dSYM file? And do I just copy the entire crash report into a text file and save that locally?
Thank you!
Also, this is some of the code that runs when the app starts:
- (void)viewDidLoad:(BOOL)animated
{
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"building"]];
[self.view addSubview:imgView];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"building"]];
imgView.frame = self.view.bounds; // to set the frame to your view's size
[self.view addSubview:imgView];
[self.view sendSubviewToBack:imgView];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
//load iphone image
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"building"]];
imgView.frame = self.view.frame;
[self.view addSubview:imgView];
[self.view sendSubviewToBack:imgView];
}
else
{
//load ipad image
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"building@2x"]];
imgView.frame = self.view.bounds; // to set the frame to your view's size
//[self.view addSubview:imgView];
imgView.frame = self.view.frame;
[self.view sendSubviewToBack:imgView];
}
// Get user data.
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
// First arg is name and second is if not found.
NSString *user_id = [standardUserDefaults objectForKey:@"user_id"];
NSString *user_email = [standardUserDefaults objectForKey:@"email"];
BOOL first_time_cookie = [standardUserDefaults boolForKey:@"first_time_cookie"];
[super viewDidAppear:animated];
if(!first_time_cookie)
{
// First time on the app, so set the user cookie.
[standardUserDefaults setBool:YES forKey:@"first_time_cookie"];
EmailUtil *email_new_user = [[EmailUtil alloc] initWithSubject:@"New_Download" body:@"New_iPhone_download"];
[email_new_user send];
// Send to server to make new acount AND send me an email re - new user.
[self sendFeedback];
[standardUserDefaults synchronize];
}
else
{
EmailUtil *email = [[EmailUtil alloc] initWithSubject:@"RepeatUser" body:[NSString stringWithFormat: @"User_id: %@, and email: %@" , user_id , user_email]];
[email send];
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void) sendFeedback
{
NSString *string_url = @"http://www.my_url.php";
NSURL *url = [NSURL URLWithString:string_url];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url ];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if ( error != nil )
{
// Send me an email that there was an error
EmailUtil *email = [[EmailUtil alloc] initWithSubject:@"iCreate_User_Error" body:@"There_was_some_error_creating_user_INVESTIGATE"];
[email send];
}
else
if ( data != nil )
{
NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSCharacterSet* notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
if ([responseString rangeOfCharacterFromSet:notDigits].location == NSNotFound)
{
// newString consists only of the digits 0 through 9
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
[standardUserDefaults setObject:responseString forKey:@"user_id"];
[standardUserDefaults synchronize];
}
}
}];
}
First of all you need to store and save .dSYM file for the build you want to symbolicate issue for.
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources
copy the crash and .dSYM file to the same folder.
Navigate from terminal to that folder and run the command given below:
./symbolicatecrash .crash .app.dSYM
** Symbolicating IPA **
if we use IPA for symbolicating - just rename the extention .ipa with .zip , extract it then we can get a Payload Folder which contain app. In this case we don't need .dSYM file. (only in case when debug symbols where not stripped during copy)
Ref: Symbolicating iPhone App Crash Reports
Do you have the ipa that was submitted to Apple or the archive which you can see under Organizer->Archives. If you right-click and select show package contents then there will be a folder named dSYM under that you can find the dSYM file for your submitted app.