【问题标题】:Could not find a valid GoogleService-Info.plist after handle different configuration in Build phrase在构建短语中处理不同的配置后找不到有效的 GoogleService-Info.plist
【发布时间】:2018-12-10 23:06:57
【问题描述】:

我正在使用 firebase 在应用程序 iOS 中进行标记。

我在 app、dev、prod、preprod、appStore 中有不同的配置。 所以我在项目中有几个 GoogleService-Info.plist 。

我在 Resources 文件夹中将它们重命名为 GoogleService-Info-Prod.plist、GoogleService-Info-Dev.plist。

我在项目的构建语句中添加了一个运行脚本,

cp "${SRCROOT}/Test/Resourses/Firebase/GoogleService-Info-$CONFIGURATION.plist" "${SRCROOT}/Test/Resourses/Firebase/GoogleService-Info.plist" 我打算 cp 的内容将 GoogleService-Info-blabla.plist 转换为 GoogleService-Info.plist。

但显然,我遇到了这个错误:

2018-07-02 19:05:27.295083+0200 测试 [PROD][63021:19806839] *** 由于未捕获的异常“com.firebase.core”而终止应用程序,原因:“[FIRApp configure]; (@987654323) @ in Swift) 在您的项目中找不到有效的 GoogleService-Info.plist。请从https://console.firebase.google.com/下载一个。'

知道我在哪里犯错了吗? 非常感谢您的关注。

【问题讨论】:

    标签: ios firebase configuration google-play-services run-script


    【解决方案1】:

    虽然这是一个相当老的问题,但这里有更好的解决方案。 您可以使用 options 参数初始化 firebase。可以定义所需的 GoogleService-Info.plist 文件

    let options = FirebaseOptions(contentsOfFile: Bundle.main.path(forResource: Constants.Firebase.plistFileName, ofType: "plist")!)!
    FirebaseApp.configure(options: options)
    

    例如,我在单独的常量文件中定义了阶段/测试和生产的不同文件。在这个文件中,我用环境变量区分了常量的不同值。

    【讨论】:

    • 在范围内找不到“常量”。我得到了这个错误。因为什么?
    • 嘿@MichaelFernando 如下代码所述,常量是一个文件,其中定义了在项目中使用的具有静态变量的不同结构。例如 struct Firebase { static let plistFileName = "GoogleService-Info" } 只需输入您的 Google-Info 文件的名称 :-)
    • 哦,我忘了这个。谢谢你解释它
    • 不客气。让我知道答案是否适合您。我将此全局常量文件用于应定义一次以将其保存在一个位置的各种值
    【解决方案2】:

    我认为您的方法存在多个问题

    问题 1:

    我相信简单地将文件复制到文件夹将无济于事,您需要将文件添加到项目并将其目标成员资格更改为您正在运行的特定目标。您需要在正在运行的特定目标的构建阶段将该文件添加到 Copy Bundle Resources。

    问题 2:

    此外,尽管您更改了 GoogleService-info.plist 名称的文件名,但 Firebase 仍在寻找 GoogleService-info.plist 而不是您重命名的文件,因此导致崩溃。

    正如这里提到的 github.com/firebase/quickstart-ios/issues/5 您不能更改文件名,文件必须命名为 GoogleService-info.plist。所以复制整个文件是行不通的。

    可能的解决方案:

    您可以做的不是复制文件,而是拥有一个名为GoogleService-info.plist 的空 plist 文件,确保您已正确勾选其目标成员资格并将其添加到目标的复制捆绑资源中。将其他 GoogleService-Info-Configuration.plist 文件也复制到您的项目中。

    然后,在您的运行脚本中,从特定的 GoogleService-Info-{Configuration}.plist 中读取内容,然后将文件内容复制到您的 GoogleService-info.plist

    使用类似的东西

    cat "${SRCROOT}/Test/Resourses/Firebase/GoogleService-Info-$CONFIGURATION.plist"  > "${SRCROOT}/Test/Resourses/Firebase/GoogleService-Info.plist"
    

    或者正如OP在他的评论中提到的那样使用

    cp "${SRCROOT}/Turf/Resourses/Firebase/GoogleService-Info-$CONFIGURATION.plist" "${SRCROOT}/Turf/Resourses/Firebase/GoogleService-Info.plist"
    

    我没有测试上面粘贴的 shell 脚本,虽然它应该让你知道如何解决这个问题。

    【讨论】:

    • 我添加了一个空的 GoogleService.plist 并使用此脚本: cp "${SRCROOT}/Turf/Resourses/Firebase/GoogleService-Info-$CONFIGURATION.plist" "${SRCROOT}/Turf/ Resourses/Firebase/GoogleService-Info.plist" 很好用,感谢您的帮助:)
    • @shanshan-ttzi : 抱歉,伙计,我很困惑,是的 cp 命令可以正常工作 :) 干杯 :) 编码快乐
    猜你喜欢
    • 1970-01-01
    • 2020-06-29
    • 2018-09-08
    • 2018-01-01
    • 2016-10-03
    • 2018-03-06
    • 2019-12-07
    • 1970-01-01
    • 2022-12-13
    相关资源
    最近更新 更多