如何在iOS应用中按Scheme切换Crashlytics崩溃报告?
当然可以实现!不过得先明确一点:Crashlytics本身并不直接识别Xcode里的「Scheme」,但我们可以通过Scheme关联的构建配置,或者给不同Scheme的构建打上专属标记,让Crashlytics能精准区分Development和Release版本的崩溃报告。下面是两种最常用的实现方式:
方法1:用不同Bundle ID将两个构建版本拆分为独立应用
如果你的两个Scheme(Dev和Release)分别对应不同的Build Configuration,最简单的方式是给每个配置设置唯一的Bundle ID:
- 比如Development配置用
com.yourcompany.yourapp.dev - Release配置用
com.yourcompany.yourapp
这样Crashlytics会把它们当成两个完全独立的应用项目,你只需要在Crashlytics控制台的应用列表里切换,就能分别查看对应Scheme的崩溃报告了。这种方式最省心,不需要额外写代码。
方法2:给不同构建版本打自定义标记,用筛选器区分
如果不想修改Bundle ID(比如要保持统一的应用标识),可以给不同Scheme对应的构建添加自定义维度,然后在Crashlytics里筛选:
给Scheme关联的Configuration添加预编译宏
打开Xcode的项目设置,找到对应Scheme的Build Configuration(比如Development),在「Build Settings」的「Other Swift Flags」(或「Other C Flags」)里添加:-D DEVELOPMENT_BUILD在App启动时设置Crashlytics自定义属性
在AppDelegate或启动入口的代码里,添加判断逻辑,给不同构建版本打上标记:import FirebaseCrashlytics func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // 初始化Firebase/Crashlytics FirebaseApp.configure() #if DEVELOPMENT_BUILD Crashlytics.crashlytics().setCustomValue("Development", forKey: "BuildType") #else Crashlytics.crashlytics().setCustomValue("Release", forKey: "BuildType") #endif return true }在Crashlytics控制台筛选查看
打开Crashlytics的崩溃报告页面,点击顶部的「Filters」按钮,找到你设置的BuildType维度,选择「Development」或「Release」,就能只查看对应Scheme构建版本的崩溃报告了。
额外技巧:通过构建版本号/配置筛选
如果你是用不同Scheme打包Archive(比如Dev Scheme打Dev包,Release Scheme打正式包),Crashlytics会自动记录每个构建的版本号、Build号以及对应的Build Configuration信息。你也可以在Crashlytics的「Builds」页面,直接筛选对应的构建版本,或者在「Versions」下拉菜单里切换查看。
总结下来,核心就是让Crashlytics能识别不同Scheme对应的构建差异——要么拆分应用,要么打标记筛选,两种方法都能完美实现你的需求。
内容的提问来源于stack exchange,提问作者ken

