分析开发专家Skill analytics-developer

这个技能专注于iOS移动应用中的分析系统开发,包括添加分析事件、跟踪用户路由路径、维护代码规范,以支持数据驱动的决策和用户体验优化。关键词:iOS分析、移动开发、事件跟踪、路由管理、代码规范、数据监控、用户行为分析。

移动开发 0 次安装 0 次浏览 更新于 3/15/2026

name: 分析开发 description: 上下文感知路由到Anytype iOS分析系统。在添加分析事件、跟踪用户路由或使用AnytypeAnalytics和AnalyticsConstants时使用。

分析开发专家(智能路由器)

目的

上下文感知路由到Anytype iOS分析系统。帮助您添加分析事件、跟踪用户路由,并维护一致的分析模式。

何时自动激活

  • 处理分析事件或AnytypeAnalytics时
  • 添加路由跟踪或事件属性时
  • 修改AnalyticsConstants.swiftAnytypeAnalytics+Events.swift
  • 关键词:分析、路由跟踪、logEvent、AnytypeAnalytics、AnalyticsConstants

🚨 关键规则(切勿违反)

  1. 始终在AnalyticsConstants.swift中定义路由枚举 - 切勿硬编码路由字符串
  2. 始终使用现有属性键 - 使用AnalyticsEventsPropertiesKey.*
  3. 切勿使用字符串字面量作为路由 - 使用带.rawValue的类型化枚举
  4. 始终对可选属性使用.compactMapValues { $0 } - 移除nil值
  5. 始终跟踪路由上下文 - 了解用户如何到达某个功能

📋 快速工作流

添加新分析事件

  1. 定义路由枚举(如果需要):添加到AnalyticsConstants.swift
  2. 添加事件方法:添加到AnytypeAnalytics+Events.swift
  3. 在代码中使用:调用AnytypeAnalytics.instance().logYourEvent(...)

为现有屏幕添加路由跟踪

  1. 定义路由枚举:将YourFeatureRoute添加到AnalyticsConstants.swift
  2. 更新数据模型:添加route: YourFeatureRoute?参数
  3. 通过层次结构传递:Coordinator → View → ViewModel
  4. 更新分析调用:将路由传递给现有的日志方法

🎯 常见模式

模式1:屏幕分析(onAppear)

// ViewModel
final class HomeWidgetsViewModel {
    let route: HomeWidgetRoute?

    func onAppear() {
        AnytypeAnalytics.instance().logScreenWidget(route: route)
    }
}

// 分析方法(AnytypeAnalytics+Events.swift)
func logScreenWidget(route: HomeWidgetRoute?) {
    logEvent("ScreenWidget", withEventProperties: [
        AnalyticsEventsPropertiesKey.route: route?.rawValue
    ].compactMapValues { $0 })
}

// 路由枚举(AnalyticsConstants.swift)
enum HomeWidgetRoute: String, Hashable, Codable {
    case home = "Home"
    case space = "Space"
    case appLaunch = "AppLaunch"
}

模式2:按钮点击分析

// ViewModel
func onTapShare() {
    AnytypeAnalytics.instance().logClickShare(type: .link, route: .settings)
    output?.onShareSelected()
}

// 分析方法
func logClickShare(type: ShareType, route: ShareRoute) {
    logEvent("ClickShare", withEventProperties: [
        AnalyticsEventsPropertiesKey.type: type.rawValue,
        AnalyticsEventsPropertiesKey.route: route.rawValue
    ])
}

模式3:多空间事件

func logCreateObject(objectType: AnalyticsObjectType, spaceId: String, route: AnalyticsEventsRouteKind) {
    logEvent("CreateObject", spaceId: spaceId, withEventProperties: [
        AnalyticsEventsPropertiesKey.objectType: objectType.analyticsId,
        AnalyticsEventsPropertiesKey.route: route.rawValue
    ])
}

🗂️ 分析文件结构

关键文件

  • AnalyticsConstants.swift - 所有路由枚举、属性键(400+行)
  • AnytypeAnalytics+Events.swift - 所有事件方法(1,500+行)
  • Converters/ - 领域类型到分析值转换器

路由枚举位置

始终添加到AnalyticsConstants.swift,按功能分组:

// 小部件相关路由
enum AnalyticsWidgetRoute: String {
    case addWidget = "AddWidget"
    case inner = "Inner"
}

enum HomeWidgetRoute: String, Hashable, Codable {
    case home = "Home"
    case space = "Space"
    case appLaunch = "AppLaunch"
}

// 屏幕导航路由
enum SettingsSpaceShareRoute: String {
    case settings = "Settings"
    case navigation = "Navigation"
    case chat = "Chat"
}

📈 路由跟踪实现

分步指南:为屏幕添加路由

示例:为ScreenWidget添加路由跟踪

  1. 定义路由枚举(AnalyticsConstants.swift):
enum HomeWidgetRoute: String, Hashable, Codable {
    case home = "Home"            // 主页按钮点击
    case space = "Space"          // 空间选择
    case appLaunch = "AppLaunch"  // 应用启动
}
  1. 更新数据模型
struct HomeWidgetData: Hashable {
    let spaceId: String
    let route: HomeWidgetRoute?  // 添加路由参数
}
  1. 通过视图层次结构传递
// Coordinator
HomeWidgetsView(info: info, output: model, route: data.route)

// View
HomeWidgetsViewModel(info: info, output: output, route: route)
  1. 更新分析调用
// ViewModel
func onAppear() {
    AnytypeAnalytics.instance().logScreenWidget(route: route)
}

// 分析方法
func logScreenWidget(route: HomeWidgetRoute?) {
    logEvent("ScreenWidget", withEventProperties: [
        AnalyticsEventsPropertiesKey.route: route?.rawValue
    ].compactMapValues { $0 })
}
  1. 在导航点设置路由
// 主页按钮
let data = HomeWidgetData(spaceId: spaceId, route: .home)

// 空间选择
let data = HomeWidgetData(spaceId: spaceId, route: .space)

// 应用启动
let data = HomeWidgetData(spaceId: spaceId, route: .appLaunch)

🔧 常见属性键

位于AnalyticsEventsPropertiesKey中:

用法 示例
route 导航上下文 .home, .navigation, .widget
type 主要分类 .image, .video, .file
objectType 对象类型ID type.analyticsType.analyticsId
spaceId 空间标识符 document.spaceId
count 数量值 项目数量
format 数据格式 文件格式、日期格式

⚠️ 常见错误

❌ 硬编码路由字符串

// 错误
AnytypeAnalytics.instance().logScreenWidget(route: "Home")

// 正确
AnytypeAnalytics.instance().logScreenWidget(route: .home)

❌ 路由枚举放在错误文件中

// 错误 - 在功能文件中定义
enum HomeWidgetRoute: String {
    case home = "Home"
}

// 正确 - 在AnalyticsConstants.swift中定义

❌ 缺少compactMapValues

// 错误 - 会将nil值包含为NSNull
[AnalyticsEventsPropertiesKey.route: route?.rawValue]

// 正确 - 移除nil值
[AnalyticsEventsPropertiesKey.route: route?.rawValue].compactMapValues { $0 }

❌ 使用字符串字面量作为属性键

// 错误
["route": route.rawValue]

// 正确
[AnalyticsEventsPropertiesKey.route: route.rawValue]

🔍 查找现有模式

# 搜索现有事件
rg "logEvent.*EventName" Anytype/Sources/Analytics/

# 查找路由枚举
rg "enum.*Route.*String" Anytype/Sources/Analytics/AnalyticsConstants.swift

# 查找属性使用
rg "AnalyticsEventsPropertiesKey\." Anytype/Sources/Analytics/

# 查找屏幕分析
rg "func logScreen" Anytype/Sources/Analytics/AnytypeAnalytics+Events.swift

📚 完整文档

完整指南Anytype/Sources/PresentationLayer/Common/Analytics/ANALYTICS_PATTERNS.md

涵盖以下内容:

  • 分析系统架构
  • 所有分析模式(用户操作、屏幕导航、内容创建)
  • 路由上下文跟踪最佳实践
  • 平台特定考虑
  • 测试分析事件
  • 添加参数的迁移模式
  • 完整示例和代码片段

✅ 工作流检查清单

添加分析时:

  • [ ] 路由枚举添加到AnalyticsConstants.swift
  • [ ] 事件方法添加到AnytypeAnalytics+Events.swift
  • [ ] 使用现有属性键(AnalyticsEventsPropertiesKey.*
  • [ ] 可选属性使用.compactMapValues { $0 }
  • [ ] 路由通过视图层次结构传递(如果跟踪导航)
  • [ ] 无硬编码字符串用于路由或属性键
  • [ ] 遵循现有命名约定(PascalCase事件、camelCase属性)

🔗 相关技能和文档

  • ios-dev-guidelinesIOS_DEVELOPMENT_GUIDE.md - 用于传递分析数据的MVVM/Coordinator模式
  • code-generation-developer → 理解构建系统
  • design-system-developer → 跟踪UI交互

导航:这是一个智能路由器。对于深度模式和示例,始终参考ANALYTICS_PATTERNS.md