我正在使用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/下载一个。'
有人知道我在哪里犯错了吗? 非常感谢您的关注。
答案 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)
例如,我在一个单独的常量文件中定义了用于阶段/测试和生产的不同文件。在此文件中,我使用环境变量来区分常数的不同值。