public IStorageTransferTask DownloadFile(string destinationPath)
        {
            var wrapper = new StorageTransferTaskWrapper <StorageDownloadTask, NSUrl>();

            wrapper.TransferTask = _wrapped.WriteToFile(NSUrl.FromFilename(destinationPath), (x, e) => wrapper.CompletionHandler(x, e));
            return(wrapper);
        }
        public Task GetFileAsync(string filePath, IProgress <IDownloadState> progress = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (filePath == null)
            {
                throw new ArgumentNullException(nameof(filePath));
            }

            var url = NSUrl.FromFilename(filePath);

            var tcs = new TaskCompletionSource <bool>();

            var downloadTask = _storageReference.WriteToFile(url, (data, error) =>
            {
                if (error != null)
                {
                    tcs.SetException(ExceptionMapper.Map(new NSErrorException(error)));
                }
                else
                {
                    tcs.SetResult(true);
                }
            });

            if (progress != null)
            {
                downloadTask.ObserveStatus(StorageTaskStatus.Progress, snapshot => progress.Report(new StorageTaskSnapshotWrapper(snapshot)));
            }

            if (cancellationToken != default(CancellationToken))
            {
                cancellationToken.Register(downloadTask.Cancel);
            }

            return(tcs.Task);
        }