iOS Developer Library


Foundation Framework Reference NSURLSessionDownloadTask Class Reference

Deployment Target:

On This Page


An NSURLSessionDownloadTask is a concrete subclass of NSURLSessionTask. Most of the methods associated with this class are documented in NSURLSessionTask Class Reference.

Download tasks directly write the server’s response data to a temporary file, providing your app with progress updates as data arrives from the server. When you use download tasks in background sessions, these downloads continue even when your app is suspended or is otherwise not running.

You can pause (cancel) download tasks and resume them later (assuming the server supports doing so). You can also resume downloads that failed because of network connectivity problems.

When you use download tasks:

  • Cancels a download and calls a callback with resume data for later use.



    func cancelByProducingResumeData(_ completionHandler: (NSData?) -> Void)


    - (void)cancelByProducingResumeData:(void (^)(NSData *resumeData))completionHandler



    A completion handler that is called when the download has been successfully canceled.

    If the download is resumable, the completion handler is provided with a resumeData object. Your app can later pass this object to a session’s downloadTaskWithResumeData: or downloadTaskWithResumeData:completionHandler: method to create a new task that resumes the download where it left off.

    This block is not guaranteed to execute in a particular thread context. As such, you may want specify an appropriate dispatch queue in which to perform any work.


    A download can be resumed only if the following conditions are met:

    • The resource has not changed since you first requested it

    • The task is an HTTP or HTTPS GET request

    • The server provides either the ETag or Last-Modified header (or both) in its response

    • The server supports byte-range requests

    • The temporary file hasn’t been deleted by the system in response to disk space pressure


    Available in iOS 7.0 and later.