SSVC 0.0.1

SSVC 0.0.1

测试测试
Lang语言 Obj-CObjective C
许可协议 MIT
Released最新版本2014年12月

Tom Elliott 维护。



SSVC 0.0.1

SSVC - 用于 iOS 的简易版本检查客户端

[这是 alpha 版本软件,预期会有频繁更新!]

Build Status

SSVC 是什么?

SSVC 是一个用于 iOS 的简易版本检查客户端。它会连接您指定的服务器并检查是否有您应用的最新版本。您决定如何处理此信息以及下一步的操作——例如显示一个提示,引导用户到 App Store。

安装方法

  • 从 Github 下载项目(https://github.com/mrtom/SSVC),并解压。
  • SSVC.xcodeproj 文件复制到 Xcode 项目中的 'frameworks' 文件夹。
  • libSSVC.a 链接到您的项目。
    • 在 Xcode 中选择您的项目主项目(通常在顶部)。
    • 选择您的目标。
    • 点击 '构建 phases'。
    • 点击 'Link Binary With Libraries' 底部的 + 图标。
    • 选择 'libSSVC.a'

基本用法

要查看 SSVC 的实际效果,最简单的方法是查看示例应用。您可以从 GitHub 仓库中下载位于 'SSVCSample' 的该应用。

SSVC 的主要类被称为 SSVC!对于最基础的用法

  • 将您服务器的 URL 添加到主 plist 文件中。使用键 SSVCCallbackURL 和一个 URL 作为其值。此 URL 必须是完整限定名,并且可能包含 GET 参数。

  • 将 SSVC 导入到根视图控制器中。

    #import <SSVC/SSVC.h>
  • 在某处创建一个版本检查对象的基本实例,例如在指定的初始化器中。
    SSVC *versionChecker = [SSVC new];
  • 调用 checkVersion: 方法。
  [versionChecker checkVersion];
  • 这将导致 SSVC 向您指定的服务器发送以下参数的 HTTP GET 请求:
    • SSVCLatestVersionKey - 当前运行的应用程序的版本号键,例如 1.0

SSVC 预期您的服务器返回一个简单的 JSON 对象,格式如下。注意,所有字段都是可选的

{
  "SSVCMinimumSupportedVersionNumber": 16800000,
  "SSVCLatestVersionAvailableSince": 1388750400,
  "SSVCLatestVersionKey": "1.0",
  "SSVCLatestVersionNumber": 16809984
 }

JSON 响应定义

名称 描述 允许值/类型 必需 默认值
SSVCMinimumSupportedVersionNumber 当前支持您客户端或API的最小版本号。这允许您要求客户端强制更新。 无符号整数 0
SSVCLatestVersionAvailableSince 最近一次更新可用以来的日期 任何有效的Unix时间戳(即自纪元以来(大纪元为1970年1月1日,UTC)秒数 - http://zh.wikipedia.org/wiki/Unix时间戳 [NSDate distantPast]
SSVCLatestVersionKey 您最新构建的iOS版本键,正如在您的App包中找到的那样 形式为X.Y.Z的字符串,其中X = [0-99]且Y & Z = [0-9] 0.0.0
SSVCLatestVersionNumber 您最新构建的iOS版本号,正如在您的App包中找到的那样 无符号整数 0

SSVCResponse

一旦SSVC收到您服务器的响应,它将构建一个SSVCResponse对象。此对象将上述JSON响应封装在一个更加友好的Objective-C API中,然后使用NSUserDefaults,以键SSVCResponseFromLastVersionCheck将其保存到磁盘。这可能不是访问响应的最简单方法 - 请参阅下文的'自定义使用'部分以获取有关何时有新响应时注册更新的更多信息。

SSVCResponse对象包含以下(只读)属性,对应于上面所述的字段

名称 类型
是否有更新可用 BOOL
是否需要更新 BOOL
所需的最小支持版本号 NSDate *
更新可用自从 NSDate *
最新版本键 NSString *
最新版本号 NSNumber

与SSVC对象一样,SSVCResponse的实例是不可变的(且线程安全),因此您可以随意传递它们。此外,它们遵守<NSCoding>协议,因此您可以轻松地将它们存档。

自定义使用

您可以使用一些额外的初始化方法来帮助自定义SSVC的行为。例如,您可以传递一个NSString *作为服务器URL而不是将其添加到plist中。其他配置选项包括

注册回调

您可以在SSVC成功(和失败)接收更新时请求回调,使用初始化器

- (id)initWithCompletionHandler:(ssvc_fetch_success_block_t)success
                 failureHandler:(ssvc_fetch_failure_block_t)failure;

成功块传递一个SSVCResponse实例,失败块传递一个NSError实例。成功块保证在主线程上运行。但是请注意,这并不适用于失败块。(为什么?见常见问题解答)。

使用SSVCScheduler安排定期版本检查

SSVCScheduler实例指示SSVC何时自动安排版本检查。您通过传递一个带有类型枚举SSVCSchedulerRunPeriod的初始化器来传递它,详细说明了计划期间。以下选项可用

  • SSVCSchedulerDoNotSchedule - 不要安排常规检查
  • SSVCSchedulerScheduleHourly - 每小时检查一次
  • SSVCSchedulerScheduleDaily - 每天检查一次
  • SSVCSchedulerScheduleWeekly - 每周检查一次
  • SSVCSchedulerScheduleMonthly - 每月检查一次

仅当您的应用程序正在运行时才会进行检查。当您初始化SSVC对象时,它会检查上次进行版本检查的时间并相应地安排更新。因此,如果检查应进行时应用程序未运行,则您的应用程序将简单地在下一次启动时(并创建SSVC对象)进行检查。

如果您想安排更复杂的更新策略,则应使用NSTimer(或类似的东西)并在适当的时间调用[SSVC checkVersion]

常见问题解答

SSVC是否免费使用?

是的,该项目是在普遍使用的MIT许可下。更多信息请访问https://open-source.org.cn/licenses/MIT

为什么我必须提供自己的服务器?

据我所知,目前没有任何公开的API可以从网络中获取此类信息。如果您知道其他API,请告知我!

[更新:我正在考虑使用Apple Affiliate API。然而,还有理由支持自定义URL。例如,处理使用Test Flight的测试人员]

为什么您坚持在主线程上调用成功块?

在大多数情况下,我预计开发者会在更新检查器指示可用更新时触发某种形式的UI更改。由于UIKit不是线程安全的,此类更新需要在主线程上执行。

我认为可以假设某些SSVC的消费者不想担心他们的代码运行在哪个线程上,因此强制成功块在主线程上运行可以最小化常规情况下的工作量。如果你正在做的事情足够复杂,你需要知道你想要使用其他线程/队列,你可能已经知道如何做,也知道希望在哪个队列上运行你的成功块。

为什么你不在主线程上调用失败块?

无法从你的版本检查器收到响应不太可能需要使用面向用户/界面更改的错误。我怀疑在大多数情况下,开发者可能只是希望记录此信息并继续前进,或者可能根本忽略这种失败情况。在这种情况下,在主线程上执行块可能会造成浪费。然而,如果你确实需要这样做,这很简单。只需将你的块内容包装在主线程的GCD队列中即可。

dispatch_queue_t mainQ = dispatch_get_main_queue();
dispatch_async(mainQ, ^{
  // Your code here
});