class RestService { private init(){} static let shared = RestService() var loginData:NSDictionary? class func getCertificates() -> [SecCertificate]{ let url = Bundle.main.url(forResource: "certf", withExtension: "cer")! let localCertificate = try! Data(contentsOf: url) as CFData guard let certificate = SecCertificateCreateWithData(nil, localCertificate) else {return[]} return [certificate] } let almgr:Alamofire.SessionManager = { let certificates = getCertificates() let trustPolicy = ServerTrustPolicy.pinCertificates(certificates: certificates, validateCertificateChain: true, validateHost: true) let serverTrustPolicies = ["liper":trustPolicy] let serverTrustPolicyManager = ServerTrustPolicyManager(policies: serverTrustPolicies) let configuration = URLSessionConfiguration.default configuration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders let man = Alamofire.SessionManager(configuration: URLSessionConfiguration.default, serverTrustPolicyManager: serverTrustPolicyManager) return man }() func loginRest(login:String, password:String, deviceId:String, completion:@escaping(_ response:AnyObject?, _ _message: String?, _ _success:Bool)->()){ let params = ["login":login, "password":password, "deviceId":deviceId] let urlStr = restServices.REST_MAIN_URL + restServices.REST_LOGIN postRestService(urlString: urlStr, params: params as [String:AnyObject]) { (response, message, status) in print(response ?? "Error") let result = RestService() if let data = response as? NSDictionary { print(data) result.loginData = data completion(result, "Success", true) } else { completion("" as AnyObject?, "Failed", false) } } } func postRestService(urlString:String, params: [String:AnyObject], completion: @escaping (_ response:AnyObject?, _ message:String?, _ success:Bool)-> Void){ alamofireFunction(urlString: urlString, method: .post, parameters: params) { (response, message, success) in if response != nil { completion(response as AnyObject?, "", true) } else { completion(nil, "", false) } } } func alamofireFunction(urlString:String, method:Alamofire.HTTPMethod, parameters:[String:AnyObject], completion: @escaping (_ response:AnyObject?, _ message:String?, _ success:Bool)-> Void){ if method == Alamofire.HTTPMethod.post{ almgr.request(urlString, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: nil).responseJSON {(response:DataResponse) in if response.result.isSuccess{ completion(response.result.value as AnyObject?, "", true) } else { completion(nil, "", false) } } } else { almgr.request(urlString).responseJSON { (response) in if response.result.isSuccess { completion(response.result.value as AnyObject?, "", true) } else { completion(nil, "", false) } } } } func loginWithRest(){ let passHashed = "432asadadadas352addasadad" RestService.shared.loginRest(login: "patient997@liker.com, password: passHashed, deviceId: "123156") { (result, message, status) in if status { let loginDetails = result as? RestService self.loginDictionary = loginDetails?.loginData if self.loginDictionary?["status"] as? String == "error"{ print("RESTSERVICES, Login Error, (String(describing: self.loginDictionary?["message"] as? String))") } else if self.loginDictionary?["status"] as? String == "ok" { print("RESTSERVICES, LOGIN SUCCESS") } else { print("RESTSERVICES (String(describing: self.loginDictionary?["message"] as?String))") } } else { print("RESTSERICES, status is false") } } 2018-01-17 15:43:16.129249+0100 ios-moe[5716:2789249] Task <67AFC6DA-9EFB-47D2-A5B0-FDAA3CC5285A>.<4> HTTP load failed (error code: -999 [1:89]) 2018-01-17 15:43:16.129275+0100 ios-moe[5716:2789364] Task <67AFC6DA-9EFB-47D2-A5B0-FDAA3CC5285A>.<4> finished with error - code: -999 Error RESTSERICES, status is false