【问题标题】:Adding variables at build time in Xcode在 Xcode 的构建时添加变量
【发布时间】:2019-06-09 05:04:29
【问题描述】:

我有一些动态值需要根据我在 Xcode 中执行的构建类型进行更改。

我创建了 2 个方案 DEVPROD 并在每个方案中设置环境变量

然后我在代码中使用它们,如下所示

var serviceDomain: String {
    let envVar = ProcessInfo.processInfo.environment
    guard let value = envVar["APP_SERVICE_DOMAIN"] else { fatalError("Missing APP_SERVICE_DOMAIN enviroment variable") }
    return value
}

这是处理这个问题的正确方法吗?

一旦应用程序被编译,这些值现在是否应该与它捆绑在一起?

我有一个问题,一旦我停止了我的模拟器,如果我尝试打开一个以这种方式构建的应用程序,它会崩溃并且我怀疑环境变量不再存在。

简而言之,我想要一个使用一组变量的开发版本和一个使用另一组变量的发布/生产版本。

【问题讨论】:

  • 关于环境变量范围,你是对的:它们是由 Xcode 定义的,因此在 IDE 之外运行应用程序时不会出现。如果您想遵循这种方法,您需要在代码(或外部文件)中定义默认值

标签: ios swift xcode build environment-variables


【解决方案1】:

你根本不需要环境变量!

进入构建设置并搜索激活的编译条件:

添加DEBUG 用于调试,RELEASE 用于发布,就像我在这里所做的那样。

然后声明你的变量。假设您希望 a 在发布模式下为 1,在调试模式下为 2,

#if RELEASE
let a = 1
#elseif DEBUG
let a = 2
#endif

就是这样!

编译器将根据您的方案的构建配置选择其中一个值进行编译。这里是debug,所以用2:

More details on this #if thingy

【讨论】:

  • 谢谢,所以我应该在我假设的某种常量文件中使用 if 语句?
  • @HarryBlue 是的,你可以把它放在一个常量文件中,或者任何你喜欢的地方。没关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多