2012-06-04 14 views
16

मैं अपने ऐप को स्टार्टअप के दौरान क्रैश होने पर मानक सेटिंग्स पर रीसेट करना चाहता हूं। अधिमानतः अगर यह पिछली बार दुर्घटनाग्रस्त हो गया तो यह भी चला गया।लोड के दौरान क्रैश किए गए ऐप का पता लगाएं/आखिरी बार इसे चलाया गया था?

संपादित करें: क्रिटरसिज्म में क्रिटरसिज्मडिडक्रैशऑनलास्ट लोड विधि है, लेकिन यह केवल लोड के दौरान क्रैश होने का मामला संभालती है। यह लाइब्रेरी के संस्करण में ठीक से काम नहीं करता था, लेकिन इसे तब से तय कर दिया गया है।

सुझाव? अपने AppDelegate.m फ़ाइल में

उत्तर

27

मेक 2 कार्य:

void HandleException(NSException *exception) { 
    NSLog(@"App crashing with exception: %@", exception); 
    //Save somewhere that your app has crashed. 
} 

void HandleSignal(int signal) { 
    NSLog(@"We received a signal: %d", signal); 
    //Save somewhere that your app has crashed. 
} 
तब में

अपने -(BOOL)application:didFinishLaunchingWithOptions से पहले कुछ और रख:

NSSetUncaughtExceptionHandler(&HandleException); 

struct sigaction signalAction; 
memset(&signalAction, 0, sizeof(signalAction)); 
signalAction.sa_handler = &HandleSignal; 

sigaction(SIGABRT, &signalAction, NULL); 
sigaction(SIGILL, &signalAction, NULL); 
sigaction(SIGBUS, &signalAction, NULL); 
+2

हम्म, उपयोगी लग रहा है। क्या यह क्रिटसिज्म के साथ बुरी तरह से बातचीत करेगा? –

+2

ठीक है, मैंने इसका परीक्षण किया है, और यह वास्तव में क्रिटरसिज्म को अक्षम कर देगा। मुझे लगता है कि मैं इस सुविधा को उनके उत्पाद में जोड़ने के लिए उन्हें मनाने की कोशिश करूंगा। आपकी सलाह के लिए धन्यवाद, यह सबसे उपयोगी था। –

+0

जानना अच्छा है, मैंने 'क्रिटरसिज्म' का उपयोग नहीं किया है, लेकिन शायद वे इसे इसी तरह से संभालते हैं, यह भी 'टेस्टफ्लाइट' त्रुटि लॉगिंग को संभालने का तरीका है। आप वास्तव में उनसे पूछ सकते हैं कि उनके बिना अपरिपक्व हैंडलर का उपयोग कैसे करें ... – graver

4

का उपयोग Crashlytics आप तो स्विफ्ट या ObjC पर एक दुर्घटना का पता लगाने के CrashlyticsDelegate सेट कर सकते हैं कोड।

import Fabric 
import Crashlytics 
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
{ 
    Crashlytics.sharedInstance().delegate = self 
    Fabric.with([Crashlytics.self]) 
    return true 
} 

//MARK: - CrashlyticsDelegate 

func crashlyticsDidDetectReport(forLastExecution report: CLSReport, completionHandler: @escaping (Bool) -> Void) 
{ 
    completionHandler(true) 
} 

Crashlytics डॉक्स

आपका प्रतिनिधि completionHandler आह्वान करना चाहिए, लेकिन इतना तुल्यकालिक, या यहाँ तक कि मुख्य थ्रेड पर कर की जरूरत नहीं है से। समापन के साथ हैंडलर के साथ हैंडलर को पता चला है कि को क्रैशलिटिक्स में सबमिट नहीं किया गया है। यह अनुमति संकेतों, या क्रैश सबमिट करने के आसपास तर्क के अन्य जटिल-जटिल रूपों को लागू करने के लिए उपयोगी है।

यह सुनिश्चित करें कि प्रतिनिधि क्रैशलिटिक्स प्रारंभ करने के साथ स्टार्टविथैपी: ... या [फैब्रिक के साथ: ...] के साथ शुरू हो गया है। करने में विफलता परिणामस्वरूप किसी भी प्रतिनिधि कॉलबैक को याद कर देगा जो सिंक्रनाइज़ प्रारंभ के दौरान होती है।

संबंधित मुद्दे