2012-10-10 21 views
44

मेरे पास एक ऐप है जो पता पुस्तिका का उपयोग करता है। आईओएस 6 में चलते समय यह कोड तब चलता है जब उपयोगकर्ता ऐसा कुछ करता है जिसके लिए एड्रेस बुक एक्सेस की आवश्यकता होती है।ऐप आईओएस 6 में दुर्घटनाग्रस्त हो गया जब उपयोगकर्ता संपर्क एक्सेस अनुमतियों को बदलता है

if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) 
{ 
    ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL); 

    ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) 
    { 
     if (granted) 
     { 
      showContactChooser(); 
     } 
    }); 

    CFRelease(addressBookRef); 
} 
else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) 
{ 
    showContactChooser(); 
} 
else 
{ 
    showAccessDeniedAlert(); 
} 

यह पूरी तरह से काम करता है: मैं संपर्क जानकारी को पढ़ने में सक्षम हूँ और जब उपयोगकर्ता पहुँच से मना कर, एप्लिकेशन तदनुसार प्रतिक्रिया करते हैं।

हालांकि, उपयोगकर्ता यदि:

  1. एप्लिकेशन में संपर्कों पहुंचने देती है
  2. एप्लिकेशन इस्तीफा,
  3. सेटिंग्स करने के लिए> Privacy-> संपर्क चला जाता है और अनुप्रयोग के लिए संपर्क पहुँच अक्षम कर,
  4. एप्लिकेशन पृष्ठभूमि में चल रहा है, वहीं अनुप्रयोग,
  5. चलाता सेटिंग्स के लिए चला जाता है और एप्लिकेशन के लिए संपर्क का उपयोग सक्षम बनाता है,

ऐप तुरंत main() के अंदर कोई अपवाद जानकारी या एक सार्थक स्टैक ट्रेस के बिना दुर्घटनाग्रस्त हो जाता है। मैंने "सभी अपवाद" और [NSException raise] ब्रेकपॉइंट को चालू करने का प्रयास किया, लेकिन इससे मुझे और जानकारी नहीं मिली।

क्रैश को पुन: उत्पन्न किया जा सकता है भले ही ऐप लॉन्च के दौरान उपरोक्त कोड नहीं चलाए।

यहां क्या हो रहा है? क्या कोई कॉलबैक है जिसके लिए मुझे सदस्यता लेनी चाहिए?

+0

नीचे rmaddy के उत्तर के अनुसार, यह एक क्रैश नहीं है, यह आईओएस ऐप को समाप्त कर रहा है। –

+0

मेरे लिए भी यही समस्या है लेकिन यह मेरे ऐप के लिए स्थान अनुमति के लिए है :( –

उत्तर

72

मैंने इसे अपने ऐप में देखा है। और मैंने दूसरों को यह भी रिपोर्ट किया है। मुझे यकीन है कि यह जानबूझकर व्यवहार है। ओएस किसी भी पृष्ठभूमि ऐप को मारता है जो गोपनीयता अनुमतियों में बदलावों पर प्रतिक्रिया करता है। ऐसा लगता है कि ऐप्पल ने एक स्लेजहैमर दृष्टिकोण लिया है। यह एक दुर्घटना नहीं है (हालांकि यह डीबगर में चलते समय ऐसा दिखाई दे सकता है)। ऐप्स कई अन्य कारणों से समाप्त हो जाते हैं। इसे कारणों की सूची में जोड़ें। यह हमें हमारे ऐप्स के पूर्ण पुनरारंभ पर ऐप स्थिति को पुनर्स्थापित करने के लिए एक अच्छा काम करने का अधिक कारण देता है।

ध्यान दें कि यह व्यवहार संपर्क, फोटो, माइक्रोफ़ोन, कैलेंडर और कैमरा जैसी विभिन्न गोपनीयता सेटिंग्स पर लागू होता है।

+2

सत्यापित यह भी होता है आईओएस 7.0.3 पर फोटो सुरक्षा सेटिंग्स के साथ। ऐप्पल की ओर से तार्किक लगता है, यहां कोई शिकायत नहीं है! क्या कोई सुरक्षा अपडेट के कारण ऐप क्रैश होने से पहले कुछ डेटा सहेजने के लिए पृष्ठभूमि कोड चलाने का कोई तरीका जानता है? –

+2

सत्यापित, यह भी होता है आईओएस 7.0.3 में माइक्रोफ़ोन सुरक्षा सेटिंग्स। – Pavan

+1

आईओएस 7 कैलेंडर-संबंधित ऐप्स में वही काम करता है। यदि आप डिवाइस पर ऐप चलाते हैं, तो एक्सकोड डीबगिंग या सिम्युलेटर के माध्यम से नहीं, तो आप देखेंगे कि ऐप पुन: प्रारंभ होता है, उपयोगकर्ता के लिए अदृश्य इसलिए, जैसा कि आरएमडीआई कहता है, बस सुनिश्चित करें कि आपका ऐप "पूर्ण पुनरारंभ पर ऐप स्थिति को पुनर्स्थापित करने के लिए एक अच्छी नौकरी" करता है ... – leanne

-1

आमतौर पर, जब कोई एप्लिकेशन निलंबित होने से वापस आता है, तो उसे एप्लिकेशन को कॉल करना चाहिए: आपके ऐपडिलेगेट से एंटरप्राउंडग्राउंड। मेरी राय में, यह आपके लिए अपनी पता पुस्तिका अनुमतियों को समायोजित करने के लिए एक अच्छी जगह होगी।

+0

मेरी राय में सबसे अच्छा अभ्यास है कि ऐप को इन डेटा का उपयोग करने की अनुमति देने के लिए अनुमति दें (उदाहरण के लिए। एक निश्चित स्क्रीन दर्ज करते समय)। –