在Build短语中处理了不同的配置后,找不到有效的GoogleService-Info.plist

时间:2018-07-02 17:19:42

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

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

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

我在“资源”文件夹中将它们重命名为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'而终止应用程序,原因:'char * const myname; ( Swift中的*myname ^= ' '在您的项目中找不到有效的GoogleService-Info.plist。请从https://console.firebase.google.com/下载一个。'

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

2 个答案:

答案 0 :(得分:0)

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

问题1:

我相信,仅将文件复制到文件夹将无济于事,您需要将文件添加到项目中,并将其目标成员资格更改为正在运行的特定目标。您需要在运行特定目标的构建阶段将文件添加到“复制捆绑资源”中。

问题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脚本,尽管它应该给您一个相当简单的想法,如何解决该问题。

答案 1 :(得分:0)

尽管这是一个比较老的问题,但这里有一个更好的解决方案。 您可以使用options参数初始化firebase。可以在其中定义所需的GoogleService-Info.plist文件

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

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