大佬教程收集整理的这篇文章主要介绍了ios – Swift钥匙串和配置文件,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
以下是钥匙串代码的摘录:
import UIKit import Security let servicEIDentifier = "com.ourdomain" let kSecClassvalue = kSecClass as NSString let kSecAttrAccountValue = kSecAttrAccount as NSString let kSecValueDataValue = kSecValueData as NSString let kSecClassGenericpasswordValue = kSecClassGenericpassword as NSString let kSecAttrserviceValue = kSecAttrservice as NSString let kSecMatchLimitValue = kSecMatchLimit as NSString let kSecReturnDataValue = kSecReturnData as NSString let kSecMatchLimitOneValue = kSecMatchLimitOne as NSString class KeychainManager { class func setString(value: NSString,forKey: String) { self.save(servicEIDentifier,key: forKey,data: value) } class func StringForKey(key: String) -> NSString? { var token = self.load(servicEIDentifier,key: key) return token } class func removeItemForKey(key: String) { self.save(servicEIDentifier,key: key,data: "") } class func save(service: NSString,key: String,data: NSString) { var dataFromString: NSData = data.dataUsingEncoding(NSUTF8StringEncoding,allowLossyConversion: falsE)! // Instantiate a new default keychain query var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericpasswordValue,service,key,dataFromString],forKeys: [kSecClassvalue,kSecAttrserviceValue,kSecAttrAccountValue,kSecValueDataValue]) // delete any exisTing items SecItemdelete(keychainQuery as CFDictionaryRef) if Data == "" { return } // Add the new keychain item var status: OSStatus = SecItemAdd(keychainQuery as CFDictionaryRef,nil) } class func load(service: NSString,key: String) -> NSString? { // Instantiate a new default keychain query // Tell the query to return a result // Limit our results to one item var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericpasswordValue,kcfBooleanTrue,kSecMatchLimitOneValue],kSecReturnDataValue,kSecMatchLimitValue]) var dataTypeRef :Unmanaged<AnyObject>? // Search for the keychain items let status: OSStatus = SecItemCopymatching(keychainQuery,&dataTypeRef) let opaque = dataTypeRef?.toOpaque() var contentsOfKeychain: NSString? if let op = opaque? { let retrievedData = Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue() // Convert the data retrieved from the keychain into a String contentsOfKeychain = NSString(data: retrievedData,encoding: NSUTF8StringEncoding) } else { return nil } return contentsOfKeychain } }
在应用程序已经通过Xcode 6.1安装在设备上之后,我注意到“servicEIDentifier” – “com.ourdomain”不正确,并且与配置所需的应用程序包标识符不匹配.
然后我更改了“servicEIDentifier”值以匹配包标识符 – “com.ourdomain.appname”,但是当通过Testflight进行配置时,应用程序将无法在设备上运行.我很肯定这是因为设备已经安装了带有错误标识符的软件包ID的钥匙串,但是我无法理解如何解决这个问题,以便在移除应用程序时移除钥匙串或者使用配置文件来使用现有的钥匙串(标识符不正确)
任何帮助将不胜感激.提前致谢
var result: AnyObject? var status = withUnsafeMutablePointer(&result) { SecItemCopymatching(keychainQuery,UnsafeMutablePointer($0)) } if status == errSecsuccess { if let data = result as NSData? { if let String = NSString(data: data,encoding: NSUTF8StringEncoding) { // ... } } }
它与发布(最快优化)构建一起工作正常.
以上是大佬教程为你收集整理的ios – Swift钥匙串和配置文件全部内容,希望文章能够帮你解决ios – Swift钥匙串和配置文件所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。