Posts

Post not yet marked as solved
2 Replies
1k Views
After i want to notarize app i get this error. My admin have had agree with agreements and still does not work. 14 days ago notarize was working. But now is not working. Is there other problem with it or just agree the agreements? Thanks for response team Samohyb
Posted
by PetrZacek.
Last updated
.
Post not yet marked as solved
1 Replies
760 Views
I am try to connect to ikev2 protocol with password authentication. I want to get password from keychain instead of pop up window with access the password for VPN. But i couldn't achieve that.my configuration VPN profile looks like :let passwordReference = Data(KeychainService.loadPassword(service: "Service", account: "myUsername")!.utf8) let config = NEVPNProtocolIKEv2() config.authenticationMethod = NEVPNIKEAuthenticationMethod.none config.serverAddress = "serverAddress" config.username = "myUsername" config.passwordReference = passwordReference config.localIdentifier = "localIdentifier" config.remoteIdentifier = "remote.identifier" config.useExtendedAuthentication = true config.deadPeerDetectionRate = .high config.disconnectOnSleep = trueand keychain looks like:import Cocoa import Security let kSecClassValue = NSString(format: kSecClass) let kSecAttrAccountValue = NSString(format: kSecAttrAccount) let kSecValueDataValue = NSString(format: kSecValueData) let kSecClassGenericPasswordValue = NSString(format: kSecClassGenericPassword) let kSecAttrServiceValue = NSString(format: kSecAttrService) let kSecMatchLimitValue = NSString(format: kSecMatchLimit) let kSecReturnDataValue = NSString(format: kSecReturnData) let kSecMatchLimitOneValue = NSString(format: kSecMatchLimitOne) public class KeychainService: NSObject { class func updatePassword(service: String, account:String, data: String) { if let dataFromString: Data = data.data(using: String.Encoding.utf8, allowLossyConversion: false) { // Instantiate a new default keychain query let keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPasswordValue, service, account], forKeys: [kSecClassValue, kSecAttrServiceValue, kSecAttrAccountValue]) let status = SecItemUpdate(keychainQuery as CFDictionary, [kSecValueDataValue:dataFromString] as CFDictionary) if (status != errSecSuccess) { if let err = SecCopyErrorMessageString(status, nil) { print("Read failed: \(err)") } } } } class func removePassword(service: String, account:String) { // Instantiate a new default keychain query let keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPasswordValue, service, account, kCFBooleanTrue], forKeys: [kSecClassValue, kSecAttrServiceValue, kSecAttrAccountValue, kSecReturnDataValue]) // Delete any existing items let status = SecItemDelete(keychainQuery as CFDictionary) if (status != errSecSuccess) { if let err = SecCopyErrorMessageString(status, nil) { print("Remove failed: \(err)") } } } class func savePassword(service: String, account:String, data: String) { if let dataFromString = data.data(using: String.Encoding.utf8, allowLossyConversion: false) { // Instantiate a new default keychain query let keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPasswordValue, service, account, dataFromString], forKeys: [kSecClassValue, kSecAttrServiceValue, kSecAttrAccountValue, kSecValueDataValue]) // Add the new keychain item let status = SecItemAdd(keychainQuery as CFDictionary, nil) if (status != errSecSuccess) { // Always check the status if let err = SecCopyErrorMessageString(status, nil) { print("Write failed: \(err)") } } } } class func loadPassword(service: String, account:String) -> String? { // Instantiate a new default keychain query // Tell the query to return a result // Limit our results to one item let keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPasswordValue, service, account, kCFBooleanTrue, kSecMatchLimitOneValue], forKeys: [kSecClassValue, kSecAttrServiceValue, kSecAttrAccountValue, kSecReturnDataValue, kSecMatchLimitValue]) var dataTypeRef :AnyObject? // Search for the keychain items let status: OSStatus = SecItemCopyMatching(keychainQuery, &dataTypeRef) var contentsOfKeychain: String? if status == errSecSuccess { if let retrievedData = dataTypeRef as? Data { contentsOfKeychain = String(data: retrievedData, encoding: String.Encoding.utf8) } } else { print("Nothing was retrieved from the keychain. Status code \(status)") } return contentsOfKeychain } }After i start app and try to connect still showing window wiht authentication password instead of taking from keychain.
Posted
by PetrZacek.
Last updated
.