用Swift编写(iOS、watchOS、tvOS、OSX)的超级强大的远程配置工具
由以下公司提供
您是否曾希望更改应用的一些配置参数而不必发布新版本?当然有!如果您的整个配置都在云端,并且可以灵活更改该多好?当然,将一些配置放在云端,然后 MissionControl 将为您处理其余的工作。
/// You should just launch shared instance of MissionControl on your app start.
/// Good place to do this is in your's AppDelegate's didFinishLaunchingWithOptions:
MissionControl.launch()
/// If you're starting from scratch, you could just start using MissionControl right away.
///
/// For anything that you find "configurable" (colors, fonts, alignment, values etc.),
/// instead of just hard-coding it, use helper accessors with setting key and fallback value.
///
/// Here are some examples:
let ready = ConfigBool("Ready", fallback: false)
let numberOfSeconds = ConfigInt("CountdownDuration", fallback: 10)
let launchForce = ConfigDouble("LaunchForce", fallback: 0.5)
let color = ConfigString("ReadyColor", fallback: "#7ED321")
/// After some time, this adds up and you're probably ready to create some local config.
/// You should just define dictionary with setting keys and values and pass it on launch.
///
/// These settings will override whatever you put before in fallback value of accessors.
/// It doesn't need to contain all the stuff, the rest will just continue to use fallback values.
let config: [String : AnyObject] = [
"Ready" : true,
"LaunchForce" : 0.21
]
MissionControl.launch(localConfig: config)
/// After some time, you decide to have more influence on these settings,
/// Yes, even if the app is already deployed. We get it!
///
/// But, you should create that backend part yourself (sorry).
/// Just make sure that you return JSON formatted key-value dictionary in response body.
/// Then, all you need to do is pass your's backend URL on launch.
///
/// After the first refresh (done automatically on launch) remote settings will be cached to disk.
/// These remote settings will override whatever you put in local config dictionary.
///
/// All helper accessors will respect these priority levels:
/// 1. Remote setting from memory (received in the most recent refresh).
/// 2. Remote setting from disk cache (if never refreshed in current app session (ex. offline)).
/// 3. Local setting from disk (defaults provided in `localConfig` on `launch`).
/// 4. Inline provided fallback value
let remoteURL = NSURL(string: "http://appculture.com/mission-control")!
MissionControl.launch(localConfig: config, remoteConfigURL: remoteURL)
/// If you need, you can always call `refresh` manually to get the latest settings.
/// Good place to call this is in your AppDelegate's applicationWillEnterForeground: or applicationDidBecomeActive:
MissionControl.refresh()
/// There are also "async force remote" helper accessors which you can use
/// when it's really important to have the latest setting or abort everything.
ConfigBoolForce("Abort", fallback: true) { (forced) in
if forced {
self.stopCountdown()
self.state = .Aborted
}
}
/// MissionControl can inform you whenever remote config is refreshed or failed to do so.
/// You can observe for these notifications, or become a MissionControl's delegate, whatever you prefer.
// MARK: - Notifications
let center = NSNotificationCenter.defaultCenter()
center.addObserver(self, selector: #selector(handleRefresh(_:)),
name: MissionControl.Notification.DidRefreshConfig, object: nil)
center.addObserver(self, selector: #selector(handleFail(_:)),
name: MissionControl.Notification.DidFailRefreshingConfig, object: nil)
// MARK: - MissionControlDelegate
MissionControl.delegate = self
func missionControlDidRefreshConfig(old old: [String : AnyObject]?, new: [String : AnyObject]) {
/// do whatever you need to do
}
func missionControlDidFailRefreshingConfig(error error: ErrorType) {
/// ignore or not, it's up to you
}
请查阅本仓库中的示例演示项目。
它类似于一个“火箭发射器”,但实际上并不能发射火箭,而是演示了使用MissionControl的强大功能。
让我来解释一下
附言。一些颜色和其他值也通过远程配置提供。
以下是本演示中所使用的设置,以便您可以从您的服务器尝试中止发射。
只需确保将您的URL传递给MissionControl的launch:
方法。
{
"TopColor": "#000000",
"BottomColor": "#4A90E2",
"Ready": true,
"CountdownDuration": 10,
"Abort": false,
"LaunchForce": 0.5,
"OfflineColor": "#F8E71C",
"ReadyColor": "#7ED321",
"CountdownColor": "#F5A623",
"LaunchedColor": "#BD10E0",
"FailedColor": "#D0021B",
"AbortedColor": "#D0021B"
}
pod 'MissionControl'
Carthage
github "appculture/MissionControl-iOS"
手动安装
只需将MissionControl.swift拖到您的项目中,然后开始使用它。
MissionControl是以MIT许可证发布的。有关详细信息,请参阅LICENSE。