测试已测试 | ✗ |
Lang语言 | Obj-CObjective C |
许可 | Apache 2 |
发布上次发布 | 2015年10月 |
由Matt Magoffin、Matt Magoffin、Matt Magoffin、wmjesstaylor维护。
一个用于在开发过程中支持不同部署环境的小型Objective-C辅助类,也称为 DDEDD。
此项目提供了一种在 Environment.plist 文件中定义 环境 设置的方法。例如,您可能为应用程序通信的某个网络服务定义一个 baseURL 为 http://my.awesome.service
。在开发期间,您可能希望应用程序使用一个 测试 服务器,因此 BREnvironment 还支持一个 LocalEnvironment.plist 文件,您可以在其中覆盖该 baseURL 设置为 http://my.crashful.service
。
在此,Environment.plist 文件可以提交到您项目的源代码管理系统,并提供应用程序使用 默认 设置。该 LocalEnvironment.plist 文件不会被提交到源代码控制,因此每个开发人员都可以创建自己的副本并修改以满足个人需求。
哦,还有一件事:《code>NSUserDefault 的值也会被加载到 BREnvironment
中,因此可以使用单个 API 处理各种用例。
典型查询设置的操作如下
// some convenient accessor methods
BOOL awesome = [[BREnvironment sharedEnvironment] boolForKey:@"are_you_awesome"]
NSURL *host = [[BREnvironment sharedEnvironment] URLForKey:@"baseURL"];
NSString *foo = [[BREnvironment sharedEnvironment] stringForKey:@"bar"];
// some super-convenient Objective-C literal syntax
NSString *foo = [BREnvironment sharedEnvironment][@"bar"];
// get the whole she-bang environment
NSDictionary *env = [BREnvironment environmentDictionary];
环境设置也可以被操作,无论是瞬时的还是跨应用程序重新启动持久化的。持久化的设置是通过 NSUserDefaults
管理的。例如
// change the "bar" setting to "bam"
[[BREnvironment sharedEnvironment] setTransientEnvironmentValue:@"bam" forKey:@"bar"];
// do the same thing, using Objective-C literal syntax
[BREnvironment sharedEnvironment][@"bar"] = @"bam";
// do the same thing, but persist the setting so it is preserved across app restarts
[BREnvironment saveEnvironmentValue:@"bam" forKey:@"bar"];
您还可以注册自己的 BREnvironmentProvider
实例来提供直接管理区域之外管理的环境值。API 非常简单
@protocol BREnvironmentProvider <NSObject>
/**
Get an environment value for a given key.
@param key The key to get the associated environment value for.
@return The object, or @c nil if not available.
*/
- (id)objectForKeyedSubscript:(id)key;
@end
敏锐的观察者(即您!)可能会注意到这是Objective-C的KVC字面量索引查找方法。此功能的一个用例示例是挂钩到Parse Config值,如下面的虚构代码所示
// register a Parse Config hook
[BREnvironment registerEnvironmentProvider:[ParseConfigEnvironmentProvider new]];
BREnvironment
将返回注册提供程序中找到的 第一个非nil 值,按注册顺序遍历提供程序。如果没有提供程序提供值,则将使用通常的搜索路径,因此应用程序可以回退到由应用程序本身包含的值。
BREnvirnoment
提供了一个小工具方法来帮助您进行应用程序的单元测试
+ (BOOL)isUnitTest;
这可以由您的应用程序用来在单元测试期间避免执行代码。一个常见的技术是短路正常的应用程序启动程序,如下所示
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if ( [BREnvironment isUnitTest] ) {
// don't bother initializing the application during unit testing
return YES;
}
// normal application startup goes here...
}
第一步是将BREnvironment集成到您自己的项目中。您可以通过CocoaPods或手动复制类文件到您的项目中来实现BRCocoaLumberjack的集成。
只有当您不使用CocoaPods时才做此操作。使用任何必要的手段(文件复制、git子模块等)将BREnvironment.h
和BREnvironment.m
添加到您的项目中。
将一个Environment.plist
文件添加到您的项目中。该文件应该作为您应用程序构建目标的一部分。
在您项目的根目录下创建一个LocalEnvironment.plist
文件。将其添加到您源代码管理系统的<强>忽略列表中,以便它不会被添加到版本控制中。这是一个可选的文件,我们不能直接将其添加到任何构建目标中。相反,我们需要向您的应用程序构建阶段添加一个<列>运行脚本强>步骤,以在文件存在时复制该文件,例如
filePath=${PROJECT_DIR}/LocalEnvironment.plist
if [ -e "$filePath" ]; then
cp "$filePath" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
echo $filePath copied to ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}
else
echo $filePath not found.
fi
第四步,啊哈!看看你是否真的读到这儿。只有3个简单的步骤!
项目包括在<强>环境目录中一个令人难以置信简单的应用程序。该应用程序加载一个BREnvironment
然后在一个表格中显示所有值。有一个示例LocalEnvironment-sample.plist
文件,如果将其复制到LocalEnvironment.plist
并重新运行应用程序,将覆盖默认设置。