Latest 1.1.2
Homepage https://github.com/417-72KI/ConfigurationPlist
License MIT
Platforms ios 10.0, osx 10.9, watchos 3.0, tvos 10.0, requires ARC
Authors

Build Status
Version
Platform
GitHub release
Swift
Swift Package Manager
GitHub license

ConfigurationPlist is a tool to generate configuration files by merging yamls or jsons.

By splitting the file for each type of setting, it is possible to prevent conflicts of configuration files.

Also, by splitting the file for environment configurations, it will be easier to overwrite configurations for each environment.

Example

Base JSON file

{
    "API": {
        "domain": "http://localhost",
        "path": {
            "login": {
                "method": "POST",
                "path": "/login"
            },
            "getList": {
                "method": "GET",
                "path": "/list"
            }
        }
    }
}

Call above configuration

Vanilla

let file = Bundle.main.path(forResource: "Base", ofType: "json")!
let data = try! Data(contentsOf: URL(fileURLWithPath: filePath))
let config = try! JSONSerialization.jsonObject(with: data, options: []) as! [String: Any]
let api = config["API"] as! [String: Any]
let domain = api.domain as! String // "http://localhost"
let loginPath = (api.path as! [String: Any])["login"] as! [String: Any]
let path = loginPath.path // "/login"
let method = loginPath.method // "POST"

Using ConfigurationPlist

let config = AppConfig.default
let domain = config.API.domain // "http://localhost"
let path = config.API.path.login.path // "/login"
let method = config.API.path.login.method // "POST"

Installation

Common

  • Create directory for splitted configuration files, e.g. $PROJECT/Resources/Config.
  • If you use different settings for each environment, create .env into above directory.
  • You don’t have to add above directory into project.

CocoaPods

  • Add the following line to your test target in your Podfile:
pod 'ConfigurationPlist'
  • Add the following Run script build phase to your test target’s Build Phases:
if [ "${CONFIGURATION}" = 'Release' ]; then
  ENVIRONMENT='production'
else
  ENVIRONMENT='staging'
fi

"${PODS_ROOT}/ConfigurationPlist/configurationPlist" -e $ENVIRONMENT "$SRCROOT/$PROJECT/Resources/Config"

You can replace "$SRCROOT/$PROJECT/Resources/Config" to the relative path from project to the directory you created.

Also, you can add -o option with output path to specify where Config.plist will be created.

  • Add $SRCROOT/Config.plist or a path you set with -o option into Output Files in above Run script build phase.

  • Drag the new Run Script phase above the Compile Sources phase and below Check Pods Manifest.lock
    If you are using R.swift, drag the new Run Script above the Run Script phase for R.swift and you can load with R.file.configPlist.
  • Build your project, in Finder you will now see a Config.plist and AppConfig.generated.swift in $SRCROOT or a path you set with -o option in above Run script build phase.
  • Drag them into your project.

Tip: Add the Config.plist pattern and the *.generated.swift pattern to your .gitignore file to prevent unnecessary conflicts.

Manually

TODO: Future support.

What is ConfigurationPlist doing?

  • Detect all yml/json files in $SRCROOT/$PROJECT/Resources/Config, exclude .env.
  • If the -e option is set and a file with the same name as that option exists in $SRCROOT/$PROJECT/Resources/Config/.env, only that file is read.
    For example, -e staging option means to read $SRCROOT/$PROJECT/Resources/Config/.env/staging.{yml/yaml/json}.
  • Parse above files as Swift.Dictionary.
  • Deep merge the above dictionaries.
  • Output merged dictionary as a plist file.

Libraries

License

Available under the MIT License.

Latest podspec

{
    "name": "ConfigurationPlist",
    "version": "1.1.2",
    "summary": "Generate Config.plist for macOS/iOS",
    "description": "ConfigurationPlist is a tool to get strong typed configuration from yamls/jsons.",
    "homepage": "https://github.com/417-72KI/ConfigurationPlist",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "417.72KI": "[email protected]"
    },
    "social_media_url": "http://twitter.com/417_72KI",
    "platforms": {
        "ios": "10.0",
        "osx": "10.9",
        "watchos": "3.0",
        "tvos": "10.0"
    },
    "requires_arc": true,
    "source": {
        "http": "https://github.com/417-72KI/ConfigurationPlist/releases/download/1.1.2/configurationPlist.zip"
    },
    "preserve_paths": "configurationPlist"
}

Pin It on Pinterest

Share This