Touchstone 版本 0.2

Touchstone 版本 0.2

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

Chris Streeter维护。



  • Chris Streeter

便于调试和生产的默认设置。

Touchstone 让您轻松创建默认设置,在调试构建中持久维修,而在非调试构建中易变。

在非调试构建中,用 registerDefaults:volatileDefaults:isVolatile:volatileDefaults 参数标记为易变的默认设置(不持久存在,但可以进行读写操作)。在下次注册默认设置时(例如应用启动),这些默认设置将设置为传递的值。

然而,如果将 NO 传递给 isVolatile(例如在调试构建中),则使用 volatileDefaults 参数指定的默认设置实际上并非易变;它们是持久的,并且表现得像常规默认设置。

问题

Touchstone 是为了解决我们在Educreations常遇到的问题而创建的。我们希望在应用程序内部配置并保留在不同会话之间的调试设置,但我们不希望在生产构建中这些设置不是默认设置。

例如,假设我们有一个用于更改 API 端点的设置。在生产构建中,这应该是我们的生产 API 端点。但在调试构建中,我们可能希望默认使用生产端点,同时能够修改并持久化到另一个端点。

我们之前有很多像以下这样的代码

#if DEBUG
    if ([standardDefaults boolForKey:kLoggingEnabledKey]) {
        logger.level = AFHTTPLoggerLevelVerbose;
    } else {
        logger.level = AFHTTPLoggerLevelError;
    }
#else
    logger.level = AFHTTPLoggerLevelOff;
#endif

Touchstone 建造出来是为了解决这种条件调试块的问题。

示例

isVolatile:YES

以下是一个配置了 isVolatile: 设置为 YES 的 Touchstone 的示例

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
[standardDefaults registerDefaults:@{kFirstLaunchKey: @(YES)}
                  volatileDefaults:@{kLoggingEnabledKey: @(NO)}
                        isVolatile:YES];

NSLog(@"-> %@", ([standardDefaults boolForKey:kFirstLaunchKey] ? @"YES" : @"NO"));
// -> YES
NSLog(@"-> %@", ([standardDefaults boolForKey:kLoggingEnabledKey] ? @"YES" : @"NO"));
// -> NO

// Set new values
[standardDefaults setBool:NO forKey:kFirstLaunchKey];
[standardDefaults setBool:YES forKey:kLoggingEnabledKey];

NSLog(@"-> %@", ([standardDefaults boolForKey:kFirstLaunchKey] ? @"YES" : @"NO"));
// -> NO
NSLog(@"-> %@", ([standardDefaults boolForKey:kLoggingEnabledKey] ? @"YES" : @"NO"));
// -> YES

现在重新启动应用...

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
[standardDefaults registerDefaults:@{kFirstLaunchKey: @(YES)}
                  volatileDefaults:@{kLoggingEnabledKey: @(NO)}
                        isVolatile:YES];

NSLog(@"-> %@", ([standardDefaults boolForKey:kFirstLaunchKey] ? @"YES" : @"NO"));
// -> NO
NSLog(@"-> %@", ([standardDefaults boolForKey:kLoggingEnabledKey] ? @"YES" : @"NO"));
// -> NO

重要 kFirstLaunchKey 有所值,这是设置保持持久,而 kLoggingEnabledKey 没有持久化它的值并还原到传递给 registerDefaults:volatileDefaults:isVolatile: 的默认值。

isVolatile:NO

这是一个 isVolatile: 设置为 NO 的示例

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
[standardDefaults registerDefaults:@{kFirstLaunchKey: @(YES)}
                  volatileDefaults:@{kLoggingEnabledKey: @(NO)}
                        isVolatile:NO];

NSLog(@"-> %@", ([standardDefaults boolForKey:kFirstLaunchKey] ? @"YES" : @"NO"));
// -> YES
NSLog(@"-> %@", ([standardDefaults boolForKey:kLoggingEnabledKey] ? @"YES" : @"NO"));
// -> NO

// Set new values
[standardDefaults setBool:NO forKey:kFirstLaunchKey];
[standardDefaults setBool:YES forKey:kLoggingEnabledKey];

NSLog(@"-> %@", ([standardDefaults boolForKey:kFirstLaunchKey] ? @"YES" : @"NO"));
// -> NO
NSLog(@"-> %@", ([standardDefaults boolForKey:kLoggingEnabledKey] ? @"YES" : @"NO"));
// -> YES

现在重新启动应用...

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
[standardDefaults registerDefaults:@{kFirstLaunchKey: @(YES)}
                  volatileDefaults:@{kLoggingEnabledKey: @(NO)}
                        isVolatile:NO];

NSLog(@"-> %@", ([standardDefaults boolForKey:kFirstLaunchKey] ? @"YES" : @"NO"));
// -> NO
NSLog(@"-> %@", ([standardDefaults boolForKey:kLoggingEnabledKey] ? @"YES" : @"NO"));
// -> YES

注意我们传递了 NOregisterDefaults:volatileDefaults:isVolatile:,并且获取键 kLoggingEnabledKey 的最后调用返回了 YES,这是应用重新启动之前设置的值;它是持久的。

查看包含的示例项目并试验设置 isVolatile: 的值以了解它的反应。

安装

使用 Cocoapods 安装或使用 git 子模块。然后包含必要的分类。

联系

Chris Streeter @chrisstreeter

授权

Touchstone 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。