Ahorro de cookies en Alamofire (Swift)

Quiero almacenar mis cookies para que cuando vuelva a abrir la aplicación pueda restaurar las almacenadas en la instancia anterior. Para inicializar alamofire utilizo:

let manager = Alamofire.Manager.shanetworkingInstance 

Y mi código para cargar cookies es:

 let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headerFields, forURL: URL) Alamofire.Manager.shanetworkingInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: URL, mainDocumentURL: nil) 

Pero cuando reinicio el teléfono olvida todas las cookies.

1.Agregar método para save cookies en NSUserDefaults

 func setCookie (cookie:NSHTTPCookie) { NSUserDefaults.standardUserDefaults().setObject(cookie.properties, forKey: "kCookie") NSUserDefaults.standardUserDefaults().synchronize() } 

2. Y método para recuperarlos después de reiniciar

 func getCookie () -> NSHTTPCookie { let cookie = NSHTTPCookie(properties: NSUserDefaults.standardUserDefaults().objectForKey("kCookie") as! [String : AnyObject]) return cookie! } 

3.Retrieve cookies de la request en Alamofire

 let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(response.response?.allHeaderFields as! [String: String], forURL: (response.response?.URL!)!) //Save method setCookie(cookies.first!) 

getCookie método getCookie después de reiniciar antes de cualquier request

 NSHTTPCookieStorage.shanetworkingHTTPCookieStorage().setCookie(getCookie()) 

NOTA IMPORTANTE: Probado en Swift 2.2

Para Swift 3 y Alamofire 4.4

1.Agregar método para save las cookies en UserDefaults

 func saveCookies(response: DataResponse<Any>) { let headerFields = response.response?.allHeaderFields as! [String: String] let url = response.response?.url let cookies = HTTPCookie.cookies(withResponseHeaderFields: headerFields, for: url!) var cookieArray = [[HTTPCookiePropertyKey: Any]]() for cookie in cookies { cookieArray.append(cookie.properties!) } UserDefaults.standard.set(cookieArray, forKey: "savedCookies") UserDefaults.standard.synchronize() } 

2. Usa saveCookies () en Alamofire

 Alamofire.request(urlString).responseJSON { response in saveCookies(response) } 

Método 3.Add para cargar cookies de UserDefaults

 func loadCookies() { guard let cookieArray = UserDefaults.standard.array(forKey: "savedCookies") as? [[HTTPCookiePropertyKey: Any]] else { return } for cookieProperties in cookieArray { if let cookie = HTTPCookie(properties: cookieProperties) { HTTPCookieStorage.shanetworking.setCookie(cookie) } } } 

4. Utilice loadCookies () antes de Alamofire.request()