दिलचस्प पोस्ट
JQuery के मूल (), माता-पिता () और निकटतम () फ़ंक्शंस के बीच अंतर कैसे RelativeLayout प्रोग्राम में दृश्यों को बाहर रखना है? सरणी के लिए कुछ जोड़ने के लिए कैसे? मैं एक Microsoft JSON दिनांक को कैसे प्रारूपित कर सकता हूं? मणि स्थापित करने के लिए कैसे – non-ri –no-rdoc डिफ़ॉल्ट बनाने के लिए? दो सरणियों को PHP में कुंजी मान जोड़े के रूप में मिलाएं Int32 के लिए अधिकतम मूल्य क्या है? क्या mysql_real_escape_string () टूटा हुआ है? एनजी-दोहराने के समाप्त होने पर फ़ंक्शन कॉल करना एक डेटा.फ्रेम में प्रति समूह का मतलब गतिशील प्रोग्रामिंग और मेमोअनाइजेशन: नीचे-अप बनाम टॉप-डाउन दृष्टिकोण किसी साझा फ़ाइल (यूएनसी) से एक रिमोट, गैर-विश्वसनीय डोमेन से क्रेडेंशियल के साथ "आधुनिक" और "शेष" के बीच अंतर क्या है? कैसे जावा नकारात्मक संख्या के साथ माप गणना करता है? एकाधिक एक्सटेंशन के साथ GetFiles

आईओएस दुर्घटना लॉग कैश, डीबग जानकारी .. पकड़ो और देव टीम को ईमेल के माध्यम से भेजें

हाल ही में हम ऐसी स्थिति में आए जहां हम उस एप से डिबग की जानकारी देखना चाहते थे जो एक उपयोगकर्ता के पास अपने डिवाइस पर है। इसलिए, जो मैं देख रहा हूं वह डिवाइस पर लॉग को ढूंढने का एक तरीका है, इसे मेल पर इनलाइन पाठ के रूप में पेस्ट करें और उपयोगकर्ता को इसे भेजने की अनुमति दें ..

कोई विचार? ये सवाल फिर से हैं .. 1) डिवाइस पर एक डीबग लॉग खोजें 2) फ़ाइल खोलें और मेल की इनलाइन पाठ के रूप में फ़ाइल की सामग्री को संलग्न करें। 3) उपयोगकर्ता को अगली बार ऐप लॉन्च करने की अनुमति दें ..

धन्यवाद,

वेब के समाधान से एकत्रित समाधान "आईओएस दुर्घटना लॉग कैश, डीबग जानकारी .. पकड़ो और देव टीम को ईमेल के माध्यम से भेजें"

सभी लोगों के लिए धन्यवाद..मैंने अपने समाधानों को एक में सौंप दिया जो मेरी समस्या का समाधान करेगा .. यह है कि मैंने इसे बनाया है .. निश्चित रूप से मैंने कोड को संकलित नहीं किया, यह एक आधा बेक किया हुआ कोड है .. लेकिन मैं लोहा इसे जल्द ही एक बार के रूप में मैं इसे अपने कोड में लागू …

एनएसएलॉग को फाइल में कैसे करें एक फाइल LOG2FILE में NSLog कैसे करें

#if TARGET_IPHONE_SIMULATOR == 0 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"]; freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr); #endif 

दुर्घटना को पकड़ो और उन्हें एक फ़ाइल में लॉग इन करें

सबसे पहले, एक ऐसा समारोह बनाएं जो त्रुटि को संभाल लेंगे और इसे कंसोल में आउटपुट करेगा (साथ ही साथ जो भी आप करना चाहते हैं):

 void uncaughtExceptionHandler(NSException *exception) { NSLog(@"CRASH: %@", exception); NSLog(@"Stack Trace: %@", [exception callStackSymbols]); // Internal error reporting } 

इसके बाद, अपने ऐप प्रतिनिधि को अपवाद हैंडल जोड़ें:

 -(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions: (NSDictionary*)launchOptions { NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); // Normal launch stuff } 

क्रैश किए जाने वाले info.plist में एक चर सेट करें और फिर इसे इस तरह पढ़ें / लिखें

 - (void)readPlist { NSString *localizedPath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"plist"]; NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:localizedPath]; NSString *crashed; crashed = [plistDict objectForKey:@"Crashed"]; } - (void)writeToPlist { NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath]; [plistDict setValue:@"YES" forKey:@"Crashed"]; [plistDict writeToFile:filePath atomically: YES]; } 

एक बार एप्लिकेशन लॉन्च करता है info.plist पढ़ता है और उपयोगकर्ता को क्रैश लॉग सबमिट करने के लिए संकेत मिलता है ..

 { MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init]; mailComposer.mailComposeDelegate = self;[mailComposer setSubject:@"Crash Log"]; // Set up recipients NSArray *toRecipients = [NSArray arrayWithObject:@"first@example.com"]; [mailComposer setToRecipients:toRecipients]; // Attach the Crash Log.. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"]; NSData *myData = [NSData dataWithContentsOfFile:logPath]; [mailComposer addAttachmentData:myData mimeType:@"Text/XML" fileName:@"Console.log"]; // Fill out the email body text NSString *emailBody = @"Crash Log"; [mailComposer setMessageBody:emailBody isHTML:NO]; [self presentModalViewController:mailComposer animated:YES]; } 
  1. अपना स्वयं का डेटा लॉग करने के लिए, कोकोलंबरजैक का उपयोग करें यह NSLog से बहुत तेज है और गतिशील रूप से चालू / बंद किया जा सकता है यह डेटा को फाइल में सहेजने के लिए विकल्प भी प्रदान करता है। NSLog आपके ऐप को धीमा कर देगा और कंसोल लॉग को भर देगा। इसके अलावा आप सामान्य रूप से बहुत अधिक लॉग नहीं करना चाहते हैं आप दुर्घटना होने पर सुरक्षित रूप से लॉगिंग नहीं कर सकते इसलिए एक बार जब आपको पता चला कि समस्या क्षेत्र कहाँ है, तो वहां कुछ अधिक लॉगिंग जोड़ें और इसे पुन: उत्पन्न करने का प्रयास करें, जैसे कि किफ़ जैसे स्वचालित परीक्षण चौखटे का उपयोग करके

  2. दुर्घटना रिपोर्ट को पकड़ने के लिए आपको खुले स्रोत ढांचे PLCrashReporter पर आधारित समाधान से कुछ और नहीं चाहिए, जो सुरक्षित रूप से क्रैश को पकड़ सकता है, जब भी आप ऐप स्टोर में पहले से ही ऐप रहे हैं! दूसरों के द्वारा सुझाए जाने वाले अपवाद को अनुशंसित नहीं किया जाता है, यह देखने के लिए इस आलेख की जांच करें !

    आईट्यून्स कनेक्ट आपको कुछ क्रैश रिपोर्टों को भी देखने की पेशकश करता है, लेकिन कुछ देखने के लिए इसमें 2 सप्ताह लगते हैं, लेकिन जैसे ही कैमरे + डेवलपर्स द्वारा दिए गए उदाहरणों तक नहीं। तो आप बेहतर अपना स्वयं का समाधान का उपयोग करें

    PLCrashReporter आपको मानक सेब स्वरूपित क्रैश रिपोर्ट भेजेगा, जो प्रतीकात्मकता के लिए तैयार है, ताकि आप जानते हों कि आपके कोड में क्रैश कहाँ होता है, जिसमें लाइन नंबर शामिल हैं

    PLCrashReporter पर आधारित कुछ समाधान निम्न हैं:

    • QuincyKit : ओपन सोर्स क्लाइंट + PHP सर्वर, बुनियादी दुर्घटना समूह, प्रतीक आपके मैक से स्वचालित किया जा सकता है (मैं इस के डेवलपर हूं)
    • हॉकीपः भुगतान की गई सेवा, क्विन्सीकिट क्लाइंट, उन्नत क्रैश ग्रुपिंग, सर्वर पर पूरी तरह से किया जाने वाला प्रतीकात्मक उपयोग करता है (मैं इसके डेवलपर्स का हूँ)
    • बग्सेंस : नि: शुल्क सेवा, कोई प्रतीक नहीं
    • ऐप बेलेड : 25 डिवाइसों या उससे कम के साथ मुफ़्त सेवा अगर कोई प्रतीक नहीं है
    • क्रैशकिटिक्स : निजी बीटा, अज्ञात विशेषताएं, उनका समाधान PLCrashReporter पर आधारित है
  3. प्रस्तावित समाधान या तो अगले स्टार्टअप पर स्वचालित रूप से डेटा भेजने या उपयोगकर्ता भेजने के लिए अनुमति देने के लिए अनुमति देते हैं।

स्विफ्ट के तहत प्रवेश और विश्लेषिकी के लिए आप स्विफ्टबीवर का उपयोग कर सकते हैं, यह ओपन सोर्स स्विफ्ट 2 और ऑब्जेक्टिव-सी फ़्रेमवर्क, एन्क्रिप्टेड क्लाउड स्टोरेज और मैक ऐप सहित एक पूर्ण-फ़ीचर्ड लॉगिंग प्लेटफॉर्म है।

वेबसाइट: https://swiftybeaver.com

फ्रेमवर्क (समर्थन): https://github.com/swiftybeaver/swiftybeaver

अस्वीकरण: मैं एक संस्थापक हूं

यह एक ऐसा समाधान है जो क्रैश करता है, जैसा कि वह होता है, यह क्रैश लॉग की तुलना में अधिक मानव पठनीय कोड जानकारी देगा। इसमें कुछ क्रैश लॉग की कमी आएगी, लेकिन जब तक कहते हैं, आपको वैसे भी उन तक पहुंचने में सक्षम होना चाहिए।

Xcode 4.2 के बारे में एक और सवाल से हमेशा दुर्घटनाग्रस्त पर मुख्य रूप से लौट रहा है। इसका जवाब इस पद्धति का उपयोग करता है और आप क्रैश का ट्रैक रखने के लिए इसे बढ़ा सकते हैं।

AppDelegate में अपना अपवाद हैंडलर लागू करें

 // on load NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); void uncaughtExceptionHandler(NSException *exception) { NSLog(@"CRASH: %@", exception); NSLog(@"Stack Trace: %@", [exception callStackSymbols]); // Internal error reporting } 

अद्यतन करें मैंने कुछ बैक्रेचिंग किया और यह समाधान ज़ेन क्लैस द्वारा प्रश्न Xcode 4.2 डिबग के लिए स्टैक कॉल का प्रतीक नहीं था

वह अपनी दूसरी टिप्पणी में एक सामान्य समाधान प्रदान करता है। "मुझे लगता है कि यह फ़ाइल में क्रैश लॉग को लिखने के लिए उपयोगी है और इसे अगले लॉन्च पर रिलीज करने के लिए संकेत देता है (केवल रिलीज मोड में, डीबगिंग के तरीके में नहीं)। इससे मुझे बड़ी बग रिपोर्ट मिलती है। ..और उपयोगकर्ताओं को पता है कि उनकी समस्या को संबोधित किया जा रहा है "मैं समझता हूं कि सभी लोग इस बारे में उपयोगकर्ता से पूछना नहीं चाहते हैं, लेकिन वहां सुपर उपयोगकर्ता मौजूद हैं जो मदद करने में खुशी होगी।

आप बेशक शामिल हो सकते हैं कभी भी मुझे इस त्वरित बटन को नहीं दिखाए ताकि लोग तंत्र रिपोर्टिंग से निराश न हों।

वैकल्पिक रूप से, आप जानकारी के साथ किसी सर्वर तक पहुंच सकते हैं (सुनिश्चित नहीं है कि यह दुर्घटनाग्रस्त होने पर काम करेगा, लेकिन इसे सहेजना और कभी कभी किसी सर्वर पर पोस्ट के साथ विवरण की कोशिश करें)

मैं अपने लिए यह स्वचालित करने के लिए Crittercism का उपयोग कर रहा हूँ परीक्षण और उत्पादन के लिए भी काम करता है

BugSense आईओएस के लिए क्रैश रिपोर्टिंग सेवाएं प्रदान करता है। पूरी तरह से प्रतीक्षित स्टैक ट्रेस प्रदान करने के अलावा, बगसेन्स आपके सभी अनुप्रयोगों में आपके क्रैश के लिए विश्लेषण प्रदान करता है।

मुझे लगता है कि यह ईमेल के मुकाबले बेहतर है, क्योंकि जब आपका ऐप लोकप्रिय हो जाता है, आपको इन सभी ईमेल को मैन्युअल रूप से प्रबंधित करने की आवश्यकता होगी, जबकि बगसेन स्वत: यह करता है हालांकि, बगसेन्स भी खुले-स्रोत है, ताकि आप अपने आंतरिक को किसी भी तरह से संशोधित कर सकते हैं और कोई भी अतिरिक्त कार्यक्षमता जोड़ सकते हैं

इसके अलावा, आप हमें आपके लिए मुफ्त में काम करने के लिए मिलते हैं: यदि आपके पास एक शांत नई सुविधा के बारे में एक विचार है जिसे आप चाहते हैं कि हम चाहते हैं, तो हम इसे करेंगे- हमें लगता है कि यह अच्छा है, भी है

अस्वीकरण: मैं BugSense-iOS.framework के लिए कोड लिख रहा हूं

यदि आप अपने एसडीके के साथ TestFlight का उपयोग करते हैं तो यह स्वचालित है। यह एक बहुत अच्छी प्रणाली है परीक्षण के लिए केवल, हालांकि, बनाता है।

https://testflightapp.com/sdk/

एप्पल द्वारा प्रदान की जाने वाली मुफ्त उपयोगिता के लिए आईफ़ोन। आइप फाइल से NSLog स्टेटमेंट को देखने के लिए रयान का उत्तर देखें।

लेकिन यह अभी भी कोई सुविधाजनक समाधान नहीं है यदि आप एक नई बिल्ड खरीद सकते हैं, तो आपको ऐप के भीतर अपना लॉगिंग बदलना चाहिए। जानो में इस पर कुछ बहुत अच्छे विचार हैं कि कैसे एक फ़ाइल में NSLog विशेष रूप से 2 विकल्प बहुत अधिक प्रयास किए बिना करना चाहिए

सामान्य तौर पर मैं प्रोजेक्ट की शुरुआत में सिर्फ मुखौटा या इसी तरह के डिजाइन के पीछे मूल लॉगिंग सुविधाओं को छुपाने की सलाह देता हूं, भले ही कोई प्रोग्रामिंग भाषा किस प्रकार उपयोग की जा रही है।