Post marked as unsolved
115
Views
I am working on an iPhone application and would really like to determine if the device is roaming so that I can smartly avoid costing my users expensive connections, if they are out of their home network.
I tried to explore Core Telephony framework but did not find anything fruitful.
Is there any API by which I can determine if the user is roaming?
Any help is appreciated, Thanks in advance!!!
Post marked as solved
123
Views
I am using NEVPNManager & IKEV2 certificate as my authentication method for connecting to the VPN. I am able to connect to the VPN. Below mentioned is my sample block of code.
guard let path = Bundle.main.path(forResource: VPNConstants.certificateName, ofType: ".p12")	else {
				fatalError("Unable to find Certificate")
		}
		do {
				let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
				ikev2.identityData = data
		}
		catch {
				fatalError("Unable to find Certificate")
		}
		ikev2.identityDataPassword = VPNConstants.password
I tried to install the root certificate using SecCertificateCreateWithData and SecItemAdd methods part of the Security framework, I don't get any errors installing the certificate, but it doesn't appear in my iOS Profile & Device Management and TrustStore. Below is the block of code I am using for the same.
fileprivate func installCertificate() {
				guard let path = Bundle.main.path(forResource: "rootcertificate", ofType: "der") else {
						return
				}
		
				do {
						let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
						var status: OSStatus = noErr
						guard let rootCert = SecCertificateCreateWithData(nil, data as CFData) else {
								return
						}
						
						let addquery: [String: Any] = [kSecClass as String: kSecClassCertificate,
																					 kSecValueRef as String: rootCert,
																					 kSecAttrLabel as String: "My Certificate"]
						status = SecItemAdd(addquery as CFDictionary, nil)
						if status == noErr {
								print("Install root certificate success")
						}
						else if	status == errSecDuplicateItem {
								print("duplicate root certificate entry")
						}
						else {
								print("install root certificate failure")
						}
		
						let policy = SecPolicyCreateBasicX509()
						var optionalTrust: SecTrust?
						let certArray = [rootCert]
						status = SecTrustCreateWithCertificates(certArray as AnyObject,
																										policy,
																										&optionalTrust)
						guard status == errSecSuccess else {
								return
						}
						let trust = optionalTrust!
						var trustResult = SecTrustResultType.invalid
						status = SecTrustEvaluate(trust, &trustResult)
						print(trust)
						if status == noErr {
								print("Trust root certificate success")
						}
						else if	status == errSecDuplicateItem {
								print("Trust Fail")
						}
						else {
								print("Trust Fail")
						}
				}
		
				catch {
						print("Trust root certificate failure")
				}
		
		}
Currently, I am installing the root certificate via Safari or Mail. Also, my root certificate is self-signed. I am aware that Certificate trust will be enabled only if signed by a Trusted CA, but how can I add it to iOS Profile & Device Management at least.
Any help is appreciated, Thanks in advance!!!