Error[8]: Undefined offset: 2, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我们在swift中创建了一个使用钥匙串的应用程序.该应用程序在设备或模拟器上运行时工作正常,但在通过Testflight配置时无法访问钥匙串,除非配置到以前从未通过Xcode 6.1安装的应用程序的新设备. 以下是钥匙串代码的摘录: import UIKit import Security let serviceIdentifier = "com.ourdomain" 我们在swift中创建了一个使用钥匙串的应用程序.该应用程序在设备或模拟器上运行时工作正常,但在通过Testflight配置时无法访问钥匙串,除非配置到以前从未通过Xcode 6.1安装的应用程序的新设备.

以下是钥匙串代码的摘录:

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 Nsstringclass 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的钥匙串,但是我无法理解如何解决这个问题,以便在移除应用程序时移除钥匙串或者使用配置文件来使用现有的钥匙串(标识符不正确)

任何帮助将不胜感激.提前致谢

解决方法 使用withUnsafeMutablePointer函数和UnsafeMutablePointer结构来检索数据,如下所示:

var result: AnyObject?var status = withUnsafeMutablePointer(&result) { SecItemcopyMatching(keychainquery,UnsafeMutablePointer([+++])) }if status == errSecSuccess {    if let data = result as NSData? {        if let string = Nsstring(data: data,enCoding: NSUTF8StringEnCoding) {            // ...        }    }}

它与发布(最快优化)构建一起工作正常.

总结

以上是内存溢出为你收集整理的ios – Swift钥匙串和配置文件全部内容,希望文章能够帮你解决ios – Swift钥匙串和配置文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
ios – Swift钥匙串和配置文件_app_内存溢出

ios – Swift钥匙串和配置文件

ios – Swift钥匙串和配置文件,第1张

概述我们在swift中创建了一个使用钥匙串的应用程序.该应用程序在设备或模拟器上运行时工作正常,但在通过Testflight配置时无法访问钥匙串,除非配置到以前从未通过Xcode 6.1安装的应用程序的新设备. 以下是钥匙串代码的摘录: import UIKit import Security let serviceIdentifier = "com.ourdomain" 我们在swift中创建了一个使用钥匙串的应用程序.该应用程序在设备或模拟器上运行时工作正常,但在通过Testflight配置时无法访问钥匙串,除非配置到以前从未通过Xcode 6.1安装的应用程序的新设备.

以下是钥匙串代码的摘录:

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 Nsstringclass 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的钥匙串,但是我无法理解如何解决这个问题,以便在移除应用程序时移除钥匙串或者使用配置文件来使用现有的钥匙串(标识符不正确)

任何帮助将不胜感激.提前致谢

解决方法 使用withUnsafeMutablePointer函数和UnsafeMutablePointer结构来检索数据,如下所示:

var result: AnyObject?var status = withUnsafeMutablePointer(&result) { SecItemcopyMatching(keychainquery,UnsafeMutablePointer()) }if status == errSecSuccess {    if let data = result as NSData? {        if let string = Nsstring(data: data,enCoding: NSUTF8StringEnCoding) {            // ...        }    }}

它与发布(最快优化)构建一起工作正常.

总结

以上是内存溢出为你收集整理的ios – Swift钥匙串和配置文件全部内容,希望文章能够帮你解决ios – Swift钥匙串和配置文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1069231.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存