2

我正在使用 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];FirebaseApp.configure()在 Swift 中)找不到有效的GoogleService-Info.plist 在您的项目中。请从https://console.firebase.google.com/下载一个。'

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

4

2 回答 2

4

我相信您的方法存在多个问题

问题一:

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

问题 2:

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

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

可能的解决方案:

您可以做的不是复制文件,而是使用一个名为的空 plist 文件GoogleService-info.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"

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

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

我没有测试上面粘贴的 shell 脚本,虽然它应该给你一个相当简单的想法如何解决这个问题。

于 2018-07-02T17:52:42.750 回答
0

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

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

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

于 2020-06-08T12:12:19.637 回答