ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Firebase iOS SDK 集成指南:通过 Swift Package Manager 安装、配置与验证

Firebase iOS SDK 集成指南:通过 Swift Package Manager 安装、配置与验证 Firebase iOS SDK 集成指南通过 Swift Package Manager 安装、配置与验证【免费下载链接】firebase-ios-sdkFirebase SDK for Apple App Development项目地址: https://gitcode.com/GitHub_Trending/fi/firebase-ios-sdkFirebase 官方为 Apple 平台iOS / macOS / tvOS / watchOS / macCatalyst提供了基于 Swift Package ManagerSPM的一等公民支持仓库根目录的 SwiftPackageManager.md 即是这份官方集成指南。本文以该文档为主体结合仓库内 Package.swift 清单、SwiftPMTests 导入测试与 Crashlytics/run 上传脚本的源码实现系统讲解在 Xcode 中通过图形界面或Package.swift清单两种方式接入 Firebase 的完整流程、Analytics 的-ObjC链接器要求、Crashlytics dSYM 符号上传配置以及集成后的验证与常见问题排查方法。环境要求与适用范围在开始集成前请确认开发环境满足以下官方要求Xcode 版本需要 Xcode 26.2 或以上版本才能正确解析本仓库的 Swift Package 清单。Analytics 链接选项若安装FirebaseAnalytics必须在工程的Other Linker Flags中添加-ObjC链接器选项原因详见下文Analytics 与 -ObjC 链接标志一节。最低平台版本各产品支持的平台与最低版本以仓库 Package.swift 中platforms声明为准。当前仓库SDK 版本12.19.0swift-tools-version: 6.1声明如下platforms: [.iOS(.v15), .macCatalyst(.v15), .macOS(.v11), .tvOS(.v15), .watchOS(.v7)],即 iOS / macCatalyst 15.0、macOS 11.0、tvOS 15.0、watchOS 7.0 为基准支持范围。平台可用性差异并非所有 Firebase 产品在每个平台都可使用产品可用性随平台不同而有所差异集成前应针对目标平台核对各产品的支持状态。这一点在仓库清单中也有直接体现例如 Package.swift 中FirebaseAppDistributiontarget 仅在 iOS 平台参与构建condition: .when(platforms: [.iOS])FirebaseAnalytics及配套的FirebaseAnalyticsWrapper仅在 iOS、macCatalyst、macOS、tvOS 上启用见SwiftPM-PlatformExclude目录下的包装 target。从 SwiftPMTests/swift-test/all-imports.swift 的导入测试同样可以印证#if os(iOS) !targetEnvironment(macCatalyst) import FirebaseAppDistribution #endif #if (os(iOS) !targetEnvironment(macCatalyst)) || os(tvOS) import FirebasePerformance import FirebaseInAppMessaging #endif也就是说FirebaseAppDistribution仅限 iOS非 macCatalystFirebasePerformance与FirebaseInAppMessaging支持 iOS 与 tvOS。集成时请以当前产品 × 目标平台的组合为准。集成前的准备工作清理 CocoaPods如果项目此前使用 CocoaPods 管理 Firebase 依赖官方建议先执行以下命令移除 Pod 集成避免两套依赖管理机制冲突pod deintegrate该命令会移除 Podfile 生成的集成配置清理完成后再按下文任一方式通过 SPM 引入 Firebase。方式一通过 Xcode 图形界面添加包这是最常用的集成方式全程在 Xcode 内完成共四个步骤。步骤 1打开添加包面板在 Xcode 菜单栏选择File→Add Packages…打开添加 Swift Package 的对话框步骤 2填入仓库地址并设置依赖规则在弹出的搜索框中粘贴 Firebase Apple SDK 的仓库地址https://github.com/firebase/firebase-ios-sdk.git然后将Dependency Rule依赖规则设置为Up to Next Major Version即向上兼容到下一个主版本保证后续获取到同主版本内的兼容更新。设置完成后点击Add Package步骤 3选择需要安装的 Firebase 产品解析完成后Xcode 会列出该仓库提供的全部产品如FirebaseAnalytics、FirebaseAuth、FirebaseFirestore、FirebaseCrashlytics、FirebaseStorage等。勾选当前 App 实际需要的产品点击Add Package完成安装步骤 4为 Analytics 配置 -ObjC 链接选项如果安装了FirebaseAnalytics需要打开工程的Build Settings标签页在Other Linker Flags中加入-ObjCAnalytics 与 -ObjC 链接标志添加-ObjC的原因与 FirebaseAnalytics 的分发方式直接相关。从仓库清单可以看到FirebaseAnalytics在 Package.swift 中是以**二进制 targetbinaryTarget**形式发布的当前版本指向https://dl.google.com/firebase/ios/swiftpm/12.19.0/FirebaseAnalytics.zip并附带 SHA-256 checksum且 Analytics 依赖 GoogleAppMeasurement、FirebaseInstallations 等库见FirebaseAnalyticsWrappertarget 的依赖列表。这类以静态库/二进制框架形式链接的 Objective-C 库大量使用Category分类机制扩展系统类与既有类而链接器默认不会加载未被任何符号直接引用的分类代码导致相关功能在运行时缺失甚至崩溃。-ObjC会强制链接器加载静态库中所有 Objective-C 类与分类从而保证 Analytics 各模块在运行时可用。若省略该选项常见现象是日志输出缺失、事件上报异常等。这也是官方要求仅在安装 Analytics 时必须配置-ObjC的根本原因未使用 Analytics 的工程可跳过此步。方式二通过 Package.swift 清单集成对于使用 Swift Package 管理自身工程或希望通过代码声明依赖的场景可以不经过 Xcode 图形界面直接在包清单中声明 Firebase 依赖。首先在包的dependencies数组中加入 Firebasedependencies: [ .package( name: Firebase, url: https://github.com/firebase/firebase-ios-sdk.git, .upToNextMajor(from: 10.4.0) ), // Any other dependencies you have... ],版本约束说明.upToNextMajor(from:)指定最低版本并允许解析到下一个主版本之前的最高版本。示例中从10.4.0起实际解析结果取决于当前仓库的发布版本本仓库清单声明的版本为12.19.0。你也可以改用.exact(_:)锁定精确版本或用.branch(_:)/.revision(_:)指向开发分支或提交。然后在需要使用 Firebase 的 target 中将其加入该 target 的dependencies数组并通过.product引用具体产品.target( name: MyTargetName, dependencies: [ // The product(s) you want (e.g. FirebaseAuth). .product(name: FirebaseAuth, package: Firebase), ] ),产品名称name:参数必须与仓库清单 Package.swift 中products数组声明的名称一致否则解析会失败。仓库提供的产品清单本仓库当前通过 SPM 对外暴露的library产品依据 Package.swift 的packageProducts()包括产品名说明FirebaseAI/FirebaseAILogicFirebase AI含 Vertex AI 相关能力FirebaseAnalytics数据分析二进制分发需-ObjCFirebaseAnalyticsCore/FirebaseAnalyticsIdentitySupportAnalytics 配套库只需添加即生效无需importFirebaseAuth身份认证FirebaseAppCheck应用校验FirebaseAppDistribution-Beta应用分发Beta仅 iOSFirebaseAuthCombine-CommunityAuth 的 Combine 扩展社区维护FirebaseFirestoreCombine-CommunityFirestore 的 Combine 扩展社区维护FirebaseFunctionsCombine-CommunityFunctions 的 Combine 扩展社区维护FirebaseStorageCombine-CommunityStorage 的 Combine 扩展社区维护FirebaseCore核心库几乎所有产品的基础FirebaseCrashlytics崩溃上报FirebaseDatabase实时数据库FirebaseFirestoreFirestore 数据库FirebaseFunctions云函数FirebaseInAppMessaging-Beta应用内消息BetaFirebaseInstallations安装实例标识FirebaseMessaging推送消息FirebaseMLModelDownloaderML 模型下载FirebasePerformance性能监控FirebaseRemoteConfig远程配置FirebaseStorage云存储其中FirebaseAnalyticsCore、FirebaseAnalyticsIdentitySupport两个产品比较特殊只需把它们加入 target 依赖即可生效不需要在源码中import清单中已注明Adding this library to your project is enough for it to take effect. The module does not need to be imported into any source files.。配置 Crashlytics 的 dSYM 符号上传为了让崩溃日志能被正确符号化symbolicate并关联到具体源码行Crashlytics 需要在构建时上传 dSYM 符号文件。SPM 集成方式下官方提供两种方案。方案一使用 Xcode 构建阶段的 run 脚本如果使用 FirebaseCrashlytics可以在 Xcode 的Build Phases中新增一个Run Script阶段脚本路径填${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run该路径利用了 SPM 将源码检出到DerivedData/.../SourcePackages/checkouts/目录的特性${BUILD_DIR%/Build/*}用于从构建目录回退定位到SourcePackages根目录从而兼容不同用户的 DerivedData 位置。脚本本身的行为可以在仓库 Crashlytics/run 中查看它本质上是 Crashlytics/upload-symbols 的包装脚本分两阶段执行——同步验证阶段以--build-phase --validate参数前台同步调用upload-symbols校验构建环境Google Services 文件、dSYM 等。若校验失败会以非零退出码让 Xcode 构建报错第一时间暴露问题后台上传阶段校验通过后以--build-phase参数在后台异步调用upload-symbols执行真正的 dSYM 转换与上传避免拖慢构建速度上传日志可在 Console.app 中搜索upload-symbols查看。需要详细输出时可给 run 脚本追加--debug标志。方案二使用 upload-symbols 脚本手动上传另一种做法是把 upload-symbols 脚本复制到工程目录例如.xcodeproj同级下的scripts/upload-symbols并赋予可执行权限chmod x scripts/upload-symbols之后即可用它手动上传 dSYM 文件。运行该脚本并携带--help参数可查看完整的用法说明与附加指令例如scripts/upload-symbols --help两种方案可依团队构建习惯选择需要自动化的 CI/本地构建推荐方案一临时补传符号文件或特殊构建流水线适合方案二。常见报错GOOGLE_APP_ID 缺失如果 Crashlytics run 脚本步骤报错error: Could not get GOOGLE_APP_ID in Google Services file from build environment且工程在 Xcode 15 中开启了User Script Sandboxing YES则需要把脚本阶段引用的全部输入文件Input Files显式列出否则沙箱会阻止脚本访问 GoogleService-Info.plist 等文件。请在 Crashlytics run 脚本的 Input Files 中补齐文档所述的输入文件清单或在脚本阶段关闭该沙箱选项二者择一即可。深入理解仓库的 Package.swift 清单理解清单结构有助于排查解析问题与定制依赖版本。仓库根目录 Package.swift 是全仓库 SPM 集成的一站式声明几个关键点依赖编排packageDependencies()声明了 Firebase 的底层依赖包括google/promises2.4.0 .. 3.0.0、google/GoogleDataTransport10.1.0 .. 11.0.0、google/GoogleUtilities8.1.3 .. 9.0.0、google/gtm-session-fetcher3.4.1 .. 6.0.0、firebase/nanopb2.30910.0 .. 2.30911.0、firebase/leveldb、google/interop-ios-for-google-sdks等以及按产品条件加载的 abseil、gRPC、App Check 依赖。当你的工程同时引入其他依赖时SPM 会据此进行版本图解析version graph resolution若与上述版本区间冲突会导致解析失败。target 与平台条件packageTargets()为每个产品声明 source 路径、头文件路径与链接设置。例如FirebaseCoretarget 设置cSettings中定义Firebase_VERSION为12.19.0并针对不同平台链接 UIKit / AppKit 框架FirebaseAuth通过swiftSettings锁定 Swift 5 语言模式并链接 Security、SafariServices 框架。这些细节由清单自动处理集成方通常无需干预。二进制分发部分产品如 FirebaseAnalytics通过binaryTarget以预编译 zip 形式分发并附带 checksum保证供应链完整性这也解释了为什么 Analytics 需要-ObjC见上文。环境开关清单支持通过环境变量切换源码形态例如设置FIREBASE_SOURCE_FIRESTORE后可使用源码版 Firestorelet shouldUseSourceFirestore Context.environment[FIREBASE_SOURCE_FIRESTORE] ! nil便于调试与高级集成场景。集成后的验证仓库内置的导入测试集成完成后如何确认所有产品导入正确仓库在 SwiftPMTests 目录下提供了专门的 SPM 导入验证测试可作为自检参考SwiftPMTests/swift-test/all-imports.swift一次性import全部 Firebase 产品FirebaseAuth、FirebaseCrashlytics、FirebaseDatabase、FirebaseFirestore、FirebaseFunctions、FirebaseMessaging、FirebaseRemoteConfig、FirebaseStorage等并按平台条件区分FirebaseAppDistribution、FirebasePerformance、FirebaseInAppMessaging测试还校验了FirebaseApp.app()在未初始化时应为 nil、版本号应形如x.y.z三段式等运行时行为。SwiftPMTests/objc-import-test/objc-module.m验证 Objective-C 工程中以import方式导入各 Firebase 模块的可行性。SwiftPMTests/analytics-import-test/firebase-import.swift验证 Analytics 导入后即可调用Analytics.logEvent(_:parameters:)上报事件如AnalyticsEventPurchase是-ObjC配置生效与否的间接检验。SwiftPMTests/version-test校验版本号在构建产物中的正确性。你自己的工程可以参照这些测试在集成完成后先写一个最小的import FirebaseAuth或所需产品编译验证确认模块可见、链接无误再进入功能开发。常见问题速查现象可能原因处理建议集成 Analytics 后无日志/事件上报缺少-ObjC链接标志在Build Settings→Other Linker Flags添加-ObjCCrashlytics run 脚本报Could not get GOOGLE_APP_ID ...Xcode 15 用户脚本沙箱拦截脚本访问在脚本 Input Files 中列出全部输入文件或关闭User Script SandboxingFailed to resolve dependencies依赖版本与其他包冲突核对 Package.swift 中依赖版本区间调整约束让版本图可解导入某产品报 module not found目标平台不受该产品支持参考平台可用性差异一节核对平台 × 产品组合运行时提示 FirebaseApp 未配置未添加 GoogleService-Info.plist 或未初始化确认在AppDelegate中调用FirebaseApp.configure()并正确导入 plist总结通过 Swift Package Manager 集成 Firebase既可以走 Xcode 的Add Packages…图形化流程也可以直接在Package.swift中声明依赖两者最终都解析到仓库 Package.swift 定义的统一产品与依赖体系。安装 Analytics 务必配置-ObjC使用 Crashlytics 则需按方案一或方案二配置 dSYM 上传并留意 Xcode 15 用户脚本沙箱的坑。集成完成后可对照仓库 SwiftPMTests 的导入测试做最小验证再逐步接入各产品功能。【免费下载链接】firebase-ios-sdkFirebase SDK for Apple App Development项目地址: https://gitcode.com/GitHub_Trending/fi/firebase-ios-sdk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表