ios - 在自定义 .plist 文件中使用用户定义的build设置

标签 ios xcode plist google-signin

我为我的应用程序定义了不同的构建配置(调试、阶段、生产),并且我使用用户定义build设置:

enter image description here

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

enter image description here

在这种情况下,$(USER_DEFINED_SETTINGS) 符号可以工作。

当我尝试设置 Google SignIn 时,这需要使用额外的 .plist 文件 (GoogleService-Info.plist),并且我以与我在 Info.plist 文件中相同的方式使用 User-Defined 设置,它不起作用。

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

最佳答案

不能自定义.plist 文件中使用用户定义设置。

但是您可以在构建应用程序时将自定义 .plist 文件复制到正确的位置:

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

  2. 将构建配置的所有 .plist 文件复制到那里。例如:

  3. GoogleService-Info-Debug.plist

  4. GoogleService-Info-Stage.plist

  5. GoogleService-Info-Prod.plist

  6. 添加新的Run Script Phase - Xcode:Target-->Build Phases-->“+”按钮(左上角)。

  7. 使用下面的脚本将给定构建配置的 .plist 文件复制(替换)到项目目录:

    cp "${SRCROOT}/${PRODUCT_NAME}/Resources/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist" "${SRCROOT}/${PRODUCT_NAME}/GoogleService-Info.plist"
    
  8. 在输出文件下,您可能还应该输入目标文件,以确保下一阶段仅在文件实际复制后才开始。

    "${SRCROOT}/${PRODUCT_NAME}/GoogleService-Info.plist"
    
  9. 重要:将新添加的脚本移动到 之前 Copy Bundle Resources 阶段,否则它将使用默认文件,忽略替换文件。

使用的变量/路径:

${SRCROOT} - 预定义,它指向您的项目位置。

${PRODUCT_NAME} - 预定义的产品名称。

$CONFIGURATION - 预定义,这是您的构建配置。默认情况下,它是:DebugRelease。在我的例子中:DebugStageProd。您可以在 Xcode 中更改构建配置:Project(不是 Target!)-->Info

注意:

GoogleService-Info.plist 文件必须添加到 Xcode 项目资源(Build Phases-->Copy Bundle Resource),同时Resources/GoogleServiceInfoPlists/GoogleService-Info-* 文件不一定。

如果以上方法不起作用,请尝试单击您的 disired .plist 文件 > 文件检查器 > 目标成员资格 > 检查您的主项目,以便将其捆绑在一起作为最终输出。

关于ios - 在自定义 .plist 文件中使用用户定义的build设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34067120/

相关文章:

iphone - 如何正确保留 NSArray 或基本使用

带指示器的后台快速发布

iphone - 如何向plist的子键添加子项/级别(多级别)?

ios - 我如何在 xcode 构建阶段获取方案名称(shell 脚本)

ios - 阻止另一端不被调用

ios - 自定义 View 在以编程方式添加时不可见,但在使用 Storyboard添加时可见

ios - "Warning: iPhone apps should include an armv6 architecture"即使设置了构建配置

ios - 从 plist 制作一个可变数组

xcode - 为什么我的计时器在 Swift 中不倒计时到 0?

macos - 在 BASH 中,如何对数组中的现有元素使用 plist 上的默认写入?