便于调试和生产的默认设置。
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
的 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
的示例
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
注意我们传递了 NO
给 registerDefaults:volatileDefaults:isVolatile:
,并且获取键 kLoggingEnabledKey
的最后调用返回了 YES
,这是应用重新启动之前设置的值;它是持久的。
查看包含的示例项目并试验设置 isVolatile:
的值以了解它的反应。
使用 Cocoapods 安装或使用 git 子模块。然后包含必要的分类。
Touchstone 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。