有人知道我怎么在Swift中获取环境变量吗?
lqfhib0f1#
Swift 3及以上:
import Foundation if let value = ProcessInfo.processInfo.environment["KEY"] { ... }
avwztpqn2#
沿着Oleg提到的基于NSProcessInfo的方法之外,还可以使用标准的C getenv函数访问环境变量,如下所示:
NSProcessInfo
getenv
斯威夫特2.x:
func getEnvironmentVar(name: String) -> String? { let rawValue = getenv(name) guard rawValue != nil else { return nil } return String(UTF8String: rawValue) }
斯威夫特3.0:
func getEnvironmentVar(_ name: String) -> String? { guard let rawValue = getenv(name) else { return nil } return String(utf8String: rawValue) }
还可以使用setenv函数 * 设置 * 环境变量:
setenv
func setEnvironmentVar(name: String, value: String, overwrite: Bool) { setenv(name, value, overwrite ? 1 : 0) }
我之所以提到设置变量的能力,是因为这是我所知道的在Xcode Playground中工作时设置变量的唯一方法。最近我想查看一个奇怪的CGContext错误的回溯,这个错误是我在操场上使用“live”视图时遇到的,默认情况下,回溯不会显示在控制台中,所以我必须设置CG_CONTEXT_SHOW_BACKTRACE环境变量来查看发生了什么:
CGContext
CG_CONTEXT_SHOW_BACKTRACE
setenv("CG_CONTEXT_SHOW_BACKTRACE", "1", 1)
在那之后,一切都很顺利,除了我遇到的CGContext错误,但那是另一天的主题了。希望这有帮助!
**P.S.**上述函数需要导入Darwin模块。Foundation自动导入Darwin,但我认为我还是应该提到它。
Darwin
Foundation
46scxncf3#
是的,这是可能的。使用ProcessInfo。简单举例:
ProcessInfo
let dic = ProcessInfo.processInfo.environment if dic["VAR"] != nil { }
x7rlezfr4#
自Swift 3以来,NSProcessInfo已被重命名为ProcessInfo。方法processInfo()已被属性processInfo取代。
processInfo()
processInfo
import Foundation for (key, value) in ProcessInfo.processInfo.environment { print("\(key): \(value)") }
7hiiyaii5#
Vapor特定解决方案:从Vapor自动生成为项目模板的代码中:
let variable = Environment.get("VARIABLE") ?? "or-the-dafault"
jslywgbw6#
或者,您可以使用Info.plist文件存储应用在运行时所需的构建时env变量,如apple developers forum所述:例如,如果您有一个MyConfig.xcconfig文件,如下所示:
MY_SECRET_API_KEY = mysupersecretapikeyvaluehere
在您的Info.plist中,您应该添加如下条目:
<key>MySecretApiKey</key> <string>$(MY_SECRET_API_KEY)</string>
最后,在代码中读取变量的值,如下所示:
guard let infoDictionary: [String: Any] = Bundle.main.infoDictionary else { return } guard let mySecretApiKey: String = infoDictionary["MySecretApiKey"] as? String else { return } print("Here's your api key value -> \(mySecretApiKey)")
6条答案
按热度按时间lqfhib0f1#
Swift 3及以上:
avwztpqn2#
沿着Oleg提到的基于
NSProcessInfo
的方法之外,还可以使用标准的Cgetenv
函数访问环境变量,如下所示:斯威夫特2.x:
斯威夫特3.0:
还可以使用
setenv
函数 * 设置 * 环境变量:我之所以提到设置变量的能力,是因为这是我所知道的在Xcode Playground中工作时设置变量的唯一方法。
最近我想查看一个奇怪的
CGContext
错误的回溯,这个错误是我在操场上使用“live”视图时遇到的,默认情况下,回溯不会显示在控制台中,所以我必须设置CG_CONTEXT_SHOW_BACKTRACE
环境变量来查看发生了什么:在那之后,一切都很顺利,除了我遇到的
CGContext
错误,但那是另一天的主题了。希望这有帮助!
**P.S.**上述函数需要导入
Darwin
模块。Foundation
自动导入Darwin
,但我认为我还是应该提到它。46scxncf3#
是的,这是可能的。使用
ProcessInfo
。简单举例:
x7rlezfr4#
自Swift 3以来,
NSProcessInfo
已被重命名为ProcessInfo
。方法processInfo()
已被属性processInfo
取代。7hiiyaii5#
Vapor特定解决方案:
从Vapor自动生成为项目模板的代码中:
jslywgbw6#
或者,您可以使用Info.plist文件存储应用在运行时所需的构建时env变量,如apple developers forum所述:
例如,如果您有一个MyConfig.xcconfig文件,如下所示:
在您的Info.plist中,您应该添加如下条目:
最后,在代码中读取变量的值,如下所示: