2012-03-15 8 views
25

मैं इस कोड वापस एक दिए गए उपयोगकर्ता नाम NSString के लिए कीचेन से एक पासवर्ड हो रही है:आईओएस SFHFKeychainUtils असफल * कभी कभी * त्रुटि -25,308 साथ errSecInteractionNotAllowed

NSError *error = nil; 
NSString *appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey]; 
NSString *pw = [SFHFKeychainUtils getPasswordForUsername:username andServiceName:appName error:&error]; 
if(error != nil) 
    // log the error  

अधिकांश समय अधिकांश उपयोगकर्ताओं के लिए यह सब ठीक काम करता है - लेकिन कुछ विशिष्ट उपयोगकर्ताओं के लिए इस कॉल विफल (और असफल रहने पर ले जाने के) जहां यह निम्नलिखित त्रुटि देता है लगता है:

The operation couldn’t be completed. (SFHFKeychainUtilsErrorDomain error -25308.) 

जाहिरा तौर पर errSecInteractionNotAllowed है - जहाँ से मैं क्या पढ़ा है मैं लगता इसका मतलब है कि चाबी का उपयोग करने के लिए किसी प्रकार का उपयोगकर्ता इंटरैक्शन आवश्यक है।

क्या किसी को पता है कि यह कॉल केवल कुछ विशिष्ट उपयोगकर्ताओं के लिए क्यों विफल हो सकती है? यह कीचेन प्रविष्टि मेरे ऐप के लिए विशिष्ट है - तो इसका उपयोग करने के लिए किसी भी उपयोगकर्ता इंटरैक्शन की आवश्यकता क्यों होगी?

बहुत सराहना किसी भी संकेत दिए गए ...

उत्तर

40

ठीक तो मैं इस बाहर अंत में काम किया।

आखिरकार मैंने उन उपयोगकर्ताओं को काम किया जिनके पास समस्याएं थीं, उनके फोन पर लॉक कोड सेट किया गया था। अगर फोन लॉक किया गया था तो कीचेन सिस्टम इस -25308 त्रुटि को वापस कर रहा था।

यदि आपको केवल भूमि के क्षेत्र में ऐप सक्रिय होने पर कीचेन तक पहुंचने की आवश्यकता है तो आपको कभी भी यह समस्या दिखाई नहीं देगी - लेकिन यदि आपको लॉक होने पर या प्रोसेस पृष्ठभूमि में होने पर प्रोसेसिंग करने की आवश्यकता है तो आप इसे देखेगा

कहीं और मैं पढ़ता हूं कि केचैन सिस्टम के लिए डिफ़ॉल्ट एक्सेस विशेषता kSecAttrAccessibleAlways है - लेकिन मुझे लगता है कि यह पुराना है। ऐसा लगता है कि कीचेन सिस्टम के लिए डिफ़ॉल्ट एक्सेस विशेषता ऐसी है कि जब फोन पिन कोड से लॉक हो जाता है तो आइटम अनुपलब्ध होते हैं।

इसके लिए फिक्स SFHFKeychainUtils कोड को उस कुंजीचैन आइटम पर एक विशिष्ट KSecAttrAccessible विशेषता सेट करने के लिए परिवर्तित करना है (जो मूल कोड नहीं करता था - संभवतया यह इन गुणों से पहले ही दिनांकित था)।

यह वर्डप्रेस SFHFKeychainUtils कोड की updated version उस में फिक्स है - जहां वे सुलभ विशेषता कोड जोड़ लिया है kSecAttrAccessible की खोज करके देखें।

आशा इस मदद करता है किसी और को इस में चल रहा है ...

+2

मैं iOS4, iOS5 और iOS6 पर इस की पुष्टि कर लें। सभी आईओएस संस्करणों पर errSecInteractionNotAllowed त्रुटि कोड वापस किया जाता है यदि डेटा जो KSecAttrAccessibleAlways के साथ चिह्नित नहीं है, तब पढ़ा जाता है जब आपका डिवाइस लॉक स्थिति में होता है (जैसे पृष्ठभूमि कार्य, न्यूजस्टैंड डाउनलोड इत्यादि)। –

+5

kSecAttrAccessibleAlways एक शानदार विकल्प नहीं है - आप अधिक सुरक्षा लाभ प्राप्त कर सकते हैं, और अभी भी त्रुटि से बच सकते हैं, जैसे कि KSecAttrAccessibleAfterFirstUnlock (या इससे भी अधिक प्रतिबंधक सेटिंग, यदि यह आपके ऐप के लिए काम करता है) का उपयोग कर। – frankodwyer

+0

मैं पुष्टि कर सकता हूं कि, जब ऐप अग्रभूमि में है लेकिन डिवाइस पासवर्ड से लॉक है, तो कीचेन लाइब्रेरी मुझे -25308 देती है। धन्यवाद ! – Magurizio

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