有没有办法在iOS中使用Swift保存用户名和密码,就像Android中的偏好设置一样?

10

我想在我的应用程序中保存数据,我使用DataCore进行保存,但它会将数据保存在一个实体中,并且该实体的一个属性可以保存许多不同的值。我需要将数据保存为Android偏好设置中每个属性仅保存一个值。我该怎么做?请帮帮我。谢谢。

这是我的代码:
@IBAction func SaveAll(sender: AnyObject) {
    let username:String = user_name.text!
    let password:String = pass_word.text!

    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    let context:NSManagedObjectContext = appDel.managedObjectContext

    let newStu = NSEntityDescription.insertNewObjectForEntityForName("Student", inManagedObjectContext: context) as NSManagedObject
    newStu.setValue(username, forKey: "userName")
    newStu.setValue(password, forKey: "passWord")

    do {
        try context.save()
    } catch {}

}

4
如果您要存储密码等敏感信息,我强烈建议您了解一下iOS钥匙串API。 - 72A12F4E
谢谢您的回答。我的意思是,当用户输入用户名或密码后,这个用户名将仅保存为用户设备内存中的一个值。当用户再次打开应用程序时,该已保存的用户名值可以再次用于执行某些操作。密钥链能够实现这一点吗? - Anh Trinh
1
这个链接概述了钥匙串的工作原理以及如何使用它。https://developer.apple.com/library/mac/documentation/Security/Conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html 它是一个笨拙的C API,但它确实可以工作。或者,这里有一个包装器,围绕这些API提供了更多可用性,我在大多数项目中都使用它。https://github.com/kishikawakatsumi/UICKeyChainStore - 72A12F4E
不要以明文形式存储密码。 - Raptor
3个回答

6

尝试使用SwiftKeyChainWrapper - 链接

这是一个有用的库,可用于在设备上保存敏感数据。

用法

将字符串值添加到钥匙串:

let saveSuccessful: Bool = KeychainWrapper.standard.set("Some String", forKey: "myKey")

从钥匙链中检索字符串值:

let retrievedString: String? = KeychainWrapper.standard.string(forKey: "myKey")

从钥匙串中删除字符串值:

let removeSuccessful: Bool = KeychainWrapper.standard.removeObject(forKey: "myKey")

3
将数据存储在NSUserDefaults中是一种非常传统的将数据存储到内存中并且也是获取和设置数据的非常顺畅的方式。但是,当您考虑数据安全性时,NSUserDefaults就无法提供帮助了。我的意思是NSUserDefaults不安全且未加密,因此容易被破解。 对于通用数据存储,NSUserDefaults当然有所帮助,但是如果您想存储用户名和密码等敏感数据,则必须考虑数据安全性。
我总是更喜欢使用Keychain Service API来存储这些数据。Keychain为保存敏感数据提供了安全的替代方案。苹果提供了Keychain Services API来处理此问题,并帮助开发人员构建可以安全处理密码和其他敏感信息的应用程序。
您可以在此处找到苹果文档here
许多包装器存在于Cocoapods或Github上的扩展库以及其他依赖项管理网站上。下面是我找到的一些参考资料。
1.) SwiftKeychainWrapper 2.) Locksmith 苹果自己的Keychain包装器称为GenericKeychain,在Objective-CSwift的示例代码中都可用。
我认为这个答案可能与这个问题不完全相关,但这可能有助于社区中的一些人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接