我正在使用 Firebase 3.x SDK 运行一个应用程序,并希望有条件地使用不同的配置 .plist 来指向不同的 Firebase 位置,具体取决于该应用程序是配置为开发还是生产。
我正在尝试使用 FIRApp 的
configureWithOptions
来完成此操作,其中我为作为参数传递的 FIROptions
设置了不同的 plist 路径。但是,当我使用“GoogleService-Dev-Info.plist”之类的路径时,我收到来自 Firebase/Core 的控制台警告,指出找不到“GoogleService-Info.plist”。我看到 FIROptions
对象的所有属性都填充了我在 GoogleService-Dev-Info.plist 文件中所期望的内容,所以我不确定我不理解什么。 Firebase SDK 中是否有硬编码的内容可以转到 GoogleService-Info.plist,无论传入的任何选项如何?
如果其他人有同样的疑问,Swift 3 中的代码示例如下:
let firebaseOptions = FirebaseOptions(contentsOfFile: Bundle.main.path(forResource: "GoogleService-Dev-Info", ofType: ".plist")!)
FirebaseApp.configure(options: firebaseOptions!)
我找到了答案。由于我对 CocoaPods 的工作原理一无所知,在进行 pod 安装时,我实际上并没有安装最新版本的 Firebase。运行 Pod 更新更新了我的 Firebase 版本,控制台警告消失了。
虽然 thacilima 之前的答案有助于在运行时选择正确的 plist(例如用于暂存或生产),但它对 Crashlytics 上传 dsym 没有帮助,因为这种情况发生在构建时,并且它不知道要使用哪个文件。
我找到了一种不同的方法来解决这个问题:
命名您的两个文件,例如 一个。 GoogleService-Info-Stage.plist b. GoogleService-Info-Production.plist
在您的项目目标中,转到“构建设置”并创建一个新的“用户定义”设置。称之为:GOOGLE_SERVICE_INFO_PLIST_PATH
对于每种构建类型添加适当的文件路径,例如:
$(PROJECT_DIR)/AppName/GoogleService-Info-Stage.plist
echo "PROJECT_DIR: ${PROJECT_DIR}" echo "BUILT_PRODUCTS_DIR: ${BUILT_PRODUCTS_DIR}" echo "PRODUCT_NAME: ${PRODUCT_NAME}" PLIST_SOURCE_PATH="${GOOGLE_SERVICE_INFO_PLIST_PATH}" PLIST_DESTINATION_PATH="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" echo "PLIST_SOURCE_PATH: $PLIST_SOURCE_PATH" echo "PLIST_DESTINATION_PATH: $PLIST_DESTINATION_PATH" if [ -e "$PLIST_SOURCE_PATH" ]; then cp "$PLIST_SOURCE_PATH" "$PLIST_DESTINATION_PATH" echo "Copied $PLIST_SOURCE_PATH to $PLIST_DESTINATION_PATH" else echo "Error: $PLIST_SOURCE_PATH does not exist." exit 1 fi
“${PODS_ROOT}/FirebaseCrashlytics/run”-gsp“${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist”