BELLEROPHON
贝尔勒弗隆是希腊神话中的英雄。他是"赫拉克勒斯之前的克里特大英雄和怪兽猎手,与卡德摩斯和珀尔修斯并列",他最伟大的成就是在赫拉克勒斯之前杀死传说中的“双头龙”,这个怪物被荷马描绘为狮头,身躯像山羊,尾巴像蛇。
在开发阶段,由于各种原因,有时必须杀死商店中的应用程序。这可能是因为应用程序包含重大问题(崩溃、安全漏洞...)或商业决策(在销售开始之前杀死应用程序,例如,让用户在其他人之前购买)。
描述
贝尔勒弗隆是一个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
。 - 必需,类型:布尔型
- 确定 API 是否活动。如果是
forceUpdate
- 确定应用程序是否应该强制用户更新到最新版本。这应该非常谨慎地使用。只有在紧急情况或不受支持的应用程序版本中。
- 必需,类型:布尔型
retryInterval
- 等待向此端点发出请求的秒数,直到
apiInactive
设置为false
。 - 必需,类型:整数
- 等待向此端点发出请求的秒数,直到
userMessage
- 用于描述正在发生的问题的消息。
- 可选,类型:字符串
如何进行测试?
目前还没有简单的方法来测试Bellerophon。最好的方法是强制API的响应模型返回API非活动状态,以便您可以查看启动/停止按钮;或者使用像Charles这样的网页调试代理在端点上设置断点并修改API响应以使API失效。
贡献
要报告错误或增强请求,您可以在相应标题下提交问题。
此外,测试项目的JSON响应是通过myJSON创建的。您欢迎使用自己的URL创建包含任何JSON的URL进行测试。
如果愿意为该项目做出贡献,请fork此存储库并提交pull请求。
许可证
Bellerophon版权(c)归Prolific Interactive所有。它可以按照LICENSE文件中指定的条款进行再分发。
维护者
Bellerophon由Prolific Interactive维护和赞助。名称和标志是Prolific Interactive的商标。