使用NSURLSessionDownloadTask下载文件

时间:2017-11-02 08:57:46

标签: swift cocoa nsurlsessiondownloadtask

我需要使用桌面应用程序下载文件。首先,我已经创建了一个用于下载视频文件的简单iOS项目,参考此web site。有用。我想为macOS做同样的事情。

class ViewController: NSViewController, URLSessionDownloadDelegate {
    var downloadTask: URLSessionDownloadTask!
    var backgroundSession: URLSession!
    var assetFile = String() // file in application's sandboxed folder

    override func viewDidLoad() {
        super.viewDidLoad()

        let backgroundSessionConfiguration = URLSessionConfiguration.background(withIdentifier: "backgroundSession")
        backgroundSession = Foundation.URLSession(configuration: backgroundSessionConfiguration, delegate: self, delegateQueue: OperationQueue.main)
    }

    override func viewDidAppear() {
        super.viewDidAppear()
        let url = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")!
        downloadTask = backgroundSession.downloadTask(with: url)
        downloadTask.resume()
    }

    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
        let fileManager = FileManager()
        do {
            let assetURL = URL(fileURLWithPath: assetFile)
            try fileManager.moveItem(at: location, to: assetURL)
        } catch {
            print("An error occurred while moving file to destination url")
        }
    }

    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {

    }

    func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
        downloadTask = nil
        if (error != nil) {
            print(error!.localizedDescription) // <<< error here?
        } else {
            print("The task finished transferring data successfully")
        }
    }
}

如果我运行它,我会收到一条日志消息,上面写着&#34;未知错误。&#34;我不知道我做错了什么?我有App Transport Security Setting&gt; Allow Allow Arbitrary Loads设置为YES。感谢。

1 个答案:

答案 0 :(得分:0)

由于您的应用是沙盒,请确保在沙盒功能中启用了传出连接。

enter image description here

ATS设置对HTTPS连接无效