在构建短语中处理不同的配置后找不到有效的 GoogleService-Info.plist
Could not find a valid GoogleService-Info.plist after handle different configuration in Build phrase
我正在研究使用 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-[= 的内容38=] 进入 GoogleService-Info.plist.
但显然,我遇到了这个错误:
2018-07-02 19:05:27.295083+0200 测试 [PROD][63021:19806839] *** 由于未捕获的异常 'com.firebase.core' 而终止应用程序,原因:'[FIRApp configure];
(Swift 中的FirebaseApp.configure()
)在您的项目中找不到有效的 GoogleService-Info.plist。请从 https://console.firebase.google.com/ 下载一个。'
知道我哪里弄错了吗?
非常感谢您的关注。
我认为您的方法存在多个问题
问题 1:
我认为简单地将文件复制到文件夹不会有帮助,您需要将文件添加到项目并将其目标成员更改为您 运行ning 的特定目标。您需要在特定目标的构建阶段将文件添加到 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 文件,确保正确勾选了其目标成员资格,并将其添加到目标的 Copy Bundle Resource 中。将其他 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 脚本,尽管它应该给你一个相当简单的想法如何解决这个问题。
虽然这是一个比较老的问题,但是这里有一个更好的解决方案。
您可以使用选项参数初始化 firebase。在那里可以定义所需的 GoogleService-Info.plist 文件
let options = FirebaseOptions(contentsOfFile: Bundle.main.path(forResource: Constants.Firebase.plistFileName, ofType: "plist")!)!
FirebaseApp.configure(options: options)
例如,我在一个单独的常量文件中定义了 stage/test 和生产的不同文件。在这个文件中,我用环境变量来区分常量的不同值。
我正在研究使用 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-[= 的内容38=] 进入 GoogleService-Info.plist.
但显然,我遇到了这个错误:
2018-07-02 19:05:27.295083+0200 测试 [PROD][63021:19806839] *** 由于未捕获的异常 'com.firebase.core' 而终止应用程序,原因:'[FIRApp configure];
(Swift 中的FirebaseApp.configure()
)在您的项目中找不到有效的 GoogleService-Info.plist。请从 https://console.firebase.google.com/ 下载一个。'
知道我哪里弄错了吗? 非常感谢您的关注。
我认为您的方法存在多个问题
问题 1:
我认为简单地将文件复制到文件夹不会有帮助,您需要将文件添加到项目并将其目标成员更改为您 运行ning 的特定目标。您需要在特定目标的构建阶段将文件添加到 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 文件,确保正确勾选了其目标成员资格,并将其添加到目标的 Copy Bundle Resource 中。将其他 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 脚本,尽管它应该给你一个相当简单的想法如何解决这个问题。
虽然这是一个比较老的问题,但是这里有一个更好的解决方案。 您可以使用选项参数初始化 firebase。在那里可以定义所需的 GoogleService-Info.plist 文件
let options = FirebaseOptions(contentsOfFile: Bundle.main.path(forResource: Constants.Firebase.plistFileName, ofType: "plist")!)!
FirebaseApp.configure(options: options)
例如,我在一个单独的常量文件中定义了 stage/test 和生产的不同文件。在这个文件中,我用环境变量来区分常量的不同值。