我需要根据在Xcode中执行的构建类型来更改一些动态值。
我创建了两个方案DEV
和PROD
,并在每个方案中设置了环境变量
然后我在代码中按如下方式使用这些
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
}
这是解决这个问题的正确方法吗?
一旦编译了应用程序,这些值现在应该与它捆绑在一起吗?
我遇到的问题是,一旦停止模拟器,如果尝试打开以这种方式构建的应用程序,它将崩溃,并且我怀疑环境变量不再存在。
简而言之,我想要一个使用一组变量的开发人员构建以及一个使用另一组变量的发行/生产版本。
答案 0 :(得分:1)
您根本不需要环境变量!
转到构建设置并搜索活动的编译条件:
像我在此处所做的那样,为调试添加#!/bin/sh
FILE='/tmp/FOO'
I=0
VALID=0
while [ $I -lt 256 ]; do {
NAME="$( printf \\$( printf '%03o' $I ))"
I=$(( I + 1 ))
>"$FILE"
( eval "$NAME(){ rm $FILE;}; $NAME" 2>/dev/null )
if [ -f "$FILE" ]; then
rm "$FILE"
else
VALID=$(( VALID + 1 ))
echo "$VALID/256 - OK: $NAME"
fi
} done
,为发布添加DEBUG
。
然后声明您的变量。假设您希望RELEASE
在发布模式下为1,在调试模式下为2,
a
就是这样!
根据方案的“构建配置”,编译器将选择要编译的值之一。这里是调试,因此将使用2: