贝尔勒弗隆 1.2.2

贝尔勒弗隆 1.2.2

测试已测试
语言语言 SwiftSwift
许可协议 MIT
分发最后分发2018年9月
SPM支持SPM

Thibault KleinShiyuan JiangJonathan SamudioThibault Klein维护。



  • 作者:
  • Thibault Klein

BELLEROPHON

Travis build status CocoaPods Compatible Platform Docs

Bellerophon fighting Chimera

贝尔勒弗隆是希腊神话中的英雄。他是"赫拉克勒斯之前的克里特大英雄和怪兽猎手,与卡德摩斯和珀尔修斯并列",他最伟大的成就是在赫拉克勒斯之前杀死传说中的“双头龙”,这个怪物被荷马描绘为狮头,身躯像山羊,尾巴像蛇。

在开发阶段,由于各种原因,有时必须杀死商店中的应用程序。这可能是因为应用程序包含重大问题(崩溃、安全漏洞...)或商业决策(在销售开始之前杀死应用程序,例如,让用户在其他人之前购买)。

描述

贝尔勒弗隆是一个Swift实现的使用协议和便捷方法的库,允许您杀死您的应用程序或通过App Store强制用户更新。通过实现贝尔勒弗隆,您可以在应用程序中轻松添加表示kill状态视图的逻辑或强制更新视图的逻辑。

要求

  • iOS 9.0+
  • Xcode 8.0+

安装

要在项目中使用,请将以下行添加到 Podfile 中

pod 'Bellerophon'

然后可以通过将 Bellerophon 导入到你的文件中来使用它

import Bellerophon

配置

为了使用 Bellerophon,您需要遵循以下步骤

1 - 在您的 AppDelegate 实现文件中,导入项目并注册到 BellerophonManagerDelegate

class AppDelegate: UIResponder, UIApplicationDelegate, BellerophonManagerDelegate {
	...
}

2 - 通过 BellerophonConfig 实现并配置 BellerophonManager。配置支持可选的杀戮开关视图、可选的强制更新视图和许多可选的代理方法。如果开发者选择不提供杀戮开关视图或强制更新视图

let killSwitchView = <YOUR VIEW>
let forceUpdateView = <YOUR VIEW>
let config = BellerophonConfig(window: window, killSwitchView: killSwitchView, forceUpdateView: forceUpdateView, delegate: self)

3 - 启动检查应用程序状态

killSwitchManager.checkAppStatus()

以下是 Bellerophon 的基本实现。现在您需要创建自己的符合 Bellerophon 状态协议(BellerophonObservable)的模型。

4 - 创建您的模型并使其符合 BellerophonObservable

class BellerophonModel: BellerophonObservable { }

5 - 实现 BellerophonObservable 方法。

@objc func apiInactive() -> Bool {
	...
}

@objc func forceUpdate() -> Bool {
	...
}

@objc func retryInterval() -> NSTimeInterval {
	...
}

@objc func userMessage() -> String {
	...
}

@objc func setUserMessage(_ message: String) {
	...
}

6 - 现在您已经有了自己的模型,您就可以在您的 App Delegate 中实现 BellerophonManagerDelegate 方法。

func bellerophonStatus(_ manager: BellerophonManager,
                                  completion: @escaping (BellerophonObservable?, NSError?) -> ()) {
    // MAKE API CALL
    Alamofire.request(killSwitchURL,
                      method: .get,
                      parameters: nil,
                      encoding: JSONEncoding(),
                      headers: nil)
        .responseJSON { (response) in
            if let json = response.result.value as? JSON {
                let model = BellerophonModel(json: json)
                completion(model, nil)
            } else if let error = response.result.error as NSError? {
                completion(nil, error)
            }
    }
}

func shouldForceUpdate() {
	// A force update event should occur. An alert should be displayed to redirect to the App Store.
}

您的应用程序尚未准备好与 Bellerophon 协同工作。如果状态指示 Bellerophon 杀死应用程序,它将在所有内容之上显示全屏视图,并保持这种状态,直到状态 API 指示应用程序再次工作。还会根据状态对象提供的重试间隔开始计时器。对于强制更新视图,也会有类似的行为。

您的 API 和模型应能够至少显示以下信息

  • API 是活动状态还是非活动状态?
  • 是否需要强制应用程序更新?
  • 重试间隔是多少?
  • 在杀戮视图中显示的用户消息是什么?

在 Prolific Interactive 我们使用的规范是这一种

{
    "apiInactive": false,
    "forceUpdate": false,
    "retryInterval": 15,
    "userMessage": null
}
  • apiInactive
    • 确定 API 是否活动。如果是 true,则应用程序 UI 应该被阻塞,直到这是 false
    • 必需,类型:布尔型
  • forceUpdate
    • 确定应用程序是否应该强制用户更新到最新版本。这应该非常谨慎地使用。只有在紧急情况或不受支持的应用程序版本中。
    • 必需,类型:布尔型
  • retryInterval
    • 等待向此端点发出请求的秒数,直到 apiInactive 设置为 false
    • 必需,类型:整数
  • userMessage
    • 用于描述正在发生的问题的消息。
    • 可选,类型:字符串

如何进行测试?

目前还没有简单的方法来测试Bellerophon。最好的方法是强制API的响应模型返回API非活动状态,以便您可以查看启动/停止按钮;或者使用像Charles这样的网页调试代理在端点上设置断点并修改API响应以使API失效。

贡献

要报告错误或增强请求,您可以在相应标题下提交问题。

此外,测试项目的JSON响应是通过myJSON创建的。您欢迎使用自己的URL创建包含任何JSON的URL进行测试。

如果愿意为该项目做出贡献,请fork此存储库并提交pull请求。

许可证

Bellerophon版权(c)归Prolific Interactive所有。它可以按照LICENSE文件中指定的条款进行再分发。

维护者

prolific

Bellerophon由Prolific Interactive维护和赞助。名称和标志是Prolific Interactive的商标。