在自定义.plist文件

时间:2015-12-03 13:19:35

标签: ios xcode plist google-signin

我为我的应用程序定义了不同的构建配置(Debug,Stage,Prod),并使用用户定义的构建设置:

enter image description here

Info.plist文件中设置Facebook登录名和其他内容:

enter image description here

在此方案中,$(USER_DEFINED_SETTINGS)符号 有效。

当我尝试设置 Google SignIn 时,需要使用其他.plist文件(GoogleService-Info.plist),并且我使用用户定义设置与我在Info.plist文件中的设置方式相同,但不起作用。

如何在自定义.plist文件中使用用户定义的设置?如果我不能,我该如何解决这个问题?

4 个答案:

答案 0 :(得分:34)

可以在自定义 .plist文件中使用用户定义的设置,因此您必须在另一种方式。

虽然,您可以将自定义.plist文件复制到正确的位置:

  1. 创建一个新文件夹(例如: GoogleServiceInfoPlists )。
  2. 复制每个环境的所有.plist文件(例如: GoogleService-Info-Debug.plist, GoogleService-Info-Stage.plist GoogleService -info-Prod.plist )。
  3. 添加新的Run Script Phase(Xcode:目标 - >构建阶段 - >" +"按钮)。
  4. 使用下面的脚本将给定环境的.plist文件复制(替换)到主目录(在我的情况下是src):

    cp "${SRCROOT}/src/Resources/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist" "${SRCROOT}/src/GoogleService-Info.plist"
    
  5. ${SRCROOT} - 预定义,它指向您的项目位置。

    $CONFIGURATION - 预定义,它是您的构建配置,在我的情况下:DebugStageProd。你可以在Xcode中更改它: Project (不是目标!) - > 信息

    请注意src/GoogleService-Info.plist文件必须添加到Xcode项目(构建阶段 - >复制捆绑资源/src/Resources/GoogleServiceInfoPlists/GoogleService-Info-*文件不一定。

    <强>更新

    请记住,您的新运行脚本必须放在复制捆绑资源构建阶段之前。否则,它将无法正常工作,因为它将被复制得太晚,并且将使用默认版本的.plist文件。

答案 1 :(得分:1)

我将两个名称为 GoogleService-Info.plist 的文件放入我的项目中。

enter image description here

一个在根目录,一个在名为&#39; staging&#39;的文件夹中,以避免文件系统中的命名冲突。

Include the plist in only one project each

包含一个目标,另一个包含在另一个目标中,这样每个目标都有一个具有正确名称的唯一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)

  1. 创建一个新文件夹(例如:GoogleServiceInfoPlists)。

  2. 为每个配置复制所有.plist个文件

例如:

GoogleService-Info-Debug.plist, 
GoogleService-Info-Alpha.plist,
GoogleService-Info-Beta.plist,
GoogleService-Info-Release.plist
  1. 最后添加新的Run Script Phase(Xcode:“目标”->“构建阶段”->“ +”按钮)。

  2. 使用下面的脚本将给定环境的.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:您不需要将文件添加到项目中。只需在主目录中创建一个新文件夹。

enter image description here