Bundle 信息版本控制 badge-version

badge-docs badge-swift-pm badge-license badge-twitter

  1. 简介
  2. 要求
  3. 安装
  4. 使用示例
  5. 贡献
  6. 元信息

简介

BundeInfoVersioning 是一个轻量级的软件包,允许您在应用程序更新时观察 Info.plist 文件中的更改。

要求

安装

Swift 包管理器

您可以使用 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 初始化。

指定 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 开发者社区。

根据 MIT 许可证分发。 有关更多信息,请参阅 LICENSE

[https://github.com/nsagora/bundle-info-versioning]