如何在多自定义Framework与App中通过SPM正确使用Firebase避免重复引入
原因说明
你遇到的运行时崩溃
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[FBLPromise HTTPBody]: unrecognized selector sent to instance
本质是Firebase的基础依赖组件被多次编译链接到不同的二进制目标中:ObjC的类别实现会在运行时动态加载,同一份类别多次加载时会出现实现冲突,最终导致方法找不到的异常。
具体配置步骤
- 所有自定义Framework(A、B)的Firebase依赖仅保留编译期引用,不要嵌入、不要自动链接。打开对应Framework的Xcode配置面板,在「General > Frameworks, Libraries, and Embedded Content」中,所有Firebase相关库的Embed属性设置为Do Not Embed,同时在「Build Settings」中将「Link Frameworks Automatically」设置为
NO。 - 若你通过单独的Package.swift文件维护自定义Framework的依赖,声明Firebase依赖时不要添加强制链接的参数,仅作为编译期依赖即可。
- 主App中保留完整的Firebase依赖配置,正常嵌入、链接所有需要用到的Firebase组件。
- 配置完成后执行Xcode的「Product > Clean Build Folder」清理缓存,同时删除本地Derived Data目录,避免旧缓存产物导致重复符号残留。
- 可选验证:编译后查看主App的Link Map文件,确认Firebase相关的类、类别实现仅在主App的二进制中出现一次,不会出现在Framework A、B的产物中。
内容的提问来源于stack exchange,提问作者Nikolaj
相关产品推荐
相关产品推荐

