MSActiveConfig 1.0.1

MSActiveConfig 1.0.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布时间最新发布2014年12月

Javier Soto 维护。



  • 作者:
  • Javier Soto

MSActiveConfig v1.0.1

为 iOS 提供的远程配置和 A/B 测试框架。 在线文档 可用.

MSActiveConfig 一瞥

制作 iOS 应用时的一大挑战是发布应用更新需要很长时间。有时候我们希望尽快将某个应用中的某个功能远程更改。

const BOOL isThisFeatureEnabled = [activeConfig[@"AppFeatures"] boolForKey:@"SomeFeatureEnabled"];

使用这个简短的命令,MSActiveConfig 会告诉我们特定的功能是否已被启用,但我们还可以实时响应配置的变化

[activeConfig registerListener:self
                forSectionName:@"AppFeatures"];

- (void)activeConfig:(MSActiveConfig *)activeConfig
didReceiveConfigSection:(MSActiveConfigSection *)configSection
        forSectionName:(NSString *)sectionName
{
    [self changeFeatureEnabledStatus:configSection[@"SomeFeatureEnabled"]];
}

使用场景

  • 启用和禁用功能。这允许你在将功能推送到所有人之前,先在用户的一个子集上进行测试,或者控制该功能对你后端造成的负载,例如。
  • 在提交应用后推迟做出决策。例如:这个请求应该多久发生一次?应该重试多少次?使用 Active Config,你不再需要在将应用发送给苹果之前知道这些问题的答案,因为你以后可以轻松更改这些值。
  • A/B 测试! 如果你可以向用户提供配置,你还可以为不同的用户提供不同的配置。

A/B 测试

当前的 A/B 测试框架将大部分责任归结于应用:它们假设应用将知道你将被要求测试特定功能的所有可能值。这是非常限制性的,因为这将迫使你更新应用来尝试新值。Active Config 鼓励你把知识留在后端,为你提供更多的控制。

例如,如果你要对你应用中某个部分的某些文本进行 A/B 测试,传统 A/B 测试框架会告诉应用选择选项 A 或选项 B。这样,应用必须在事先知道那些字符串。使用 Active Config,你会把字符串放在配置中,这样你可以在任何时刻更改它们。

当然,A/B 测试还有很多更多的事情要做,但 MSActiveConfig 为你在应用中选择大量灵活性来实现它提供了基础。未来版本中将出现更多针对 A/B 测试的特定工具。

安装

使用子模块

git submodule add [email protected]:mindsnacks/MSActiveConfig.git <path/to/your/submodule>

有两种方式可以将 MSActiveConfig 整合到您的项目中

  • 如果您已经有工作区或不想创建一个

    • 通过拖放将 MSActiveConfig.xcodeproj 文件添加到您的项目中。
    • 在 Xcode 中选择您的项目,然后选择目标并导航到“构建阶段”。
    • 点击“目标依赖项”上的“+”按钮并添加 MSActiveConfig
    • 点击“链接二进制库”上的“+”按钮并选择 libMSActiveConfig.a
  • 只需将 MSActiveConfig/Classes 中的源文件添加到您的项目中,并与其他源代码一起编译。

使用方法

首先导入 MSActiveConfig.h。典型的应用程序将有一个创建如下所示的 MSActiveConfig 对象:

id<MSActiveConfigDownloader> configDownloader = ...
id<MSActiveConfigStore> configStore = ...

MSActiveConfig *activeConfig = [[MSActiveConfig alloc] initWithConfigDownloader:configDownloader
                                                                    configStore:configStore];

有关如何实例化 MSActiveConfig 对象的完整代码片段,请参阅维基页面

MSActiveConfigDownloader

一个类必须遵循此协议,以便允许 MSActiveConfig 从网络检索更新。需要实现的给定类必须实现此方法。

- (NSDictionary *)requestActiveConfigForUserWithID:(NSString *)userID
                                             error:(NSError **)error;

对于大多数应用程序,提供的 MSJSONURLRequestActiveConfigDownloader 类足以,它允许您创建如下所示的下载器对象:

downloader = [[MSJSONURLRequestActiveConfigDownloader alloc] initWithCreateRequestBlock:^NSURLRequest *(NSString *userID) {
    return [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://myserver.com/activeconfig/user/%@", userID]]];
}];

注意:MSActiveConfig 从不会自行启动下载,您必须使用公共方法 -downloadNewConfig 来告诉它下载。

MSActiveConfigStore

此协议定义了一系列方法,允许 MSActiveConfig 将下载的配置持久化,以便在应用程序后续启动时检索它,以始终使用最新的配置。

- (MSActiveConfigConfigurationState *)lastKnownActiveConfigurationForUserID:(NSString *)userID;
- (void)persistConfiguration:(MSActiveConfigConfigurationState *)configuration forUserID:(NSString *)userID;

MSActiveConfig 提供了一个实现此协议的实现,它使用 NSUserDefault 作为其后备存储:MSUserDefaultsActiveConfigStore。此类还允许您提供初始的或 引导 配置,直到应用程序成功从服务器下载更旧的配置。

- (id)initWithInitialSharedConfiguration:(MSActiveConfigConfigurationState *)initialSharedConfiguration;

MSActiveConfigConfigurationState

此类代表 Active Config 可以用于提供设置值的特定配置集。它可以从 NSDictionary 实例化,例如,通过解析应用程序包中的 JSON 文件来为 MSUserDefaultsActiveConfigStore 创建初始配置。

MSActiveConfigSection

这是您在请求 MSActiveConfig 配置时得到的对象类型。它围绕指定的 ConfigSection(以下配置交换格式)中的所有设置键和值进行包装(请参阅以下配置交换格式)。它具有获取特定类型值的方法,并在设置键不存在或具有不同类型时返回 nil。

配置交换格式

MSActiveConfig 设计得非常灵活。您需要遵循的唯一规则是由 MSActiveConfig 理解的配置交换格式所强加的。配置表示为一个字典对象,它必须看起来像这样

{
    "meta":
    {
        "format_version_string": "1.0",
        "creation_time": "2012-08-20T19:36Z",
        "other_meta_key": "arbitrary objects with other relevant information"
    },
    "config_sections":
    {
        "ConfigSection1":
        {
            "settings":
            {
                "SettingKey1":
                {
                    "value": "This can be a a string, number, boolean, array or object"
                }
            }
        },
    }
}

当你要求 MSActiveConfig 下载配置更新时,它将期待以下格式的字典。如果提供的字典无法解析,则问题将记录到控制台,并将忽略配置。

元数据

配置的元数据部分必须包含格式版本(供未来使用)和创建时间(用于调试目的)。其他所有添加的值都是可选的,但可以用来为配置提供上下文。

例如,如果您正在使用 MSActiveConfig 进行某种 A/B 测试,您可以将一些信息添加到元数据字典中,以便稍后在向您的分析服务发送事件时识别该用户属于哪个测试组。您可以通过两种方式访问元数据字典:

  • 当新配置下载完成时,MSActiveConfig 会发布一个包含元数据字典的 NSNotificationMSActiveConfigDownloadUpdateFinishedNotification),该字典位于 userInfo 中的一个键中(MSActiveConfigDownloadUpdateFinishedNotificationMetaKey)。
  • 通过在任何时候对 MSActiveConfig 调用 -currentConfigurationMetaDictionary 方法。

配置部分

这是设置的最高级别组。一个部分将一组与您的应用程序的特定组件相关的设置分组。当使用 -registerListener:forSectionName: API 时,您可以收到通知,当任何部分的设置更改时。它们由 MSActiveConfigSection 类表示。

设置键

这是部分中包含的特定设置。这些是您将要求 MSActiveConfigSection 的。

用户 ID 支持

MSActiveConfig 提供了 API,允许您为您的应用程序中的不同用户提供不同的配置。这是为允许您使用不同用户注销和登录的应用程序设计的。如果您的情况不是这样,所有这些 API 允许您简单地使用 nil 作为用户 ID。

示例应用程序

在 Xcode 项目中运行目标 MSActiveConfig-SampleApp,以获取在应用程序中对 MSActiveConfig 的示例实现。此示例应用程序使用 [此后端](https://github.com/JaviSoto/ActiveConfig-SampleNodeBackend) 获取其配置。

路线图

MSActiveConfig 是一个坚实的框架,已经在一些具有数百万用户的苹果应用程序中发放了超过 6 个月。未来的工作在 [问题页面](https://github.com/mindsnacks/MSActiveConfig/issues) 中总结。

要求

MSActiveConfig 需要 iOS6 或更高版本,但如果您确实需要为您的项目支持 iOS5,可以很容易地进行支持。

许可证

MSActiveConfig 在 MIT 许可下提供。有关更多信息,请参阅 LICENSE 文件。