A pre-build (Swift) script to alter your Xcode project at pre-build-time per environment, build configuration and target.
Natrium is part of the E-sites iOS Suite.
A pre-build (Swift) script to alter your Xcode project at build-time per environment and build configuration.
With Natrium you can change this:
#if ENVIRONMENT_STAGING
let apiHost = "mynice.staging-api.com"
#elseif ENVIRONMENT_DEVELOPMENT
let apiHost = "mynice.dev-api.com"
#else
let apiHost = "mynice.api.com"
#endif
Alamofire.request("https://\(apiHost)/items").responseJSON { response in
// ...
}
Into this:
let apiHost = Natrium.Config.apiHost
Alamofire.request("https://\(apiHost)/items").responseJSON { response in
// ...
}
"${PROJECT_DIR}/Pods/Natrium/Natrium/natrium" Production
Pods/Natrium/bin/natrium
to Pods/Natrium/Natrium/natrium
Pods/Natrium/Natrium/Natrium.swift
natrium install
is removed.natrium-env
and .env
files can be used for environment variables--project
argumentFor Natrium v6.x you need to manually import the Natrium.swift
file to your project to make it work in the new xcode build system. Read the Installation guide.
Natrium v5.x doesn’t need a build phase script anymore.
Open your Build Phases
from your target settings and remove the [Natrium] check
step.
Else your build will fail during the script steps
Just add Natrium.swift
(from the designated location, see installation guide) to your project’s target (do not copy).
Configuration documentation can be found here.
The example .natrium.yml
as shown above, will result in the following Config.swift file:
import Foundation
/// Natrium.swift
/// Autogenerated by natrium
///
/// - see: https://github.com/e-sites/Natrium
enum Natrium {
enum Environment: String {
case staging = "Staging"
case production = "Production"
}
enum Configuration: String {
case debug = "Debug"
case release = "Release"
case adhoc = "Adhoc"
}
enum Config {
static let environment: Natrium.Environment = .staging
static let configuration: Natrium.Configuration = .debug
static let testVariableDouble: Double = 1.0
static let testVariableString: String = "debugString"
static let testVariableBoolean: Bool = false
static let testVariableInteger: Int = 125
static let testArray: [String] = [ "StagingFoo", "StagingBar" ]
}
}
It can be used like so:
class MainViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("bundle identifier: \(Bundle.main.bundleIdentifier!)")
print("environment: \(Natrium.Config.environment)")
}
}
Result:
bundle identifier: com.esites.app.staging
environment: Staging
Run
make xcodeproj
and open Natrium.xcodeproj
In the Pods/Natrium/bin/
folder you can find natrium.log
with the logs of the previous build. It might help you with debugging.
If you place .env
in the root of your project. Natrium will use that fill to add environment variables to your already existing environment variables.
The .env
file should have to following format:
KEY=VALUE
for instance:
PRODUCTION_SECRET_API_TOKEN=3489uierhjkfbnvcx
STAGING_SECRET_API_TOKEN=iujk9qijs41
This way you can use #env(PRODUCTION_SECRET_API_TOKEN)
in your .natrium.yml
file.
For CI/CD pipelines you can simply add those environment variables to your build pipeline (in travis or buddybuild for instance).
But if you want to use it for local (debug) builds, this file can be helpful.
⚠️ Don’t forget to add .env
to your .gitignore