Symbiote 0.3.0

Symbiote 0.3.0

测试已测试
Lang语言 SwiftSwift
许可 BSD
发布最新版本2017年2月
SwiftSwift 版本3.0
SPM支持 SPM

Vectorform 维护。



Symbiote 0.3.0

Symbiote

由Vectorform创建和维护。

关于

Symbiote是一个支持多平台的分析框架,它自动在您的应用程序中启用基本分析,并且可以通过事件处理器轻松扩展。通过从分析子类中派生UIButtons和UIViewControllers并提供视图名称,可以启用扩展的分析支持。可以通过实现简单的事件记录协议来集成不支持的分析平台。可以轻松创建自定义事件。可以通过添加到事件总线的自定义事件处理器(通过EventFilters进行过滤)来过滤和处理事件(添加/编辑/删除/分析数据)。

目前支持的平台

  • 亚马逊移动分析
  • Flurry
  • 简单日志 (仅限调试!)

安装

Swift 2

为了支持Swift 2,您必须使用版本0.1.2。

参考文档

您可以在Cocoadocs上找到最新的参考文档。您可以使用Docs for Xcode或通过Dash安装此文档到Xcode中。在docs页面上,点击右上角的“分享”按钮。

使用方法

要运行示例项目,请先克隆仓库,然后在示例目录中首先运行pod install

作者

Johannes Start,[email protected]

贡献者

Aaron DeGrow,[email protected]

协议

Symbiote遵循BSD许可证。有关更多信息,请参阅LICENSE文件。

获取帮助

如果您发现了一个bug,请随意提交一个issue。在进行下一步之前,请参阅贡献指南

入门

基本自动分析

要开始使用Symbtiote和简单的自动分析集成,您需要将pod 'Symbiote’添加到您的podfile中。运行pod install之后,您就能在项目中使用它了。自动分析使用替换技术集成到所有UIViewControllers和UIEvents中,以确定视图何时显示、消失或按钮何时被按下。在您的AppDelegate的init中,您必须导入Symbiote并启用日志提供者

import UIKit
import Symbiote

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    override init() {
        super.init()

        // Enable simple log provider to print all output.
        // TODO: Disable for production build!
        Symbiote.SharedInstance.register(analyticsProvider: DebugLogProvider());
    }

}

分析提供者

默认提供者(DebugLogProvider)将简单地打印您的分析事件以进行调试目的。请不要在生产环境中使用此提供者。要启用支持的分析提供者之一,请将相关的子规范添加到您的podfile中:pod 'Symbiote/Provider/AWSAnalytics'目前可用的子规范如下

pod 'Symbiote/Provider/DebugLog' # Included by default.
pod 'Symbiote/Provider/AWSMobileAnalytics'
pod 'Symbiote/Provider/FlurryAnalytics'

高级自动分析(基类)

要启用高级自动分析,您需要使用提供的基类为所有UIViewControllersUINavigationControllersUIButtons或实现AnalyticsCompatible协议。这将使Symbiote能够自动创建视图路径和层次结构,并根据相应进行记录。

UIViewControllers

import UIKit
import Symbiote

class SampleViewController: AnalyticsEnabledViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        analyticsDescription = "SampleViewController"
    }

}

使用支持分析的UINavigationControllers

import UIKit
import Symbiote

class SampleNavigationController: AnalyticsEnabledNavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()
        analyticsDescription = "SampleNavigationController"
        // Optionally set parentViewController
        parentViewController = aViewController
    }

}

使用支持分析的UIButtons

let sampleEventButton:AnalyticsEnabledButton = AnalyticsEnabledButton(frame: CGRectMake(100, 200, 100, 50))
sampleEventButton.setTitle("Sample Button Event", forState: UIControlState.Normal)
sampleEventButton.parentViewController = self
sampleEventButton.analyticsDescription = "SampleEventButton"

为了让更灵活,AnalyticsEnabledButton也可以从子类派生。UIButtons可以使用自定义分析事件用于UIControlEvents.TouchUpInside

sampleEventButton.customEvent = Event(sender: AnalyticsExtensions.SampleSender, action: AnalyticsExtensions.SampleAction)

事件

您可以通过使用Event类来创建和记录事件。Symbiote附带了一些集成的事件属性。在大多数情况下,创建自定义事件方法、发送者和事件是有意义的,因为默认的事件仅限于基本的iOS功能。

方法

方法定义了事件是如何被记录的。这可能是通过SwizzlingDirectCallAppDelegateCall。当创建和发送自定义事件时,事件方法应该是Event.Methods.DirectCall - 这是默认的。集成的方法

  • Event.Methods.Generic
  • Event.Methods.SwizzleHook
  • Event.Methods.SubclassHook
  • Event.Methods.App DelegateCall
  • Event.Methods.DirectCall

可以通过创建一个新的Event.Method来定义自定义方法

let AnalyticsMethodBluetoothDeviceBridge = Event.Method("BluetoothDeviceBridge")

发送者

发送者表示发送事件的对象的类。发送者包括AppDelegate (App)UIViewController (View)UIButton (Button)。集成发送者

  • Event.Senders.Generic
  • Event.Senders.Button
  • Event.Senders.View
  • Event.Senders.App

发送者是通过对Event创建一个新的Event.Sender来创建的

let AnalyticsSenderMap = Event.Sender("Map") // Map components that log/send events

操作

操作定义了应用于发送者的操作。一个按钮可以被按下,一个视图可以出现。集成操作

  • Event.Actions.Generic
  • Event.Actions.Press
  • Event.Actions.Appear
  • Event.Actions.Disappear
  • Event.Actions.Start
  • Event.Actions.Foreground
  • Event.Actions.Background
  • Event.Actions.Active
  • Event.Actions.Resign
  • Event.Actions.Terminate

针对AnalyticsSenderMap的自定义操作可以是成功定位用户:定位。操作是通过创建Event.Action定义的

let AnalyticsActionLocated = Event.Action("Located")

数据 & 数据描述符

事件可以包含额外的数据以跟踪重要的指标。当视图消失时,了解它在屏幕上持续了多长时间很有帮助,所以事件的数据字典可以有一个包含此指标的关键字。为了简化并标准化这些关键字,Symbiote使用数据描述符。向数据字典添加自定义指标时,必须使用默认数据描述符或创建自定义数据描述符。集成数据描述符

  • Event.DataDescriptors.ViewName
  • Event.DataDescriptors.SelectorName
  • Event.DataDescriptors.Path

要创建自定义数据描述符,创建Event.DataDescriptor

let AnalyticsDataDescriptorsLocationAccuracy = Event.DataDescriptor("LocationAccuracy")

自定义日志事件

具有默认参数的事件

Symbiote.SharedInstance.log(event: Event(method: Event.Methods.AppDelegateCall, sender: Event.Senders.App, action: Event.Actions.Start, data: [:]))

具有自定义参数的事件

let locationAccuracy = "10m"
Symbiote.SharedInstance.log(event: Event(sender: AnalyticsSenderMap, action: AnalyticsActionLocated, data: [ AnalyticsDataDescriptorsLocationAccuracy: locationAccuracy ]))

事件处理器 & 过滤器

事件处理器可以添加/编辑/删除分析事件中的数据或禁止记录。它们按添加的顺序在记录之前执行。添加事件处理器时,必须设置一个过滤器来定义特定处理器可能在什么类型的事件上执行。要为所有事件启用处理器,请使用如AllowAllFilter之类的过滤器。这就是如何使用过滤器注册事件处理器的方法

// Sample of how to prohibit all events with a .App sender
Symbiote.SharedInstance.register(eventProcessor: ProhibitAllProcessor(), filter: SimpleGenericFilter(filterSenders: [Event.Senders.App]))