ZipPinch cover

ZipPinch 是一个 URLSession 的扩展,用于远程处理 zip 文件。它无需下载整个 zip 文件即可读取其内容,并解压所需的文件。

假设您需要远程访问多个文件(不同类型的资源:图片、字体等)。并且这些文件可能会被更改和添加。也许这些文件按区域设置分组,例如,您的应用程序需要特定区域设置的资源。 在正常情况下,您需要一个服务器解决方案,返回包含可用资源描述的 JSON。 例如,您可以使用任何 PaaS,但 ZipPinch 提供了一个更简单的解决方案。

它会向远程 ZIP 存档发出请求,并返回其结构,其中包含文件大小和文件修改日期。 找到免费的 zip 文件托管并不难。 未压缩存档中的文件本质上会被原样下载,而不会花费时间进行解压缩。

来自演示应用程序 Hubble 的屏幕截图

要求

安装

  1. 在 Xcode 中,转到 FileAdd Packages...
  2. 搜索下面的链接并单击 Add Package
https://github.com/buh/ZipPinch.git
  1. 选择要添加到哪个目标,然后选择 Add Package

用法

入门

  1. 首先,您需要创建一个 URLSession 实例。然后,通过直接指向 ZIP 文件的 URL 请求内容。
let urlSession = URLSession(configuration: .default)
let entries = try await urlSession.zipEntries(from: url)

注意

您还可以添加 URLSessionTaskDelegate 或使用自定义的 URLRequest

  1. 下载条目的数据
let data = try await urlSession.zipEntryData(entry, from: url)
  1. 使用数据初始化图像或其他类型。

查看 Hubble 演示应用程序,以查看由哈勃太空望远镜拍摄的存档中的选定图像。

下载并显示进度

要下载并显示进度,必须指定一个 ZIPProgress 对象

let data = try await urlSession.zipEntryData(entry, from: url, progress: .init() { progressValue in
    Task { @MainActor in
        self.progress = progressValue
    }
})

下载文件夹

  1. 将条目转换为包含文件夹和条目的树状层级结构
let entries = try await urlSession.zipEntries(from: url)
let rootFolder = entries.rootFolder()
  1. 递归加载文件夹和子文件夹条目
// folderData: [(entry: ZIPEntry, data: Data)]
let folderData = try await urlSession.zipFolderData(folder, from: url)
  1. 相同,但包含总体进度
// folderData: [(entry: ZIPEntry, data: Data)]
let folderData = try await urlSession.zipFolderData(folder, from: url, progress: .init() { progressValue in
    Task { @MainActor in
        self.progress = progressValue
    }
})

特性

ZIP 文件格式规范来源

支持

您可以在这里请我喝杯咖啡 ☕️

许可证

ZipPinchMIT 许可证下可用