Swiftpack.co -  e-sites/Natrium as Swift Package
Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
A pre-build (Swift) script to alter your Xcode project at pre-build-time per environment, build configuration and target.
.package(url: "https://github.com/e-sites/Natrium.git", from: "v6.4.1")


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.

forthebadge forthebadge

Platform CocoaPods Compatible Carthage compatible Travis-ci


With Natrium you can change this:

    let apiHost = "mynice.staging-api.com"
    let apiHost = "mynice.dev-api.com"
    let apiHost = "mynice.api.com"

Alamofire.request("https://\(apiHost)/items").responseJSON { response in
    // ...

Build configurations jungle

Into this:

let apiHost = Natrium.Config.apiHost

Alamofire.request("https://\(apiHost)/items").responseJSON { response in
    // ...

Build configurations jungle

πŸ§™β€β™‚οΈ With the magic of pre-action run scripts. 😱

⚠️ To use for M1 Macs prepend arch -arch x86_64 before the pre-build script: e.g:

arch -arch x86_64 "${PROJECT_DIR}/Pods/Natrium/Natrium/natrium" Production


To v8.x

  • The location of the binary is changed from (for instance in Cocoapods) Pods/Natrium/bin/natrium to Pods/Natrium/Natrium/natrium
  • The location of the generated Natrium.swift is changed to (for instance in Cocoapods): Pods/Natrium/Natrium/Natrium.swift

To v7.x

  • natrium install is removed
  • Both .natrium-env and .env files can be used for environment variables
  • CLI no longer needs --project argument
  • No longer supports Objective-c, use v6.4.0 if you still need it.

To v6.x

For 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.

From v5.x

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


  • β˜‘ Swift 4.2 compatible
  • β˜‘ Use swift instead of ruby
  • β˜‘ Remove ImageMagick dependency
  • β˜‘ Unit tests
  • β˜‘ Different installation options (apart from CocoaPods)
  • β˜‘ Better error handling / reporting




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

It can be used like so:

class MainViewController: UIViewController {
    override func viewDidLoad() {

        print("bundle identifier: \(Bundle.main.bundleIdentifier!)")
        print("environment: \(Natrium.Config.environment)")


bundle identifier: com.esites.app.staging
environment: Staging



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.

Environment variables

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:


for instance:


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


Stars: 133
Last commit: 3 days ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API