2012-10-26 11 views
5

कॉल में errSecNotAvailable के साथ विफल करने के लिए कीचेन सेवाएं जब लक्ष्य को क्रियान्वित करने कमांड लाइन उपकरण और iphone सिम्युलेटर हार्डवेयर संस्करण 6.0 (10A403) पर सेट है का उपयोग कर errSecNotAvailable के साथ विफल। यदि मैं सिम्युलेटर संस्करण को दूसरे पिछले संस्करण (4.3, 5.0, 5.1) में बदलता हूं और उसी कमांड लाइन स्क्रिप्ट का उपयोग करके फिर से निष्पादित करता हूं तो कॉल सफल होते हैं।कीचेन सेवा API iphonesimulator 6.0

मैं नवीनतम एक्सकोड 4.5 चला रहा हूं और कमांड लाइन उपकरण XCode के भीतर से डाउनलोड किए गए थे।

इस त्रुटि पुन: पेश करने के लिए बस निम्न कार्य करें:

  1. सेटअप 6.0
  2. सेट आईओएस तैनाती लक्ष्य को 4.3
  3. कॉपी करने के लिए और
  4. सेट बेस एसडीके एक OCUnit लक्ष्य के साथ एक ios पुस्तकालय परियोजना कोड को टेस्ट प्रोजेक्ट में पोस्ट के अंत में पेस्ट करें (यह केवल पासवर्ड स्टोर करने और इसे पुनर्प्राप्त करने का प्रयास करेगा)
  5. सुरक्षा के लिए OQUnit लक्ष्य
  6. पर सुरक्षा जोड़ें

एक्सकोड में ओसीयूनीट लक्ष्य निष्पादित करें और आईफोन सिम्युलेटर में जो भी हार्डवेयर संस्करण सेट है, उसके साथ टेस्ट पास देखें (केवल इसे निष्पादन के बीच बदलें)। iphone सिम्युलेटर हार्डवेयर संस्करण 6.0 के लिए सेट के साथ

xcodebuild -target TARGET_NAME_HERE -sdk iphonesimulator -configuration Release TEST_AFTER_BUILD=YES 

और परीक्षण असफल हो जायेगी:

का उपयोग कर कमांड लाइन से OCUnit लक्ष्य निष्पादित। यदि आप आईफोन सिम्युलेटर हार्डवेयर संस्करण को 4.3, 5.0 या 5.1 में बदलते हैं और कमांड लाइन स्क्रिप्ट को फिर से निष्पादित करते हैं तो परीक्षण सफल होगा

क्या यह एक कमांड लाइन उपकरण समस्या है? एक आईफोन सिम्युलेटर समस्या? एक ओसीयूनीट लक्ष्य कमांड लाइन समस्या से चल रहा है?

कौन से यूनिट परीक्षण पसंद करते हैं जो धूमकेतु गठबंधन होने पर ही पास होते हैं ??

कोई विचार?

यहाँ कोड है:, मैं जाँच कर सकते हैं यह शुरू किया जा रहा है, के बाद शुरू होता है सिम्युलेटर

launchctl list | grep securityd 

उपयोग कर, और हो रही

#define KEYCHAIN_ITEM_ATTRIBUTES (id)kSecClassGenericPassword, kSecClass, @"MyService", kSecAttrService, @"MyPassword", kSecAttrAccount 

const NSString* MyPassword = @"blabla"; 

- (void)testExample 
{ 
    // remove previous keychain item 
    OSStatus status = SecItemDelete((CFTypeRef)[NSDictionary dictionaryWithObjectsAndKeys:KEYCHAIN_ITEM_ATTRIBUTES, nil]); 
    NSLog(@"SecItemDelete status:%ld",status); 
    NSParameterAssert(status == errSecSuccess || status == errSecItemNotFound); 

    // add keychain item with new value 
    NSData *data = [MyPassword dataUsingEncoding:NSUTF8StringEncoding]; 
    status = SecItemAdd((CFTypeRef)[NSDictionary dictionaryWithObjectsAndKeys:KEYCHAIN_ITEM_ATTRIBUTES, data, kSecValueData, nil], NULL); 
    NSLog(@"SecItemAdd status:%ld",status); 
    NSParameterAssert(status == errSecSuccess); 

    // get password 
    status = SecItemCopyMatching((CFTypeRef)[NSDictionary dictionaryWithObjectsAndKeys:KEYCHAIN_ITEM_ATTRIBUTES, 
              kSecMatchLimitOne, kSecMatchLimit, kCFBooleanTrue, kSecReturnData, nil], (CFTypeRef *)&data); 
    NSLog(@"SecItemCopyMatching status:%ld",status); 
    NSParameterAssert(status == errSecSuccess); 

    if (status == errSecItemNotFound) 
     NSLog(@"SecItemCopyMatching status:%ld", status); 
    else 
     NSLog(@"SecItemCopyMatching result:%@",[[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]); 
} 

के बारे में securityd डेमॉन का शुभारंभ किया जा रहा नहीं

- 0 com.apple.iPhoneSimulator:com.apple.securityd 

मैंने इस सुरक्षा डीमॉन को रोकने और मैन्युअल रूप से लॉन्च करने का भी प्रयास किया ... मैंने जीटीएम की तरफ देखा RunIPhoneUnitTest.sh एक सरल रेखा मैं इस्तेमाल कर सकते हैं के लिए स्क्रिप्ट, लेकिन जब मैं कोशिश इस

launchctl submit -l ios6securityd -- /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/usr/libexec/securityd 

मुझे उस डेमॉन पर एक -5 स्थिति कोड देता है।

+0

मैंने खुद को यह समस्या देखी है। क्षमा करें अभी तक कोई विचार नहीं है लेकिन मैं इसे देख रहा हूँ। औसत समय के आसपास के काम के लिए धन्यवाद। –

+0

क्या आपने इसके लिए रडार दायर किया है? मैं तैयार हो रहा हूँ – KevinH

+0

@ केविन एच मैंने एक ऐप्पल बग रिपोर्ट पोस्ट की लेकिन ओपनराडर – trickster

उत्तर

1

मैं इस पर आया क्योंकि मुझे एक्सकोड 4.5.1 यूआई से अपने यूनिट परीक्षण चलाने की कोशिश करते समय कीचेन पहुंच प्राप्त करने में परेशानी हो रही थी।सौभाग्य से, ब्रेकेज कुछ ऐसा है जो मैं सीआई से परिचित हूं, पिछले एक्सकोड संस्करणों के साथ भी बनाता है, जो कि सिम्युलेटर के securityd ठीक से लॉन्च नहीं किया गया है।

पहले securityd शुरू करने का प्रयास करें, और देखते हैं कि अगर मदद करता है:

#!/bin/bash 

simulator_root=`xcodebuild -version -sdk iphonesimulator Path` 
"${simulator_root}/usr/libexec/securityd" 

वह मेरे लिए काम किया।

+0

नहीं मैंने "लॉन्चक्टल सूची | grep securityd" का उपयोग करके चेक किया है कि जब भी मैं सिम्युलेटर (किसी भी संस्करण) को लॉन्च करता हूं तो संबंधित सुरक्षा डीमन सही तरीके से सेटअप होता है। क्या आप एक उचित स्क्रिप्ट पेस्ट कर सकते हैं जिसका मैं उपयोग कर सकता हूं? मैंने अपनी प्रश्न को स्क्रिप्ट के साथ अपडेट किया जिसकी मैंने कोशिश की थी। – trickster

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