Keychain Services için yapılan çağrılar, komut satırı araçlarını kullanarak bir hedef yürütüldüğünde errSecNotAvailable ile başarısız olur ve iphone simulator Donanım sürüm 6.0 (10A403) olarak ayarlanır. Simülatör sürümünü diğer bir önceki sürüme (4.3, 5.0, 5.1) değiştirirsem ve aynı komut satırı komut dosyasını kullanarak yeniden çalıştırırsam, çağrı başarılı olur.Anahtarlık Hizmetleri API'sı, iphonesimulator 6.0'da errSecNotAvailable ile başarısız olur
En son XCode 4.5 çalıştırıyorum ve komut satırı araçları XCode içinden indirildi.
Bu hata yeniden oluşturmak için aşağıdakileri yapmanız yeterlidir:- Kurulum bir OCUnit hedefiyle bir ios kütüphane projesi
- Seti Baz SDK 6.0
- Seti iOS Dağıtım Target'e 4.3
- Kopyala ve kodun sonuna kodun sonunu test projesine yapıştırın (yalnızca bir parola depolamaya ve geri almaya çalışır)
- Security.framework öğesini OCUnit hedefine ekleyin
XCode'da OCUnit hedefini yürütün ve iphone simülatöründe hangi Donanım Sürümü ayarlandıysa testin geçtiğini görün (yalnızca yürütmeler arasında değiştirin). Donanım Sürüm 6.0 olarak ayarlanmış iphone simülatörü ile
xcodebuild -target TARGET_NAME_HERE -sdk iphonesimulator -configuration Release TEST_AFTER_BUILD=YES
ve test başarısız olur:
kullanarak komut satırından OCUnit hedefini yürütün. Iphone simülatörünün Donanım Sürümünü 4.3, 5.0 veya 5.1'e değiştirirseniz ve komut satırı komut dosyasını tekrar çalıştırırsanız, test 'u başarılı olur.Bu bir komut satırı aracı sorunu mu? bir iphone simülatörü problemi? Komut satırı sorunundan çalışan bir OCUnit hedefi?
Yalnızca kuyruklu yıldızlar hizalandığında geçen birim testlere sahip olmak kimin?
Herhangi bir fikrin var mı? İşte
kod şudur: Ben simülatör başladıktan sonralaunchctl list | grep securityd
kullanarak, başlatılan ediliyor IS işaretleyin ve alma olabilir securityd cini başlatılmaktadır değil İlişkin
#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]);
}
- 0 com.apple.iPhoneSimulator:com.apple.securityd
Ayrıca bu güvenlik kamerasını durdurmayı denedim ve manuel olarak başlattım ... GTM'ye baktım RunIPhoneUnitTest.sh Kullanabileceğim basit hattı için komut dosyası, ama çalıştığınızda bu
launchctl submit -l ios6securityd -- /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/usr/libexec/securityd
bana o cini üzerinde -5 durum kodu verir.
Bu problemi kendim gördüm. Üzgünüm henüz bir fikrim yok ama bakıyorum. Bu arada iş için teşekkürler. –
Bunun için bir radar mı yazdınız? Hazırlanıyorum. – KevinH
@KevinH Bir Apple Bug Raporu yayınladım ama OpenRadar'ı kullanmamıştım – trickster