CRUConfig 1.2.0

CRUConfig 1.2.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最后发布2017 年 5 月

HarroHarro 维护。



CRUConfig 1.2.0

  • Harro

CRUConfig 是 dotenv 的 objc 实现。它提供了一个包装器用于 config.plist,为您提供了一个从代码中获取 API 密钥和 URL 的简单方法,同时您的 IDE 现在会自动补全您的值,因为它们现在是属性而不是字符串。它还基于环境,因此您可以定义不同构建配置的不同配置文件。(不确定什么是构建配置,请阅读 这里)

一旦它选择了适合您的环境的正确文件,它将自动将该文件值加载到您的配置类中,同时自动将值转换为匹配您类属性类型的值。

继续阅读以了解它的工作原理以及如何使用它.

安装

CRUConfig 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中

pod "CRUConfig"

示例

要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install

基本用法

创建 CRUEmptyConfig 的子类,并将配置值作为属性添加。该 Pod 将自动从您的配置文件将值加载到属性中,包括将其转换为正确的类型。请参阅下面的部分,以了解自动加载的工作原理、自动加载规则以及如何处理异常情况,高级加载

在子类的头文件中添加您希望在代码中使用的不想要的属性。例如。

#import "CRUEmptyConfig.h"

@interface MYConfig : CRUEmptyConfig

@property (nonatomic, strong, readonly) NSURL		*baseUrl;
@property (nonatomic, strong, readonly) NSString	*myAPISecret;

@end

通过代码使用环境特定的配置值

myAPI.baseURL = [MYConfig sharedConfig].baseURL;

或者

MYAPI *myAPI = [MYAPI apiWithConfig:[MYConfig sharedConfig]];

高级用法

基于构建配置加载文件

不确定什么是构建配置,请阅读 这里

Pod将寻找与当前配置名称匹配的配置文件。例如,如果您正在构建调试配置,它将在您的应用程序束中寻找config.debug.plist。如果您使用发布配置构建目标,它将寻找config.release.plist。如果您为您的项目创建一个名为beta的定制配置,并且构建使用该配置,Pod将寻找config.beta.plist。请注意,它们总是小写。

如果您不想为特定配置创建配置文件,只需使用config.default.plist或config.plist。

优先级顺序如下

  • config.{当前构建配置名称}.plist
  • config.default.plist
  • config.plist

所有项目至少有2个构建配置:DebugRelease。如果您创建与当前构建配置匹配的配置文件,CRUConfig将尝试加载相关的plist文件。

如果您的构建使用名为Adhoc的构建配置,您应创建一个包含您的adhoc特定值(例如,base_urlstage.api.example.com)的config.adhoc.plist文件,然后当您构建adhoc构建时,所有针对[CRUConfig sharedConfig].baseURL的引用都将指向您的测试服务器。在您的config.release.plist文件中,您可以将base_url定义为api.example.com,这样发布构建将自动指向您的生产服务器。

您可以为项目中的每个构建配置创建配置文件,即使是为定制配置。如果您没有使用任何针对构建配置特定的配置文件,Pod将回退到config.default.plistconfig.plist

它将按以下顺序尝试访问文件

  • 与当前构建配置匹配的配置文件(例如,config.debug.plist,即使在项目的配置名称中有大写字母,文件名也始终使用小写)
  • 如果当前构建配置没有配置文件,它将尝试config.default.plist
  • 如果不存在config.default.plist,它将尝试config.plist
  • 如果这些选项都不存在,它将返回空值

自动加载规则

您可能会在每个项目的不同类型中需要各种不同的配置值。为了解决这一问题,CRUConfig试图将您的plist键与属性名匹配。

它将尝试寻找直接匹配,然后它将尝试将您的plist键从蛇形转义格式转换为驼峰格式,并寻找匹配的属性。例如:

配置文件键 属性名称 匹配
baseURL baseURL
my_super_secret mySuperSecret
base_url baseUrl
google_api_key apiKeyGoogle

它已经找到与键匹配的属性后,将尝试将值转换为属性的类型。以下是转换的规则。如果找不到属性或值无法转换或加载,则跳过plist条目,并且您的属性将保留其默认值,通常是nil。

配置文件类型 可能的属性类型 注意
数组 NSArrayNSSet
字典 NSDictionary
布尔值 NSNumber
数据 NSDataNSString 使用UTF8编码进行转换
日期 NSDateNSString 使用yyyy-MM-dd HH:mm:ss zzz日期格式进行日期转换(可以通过覆盖NSObject+PropertyTypeMatching类别中的dateFormat方法进行更改),如果您想要将日期作为字符串,则时区默认为GMT(它与UTC相同,但苹果拒绝称之为UTC。要更改默认时区,请覆盖NSObject+PropertyTypeMatching类别中的timeZone方法)
数字 NSNumberNSString 使用数字的stringValue方法进行字符串转换
字符串 NSStringNSURLNSDateNSDataNSNumber 使用UTF8编码进行数据转换,使用yyyy-MM-dd HH:mm:ss zzz日期格式进行日期转换(可以通过在NSObject+PropertyTypeMatching类别中重写dateFormat方法进行更改),存储数字时使用双精度表示

注意,仅支持NS Foundation类型。如果您需要将值加载到原始类型或您的值拒绝加载,请查看高级加载部分,以获取手动加载这些值的方法。

例如,如果这是您的plist文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>myAPISecret</key>
        <string>api-secret-1</string>
        <key>base_url</key>
        <string>localhost:8080</string>
    </dict>
</plist>

并且这是您的配置类

#import "CRUEmptyConfig.h"

@interface MYConfig : CRUEmptyConfig

@property (nonatomic, strong, readonly) NSURL		*baseUrl;
@property (nonatomic, strong, readonly) NSString	*myAPISecret;
@property (nonatomic, strong, readonly) NSNumber    *loading;

@end

baseUrl将有一个包含地址localhost:8080的NSURL对象,myAPISecret将有一个NSString

高级加载

那么在您的.m文件中包含CRUConfig+setter.h文件,以便您可以子类化- (void)setPropertiesWithContentsOfConfigDictionary:(NSDictionary *)configDictionary方法。在这里,您将获得一个包含已加载的plist文件内容的字典。在这个方法中,您应对值进行验证,然后将其设置为为您的配置值创建的正确属性。以下是一个示例

#import "CRUConfig.h"
#import "CRUConfig+setter.h"

@implementation CRUConfig

- (void)setPropertiesWithContentsOfConfigDictionary:(NSDictionary *)configDictionary {

NSString *baseUrlString			= configDictionary[@"base_url"] ?: @"";
_baseUrl						= [NSURL URLWithString:baseUrlString];

_myAPISecret					= configDictionary[@"my_api_secret"] ?: @"";

}

@end

现在您可以在代码中使用配置类

myAPI.baseURL = [CRUConfig sharedConfig].baseURL;

或者

MYAPI *myAPI = [MYAPI apiWithConfig:[CRUConfig sharedConfig]];

什么是构建配置

如果您不确定什么是构建配置,这篇文章解释了它们是什么https://developer.apple.com/library/ios/recipes/xcode_help-project_editor/Articles/BasingBuildConfigurationsonConfigurationFiles.html。如果您已经是构建配置了,还不清楚为什么需要CRUConfig。构建配置允许您定义在构建时需要的值和设置,而CRUConfig中的值在运行时可用。

作者

Harro,[email protected]

许可证

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