Search code examples
swifthttpscertificatealamofire

Alamofire ssl wrong: sessionDeinitialized


I am trying to connect to my https server which use a custom certificate(export on the server .p12 certificate).

Here is my code:

let filePath = Bundle.main.path(forResource: "ch-server", ofType: "cer")
let data = try! Data(contentsOf: URL(fileURLWithPath: filePath!))
let certificate = SecCertificateCreateWithData(nil, data as CFData)!
let pinEvaluator = PinnedCertificatesTrustEvaluator(certificates: [certificate], acceptSelfSignedCertificates: true, performDefaultValidation: true, validateHost: true)
let trustManager = ServerTrustManager(evaluators: [CHConstants.ApiHost: pinEvaluator])
let session = Session(serverTrustManager: trustManager)
        
session.request(url, method: .post, parameters: ["phone", phone], encoder: JSONParameterEncoder.default, headers: headers).responseJSON { response in
    switch response.result {
    case .success:
        print("data:\(response.data)")
    case let .failure(error):
        print("error:\(error)")
    }
}
        
//        AF.request(url, method: .post, parameters: ["phone", phone], encoder: JSONParameterEncoder.default, headers: headers).responseJSON { response in
//            switch response.result {
//            case .success:
//                print(response.data)
//            case let .failure(error):
//                print(error)
//            }
//        }

but the response is error:

error:sessionDeinitialized

Solution

  • You need to keep your Session instance alive. Otherwise it will be immediately deinitialized and your requests cancelled, which is what that error indicates. Most commonly this is done through a singleton or other reference storage pattern.