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.
iPhone applications can be run on iPads. They run in a "window" on screen, the same size and shape as an iPhone screen.
That being said, your application ALSO crashed on an iPhone 5. So it's not specific to running on an iPad. You'll need to look at the crash logs for details.
You're mistaken Targets iPhone is not a thing that can not run on the iPad. But not just for the iPad Appropriate UI, Full Screen. In my experience, Apple test the latest OS, Device. So, iPad 3 in the test. I iPhone submitted for Apple. but iPad also have tested.
A target is not the same as what you are allowing it to run on... The target simply tells xCode what you are about to test it on, it doesn't tell xCode that you want it to only be able to run on that device... for that you need to look into (google) setting requirements
and Device Capabilities
in your plist file
! Good luck! :)
Everyone else has already mentioned the obvious that that your build will also run in iPad, though in a smaller window. so lets go to the next step of analyzing your crash log.
Exception Type: EXC_CRASH (SIGABRT)
this means a message was sent to an object, that didn't respond to it. (unknown selector crash)
Thread 0:
14 Fundraising 0x0007a3aa 0x79000 + 5034
I am assuming Fundraising
is the name of your application. See, this line here will give you name of the method (symbolified inside 0x0007a3aa) which was last executed. provided you have the .dSYM
file of the build that you uploaded to app store.
.dSYM
file is the one that is generated when u archive your app.
So i say you get that file, check for the method where it went wrong and :).
To know more go to this page: http://www.raywenderlich.com/23704/demystifying-ios-application-crash-logs
User contributions licensed under CC BY-SA 3.0