AblyDeltaCodec 1.3.3

AblyDeltaCodec 1.3.3

AblyIkbal KayaQuintin WillisonOwen PearsonStefane MoreauMarat AlekperovLawrence Forooghian 维护。



AblyDeltaCodec

Cocoa VCDiff 解码器.

使用来自 Xdelta 版本 3 的 C 库 - 由 Ably 衍生 - 用于使用 VCDIFF/RFC 3284 流进行差分压缩。

Objective-C 例子

@import AblyDeltaCodec;

NSError *error;
ARTDeltaCodec *codec = [[ARTDeltaCodec alloc] init];
[codec setBase:baseData withId:@"m1"];
NSData *outputData = [codec applyDelta:deltaData deltaId:@"m2" baseId:@"m1" error:&error];

// Output data is an utf-8 string:
NSString *output = [[NSString alloc] initWithData:outputData encoding:NSUTF8StringEncoding];

Swift 例子

import AblyDeltaCodec

let codec = ARTDeltaCodec()
codec.setBase(baseData, withId: "m1")

do {
    let outputData = try codec.applyDelta(deltaData, deltaId: "m2", baseId: "m1")
    // Output data is an utf-8 string:
    let output = String(data: outputData, encoding: .utf8)
}
catch {
    print(error)
}

API 参考

无状态

类 isDelta

声明

Objective-C

+(BOOL)isDelta:delta;

Swift

class func isDelta(_ delta: Data) -> Bool

参数:

  • delta: NSData/Data(是一个作为 vcdiff 编码的二进制,按照 RFC 3284 规范。)

返回值:

返回一个 BOOL/Boolean 值,表示是否是有效的增量。

类 applyDelta

声明

Objective-C

+(NSData *)applyDelta:current previous:previous error:error;

Swift

class func applyDelta(_ current: Data, previous: Data) -> Data (throws)

参数:

  • current: NSData/Data(是需要转换到目标的信息的二进制编码。它是按照 RFC 3284 规范编码的 vcdiff。)
  • previous: NSData/Data(是需要转换成目标的字节数据组。)
  • error: NSError(仅 Objective-C)(是出现错误时的错误对象。它是可空的,所以是可选的。)

返回值:

返回一个目标 NSData/Data 对象。它可以返回 nil

有状态

setBase

声明

Objective-C

-(void)setBase:base withId:baseId;

Swift

func setBase(_ base: Data, withId baseId: Data)

参数:

  • base: NSData/Data (表示要转换成目标的一组字节。这可能是旧的缓存版本。)
  • baseId: NSString/String (是基础的一个标识符。)

返回值:

不返回任何内容。

applyDelta

声明

Objective-C

-(NSData *)applyDelta:delta deltaId:deltaId baseId:baseId error:error;

Swift

func applyDelta(_ delta: Data, deltaId deltaId: String, baseId baseId: String) -> Data (throws)

参数:

  • delta: NSData/Data (是需要的个人信息转换源到目标的二进制编码。它按RFC 3284规范编码为vcdiff。)
  • deltaId: NSString/String (是delta的标识符。)
  • baseIdNSString/String (是为验证是否与当前分配的基础匹配而使用的基础标识符。)
  • error: NSError(仅 Objective-C)(是出现错误时的错误对象。它是可空的,所以是可选的。)

返回值:

返回目标的一个NSData对象。它可以返回nil

致谢:

delta将是新的base

我们同时使用XcodeprojPackage.swift

我们目前有两种文件,每个文件包含其自己的构建配置/设置。这意味着一个构建可能成功,而另一个可能失败。这是必要的,因为Carthage和Cocoapods使用Xcodeproj,而SPM使用Package.swift

发布过程

对于每个发布,需要执行以下操作

  • 从主分支创建一个新分支 release/x.x.x(其中 x.x.x 是新版本号)
  • AblyDeltaCodec.podspec 和 Xcode 项目中更新版本号。提交此更改。
  • 运行 github_changelog_generator来自动更新 CHANGELOG。这可能会需要一些手动干预,包括如何运行命令以及如何修改更改日志文件。具体效果因人而异
    • 您需要运行的命令可能如下所示: github_changelog_generator -u ably -p ably-cocoa --since-tag 1.2.5 --output delta.md
    • 使用上述命令中的 --output delta.md--since-tag 之后所做的更改写入新文件
    • 然后将该新文件的(delta.md)内容手动插入到 CHANGELOG.md 的顶部,更改“未发布”标题并连接到当前版本号
    • 同时确保“完整更改日志”链接指向新的版本标签,而不是 HEAD
    • 提交此更改: git add CHANGELOG.md && git commit -m "更新更改日志."
  • 将两个提交推送到远程: git push -u origin release/x.x.x
  • main 提出_PULL_REQUEST 并等待审阅者的批准
  • 一旦批准并且/或者添加了任何其他提交,合并 PR
  • 在推发布标签之前要执行的步骤
    • 在本地构建 Swift 包:运行 swift buildopen Package.swift 并使用 Xcode 构建库。这确保了此库将对使用 Swift Package Manafer 的应用程序进行构建。
    • 构建 Xcode 项目:打开 DeltaCodec.xcodeproj 并使用 Xcode 构建库。这确保了库将对使用 Carthage 的应用程序进行构建。
    • 运行 pod lib lint 验证 Podspec 并确保库将对 Cocoapods 进行构建。
    • 警告:目前,有关于 xdelta3 子模块的 14 个警告。我们使用 pod lib lint --allow-warnings
    • 在项目中测试库的集成:SPM(在 Xcode 项目中),Cocoapods(在 podfile 中)和 Carthage(在 cartfile 中)。
  • 如果需要更改(例如,lint 出现警告),现在可以将它们提交给 main 分支,如果这些都是简单的故障修复警告,或者如果它们复杂或可能需要评审,可能考虑提出新的 Pull Request。
  • 使用 git tag x.x.x 为此版本号创建标签
  • 使用 git push origin x.x.x 推送标签
  • 使用 pod trunk push AblyDeltaCodec.podspec --allow-warnings 发布 CocoaPods 的更新。有关此命令的详细信息,以及如何将其他贡献者添加为维护者的说明,请参阅 在 cocoaPods Guides 中的“设置 Trunk”
  • 添加到 发布
    • 参考之前的发布以获取发布说明的格式
  • 使用 安装指南 测试在 Xcode 项目中使用 Carthage 和 CocoaPods 的库集成