ObjectiveCDM 1.0.7

ObjectiveCDM 1.0.7

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
Released上次发布2016年7月

James HuynhJames Huynh 维护。



 
依赖
FileMD5Hash~> 2.0.0
Reachability~> 3.1.1
 

ObjectiveCDM:一个极简的下载管理器

ObjectiveCDM 是在 iOS 上基于 NSURLSession 构建的一个文件下载管理器。它支持网络连接恢复时的自动续传。

为您的下一个项目选择 ObjectiveCDM 作为您的下载管理器!

Podfile

platform :ios, '7.0'
pod "ObjectiveCDM", "~> 1.0.6"

1.0.6 版本的变更日志

  • 一些小的错误修复
  • 在 ObjectiveCDownloadTask 中更改目标目的地,存储相对路径而不是如前版本中的绝对路径

功能

  • 支持批量下载文件。
  • 下载完成后验证校验和(MD5、SHA1、SHA512)/文件大小。如果校验和/文件大小不匹配,则会自动重新下载文件。
  • 网络连接恢复时自动续传。
  • 总体进度与单个下载进度
  • 下载速率计算
  • 剩余时间计算

使用方法

ObjectiveCDM

ObjectiveCDM 可以对一系列 URL 字符串或 NSURL 对象执行下载。

  • 每个下载信息项中 URL 和目标地址是必需的。 url 可以是字符串或 NSURL 对象
  • 如果没有提供 fileSize,下载管理器将触发一个 HEAD 请求以查询内容长度并填充 fileSize
  • 如果提供了校验和,下载管理器将验证下载文件的校验和。如果没有提供校验和,验证将仅基于 fileSize。默认文件哈希算法是 SHA1。您可以使用以下方式更改它:
ObjectiveCDM* objectiveCDM = [ObjectiveCDM sharedInstance];
objectiveCDM.fileHashAlgorithm = FileHashAlgorithmMD5;
  • 如果下载文件的最终验证失败,该文件将排队重新下载。
#import "ObjectiveCDM.h"

[objectiveCDM downloadBatch:@[
    @{
        @"url": @"http://87.76.16.10/test10.zip",
        @"destination": @"test/test10.zip",
        @"fileSize": [NSNumber numberWithLongLong:11536384],
        @"checksum": @"5e8bbbb38d137432ce0c8029da83e52e635c7a4f",
        @"identifier": @"Content-1001"
    },
    @{
        @"url": @"http://speedtest.dal01.softlayer.com/downloads/test100.zip",
        @"destination": @"test/test100.zip",
        @"fileSize": [NSNumber numberWithLongLong:104874307],
        @"checksum": @"592b849861f8d5d9d75bda5d739421d88e264900",
        @"identifier": @"Content-1002"
    }
]];
  • 或者,您可以首先将一批文件添加到 objectiveCDM 实例中,然后稍后调用 startDownloadingCurrentBatch
[objectiveCDM addBatch:@[
    ...
]];

...

[objectiveCDM startDownloadingCurrentBatch];
  • 您可以为已下载的字节数设置初始值,这将帮助计算总体进度如果之前已经通过最后一次下载下载了一些文件
ObjectiveCDM* objectiveCDM = [ObjectiveCDM sharedInstance];
[objectiveCDM setInitialDownloadedBytes:1024];
  • 您可以设置总字节数以帮助计算总体进度。这个总字节数将覆盖每个下载的实际总字节数的计算。
ObjectiveCDM* objectiveCDM = [ObjectiveCDM sharedInstance];
[objectiveCDM setTotalBytes:1048576];
  • 默认情况下,用于验证下载文件的一致性算法是SHA1。您可以通过以下方式更改此设置:
ObjectiveCDM* objectiveCDM = [ObjectiveCDM sharedInstance];
objectiveCDM.fileHashAlgorithm = FileHashAlgorithmMD5;
// objectiveCDM.fileHashAlgorithm = FileHashAlgorithmSHA512;
// objectiveCDM.fileHashAlgorithm = FileHashAlgorithmSHA1; // default

ObjectiveCDMUIDelegate

ObjectiveCDMUIDelegate 可用于更新批量下载进度以及更新整个批次的完成状态。

// ObjectiveCDM* objectiveCDM = [ObjectiveCDM sharedInstance];
// objectiveCDM.uiDelegate = self;
// ...
- (void) didReachProgress:(float)progress {
  // this method is run on main thread
  // ... update progress bar or progress text here
}

- (void) didFinishAll {
  // this method is run on main thread
  // ... update completed status of the whole batch
}

- (void) didFinishOnDownloadTaskUI:(ObjectiveCDMDownloadTask*) task {
  // this method is run on main thread
  // ... update completed status of a download task 
}

- (void) didReachIndividualProgress:(float)progress onDownloadTask:(ObjectiveCDMDownloadTask*) task {
  // this method is run on main thread
  // ... update progress of a task
}

ObjectiveCDMDataDelegate

ObjectiveCDMDataDelegate 可用于处理下载完成后文件的处理。

// ObjectiveCDM* objectiveCDM = [ObjectiveCDM sharedInstance];
// objectiveCDM.dataDelegate = self;
// ...
- (void) didFinishDownloadObject:(ObjectiveCDMDownloadTask *)downloadTaskInfo {
  // this method is run on background thread
  // finish a task with ObjectiveCDMDownloadTask downloadInfo
}

- (void) didFinishAllForDataDelegate {
  // this method is run on background thread
  // do whatever needs to be done after a batch has been downloaded successfully
}

ObjectiveCDMDownloadTask

didFinishDownloadObject 方法中,您将接收到一个 ObjectiveCDMDownloadTask 实例。在这个实例中,您可以检索以下属性。

NSURL *url = downloadTaskInfo.url;
NSString *urlString = downloadTaskInfo.urlString;
NSString *destination = downloadTaskInfo.destination; // destination is the full path to the downloaded file
NSString *fileName = downloadTaskInfo.fileName;
NSString *checksum = downloadTaskInfo.checksum;
NSString *identifier = downloadTaskInfo.identifier;

附加功能

  • 您可以将下载任务添加到当前批次中。
[[ObjectiveCDM sharedInstance] addDownloadTask:@{@"url": @"http://download.thinkbroadband.com/5MB.zip", @"destination": @"test/5MB.zip"}];
  • 您可以获取当前下载任务列表。
NSArray *currentDownloadTask = [[ObjectiveCDM sharedInstance] downloadingTasks];
  • 获取下载速度和剩余时间。
NSArray* downloadRateAndRemaining = [[ObjectiveCDM sharedInstance] downloadRateAndRemainingTime];
NSString *downloadRate = downloadRateAndRemaining[0];
NSString *remainingTime = downloadRateAndRemaining[1];
  • 检查下载管理器是否正在下载。
BOOL isDownloading = [[ObjectiveCDM sharedInstance] isDownloading];

运行示例

git clone [email protected]:jameshuynh/ObjectiveCDM.git
  • 双击 ObjectiveCDM-Example/ObjectiveCDM-Example.xcworkspace
  • Cmd + R 运行示例项目 :-)

Running Example

贡献

贡献、建议和问题都非常受欢迎 :). 请也进行分支并提交您的拉取请求!

通往2.0版本的路图

  • 传输速率(KB/s,MB/s)
  • 已用下载时间
  • 自动测试覆盖率
  • 拆分下载(如使用多个线程下载一个文件)以加速下载

许可证

ObjectiveCDM遵循MIT许可证。请参阅LICENSE文件以获取更多信息。