标签: keychainitemwrapper

iPhone 内存压力导致 iOS 钥匙串数据丢失?

我正在通过 iPhone 5s 上的调试器运行 iOS 应用程序。我正在使用钥匙串来存储密码(我正在使用 Apple 的 KeychainItemWrapper 示例来存储和检索我的钥匙串项目)。大约 99.99% 的时间,钥匙串检索工作完美。但是,有两种情况我的应用程序无法获取密码。例如,有一次,我的手机遇到内存压力,我不得不重新启动手机并重新启动应用程序。应用程序重新启动后,我的应用程序无法再从钥匙串中检索密码。请问这个密码丢失是不是内存压力导致的?iOS 清除钥匙串数据的其他情况有哪些?有什么办法可以介绍这个吗??

iphone keychain ios keychainitemwrapper ios7

5
推荐指数
1
解决办法
1714
查看次数

什么是iOS应用的捆绑种子ID?

为了在应用程序之间共享密钥链信息,我们需要设置共享密钥链访问组.在共享正常工作之前,两个应用程序都需要基于相同的捆绑种子ID进行配置.我想知道什么是种子ID与app id相同或不同?

两个共享钥匙串信息我的两个应用程序应该在appstore上.因为我只是制作一个示例项目来检查钥匙串信息的共享.是否可以在不将其发布到Appstore的情况下执行此操作?

注意: - 我的软件包ID只是"com.comapny_name.myapp",在Itunes connect中我只能看到我的应用程序ID - (10位数字)和软件包ID,它与我上面提到的相同.

itunesconnect keychain app-store ios keychainitemwrapper

5
推荐指数
1
解决办法
5662
查看次数

创建addPersistentStoreWithType方法使用的选项Dictionary时,应用程序崩溃

encrypted-core-data用来加密所有持久化的数据,以前很简单CoreData.persistentStoreCoordinator创建代码如下.

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (_persistentStoreCoordinator != nil) {
    return _persistentStoreCoordinator;
}

NSURL *oldStoreURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"VistaJetApp.sqlite"];
NSURL *newStoreURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"VistaJet.sqlite"];
NSError *error = nil;

NSString *currentPassword = [[VJAesCryptoWrapper getInstance] getCurrentPassword];
NSDictionary *options = [self getEncryptedStoreOptionsWithPassword:currentPassword andDatabaseStore:newStoreURL];

_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

//if old store not exists , it means fresh installation
if([[NSFileManager defaultManager] fileExistsAtPath:oldStoreURL.path] == NO) {             
    if (![_persistentStoreCoordinator addPersistentStoreWithType:EncryptedStoreType configuration:nil URL:newStoreURL options:options error: &error]) {         
    }        
} …
Run Code Online (Sandbox Code Playgroud)

app-store core-data-migration nspersistentstore keychainitemwrapper encrypted-core-data-sql

5
推荐指数
1
解决办法
182
查看次数

在设备或 iOS 目标上运行时钥匙串单元测试失败

我有一个 iOS 项目。

我今天提取了一些身份验证代码并将其移至它自己的项目中。

该项目支持 macOS 和 iOS。

我创建了一个包含 iOS 项目和 Auth 项目的工作区,并且我已通过面板将 auth 添加.framework到我的 iOS 项目中Frameworks, Libraries, and Embedded Content

我可以构建和使用我的服务。我还设置了一个自定义方案CI_iOS,允许我为这些项目运行测试。

我现在已经在我的身份验证模块中添加了一些集成测试,这样我就可以KeychainTokenStore根据真正的钥匙串测试我的类。

这些在针对 macOS 测试我的模块时有效,但是尝试在 iOS 模拟器上运行它们时,它们都失败了。

我可以看到,当尝试与钥匙串交互时,会返回一个错误代码-34018,我相信这表明了这一点errSecMissingEntitlement

我读过很多帖子,似乎建议我需要启用钥匙串共享。

然而我似乎无法完成这项工作。

我的KeychainTokenStore样子是这样的


import Foundation


public protocol TokenStore {
  typealias DeleteCacheResult = Result<Void, Error>
  typealias DeleteCacheCompletion = (DeleteCacheResult) -> Void

  typealias InsertCacheResult = Result<Void, Error>
  typealias InsertCacheCompletion = (InsertCacheResult) -> Void

  typealias RetrieveCacheResult = Result<String?, Error>
  typealias …
Run Code Online (Sandbox Code Playgroud)

keychain ios keychainitemwrapper swift

5
推荐指数
1
解决办法
649
查看次数

钥匙串可以像NSUserDefaults一样用于类固醇来存储NSData吗?

可以钥匙扣使用像NSUserDefaults类固醇?我的意思是,例如,存储NSData在游戏中使用?

我的意图是存储一个NSData基本上是数组或字典表示的元素.

所以问题是:

假设我使用Apple的KeychainItemWrapper类创建了一个包装器.这是kSecValueData在引用NSData对象的钥匙链文档中提到的吗?

如果是这样我可以这样做,对吗?

NSData *myData = [NSKeyedArchiver archivedDataWithRootObject:myArrayOfDicts];
KeychainItemWrapper* keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"myID" accessGroup:nil];
[keychain setObject:myData forKey:kSecValueData];
Run Code Online (Sandbox Code Playgroud)

第二个问题:如果是这种情况,NSData可以存储在钥匙串项目上的大小是否有限制?

cocoa keychain ios keychainitemwrapper

4
推荐指数
1
解决办法
2175
查看次数

指定访问组时KeychainItemWrapper错误

很长一段时间以来,我一直使用ARC版的KeychainItemWrapper成功阅读和编写私钥匙项.

我现在正在努力将我的iOS应用程序转换为使用共享访问组,以便我的2个应用程序可以访问共享相同应用程序前缀的钥匙串项目.在功能部分,我添加了钥匙串组"MYAPPPREFIX.MYSHAREDACCESSNAME"

我正在使用这些行将我的变量写入钥匙串组:

keychainItemWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:key accessGroup:@"MYAPPPREFIX.MYSHAREDACCESSNAME"];
[keychainItemWrapper setObject:value forKey:(__bridge id)(kSecAttrAccount)]; // store the new value in the keychain
Run Code Online (Sandbox Code Playgroud)

如果将accessGroup指定为nil,则效果很好.但是,如果我指定访问组,我会在调试器日志中遇到以下错误:

断言失败 - [KeychainItemWrapper writeToKeychain],..../KeychainItemWrapper.m:329由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:'无法添加Keychain项.'

生成的OSStatus错误代码是-25243,我无法追踪到更多信息.

为了写入共享访问组,我可能还需要做些什么吗?

ios keychainitemwrapper

3
推荐指数
1
解决办法
1380
查看次数

无法添加钥匙串项目。使用 KeychainItemWrapper 更改标识符后出现错误 - 25299?

我想使用 KeychainItemWrapper 将 UUID 保存在钥匙串中,因此我在MyKeychainManager.m中添加以下方法:

#define keychain_idenentify @"com.myapp.bundle1"

+ (void)saveUUID:(NSString *)UUID{
  if([MyKeychainManager getUUID].length > 0) {
    return;
  }
  KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc]initWithIdentifier:keychain_idenentify accessGroup:nil];
  [keychain setObject:UUID forKey:(__bridge id)kSecAttrLabel];
}

+ (NSString *)getUUID {
  KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc]initWithIdentifier:keychain_idenentify accessGroup:nil];

  NSString *uuidString = [keychain objectForKey:(__bridge id)kSecAttrLabel];
  return uuidString;
}
Run Code Online (Sandbox Code Playgroud)

但是当我将keychain_identify更改为com.otherApp.bundle后,它崩溃了

结果 = SecItemAdd((CFDictionaryRef)[selfdictionaryToSecItemFormat:keychainItemData], NULL); NSAssert( result == noErr, @"无法添加钥匙串项目。" );

错误是错误 - 25299

这是为什么以及如何解决这个问题?我应该选择哪个,例如kSecAttrLabel?我将其更改为kSecAttrService它很有趣,但我不知道是否还有其他潜在的错误。

任何帮助将不胜感激。

keychain ios keychainitemwrapper

3
推荐指数
1
解决办法
4602
查看次数

KeychainWrapperItem在iOS 7.1中停止工作

我最近安装了iOS 7.1模拟器和新的Xcode 5.1.我的应用程序在iOS 7中运行良好.我正在使用Apple的KeychainItemWrapper类.更新后,它崩溃了以下消息:

*** Assertion failure in -[KeychainItemWrapper writeToKeychain]
Run Code Online (Sandbox Code Playgroud)

特别是在第299行:

NSAssert( result == noErr, @"Couldn't update the Keychain Item." );
Run Code Online (Sandbox Code Playgroud)

听到错误-25300(errSecItemNotFound)

我在我的权利文件中指定了Keychain Access Group.此错误仅发生在iOS 7.1模拟器中,而不是在真正的iPhone或7.0模拟器上.

有谁知道7.1中Keychain的变化?

keychain ios keychainitemwrapper

2
推荐指数
1
解决办法
2489
查看次数

如何在KeychainItemWrapper中保存bool值

我想在KeychainItemWrapper中存储bool值,如何存储?

我试过这段代码,但它给了我错误.

 [keychain setObject:YES forKey:(__bridge BOOL)kSecAttrIsInvisible];
Run Code Online (Sandbox Code Playgroud)

boolean ios keychainitemwrapper

2
推荐指数
1
解决办法
1067
查看次数

KeychainItemWrapper类在ios 9中获取错误

我想在我的应用程序中保存密码和ID.我下载了

[KeychainItemWrapper][1]
Run Code Online (Sandbox Code Playgroud)

https://developer.apple.com/library/ios/samplecode/GenericKeychain/Introduction/Intro.html

并在我的项目中添加了KeychainItemWrapper.h/m.当想要使用类来解决这个问题时. 在此输入图像描述

iphone objective-c ios keychainitemwrapper

1
推荐指数
1
解决办法
3667
查看次数

iOS从钥匙串登录框中恢复密码

我将用户名/密码保存到钥匙串,如下所示:

KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];

[keychainItem setObject:usernameField.text forKey:(__bridge id)(kSecAttrAccount)];
[keychainItem setObject:passwordField.text forKey:(__bridge id)(kSecValueData)];
Run Code Online (Sandbox Code Playgroud)

然后我检索用户名密码:

NSString *username = [keychainItem objectForKey:(__bridge id)(kSecAttrAccount)];
NSString *password = [keychainItem objectForKey:(__bridge id)(kSecValueData)];
Run Code Online (Sandbox Code Playgroud)

然后我想自动将它们放在用户名和密码登录框中,如果用户选中了那么记住我:

if ([_rememberMeSwitch isOn]) {
    usernameField.text = username;
}

if ([_rememberMeSwitch isOn]) {
    passwordField.text = password;
}
Run Code Online (Sandbox Code Playgroud)

这适用于用户名,但密码显然是作为nscfdata保存在钥匙串中,因为当我尝试在passwordField.text中插入密码时,我得到:

[__NSCFData _encodingCantBeStoredInEightBitCFString]: unrecognized selector sent to instance
Run Code Online (Sandbox Code Playgroud)

我试图做的只是考虑不好的做法还是有一个简单的方法呢?

iphone objective-c keychain ios keychainitemwrapper

0
推荐指数
1
解决办法
744
查看次数