• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 无法识别 iOS OSStatus 代码

[复制链接]
菜鸟教程小白 发表于 2022-12-12 17:31:34 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

- (NSMutableDictionary *)newSearchDictionaryNSString *)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 *)searchKeychainCopyMatchingNSString *)identifier {
    NSMutableDictionary *searchDictionary = [self newSearchDictionary:identifier];

    [searchDictionary setObject__bridge id)kSecMatchLimitOne forKey__bridge id)kSecMatchLimit];
    [searchDictionary setObjectid)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 次成功的值请求之后,我得到了一个错误。

操作系统状态码 -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 点。成功加载 bundle 后,出现权利错误。

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)。可能这是某种安全逻辑?有什么线索吗?



Best Answer-推荐答案


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

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

codesign -d --entitlements - MyApp.app/

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

cat MyApp.app/embedded.mobileprovision

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap