更新 1.2.4

更新 1.2.4

Ross Butler 维护。




更新 1.2.4

Updates

CI Status Version Carthage compatible Maintainability License Platform Swift 5.0 Twitter Reviewed by Hound

Updates 是一个用于自动检测应用更新并温和提醒用户更新的框架。

要了解更多关于如何使用 Updates 的信息,请查看 关键演示文稿、查看 博客文章 或查看下方的目录

功能

  • 自动检测您的应用是否有新版本可用。
  • 使用自建的 JSON 文件远程配置框架设置。
  • 用于显示 SKStoreProductViewController 或直接将用户引导到 App Store 的 UI 组件。

快速入门

为了检查是否有新版本的可用,请调用以下 checkForUpdates

Updates.checkForUpdates { result in
    UpdatesUI.promptToUpdate(result, presentingViewController: self)
}

然后调用 UpdatesUI 以显示 SKStoreProductViewController 并允许用户更新到最新版本,而无需离开您的应用。

安装

Cocoapods

CocoaPods 是一个将依赖集成到 Xcode 项目的依赖管理器。要使用 RubyGems 安装它,请运行以下命令:

gem install cocoapods

要使用 Cocoapods 安装更新,只需在 Podfile 中添加以下行:

pod "Updates"

然后运行以下命令:

pod install

有关更多信息,请参阅此处

Carthage

Carthage 是一个依赖管理器,它可以为手动集成到项目中生成二进制文件。您可以使用 Homebrew 通过以下命令进行安装:

brew update
brew install carthage

为了通过 Carthage 将更新集成到您的项目中,请将以下行添加到项目的 Cartfile 中:

github "rwbutler/Updates"

在 macOS 终端中运行 carthage update --platform iOS 来构建框架,然后将 Updates.framework 拖放到您的 Xcode 项目中。

有关更多信息,请参阅此处

Swift 包管理器

Swift 包管理器 是 Swift 模块的依赖管理器,自 Swift 3.0 起已包含在构建系统中。它用于自动下载、编译和链接依赖项。

要将 Updates 作为依赖项包含在 Swift 包中,请按照以下方式将包添加到您的 Package.swift 文件中的 dependencies 条目:

dependencies: [
    .package(url: "https://github.com/rwbutler/Updates.git", from: "1.0.0")
]

它是如何工作的

Updates 是一个框架,它会自动检查您的应用程序是否存在新版本。当发布更新时,Updates 能够向用户展示新版本号和相应的发布说明,让他们选择是否更新。选择继续的用户将无缝地展示 App Store 内置应用,使更新变得毫不费力。

更新是如何实现这一功能的?首先,它利用 iTunes 搜索 API 从商店检索您应用的最新版本的版本号。此外,还会检索您应用的发布说明和 App Store 编号,这意味着当发布新版本时,更新可以告诉用户更新的版本号以及新增内容。

使用 App Store 编号,如果用户选择更新,更新可以呈现 App Store,让用户无缝更新而无需离开应用。

如果您希望手动设置此信息(而不是让更新为您检索),您可以在 JSON 配置文件中指定必要的信息。此外,拥有 JSON 配置文件允许您指定是否自动检查或手动检查 - 您可以稍后远程调整此设置。也可以通过编程方式配置所有设置。

使用说明

使用更新的方式有两种:让它自动检查更新,或者通过 JSON 配置文件手动提供更新信息。

配置

自动检查更新

要使更新自动检查您应用的最新版本,您可以配置框架使用 JSON 配置文件。您需要让更新知道配置 URL 的位置,如下所示

Updates.configurationURL = URL(string: "https://exampledomain.com/updates.json")

或者,该 URL 可以引用本地文件/您应用包中的文件,例如

Updates.configurationURL = Bundle.main.url(forResource: "Updates", withExtension: "json")

一个简单的配置文件可能看起来像这样

{
    "updates": {
        "check-for": "automatically",
        "notify": "once"
    }
}

请注意,更新在顶层查找名为 updates 的键,这意味着可以添加到现有的 JSON 文件而不是创建一个全新的文件。

上述配置指示更新自动解析确定您的应用是否有新版本所需的所有信息,而且配置量最小。它还表明,用户只会被通知一次有关特定应用的更新,以避免骚扰他们。此属性的替代值是 twicethriceneveralways

拥有远程 JSON 配置允许在您的应用已经部署后具有最大的灵活性,因为这使您可以从自动切换到手动模式和远程开启设置成为可能,同时您可以自行提供应用最新更新的详细信息。

如果您愿意,可以放弃远程 JSON 配置,简单地用编程方式配置更新

Updates.updatingMode = .automatically
Updates.notifying = .once

这相当于上面 JSON 片段中的配置。

手动通知用户更新信息

要手动通知用户您的应用程序中的更新,请按如下方式配置您的 JSON 文件

{
    "updates": {
        "check-for": "manually",
        "notify": "always",
        "app-store-id": "123456",
        "comparing": "major-versions",
        "min-os-required": "12.0.0",
        "version": "2.0.0"
    }
}
  • check-for 指定是否应该自动或手动检查更新。
  • notifying 参数允许开发者指定用户被提示更新的次数。
  • app-store-id 参数指定您应用在 App Store 中的数值标识符。如果您希望使用 UpdatesUI 组件来显示 SKStoreProductViewController 允许用户更新,则此参数是必需的。如果您正在开发自定义 UI,则可以省略此参数。
  • comparing 确定用户收到通知版本所需的版本号增量。例如,major-versions 表示只有当应用的主要版本号增加时,用户才会收到通知。其他可能的值还包括 minor-versionspatch-versions
  • min-os-required 属性确保如果新版本的应用程序不支持之前支持的较旧版本的 iOS,则无法利用更新的用户不会被通知新版本。
  • version 属性指示从 App Store 可用的新应用版本。

如果您选择不托管远程配置文件,可以通过编程方式获得相同的配置

Updates.updatingMode = .manually
Updates.notifying = .always
Updates.appStoreId: "123456"
Updates.comparingVersions: .major
Updates.minimumOSVersion: "12.0.0"
Updates.versionString: "2.0.0"

检查更新

无论您是否已将 Updates 配置为自动或手动检查更新,您都可以在您的应用程序中调用 checkForUpdates 以接收有关新应用更新的通知,如下所示

Updates.checkForUpdates { result in
    // Implement custom UI or use UpdatesUI component
}

下一节中描述的 UpdatesUI 组件可以与此方法调用一起使用,以显示 App Store,允许用户无缝更新(使用 SKStoreProductViewControllerSFSafariViewController,以防前者无法加载)。或者,您也可以在回调中实现自己的自定义 UI。

回调返回一个 UpdatesResult 枚举值,指示是否有可用的更新

public enum UpdatesResult {
    case available(Update)
    case none
}

在具有可用更新的情况下,将通过 Update 值提供更新版本的版本号以及当使用自动配置时的发布说明。

public struct Update {
    public let newVersionString: String
    public let releaseNotes: String?
    public let shouldNotify: Bool
}

请注意,您的 JSON 配置中 notify 属性的值用于确定 shouldNotifytrue 还是 false。在编写自定义 UI 时,开发者必须尊重 shouldNotify 的值。如果您使用 UpdatesUI 组件,则此属性将自动得到尊重。

UI组件

UpdatesUI组件独立于核心Updates框架,以便开发者在需要时创建自定义UI。对于不需要自定义UI的开发者,UpdatesUI尽量简化了用户更新过程。用户将看到一个UIAlertController询问是否更新或取消。如果用户选择更新,则将显示一个SKStoreProductViewController,允许在应用内启动更新。

为了显示UI,只需将更新检查返回的UpdatesResult值传递给UI,如下所示

Updates.checkForUpdates { result in
    UpdatesUI.promptToUpdate(result, presentingViewController: self)
}

结果将如下所示

UpdatesUI

示例应用

要运行示例项目,请首先克隆存储库,然后从示例目录运行pod install

常见问题

当我调用Updates.checkForUpdates时,我的闭包没有按预期调用,出了什么问题?

Updates使用您的应用捆绑标识符来通过以下URL调用iTunes Search API

https://itunes.apple.com/lookupbundleId=com.rwbutler.daycalculator&country=gb

这允许Updates检索您的应用的发布说明、最新版本号和应用商店标识符。如果您在这个过程中遇到问题,那么很可能是country参数设置不正确。

此参数需要设置为用户下载您的应用的应用商店所在国的国家代码。目前Updates通过使用Locale.current.regionCode查询设备的当前区域来检索此代码,但是可以通过Updates.countryCode参数编程方式覆盖。一旦设置正确,您不应该再遇到任何问题。

作者

Ross Butler

许可证

更新内容适用于MIT许可证。有关更多信息,请参阅LICENSE文件

附加软件

控制

AnimatedGradientView
AnimatedGradientView

框架

  • Cheats - 为现代iOS应用提供复古作弊码。
  • Connectivity - 在您的iOS应用程序中确定互联网连接性能改进于Reachability。
  • FeatureFlags - 允许开发者配置功能标志,通过捆绑/远程托管JSON配置文件使用多个A/B或MVT测试。
  • FlexibleRowHeightGridLayout - 一个UICollectionView网格布局,旨在通过允许每行高度适应内容来支持Dynamic Type。
  • Hash - 使用流行的散列函数,如MD5、SHA-1、SHA-256,生成消息摘要和HMAC的轻量级方法。
  • Skylark - 一个完整的Swift BDD测试框架,用于使用Gherkin语法编写Cucumber场景。
  • TailorSwift - Swift Core Library / Foundation框架扩展的集合。
  • TypographyKit - iOS上支持动态字型的统一且可访问的视觉样式。
  • Updates - 自动检测应用程序更新,并温和地提示用户更新。
技巧 连接性 功能标志 Skylark TypographyKit Updates
Cheats Connectivity FeatureFlags Skylark TypographyKit Updates

工具

  • Clear DerivedData - 通过在终端中输入cdd快速清除你的DerivedData目录的小工具。
  • Config Validator - Config Validator验证并上传你的配置文件,并作为CI流程的一部分清除你的CDN缓存。
  • IPA Uploader - 将你的应用程序上传到TestFlight和App Store。
  • 调色板 - 将你的调色板可用于Xcode接口构建器中。
Config Validator IPA Uploader 调色板
Config Validator IPA Uploader Palette