测试已测试 | ✗ |
Lang语言 | SwiftSwift |
许可 | BSD |
发布最新版本 | 2017年2月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Vectorform 维护。
由Vectorform创建和维护。
Symbiote是一个支持多平台的分析框架,它自动在您的应用程序中启用基本分析,并且可以通过事件处理器轻松扩展。通过从分析子类中派生UIButtons和UIViewControllers并提供视图名称,可以启用扩展的分析支持。可以通过实现简单的事件记录协议来集成不支持的分析平台。可以轻松创建自定义事件。可以通过添加到事件总线的自定义事件处理器(通过EventFilters进行过滤)来过滤和处理事件(添加/编辑/删除/分析数据)。
为了支持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'
要启用高级自动分析,您需要使用提供的基类为所有UIViewControllers、UINavigationControllers和UIButtons或实现AnalyticsCompatible协议。这将使Symbiote能够自动创建视图路径和层次结构,并根据相应进行记录。
import UIKit
import Symbiote
class SampleViewController: AnalyticsEnabledViewController {
override func viewDidLoad() {
super.viewDidLoad()
analyticsDescription = "SampleViewController"
}
}
import UIKit
import Symbiote
class SampleNavigationController: AnalyticsEnabledNavigationController {
override func viewDidLoad() {
super.viewDidLoad()
analyticsDescription = "SampleNavigationController"
// Optionally set parentViewController
parentViewController = aViewController
}
}
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功能。
方法定义了事件是如何被记录的。这可能是通过Swizzling、DirectCall或AppDelegateCall。当创建和发送自定义事件时,事件方法应该是Event.Methods.DirectCall - 这是默认的。集成的方法
可以通过创建一个新的Event.Method来定义自定义方法
let AnalyticsMethodBluetoothDeviceBridge = Event.Method("BluetoothDeviceBridge")
发送者表示发送事件的对象的类。发送者包括AppDelegate (App)、UIViewController (View)或UIButton (Button)。集成发送者
发送者是通过对Event创建一个新的Event.Sender来创建的
let AnalyticsSenderMap = Event.Sender("Map") // Map components that log/send events
操作定义了应用于发送者的操作。一个按钮可以被按下,一个视图可以出现。集成操作
针对AnalyticsSenderMap的自定义操作可以是成功定位用户:定位。操作是通过创建Event.Action定义的
let AnalyticsActionLocated = Event.Action("Located")
事件可以包含额外的数据以跟踪重要的指标。当视图消失时,了解它在屏幕上持续了多长时间很有帮助,所以事件的数据字典可以有一个包含此指标的关键字。为了简化并标准化这些关键字,Symbiote使用数据描述符。向数据字典添加自定义指标时,必须使用默认数据描述符或创建自定义数据描述符。集成数据描述符
要创建自定义数据描述符,创建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]))