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的标识符。)baseId
:NSString
/String
(是为验证是否与当前分配的基础匹配而使用的基础标识符。)error
:NSError
(仅 Objective-C)(是出现错误时的错误对象。它是可空的,所以是可选的。)
返回值:
返回目标的一个NSData
对象。它可以返回nil
。
致谢:
delta
将是新的base
。
Xcodeproj
和Package.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 build
或open 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 中)。
- 在本地构建 Swift 包:运行
- 如果需要更改(例如,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 的库集成