OLEKit

用于 Swift 的 Microsoft OLE2 格式支持,也称为结构化存储、复合文件二进制格式或复合文档文件格式。

一些使用该格式的文件类型

...等等。如果您知道任何基于 CFBF 的文件格式,请提交 拉取请求,以便将其添加到列表中。

自动生成的文档可在 我们的 GitHub Pages 上找到。

加入我们的 Discord,提出任何问题并进行友好交流。

示例

OLE2 文件在其内部嵌入了一个 微型文件系统,在 OLEKit 中,该文件系统表示为一个 DirectoryEntry 值的树。

读取文件和文件中的条目

  1. 在相关源文件的顶部添加 import OLEKit
  2. 使用 OLEFile(_ path: String) 创建一个新实例,并传入你的 OLE2 文件的路径。
  3. 使用 OLEFile 上的 root 属性(类型为 DirectoryEntry)读取根目录条目,并使用 DirectoryEntry 上的 children 属性来遍历条目树。
  4. 在你的 OLEFile 实例上调用 stream(_ entry:) 来访问该条目。 这将返回一个 DataReader 的实例,它提供了用于读取原始数据的辅助 read() 函数。
import OLEKit

let filepath = "./categories.xlsx"
let entryName = "EncryptionInfo"

let ole = try OLEFile(filepath)
guard
  let infoEntry = oleFile.root.children.first(where: { $0.name == entryName })
else { fatalError("entry \(entryName) not found in file \(filepath)") }

let stream = try oleFile.stream(infoEntry)

// Read version bytes from the encryption stream in little-endian order
let major: UInt16 = stream.read()
let minor: UInt16 = stream.read()

guard major == 4 && minor == 4
else { fatalError("unknown version: major \(major), minor \(minor)") }

// change position in the `stream`
reader.seek(toOffset: 8)
// get the rest of the data
let rawStreamData = reader.readDataToEnd()

您可以参考 CryptoOffice 库的源代码 以获得更详细的示例。

要求

Apple 平台

Linux

安装

Swift Package Manager

Swift Package Manager 是一种用于管理 Swift 代码分发的工具。 它与 Swift 构建系统集成在一起,可自动执行下载、编译和链接所有平台上依赖项的过程。

设置好 Swift 包后,将 OLEKit 添加为依赖项就像将其添加到 Package.swiftdependencies 值一样简单。

dependencies: [
  .package(
    url: "https://github.com/CoreOffice/OLEKit.git",
    .upToNextMinor(from: "0.2.0")
  )
]

如果您在 Xcode 构建的应用程序中使用 OLEKit,您也可以 使用 Xcode 的 GUI 将其添加为直接依赖项。

贡献

编码风格

本项目使用 SwiftFormatSwiftLint 来强制执行格式和编码风格。 我们鼓励您在本地代码仓库的副本中以最适合您的方式运行 SwiftFormat,无论是手动还是通过 Xcode 扩展构建阶段git pre-commit hook 等自动运行。

为了保证这些工具在您提交 macOS 上的更改之前运行,我们鼓励您运行此命令一次来设置 pre-commit 钩子。

brew bundle # installs SwiftLint, SwiftFormat and pre-commit
pre-commit install # installs pre-commit hook to run checks before you commit

有关其他平台的更多详细信息和安装说明,请参阅 pre-commit 文档页面

SwiftFormat 和 SwiftLint 也在 CI 上为每个 PR 运行,因此 CI 构建可能会因为不一致的格式或样式而失败。 我们要求 CI 构建通过所有 PR 后才能合并。

行为准则

本项目遵守 贡献者公约行为准则。 参与本项目,您需要遵守此准则。 请将不可接受的行为报告给 coreoffice@desiatov.com

许可

OLEKit 基于 Apache License, Version 2.0 协议 (the "License") 发布;除非您遵守此协议,否则您不得使用本库。 详情请参阅 LICENSE 文件。

除非适用法律要求或书面同意,否则按此协议发布的软件按"现状"分发,不提供任何形式的明示或暗示的保证或条件。 请参阅许可协议,了解关于权限和限制的具体条款。

OLEKit 基于 olefile 库的代码,该库使用 FreeBSD 风格的许可证,请查看 LICENSE-olefile 了解详情。