自定义Swift Package内置Firebase plist后调用服务报错如何解决?
问题原因
默认FirebaseApp.configure()方法只会检索主应用的main bundle下的GoogleService-Info.plist文件。你将plist文件放在Swift Package的资源目录中时,文件会被打包到SPM为该模块生成的专属bundle内,不在主bundle的检索范围内,因此Firebase会抛出找不到文件的错误。
修复步骤
- 第一步:在自定义Swift Package中新增自定义Firebase初始化方法,手动指定plist的读取路径
import Firebase public enum FirebasePackageConfigurator { /// 从当前包的资源中读取plist初始化Firebase public static func configureFirebase() { // 获取当前SPM模块对应的bundle guard let plistPath = Bundle.module.path(forResource: "GoogleService-Info", ofType: "plist"), let firebaseOptions = FirebaseOptions(contentsOfFile: plistPath) else { fatalError("包内未找到有效的GoogleService-Info.plist文件") } // 用自定义配置初始化Firebase FirebaseApp.configure(options: firebaseOptions) } }
- 第二步:主项目集成时替换初始化逻辑
不要调用默认的FirebaseApp.configure(),改为调用你封装的FirebasePackageConfigurator.configureFirebase()即可。 - 可选校验:确认plist存放路径正确
确保GoogleService-Info.plist存放在包的Sources/myCustomPackage/目录下,和你在Package.swift中声明的target路径匹配,避免资源打包失败。
额外优化提示
你当前Package.swift中的testTarget配置存在错误,依赖项应改为["myCustomPackage"]而非["myCustomPackageTests"],否则测试target无法正常依赖你的功能模块。
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

