SessionManager

open class SessionManager

Responsible for creating and managing Request objects, as well as their underlying NSURLSession.

Helper Types

Properties

  • A default instance of SessionManager, used by top-level Alamofire request methods, and suitable for use directly for any ad hoc requests.

    Declaration

    Swift

    public static let `default`: SessionManager
  • Creates default values for the “Accept-Encoding”, “Accept-Language” and “User-Agent” headers.

    Declaration

    Swift

    public static let defaultHTTPHeaders: HTTPHeaders
  • Default memory threshold used when encoding MultipartFormData in bytes.

    Declaration

    Swift

    public static let multipartFormDataEncodingMemoryThreshold: UInt64
  • The underlying session.

    Declaration

    Swift

    public let session: URLSession
  • The session delegate handling all the task and session delegate callbacks.

    Declaration

    Swift

    public let delegate: SessionDelegate
  • Whether to start requests immediately after being constructed. true by default.

    Declaration

    Swift

    open var startRequestsImmediately: Bool
  • The request adapter called each time a new request is created.

    Declaration

    Swift

    open var adapter: RequestAdapter?
  • The request retrier called each time a request encounters an error to determine whether to retry the request.

    Declaration

    Swift

    open var retrier: RequestRetrier? { get set }
  • The background completion handler closure provided by the UIApplicationDelegate application:handleEventsForBackgroundURLSession:completionHandler: method. By setting the background completion handler, the SessionDelegate sessionDidFinishEventsForBackgroundURLSession closure implementation will automatically call the handler.

    If you need to handle your own events before the handler is called, then you need to override the SessionDelegate sessionDidFinishEventsForBackgroundURLSession and manually call the handler when finished.

    nil by default.

    Declaration

    Swift

    open var backgroundCompletionHandler: (() -> Void)?

Lifecycle

  • Creates an instance with the specified configuration, delegate and serverTrustPolicyManager.

    Declaration

    Swift

    public init(
    	configuration: URLSessionConfiguration = URLSessionConfiguration.default,
    	delegate: SessionDelegate = SessionDelegate(),
    	serverTrustPolicyManager: ServerTrustPolicyManager? = nil)

    Parameters

    configuration

    The configuration used to construct the managed session. URLSessionConfiguration.default by default.

    delegate

    The delegate used when initializing the session. SessionDelegate() by default.

    serverTrustPolicyManager

    The server trust policy manager to use for evaluating all server trust challenges. nil by default.

    Return Value

    The new SessionManager instance.

  • Creates an instance with the specified session, delegate and serverTrustPolicyManager.

    Declaration

    Swift

    public init?(
    	session: URLSession,
    	delegate: SessionDelegate,
    	serverTrustPolicyManager: ServerTrustPolicyManager? = nil)

    Parameters

    session

    The URL session.

    delegate

    The delegate of the URL session. Must equal the URL session’s delegate.

    serverTrustPolicyManager

    The server trust policy manager to use for evaluating all server trust challenges. nil by default.

    Return Value

    The new SessionManager instance if the URL session’s delegate matches; nil otherwise.

Data Request

URL Request

  • Creates a DownloadRequest to retrieve the contents the specified url, method, parameters, encoding, headers and save them to the destination.

    If destination is not specified, the contents will remain in the temporary location determined by the underlying URL session.

    If startRequestsImmediately is true, the request will have resume() called before being returned.

    Declaration

    Swift

    @discardableResult
    open func download(
    	_ url: URLConvertible,
    	method: HTTPMethod = .get,
    	parameters: Parameters? = nil,
    	encoding: ParameterEncoding = URLEncoding.default,
    	headers: HTTPHeaders? = nil,
    	to destination: DownloadRequest.DownloadFileDestination? = nil)
    -> DownloadRequest

    Parameters

    url

    The URL.

    method

    The HTTP method. .get by default.

    parameters

    The parameters. nil by default.

    encoding

    The parameter encoding. URLEncoding.default by default.

    headers

    The HTTP headers. nil by default.

    destination

    The closure used to determine the destination of the downloaded file. nil by default.

    Return Value

    The created DownloadRequest.

  • Creates a DownloadRequest to retrieve the contents of a URL based on the specified urlRequest and save them to the destination.

    If destination is not specified, the contents will remain in the temporary location determined by the underlying URL session.

    If startRequestsImmediately is true, the request will have resume() called before being returned.

    Declaration

    Swift

    @discardableResult
    open func download(
    	_ urlRequest: URLRequestConvertible,
    	to destination: DownloadRequest.DownloadFileDestination? = nil)
    -> DownloadRequest

    Parameters

    urlRequest

    The URL request

    destination

    The closure used to determine the destination of the downloaded file. nil by default.

    Return Value

    The created DownloadRequest.

Resume Data

  • Creates a DownloadRequest from the resumeData produced from a previous request cancellation to retrieve the contents of the original request and save them to the destination.

    If destination is not specified, the contents will remain in the temporary location determined by the underlying URL session.

    If startRequestsImmediately is true, the request will have resume() called before being returned.

    On the latest release of all the Apple platforms (iOS 10, macOS 10.12, tvOS 10, watchOS 3), resumeData is broken on background URL session configurations. There’s an underlying bug in the resumeData generation logic where the data is written incorrectly and will always fail to resume the download. For more information about the bug and possible workarounds, please refer to the following Stack Overflow post:

    Declaration

    Swift

    @discardableResult
    open func download(
    	resumingWith resumeData: Data,
    	to destination: DownloadRequest.DownloadFileDestination? = nil)
    -> DownloadRequest

    Parameters

    resumeData

    The resume data. This is an opaque data blob produced by URLSessionDownloadTask when a task is cancelled. See URLSession -downloadTask(withResumeData:) for additional information.

    destination

    The closure used to determine the destination of the downloaded file. nil by default.

    Return Value

    The created DownloadRequest.

File

Data

InputStream

MultipartFormData

  • Encodes multipartFormData using encodingMemoryThreshold and calls encodingCompletion with new UploadRequest using the url, method and headers.

    It is important to understand the memory implications of uploading MultipartFormData. If the cummulative payload is small, encoding the data in-memory and directly uploading to a server is the by far the most efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be used for larger payloads such as video content.

    The encodingMemoryThreshold parameter allows Alamofire to automatically determine whether to encode in-memory or stream from disk. If the content length of the MultipartFormData is below the encodingMemoryThreshold, encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding technique was used.

    If startRequestsImmediately is true, the request will have resume() called before being returned.

    Declaration

    Swift

    open func upload(
    	multipartFormData: @escaping (MultipartFormData) -> Void,
    	usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold,
    	to url: URLConvertible,
    	method: HTTPMethod = .post,
    	headers: HTTPHeaders? = nil,
    	queue: DispatchQueue? = nil,
    	encodingCompletion: ((MultipartFormDataEncodingResult) -> Void)?)

    Parameters

    multipartFormData

    The closure used to append body parts to the MultipartFormData.

    encodingMemoryThreshold

    The encoding memory threshold in bytes. multipartFormDataEncodingMemoryThreshold by default.

    url

    The URL.

    method

    The HTTP method. .post by default.

    headers

    The HTTP headers. nil by default.

    encodingCompletion

    The closure called when the MultipartFormData encoding is complete.

  • Encodes multipartFormData using encodingMemoryThreshold and calls encodingCompletion with new UploadRequest using the urlRequest.

    It is important to understand the memory implications of uploading MultipartFormData. If the cummulative payload is small, encoding the data in-memory and directly uploading to a server is the by far the most efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be used for larger payloads such as video content.

    The encodingMemoryThreshold parameter allows Alamofire to automatically determine whether to encode in-memory or stream from disk. If the content length of the MultipartFormData is below the encodingMemoryThreshold, encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding technique was used.

    If startRequestsImmediately is true, the request will have resume() called before being returned.

    Declaration

    Swift

    open func upload(
    	multipartFormData: @escaping (MultipartFormData) -> Void,
    	usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold,
    	with urlRequest: URLRequestConvertible,
    	queue: DispatchQueue? = nil,
    	encodingCompletion: ((MultipartFormDataEncodingResult) -> Void)?)

    Parameters

    multipartFormData

    The closure used to append body parts to the MultipartFormData.

    encodingMemoryThreshold

    The encoding memory threshold in bytes. multipartFormDataEncodingMemoryThreshold by default.

    urlRequest

    The URL request.

    encodingCompletion

    The closure called when the MultipartFormData encoding is complete.

Hostname and Port

  • Creates a StreamRequest for bidirectional streaming using the hostname and port.

    If startRequestsImmediately is true, the request will have resume() called before being returned.

    Declaration

    Swift

    @available(iOS 9.0, macOS 10.11, tvOS 9.0, *)
    @discardableResult
    open func stream(withHostName hostName: String, port: Int) -> StreamRequest

    Parameters

    hostName

    The hostname of the server to connect to.

    port

    The port of the server to connect to.

    Return Value

    The created StreamRequest.

NetService

  • Creates a StreamRequest for bidirectional streaming using the netService.

    If startRequestsImmediately is true, the request will have resume() called before being returned.

    Declaration

    Swift

    @available(iOS 9.0, macOS 10.11, tvOS 9.0, *)
    @discardableResult
    open func stream(with netService: NetService) -> StreamRequest

    Parameters

    netService

    The net service used to identify the endpoint.

    Return Value

    The created StreamRequest.

  • A default with cache policy instance of SessionManager, used by top-level Alamofire request methods, and suitable for use directly for any ad hoc requests.

    Declaration

    Swift

    public static let defaultWithCachePolicy: SessionManager