2014-12-21 10 views
8

अनलॉक करने के बाद भी पहुंच की इजाजत नहीं दे रहा है, इसलिए मेरे पास पुरानी संवेदनशील पहुंच कुंजी है जिसके पास वर्तमान में केएसईएएएएएआरएआरएबलएबल की पहुंच है और मैं इसे KSecAttrAccessibleAfterFirstUnlock में अपडेट करना चाहता हूं।kSecAttrAccessibleAfterFirst अनलॉक पहली बार आईओएस

मैं Lockbox उपयोग कर रहा हूँ और इस फोन:

-(BOOL)setObject:(NSString *)obj forKey:(NSString *)key accessibility:(CFTypeRef)accessibility 
{ 
    OSStatus status; 

    NSString *hierKey = [self _hierarchicalKey:key]; 

    // If the object is nil, delete the item 
    if (!obj) { 
     NSMutableDictionary *query = [self _query]; 
     [query setObject:hierKey forKey:(LOCKBOX_ID)kSecAttrService]; 
     status = SecItemDelete((LOCKBOX_DICTREF)query); 
     return (status == errSecSuccess); 
    } 

    NSMutableDictionary *dict = [self _service]; 
    [dict setObject: hierKey forKey: (LOCKBOX_ID) kSecAttrService]; 
    [dict setObject: (LOCKBOX_ID)(accessibility) forKey: (LOCKBOX_ID) kSecAttrAccessible]; 
    [dict setObject: [obj dataUsingEncoding:NSUTF8StringEncoding] forKey: (LOCKBOX_ID) kSecValueData]; 

    status = SecItemAdd ((LOCKBOX_DICTREF) dict, NULL); 
    if (status == errSecDuplicateItem) { 
     NSMutableDictionary *query = [self _query]; 
     [query setObject:hierKey forKey:(LOCKBOX_ID)kSecAttrService]; 
     status = SecItemDelete((LOCKBOX_DICTREF)query); 
     if (status == errSecSuccess) 
      status = SecItemAdd((LOCKBOX_DICTREF) dict, NULL); 
    } 
    if (status != errSecSuccess) 
     DLog(@"SecItemAdd failed for key %@: %d", hierKey, (int)status); 

    return (status == errSecSuccess); 
} 

आप ऊपर देख सकते हैं, Lockbox कोड आइटम जोड़ने के लिए प्रयास करने के लिए लगता है:

[Lockbox setString:accessKey forKey:self.accessKeyName accessibility:kSecAttrAccessibleAfterFirstUnlock]; 

कौन सा बारी में, यह कहता है अगर एक डुप्लिकेट है। मैंने वहां एक ब्रेकपॉइंट लगाया है और पुष्टि कर सकता हूं कि यह काम करता है। - मैं पहले से ही मेरे फोन अनलॉक कर दिया है और यह ठीक काम करना चाहिए

<Error>: SecOSStatusWith error:[-25308] The operation couldn’t be completed. (OSStatus error -25308 - Remote error : The operation couldn‚Äôt be completed. (OSStatus error -25308 - ks_crypt: e00002e2 failed to unwrap item (class 6, bag: 0) Access to item attempted while keychain is locked.)) 

मुझे समझ नहीं आता क्यों मैं इस हो रही किया जाएगा:

लेकिन, कभी कभी यह अभी भी की एक त्रुटि देता है। कोई विचार?

मुझे यह भी जोड़ना चाहिए कि जब ऐप को मार दिया जाता है और पृष्ठभूमि निगरानी अद्यतन के माध्यम से पृष्ठभूमि में पुनर्जीवित किया जाता है तो मुझे यह एक्सेस करना होगा।

+0

अरे, क्या आपने इस मुद्दे को हल किया? मुझे एक बहुत ही समान समस्या का सामना करना पड़ रहा है। जब मेरी ऐप की मौत हो जाती है और पृष्ठभूमि में लॉन्च किया जाता है तो मेरी कीचेन पहुंच उसी त्रुटि को फेंकता है – SeaJelly

+0

@ सेजली क्या आपको समाधान मिल गया? –

उत्तर

4

मुझे नए से पहले पुरानी कुंजी को साफ़ करना पड़ा। आप ऐसा कर सकते हैं या आप नए kSecAccessibility मान के साथ एक अलग नाम के साथ एक नई कुंजी बना सकते हैं।

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