BundeInfoVersioning
是一个轻量级的软件包,允许您在应用程序更新时观察 Info.plist
文件中的更改。
您可以使用 Swift 包管理器 通过将其添加到您的 Package.swift
文件来安装 BundeInfoVersioning
import PackageDescription
let package = Package(
name: "YOUR_PROJECT_NAME",
targets: [],
dependencies: [
.Package(url: "https://github.com/nsagora/bundle-info-versioning", majorVersion: 1),
]
)
要手动将此库添加到您的项目中,只需将 Sources
文件夹拖到项目树中。
检查 CFBundleShortVersionString
更新,并在用户每次更新应用程序时显示一个类似于新功能的屏幕
import BundleInfoVersioning
let bundleInfoVersioning = BundleInfoVersioning()
bundleInfoVersioning.check(forKeyPath: "CFBundleShortVersionString") { (_ , newVersion: String?) in
self.showWhatsNew(in: newVersion)
}
检查 CFBundleVersion
更新,并在应用程序安装或更新时在分析中进行跟踪
import BundleInfoVersioning
let bundleInfoVersioning = BundleInfoVersioning(bundle: .main)
bundleInfoVersioning.check(forKeyPath: "CFBundleVersion") { (old: String?, new: String?) in
if old == nil {
Analytics.install(version: new)
}
else {
Analytics.update(from: old, to: new)
}
}
检查自定义键路径(例如 NSAgora/DatabaseVersion
)更新,并为数据库执行迁移代码。
import BundleInfoVersioning
let bundleInfoVersioning = BundleInfoVersioning()
bundleInfoVersioning.check(forKeyPath: "NSAgora/DatabaseVersion") { (_: Int?, _: Int?) in
self.migrateDataBase()
}
BundeInfoVersioning
类允许指定将在其上观察 Info.plist
更改的 Bundle
。
默认情况下,它使用 .main
bundle 初始化。
import BundleInfoVersioning
let bundleInfoVersioning = BundleInfoVersioning(bundle: .main)
bundleInfoVersioning.check(forKeyPath: "CFBundleVersion") { (old: String?, new: String?) in
if old == nil {
Analytics.install(version: new)
}
else {
Analytics.update(from: old, to: new)
}
}
BundeInfoVersioning
框架带有一个内置的存储系统,该系统基于 UserDefaults
实现。
但是,如果它不符合应用程序的需求,您可以通过遵循 Storage
协议来实现自定义存储。
import BundleInfoVersioning
class MyStorage: Storage {
func set<T>(value: T?, for key: String) {
UserDefaults.standard.set(value, forKey: key)
}
func getValue<T>(for key: String) -> T? {
return UserDefaults.standard.value(forKey: key) as? T
}
}
let storage = MyStorage()
let bundleInfoVersioning = BundleInfoVersioning(bundle: .main, storage: storage)
bundleInfoVersioning.check(forKeyPath: "NSAgora/DatabaseVersion") { (old: Int?, new: Int?) in
self.migrateDataBase()
}
我们非常感谢您为 BundleInfoVersioning 做出的贡献,请查看 LICENSE
文件以获取更多信息。
此项目由 iOS NSAgora 成员开发和维护,iOS NSAgora 是罗马尼亚雅西市的 iOS 开发者社区。