gpt4 book ai didi

ios - 无法识别 iOS OSStatus 代码

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:37:42 27 4
gpt4 key购买 nike

我在 iOS 应用程序中有一个非常奇怪的行为。我从 iOS 6 切换到 iOS 7。在 iOS 6 中一切正常。

- (NSMutableDictionary *)newSearchDictionary:(NSString *)identifier {
NSMutableDictionary *searchDictionary = [[NSMutableDictionary alloc] init];

[searchDictionary setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];

NSData *encodedIdentifier = [identifier dataUsingEncoding:NSUTF8StringEncoding];
[searchDictionary setObject:encodedIdentifier forKey:(__bridge id)kSecAttrGeneric];
[searchDictionary setObject:encodedIdentifier forKey:(__bridge id)kSecAttrAccount];
[searchDictionary setObject:serviceName forKey:(__bridge id)kSecAttrService];

return searchDictionary;
}

- (NSData *)searchKeychainCopyMatching:(NSString *)identifier {
NSMutableDictionary *searchDictionary = [self newSearchDictionary:identifier];

[searchDictionary setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit];
[searchDictionary setObject:(id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];

CFDataRef dataRef;
OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)searchDictionary,
(CFTypeRef *)&dataRef);

if (status != errSecSuccess) {
#ifdef DEBUG
NSLog(@"%s - No OSStatus errSecSuccess. Caused by SecItemCopyMatching", __PRETTY_FUNCTION__);
#endif
return nil;
}
NSData *result = (__bridge_transfer NSData *)dataRef;
return result;
}

当应用程序启动时,- (NSData *)searchKeychainCopyMatching:(NSString *)identifier 函数从钥匙串(keychain)加载值。暂时一切正常。但是在大约 15 次成功的值(value)请求之后,我得到了一个错误。

OSStatus 代码 -34018

SecItemCopyMatching 函数返回该错误代码。文档说

@result 结果代码。请参阅“安全错误代码”(SecBase.h)。

但查看 SecBase.h 时,只指定了这些 OSStatus 代码。

enum
{
errSecSuccess = 0, /* No error. */
errSecUnimplemented = -4, /* Function or operation not implemented. */
errSecIO = -36, /*I/O error (bummers)*/
errSecOpWr = -49, /*file already open with with write permission*/
errSecParam = -50, /* One or more parameters passed to a function where not valid. */
errSecAllocate = -108, /* Failed to allocate memory. */
errSecUserCanceled = -128, /* User canceled the operation. */
errSecBadReq = -909, /* Bad parameter or invalid state for operation. */
errSecInternalComponent = -2070,
errSecNotAvailable = -25291, /* No keychain is available. You may need to restart your computer. */
errSecDuplicateItem = -25299, /* The specified item already exists in the keychain. */
errSecItemNotFound = -25300, /* The specified item could not be found in the keychain. */
errSecInteractionNotAllowed = -25308, /* User interaction is not allowed. */
errSecDecode = -26275, /* Unable to decode the provided data. */
errSecAuthFailed = -25293, /* The user name or passphrase you entered is not correct. */
};

值不会被覆盖,已经被检查过。

最后但同样重要的是搜索字典:

enter image description here

编辑 - 新信息

调试了一整天,发现了一些消息。我正在下载一个包含可执行包的 Zip 文件。这是一个内部应用程序,因此无需担心审核指南中的第 2.7 和 2.8 点。成功加载包后,出现权利错误。

NSBundle *bundle = nil;
NSError *error = nil;
bundle = [[NSBundle alloc] initWithPath:bundlePath];
if (!bundle) {
return nil;
}

// Here i can access the keychain as usually
[bundle loadAndReturnError:&error];
// Well here it suddenly doesn't work anymore
// error is also nil

好吧,里面的捆绑代码不使用钥匙串(keychain)。可能这是某种安全逻辑?有什么线索吗?

最佳答案

此错误表明您的应用程序的权利存在问题。找到this : 原因通常是应用授权中的应用标识符前缀与配置文件中的应用标识符前缀不匹配。

要验证,请使用协同设计工具查看您应用的权利:

codesign -d --entitlements - MyApp.app/

然后,将 App Identifier Prefix 与配置文件中的进行比较:

cat MyApp.app/embedded.mobileprovision

关于ios - 无法识别 iOS OSStatus 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20816995/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com