You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xcode Cloud中正确读取自定义环境变量?

Xcode Cloud 读取环境变量的正确方式

你的崩溃原因大概率是Xcode Cloud构建时,Scheme配置的环境变量未被注入到App运行时的ProcessInfo中,加上代码里用了强制解包!,导致变量为空时触发崩溃。以下是几种可靠的解决方法:

方法一:通过Info.plist注入环境变量

这是最稳妥的方式,能确保构建时把环境变量写入到App的资源文件中:

  1. 在Xcode的Info.plist中添加对应键值对,比如:
    • 键:HostURL,值:$(HOST_URL)
    • 键:APIURL,值:$(API_URL)
    • 以此类推添加其他变量
  2. 在Xcode Cloud工作流的「Environment Variables」中添加这些变量,并勾选「Make available during build」
  3. 代码中通过Bundle读取(避免强制解包):
guard let webHost = Bundle.main.infoDictionary?["HostURL"] as? String, !webHost.isEmpty else {
    #if DEBUG
    // Debug环境用默认值
    webHost = "http://localhost:8080"
    #else
    fatalError("HostURL is not configured")
    #endif
}

guard let apiHost = Bundle.main.infoDictionary?["APIURL"] as? String, !apiHost.isEmpty else {
    #if DEBUG
    apiHost = "http://api.localhost:8080"
    #else
    fatalError("APIURL is not configured")
    #endif
}

方法二:通过预处理器宏传递

如果偏好用代码直接引用变量,可以用预处理器宏:

  1. 在项目的「Build Settings」中找到「Preprocessor Macros」,按Debug/Release分别添加:
    • HOST_URL=@\"$(HOST_URL)\"
    • API_URL=@\"$(API_URL)\"
      (注意字符串需要转义双引号)
  2. Xcode Cloud工作流中同样配置对应环境变量并勾选构建可用
  3. 代码中读取:
let webHost = String(cString: HOST_URL)
let apiHost = String(cString: API_URL)

方法三:确保Scheme环境变量在Xcode Cloud中生效

如果你坚持用ProcessInfo读取,需要保证Scheme的配置被Xcode Cloud正确继承:

  1. 确认本地Scheme的「Run」阶段已添加环境变量,并且Scheme已被提交到Git仓库(Xcode Cloud依赖仓库中的Scheme配置)
  2. 在Xcode Cloud工作流的「Build」步骤中,选择正确的Scheme
  3. 代码中替换强制解包为安全的可选绑定,避免崩溃:
guard let webHost = ProcessInfo.processInfo.environment["HOST_URL"], !webHost.isEmpty else {
    // 处理逻辑同上
}

内容的提问来源于stack exchange,提问作者ygee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:06:43