Referring to Environment Variables in Swift
Solution 1:
Swift 3 and up:
import Foundation
if let value = ProcessInfo.processInfo.environment["KEY"] {
...
}
Solution 2:
Along with the NSProcessInfo
-based method mentioned by Oleg, you can access environment variables using the the standard C getenv
function, like so:
Swift 2.x:
func getEnvironmentVar(name: String) -> String? {
let rawValue = getenv(name)
guard rawValue != nil else { return nil }
return String(UTF8String: rawValue)
}
Swift 3.0:
func getEnvironmentVar(_ name: String) -> String? {
guard let rawValue = getenv(name) else { return nil }
return String(utf8String: rawValue)
}
It's also possible to set environment variables using the setenv
function:
func setEnvironmentVar(name: String, value: String, overwrite: Bool) {
setenv(name, value, overwrite ? 1 : 0)
}
The reason I mention the ability to set variables is because it's the only way I know of to set variables when working in an Xcode Playground.
I recently wanted to see a backtrace for a strange CGContext
error I was getting when working with a "live" view in a playground. By default, the backtrace isn't shown in the console, so I had to set the CG_CONTEXT_SHOW_BACKTRACE
environment variable to see what was up:
setenv("CG_CONTEXT_SHOW_BACKTRACE", "1", 1)
After that, it was smooth sailing. Well, other than the CGContext
error I was getting, but that's a topic for another day.
Hope this helps!
P.S. The above functions require the Darwin
module to be imported. Foundation
automatically imports Darwin
, but I thought I should mention it nonetheless.
Solution 3:
Yes it is possible. Use ProcessInfo
for that.
Simple example :
let dic = ProcessInfo.processInfo.environment
if dic["VAR"] != nil {
}
Solution 4:
Since Swift 3 NSProcessInfo
has been renamed to ProcessInfo
.
And method processInfo()
has been replaced with property processInfo
.
import Foundation
for (key, value) in ProcessInfo.processInfo.environment {
print("\(key): \(value)")
}