BREnvironment 1.3.0

BREnvironment 1.3.0

测试已测试
Lang语言 Obj-CObjective C
许可 Apache 2
发布上次发布2015年10月

Matt MagoffinMatt MagoffinMatt Magoffinwmjesstaylor维护。



  • 作者
  • Matt Magoffin

一个用于在开发过程中支持不同部署环境的小型Objective-C辅助类,也称为 DDEDD

此项目提供了一种在 Environment.plist 文件中定义 环境 设置的方法。例如,您可能为应用程序通信的某个网络服务定义一个 baseURLhttp://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...
}

3步轻松设置

第一步是将BREnvironment集成到您自己的项目中。您可以通过CocoaPods或手动复制类文件到您的项目中来实现BRCocoaLumberjack的集成。

第1步:手动集成

只有当您使用CocoaPods时才做此操作。使用任何必要的手段(文件复制、git子模块等)将BREnvironment.hBREnvironment.m添加到您的项目中。

第2步:创建默认环境

将一个Environment.plist文件添加到您的项目中。该文件应该作为您应用程序构建目标的一部分。

第3步:创建本地环境

在您项目的根目录下创建一个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

第4步

第四步,啊哈!看看你是否真的读到这儿。只有3个简单的步骤!

示例应用程序

项目包括在<强>环境目录中一个令人难以置信简单的应用程序。该应用程序加载一个BREnvironment然后在一个表格中显示所有值。有一个示例LocalEnvironment-sample.plist文件,如果将其复制到LocalEnvironment.plist并重新运行应用程序,将覆盖默认设置。