2014-10-15 6 views
5

हमारे पास एक आईओएस ऐप है जिसे जारी किया गया है। आईडीई एक्सकोड 6 है। मैं आईओएस 8 शेयर एक्सटेंशन से ऐप में मौजूद सत्र आईडी तक पहुंचने के लिए कीचेन शेयरिंग जोड़ना चाहता हूं।उत्पादन ऐप में कीचेन शेयरिंग जोड़ना जिसमें पहले से उपयोगकर्ता हैं

समस्या तब भी होती है जब कुंजीचैन साझाकरण चालू होता है, सत्र आईडी जो पहले से मौजूद है, अब तक नहीं पहुंचा जा सकता है।

जब भी कीचेन साझाकरण बंद हो जाता है तो इसे एक्सेस किया जा सकता है।

यह शब्दकोश SecItemCopyMatching में पारित किया गया है, जो कि जब भी कीचेन शेयरिंग सक्षम होता है, तो हमेशा -25300 (नहीं मिला) लौटाता है, इससे कोई फर्क नहीं पड़ता कि "कीचेन समूह:" क्या है।

[0] (null) @"svce" : @"SESSION_ID_KEY" 
[1] (null) @"r_Data" : @"1"  
[2] (null) @"m_Limit" : @"m_LimitOne" 
[3] (null) @"class" : @"genp" 
[4] (null) @"acct" : @"SESSION_ID_KEY" 
[5] (null) @"pdmn" : @"ck" 

कोई विचार क्यों कुंजी तक पहुंच काम नहीं कर सकती है? मैंने ksecAttrAccessGroup को बंडल उपसर्ग और नाम के साथ सेट करने का प्रयास किया और यह अभी भी सिम्युलेटर पर काम नहीं करता है।

उत्तर

1

कुछ महीने पहले आईओएस 7 में इंटर-ऐप संचार को लागू करते समय मुझे एक ही समस्या थी। मैं Apple's GenericKeyChain sample project पर इस टिप्पणी पाया:

 // Apps that are built for the simulator aren't signed, so there's no keychain access group 
     // for the simulator to check. This means that all apps can see all keychain items when run 
     // on the simulator. 
     // 
     // If a SecItem contains an access group attribute, SecItemAdd and SecItemUpdate on the 
     // simulator will return -25243 (errSecNoAccessForItem). 

तो अगर आप एक सिम्युलेटर आप "kSecAttrAccessGroup" हटाने की जरूरत पर परीक्षण कर रहे हैं।

किसी डिवाइस पर इसे इस कुंजी के साथ काम करना चाहिए।

+1

समस्या डिवाइस पर चलते समय भी होती है। – FernandoEscher

6

उम्मीद है कि मैं अपने जवाब और इनाम :)

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

MyApp.entitlements में और MyApp Extension.entitlements में मैं $(AppIdentifierPrefix)com.company.MyApp को Keychain Access Groups सेट (यह डिफ़ॉल्ट है) है।

मैं ABCD1234 (उर्फ AppIdentifierPrefix मूल्य) के लिए मूल्य पहुँचा इस अतः https://stackoverflow.com/a/20340883 का जवाब हालांकि हार्डकोड यहाँ सबसे अच्छा अभ्यास नहीं किया जा सकता है, तो यह इस https://stackoverflow.com/a/11841898/2588957

की तरह एक समाधान के लिए देख तो मेरे एप्लिकेशन में ध्यान दें कि सभी मैं जोड़ा पर विचार का उपयोग कर मेरा वर्तमान कोड काम करने के लिए निम्नलिखित है: [keychainItem setObject:@"ABCD1234.com.company.MyApp" forKey:(__bridge id)kSecAttrAccessGroup]; आइटम को अपडेट करने से पहले और अब मैं अपने शेयर एक्सटेंशन में कीचेन आइटम तक पहुंच सकता हूं।

+2

यह ऐप और एक्सटेंशन के बीच कीचेन में नया डेटा साझा करने के लिए काम करता है, लेकिन कुंजीचाप साझा करने से पहले ऐप में मौजूद पुराने डेटा को अब तक एक्सेस नहीं किया जा सकता है। जब कीचेन साझाकरण अक्षम कर दिया जाता है तो पुराने डेटा को फिर से एक्सेस किया जा सकता है। – hellolight

+1

@hellolight मैंने अभी सत्यापित किया है कि एक ही डिफ़ॉल्ट कुंजीपैन एक्सेस समूह का उपयोग करके कीचैन साझाकरण सक्षम होने के बाद गैर-साझा कीचेन से डेटा पुनर्प्राप्त करने के लिए काम करता है। साथ ही, सुनिश्चित करें कि आप उन सभी ऐप्स में kSecAttrService के लिए समान मान सेट कर रहे हैं जो कि कीचेन एक्सेस साझा करेंगे। अपने ऐप के एंटाइटेलमेंट को सत्यापित करने के लिए आप टर्मिनल '$ codeign -d --entitlements: -/path/to/MyProject.app' से इस कमांड का उपयोग कर सकते हैं। यह सुनिश्चित करने में मदद करेगा कि आपके कीचेन एक्सेस समूह सही हैं। – FernandoEscher

+0

क्या आपने गैर-साझा डेटा पुनर्प्राप्त करने के लिए कुछ खास किया था? KeychainItem शब्दकोश में कौन सी कुंजी सेट की गईं?क्या svce और acct आपके लिए एक अद्वितीय आईडी है? – hellolight

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