SORU
3 Aralık 2013, Salı


SecİtemAdd ve SecİtemCopyMatching döndürür hata kodu -34018 (errSecMissingEntitlement)

Cihaz üzerinde bir uygulama çalıştırdığımda bazen böyle büyük mükafat gelen Anahtarlık erişim -34018 ama hata nedeniyle başarısız olmaya çalışırdım. Bu belgelenmiş Anahtarlık hata kodları uymuyor ve sürekli olarak yeniden olamaz. (belki olur zaman 0, ve bana net değil neden olur). Bu sorun, hata ayıklama çok zor kılan belgelerine toplam eksikliğidir. Bu neden ve nasıl düzeltebilirim bir fikriniz var mı? Böyle büyük mükafat 5 kullanıyorum ve cihaz üzerinde iOS 7.0.4 koşuyorum.

Burada bu konuda açık bir konu var: https://github.com/soffes/sskeychain/issues/52

EDİT: talep başına Ekleme Anahtarlık erişim kodu

Anahtarlık ile arabirim için SSKeychain kütüphane kullanıyorum. İşte parçacık.

#define SERVICE @"default"

@implementation SSKeychain (EXT)

  (void)setValue:(NSString *)value forKey:(NSString *)key {
    NSError *error = nil;
    BOOL success = NO;
    if (value) {
        success = [self setPassword:value forService:SERVICE account:key error:&error];
    } else {
        success = [self deletePasswordForService:SERVICE account:key error:&error];
    }
    NSAssert(success, @"Unable to set keychain value %@ for key %@ error %@", value, key, error);
    if (!success) {
        LogError(@"Unable to set value to keychain %@", error);
    }
    LogTrace(@"Will set keychain account %@. is to nil? %d", key, value == nil);
    if (value == nil)
        LogWarn(@"Setting keychain %@ to nil!!!", key);
}

  (NSString *)valueForKey:(NSString *)key {
    NSError *error = nil;
    NSString *value = [self passwordForService:SERVICE account:key error:&error];
    if (error && error.code != errSecItemNotFound) {
        NSAssert(!error, @"Unable to retrieve keychain value for key %@ error %@", key, error);
        LogError(@"Unable to retrieve keychain value for key %@ error %@", key, error);
    }
    return value;
}

  (BOOL)removeAllValues {
    LogInfo(@"Completely Reseting Keychain");
    return [[self accountsForService:SERVICE] all:^BOOL(NSDictionary *accountInfo) {
        return [self deletePasswordForService:SERVICE account:accountInfo[@"acct"]];
    }];
}

@end

İyi o zaman büyük bir çoğunluğu. Bazen de yazmak ya da Anahtarlık okuma, kritik bir onaylama işlemi hatasına neden oluyor edemiyorum nerede onaylama işlemi hatası vuracağım.

CEVAP
10 Mart 2014, PAZARTESİ


Bu konuyu sorun ünite-test hedef olarak çıkar çözümü içeriyor gibi görünüyor.

https://devforums.apple.com/message/917498#917498

Temelde codesign .test hedef olarak çalışacak bir komut dosyası olarak aşağıdaki ekleyerek klasör xcttest.

codesign --verify --force --sign "$CODE_SIGN_IDENTITY" "$CODESIGNING_FOLDER_PATH"

Cihazda Anahtarlık test ederken -34018 hataları var ve ben bunu düzeltmek için başardı.

Eğer problem test hedef yoksa, bu muhtemelen bir çözüm değildir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Developers

    Android Deve

    9 Kasım 2007
  • RawBrahs

    RawBrahs

    28 Aralık 2010
  • TheXiaxue

    TheXiaxue

    3 AĞUSTOS 2009