SSVC 是一个用于 iOS 的简易版本检查客户端。它会连接您指定的服务器并检查是否有您应用的最新版本。您决定如何处理此信息以及下一步的操作——例如显示一个提示,引导用户到 App Store。
SSVC.xcodeproj
文件复制到 Xcode 项目中的 'frameworks' 文件夹。libSSVC.a
链接到您的项目。SSVC 的主要类被称为 SSVC!对于最基础的用法
将您服务器的 URL 添加到主 plist 文件中。使用键 SSVCCallbackURL
和一个 URL 作为其值。此 URL 必须是完整限定名,并且可能包含 GET 参数。
将 SSVC 导入到根视图控制器中。
#import <SSVC/SSVC.h>
SSVC *versionChecker = [SSVC new];
checkVersion:
方法。 [versionChecker checkVersion];
SSVCLatestVersionKey
- 当前运行的应用程序的版本号键,例如 1.0SSVC 预期您的服务器返回一个简单的 JSON 对象,格式如下。注意,所有字段都是可选的
{
"SSVCMinimumSupportedVersionNumber": 16800000,
"SSVCLatestVersionAvailableSince": 1388750400,
"SSVCLatestVersionKey": "1.0",
"SSVCLatestVersionNumber": 16809984
}
名称 | 描述 | 允许值/类型 | 必需 | 默认值 |
---|---|---|---|---|
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 |
一旦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
实例指示SSVC何时自动安排版本检查。您通过传递一个带有类型枚举SSVCSchedulerRunPeriod
的初始化器来传递它,详细说明了计划期间。以下选项可用
SSVCSchedulerDoNotSchedule
- 不要安排常规检查SSVCSchedulerScheduleHourly
- 每小时检查一次SSVCSchedulerScheduleDaily
- 每天检查一次SSVCSchedulerScheduleWeekly
- 每周检查一次SSVCSchedulerScheduleMonthly
- 每月检查一次仅当您的应用程序正在运行时才会进行检查。当您初始化SSVC对象时,它会检查上次进行版本检查的时间并相应地安排更新。因此,如果检查应进行时应用程序未运行,则您的应用程序将简单地在下一次启动时(并创建SSVC对象)进行检查。
如果您想安排更复杂的更新策略,则应使用NSTimer
(或类似的东西)并在适当的时间调用[SSVC checkVersion]
。
是的,该项目是在普遍使用的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
});