我为我的应用程序定义了不同的构建配置(Debug,Stage,Prod),并使用用户定义的构建设置:
在Info.plist
文件中设置Facebook登录名和其他内容:
在此方案中,$(USER_DEFINED_SETTINGS)
符号 有效。
当我尝试设置 Google SignIn 时,需要使用其他.plist
文件(GoogleService-Info.plist
),并且我使用用户定义设置与我在Info.plist
文件中的设置方式相同,但不起作用。
如何在自定义.plist
文件中使用用户定义的设置?如果我不能,我该如何解决这个问题?
答案 0 :(得分:34)
不可以在自定义 .plist文件中使用用户定义的设置,因此您必须在另一种方式。
虽然,您可以将自定义.plist文件复制到正确的位置:
Run Script Phase
(Xcode:目标 - >构建阶段 - >" +"按钮)。使用下面的脚本将给定环境的.plist文件复制(替换)到主目录(在我的情况下是src
):
cp "${SRCROOT}/src/Resources/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist" "${SRCROOT}/src/GoogleService-Info.plist"
${SRCROOT}
- 预定义,它指向您的项目位置。
$CONFIGURATION
- 预定义,它是您的构建配置,在我的情况下:Debug
,Stage
,Prod
。你可以在Xcode中更改它: Project (不是目标!) - > 信息。
请注意src/GoogleService-Info.plist
文件必须添加到Xcode项目(构建阶段 - >复制捆绑资源)/src/Resources/GoogleServiceInfoPlists/GoogleService-Info-*
文件不一定。
<强>更新强>
请记住,您的新运行脚本必须放在复制捆绑资源构建阶段之前。否则,它将无法正常工作,因为它将被复制得太晚,并且将使用默认版本的.plist文件。
答案 1 :(得分:1)
我将两个名称为 GoogleService-Info.plist 的文件放入我的项目中。
一个在根目录,一个在名为&#39; staging&#39;的文件夹中,以避免文件系统中的命名冲突。
包含一个目标,另一个包含在另一个目标中,这样每个目标都有一个具有正确名称的唯一plist文件。
答案 2 :(得分:0)
实际上有更好的解决方案。
您可以使用my swift script手动替换Env变量(包括用户定义的变量)。
它有两个参数:输入和输出路径。递归地遍历所有输入plist值(如果需要,也可以添加要处理的dict键),并替换其找到的所有Env变量。并写入输出路径。
这是在Run script phase
中使用它的方式:
/usr/bin/xcrun --sdk macosx swift "${PROJECT_DIR}/scripts/replacePlistEnvironmentVariables.swift" "${PROJECT_DIR}/GoogleService-Info.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
答案 3 :(得分:-1)
创建一个新文件夹(例如:GoogleServiceInfoPlists
)。
为每个配置复制所有.plist
个文件
例如:
GoogleService-Info-Debug.plist,
GoogleService-Info-Alpha.plist,
GoogleService-Info-Beta.plist,
GoogleService-Info-Release.plist
最后添加新的Run Script Phase
(Xcode:“目标”->“构建阶段”->“ +”按钮)。
使用下面的脚本将给定环境的.plist
文件复制到构建目录。
脚本:
RESOURCE_PATH=${SRCROOT}/${PRODUCT_NAME}/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist
BUILD_APP_DIR=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
echo "Copying ${RESOURCE_PATH} to ${BUILD_APP_DIR}"
cp "${RESOURCE_PATH}" "${BUILD_APP_DIR}/GoogleService-Info.plist"
PS:您不需要将文件添加到项目中。只需在主目录中创建一个新文件夹。