2013-02-12 39 views
8

मैं एक नई एप्लिकेशन है, जो इस संदेश के साथ app की दुकान से अस्वीकार कर दिया था है: तैनाती लक्ष्य iPhone: अनुप्रयोग के लिएआईओएस - मैं आईट्यून्स कनेक्ट से प्रतीकात्मक क्रैश रिपोर्ट कैसे डीकोड कर सकता हूं?

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 

लेकिन अपने निर्माण लक्ष्य सेटिंग की डिवाइस थे 6.0

और मेरे plist सेटिंग्स हैं: लक्ष्य डिवाइस परिवार: iPhone आईओएस तैनाती लक्ष्य: 6.0

यहाँ दुर्घटना लॉग मैं एप्पल से मिल रहे हैं:

+०१२३५१६४१०
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 

मैं इन दो पृष्ठों से symbolication के बारे में सीख रहा हूँ: 1) http://www.raywenderlich.com/23704/demystifying-ios-application-crash-logs 2) Symbolicating iPhone App Crash Reports

मैं कुछ चीजों के साथ उलझन में हूँ: मैं पुराने संग्रह जो जब मैं एप्लिकेशन अपलोड किया गया था की क्या ज़रूरत है iTunes के लिए। लेकिन वे चाहते हैं कि मुझे एक .app फ़ाइल हो। वह कौन सी फाइल है? क्या वह संग्रह है? और कौन सा फ़ाइल myApp.app.dSYM फ़ाइल है? और क्या मैं बस पूरी क्रैश रिपोर्ट को एक टेक्स्ट फ़ाइल में कॉपी करता हूं और उसे स्थानीय रूप से सहेजता हूं?

धन्यवाद!

- (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:@"[email protected]"]]; 
     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]; 
       } 
      } 
    }];  
} 
+0

आप क्रैश लॉग symbolicate ताकि आप देख सकते हैं, जहां यह दुर्घटनाग्रस्त है की जरूरत है। – rmaddy

+0

@rmaddy प्रतीक से आपका क्या मतलब है? :) – Genadinik

+0

देखें [आईओएस अनुप्रयोग क्रैश रिपोर्ट को समझना और विश्लेषण करना] (https://developer.apple.com/library/ios/#technotes/tn2151/_index.html)। – rmaddy

उत्तर

5

iPhone अनुप्रयोगों iPads पर चलाया जा सकता है:

इसके अलावा, इस कोड के कुछ चलाता है कि जब अनुप्रयोग शुरू होता है। वे स्क्रीन पर एक "खिड़की" में दौड़ते हैं, एक ही आकार और आकार आईफोन स्क्रीन के रूप में।

कहा जा रहा है कि, आपका एप्लिकेशन भी आईफोन 5 पर दुर्घटनाग्रस्त हो गया है। इसलिए आईपैड पर चलना विशिष्ट नहीं है। आपको विवरण के लिए क्रैश लॉग देखने की आवश्यकता होगी।

+0

का कारण हो सकता है मेरे पास ऐप के उस संस्करण में वास्तव में क्रैश लॉग नहीं थे। लेकिन यह मेरे एमुलेटर पर क्रैश नहीं होता है ... सुनिश्चित नहीं है कि इसे कैसे डिबग करें :( – Genadinik

+0

आपको अस्वीकृति पत्र के साथ क्रैश लॉग प्राप्त होना चाहिए था। – duskwuff

+4

@Genadinik आपको सिम्युलेटर नहीं, वास्तविक उपकरणों पर परीक्षण करने की आवश्यकता है। – rmaddy

1

आप गलत हैं लक्ष्य आईफोन आईपैड पर नहीं चल सकता है। लेकिन सिर्फ आईपैड उपयुक्त यूआई, पूर्ण स्क्रीन के लिए नहीं। मेरे अनुभव में, ऐप्पल नवीनतम ओएस, डिवाइस का परीक्षण करता है। तो, परीक्षण में आईपैड 3। आईफोन ने ऐप्पल के लिए प्रस्तुत किया। लेकिन आईपैड ने भी परीक्षण किया है।

+0

तो क्या मुझे इसके लिए एक आईपैड स्टोरीबोर्ड भी तैयार होना चाहिए? या क्या मुझे किसी तरह से गलती है? – Genadinik

+0

यह आवश्यक नहीं है। केवल ध्यान से आईपैड का परीक्षण करें सबमिशन। मैं हमेशा परीक्षण और आईपैड हूं। –

+0

मैंने अभी अपने मूल प्रश्न में कुछ त्रुटि स्टैक ट्रेस पोस्ट किया है। क्या वहां कुछ भी है जो इंगित कर सकता है कि क्या गलत हुआ? धन्यवाद! – Genadinik

1

एक लक्ष्य उतना ही नहीं है जितना आप इसे चलाने की अनुमति दे रहे हैं ... लक्ष्य केवल एक्सकोड को बताता है कि आप इसका परीक्षण करने के लिए क्या कर रहे हैं, यह xCode को नहीं बताता है कि आप इसे केवल सक्षम करने के लिए चाहते हैं उस डिवाइस पर चलाने के लिए ... इसके लिए आपको अपने plist file में requirements और Device Capabilities सेटिंग (google) को देखने की आवश्यकता है! सौभाग्य! :)

1

हर किसी ने पहले ही स्पष्ट रूप से उल्लेख किया है कि आपका निर्माण आईपैड में भी चलाएगा, हालांकि एक छोटी विंडो में। तो चलिए अपने क्रैश लॉग का विश्लेषण करने के अगले चरण पर जाएं।

Exception Type: EXC_CRASH (SIGABRT) 

इसका मतलब यह है संदेश एक वस्तु है कि यह जवाब नहीं दिया करने के लिए भेजा गया था। (अज्ञात चयनकर्ता दुर्घटना)

Thread 0: 
14 Fundraising      0x0007a3aa 0x79000 + 5034 

मैं Fundraising संभालने हूँ अपने आवेदन का नाम है। देखें, यह लाइन आपको विधि का नाम देगी (0x0007a3aa के अंदर प्रतीक) जिसे अंतिम बार निष्पादित किया गया था। बशर्ते आपके पास ऐप स्टोर पर अपलोड की गई बिल्ड की .dSYM फ़ाइल हो।

.dSYM फ़ाइल वह है जो आपके ऐप को संग्रहीत करते समय उत्पन्न होती है। .sym file generation location

तो मैं कहता हूं कि आपको वह फ़ाइल मिलती है, उस विधि की जांच करें जहां यह गलत हो गया था :) :)।

अधिक जानने के लिए इस पेज पर जाएँ: http://www.raywenderlich.com/23704/demystifying-ios-application-crash-logs सब आप की दुकान और निर्माण के लिए इस मुद्दे को symbolicate चाहते हैं के लिए .dSYM फ़ाइल को सहेजना होगा की

+0

धन्यवाद, यह बहुत उपयोगी है। मेरे पास एकमात्र सवाल है मैं वास्तव में उस कोड को डीकोड करने के लिए संग्रह में उस प्रतीकात्मक कोड को कैसे दर्ज करूं? – Genadinik

12

पहले।

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/:

  1. आसान पहुँच के लिए डेस्कटॉप पर कुछ फ़ोल्डर को इस स्थान से प्रतिलिपि symbolicatecrash निष्पादन DTDeviceKit.framework/संस्करण/ए/संसाधन

    1. क्रैश और .dSYM फ़ाइल को उसी फ़ोल्डर में कॉपी करें।

    2. नेविगेट टर्मिनल से उस फ़ोल्डर में और आदेश चला नीचे दिए गए:

    ./symbolicatecrash .crash .app.dSYM

    ** Symbolicating आईपीए **

    अगर हम प्रतीकात्मक के लिए आईपीए का उपयोग करें - बस .za के साथ विस्तार .ipa का नाम बदलें, इसे निकालें, फिर हम एक पेलोड फ़ोल्डर प्राप्त कर सकते हैं जिसमें ऐप शामिल है। इस मामले में हमें .dSYM फ़ाइल की आवश्यकता नहीं है। (केवल मामले में जब डिबग प्रतीकों जहां प्रति दौरान छीन नहीं)

    रेफरी: Symbolicating iPhone App Crash Reports

    आप आईपीए या संग्रह है जो आप के तहत Organizer-> अभिलेखागार देख सकते हैं कि एप्पल के लिए प्रस्तुत किया गया था है। यदि आप राइट-क्लिक करें और पैकेज सामग्री दिखाएं चुनें तो डीएसवाईएम नामक एक फ़ोल्डर होगा जिसके तहत आप अपने सबमिट किए गए ऐप के लिए डीएसवाईएम फ़ाइल पा सकते हैं।

    enter image description here enter image description here enter image description here

+1

यह उत्तर आंशिक रूप से गलत है: Sy केवल ऐप बाइनरी के साथ mbolication, केवल तभी काम करता है जब ऐप बाइनरी के प्रतीक छीन नहीं जाते हैं (डिफ़ॉल्ट रूप से वे छीन जाते हैं, ऐसा नहीं करते हैं जो बाइनरी आकार को 30-50% तक बढ़ा सकते हैं) और स्टैक ट्रेस में मैन्युअल रूप से प्रत्येक पंक्ति को प्रतीकात्मक करके और गणना करना प्रत्येक के लिए सही पता। ऐप्पल से प्रतीकात्मक प्रक्रिया हमेशा प्रतीकात्मकता के लिए डीएसवाईएम का उपयोग करती है। – Kerni

+0

@kerni यह इंगित करने के लिए धन्यवाद कि आउट और यह केवल तभी किया जाता है जब रिहाई योजना का चयन किया जाता है, उस स्थिति में किसी को निश्चित रूप से डीएसवाईएम की आवश्यकता होगी और जब तक कि इसे चुनने तक योजना बनाई जाती है। सवाल ऐप्पल से दुर्घटना का प्रतीक होने के बारे में था जिसके लिए डीएसवाईएम फ़ाइल आसानी से ऐप्पल में निर्माण जमा करने के लिए उपयोग किए गए संग्रह से पाई जा सकती है। – SAPLogix