Swiftalytics
允许您使用面向切面编程,在单个文件中用简洁的一行代码声明应用程序中所有分析视图跟踪!
func setupScreenTracking() {
AuthorsViewController.self >> "Authors (start)"
QuoteViewController.self >> { "Quote: "+$0.author.name }
NewQuoteViewController.self >> .navigationTitle
RandomQuoteViewController.computedPageName<<
}
extension UIViewController {
// Swizzle viewDidAppear and report to your favorite analytics service
func swizzled_viewDidAppear(animated: Bool) {
if let name = Swiftalytics.trackingName(for: self) {
ARAnalytics.pageView(name)
println("Tracked view controller: "+name)
}
}
}
嵌入式框架需要最低部署目标为iOS 8或OS X Mavericks。
要使用针对iOS 7的项目上的Swiftalytics,您必须直接在项目中包含源文件。
使用setTrackingName(for:)
函数为特定视图控制器类型声明跟踪名称。该函数具有针对静态和动态类型的多个不同类型签名。
// Static
Swiftalytics.setTrackingName(for: MasterViewController.self, name: "Start view")
// Dynamic with closure
Swiftalytics.setTrackingNameForViewController(for: DetailViewController.self) { "Detail: \($0.dataObject.name)" }
// Dynamic using navigation item title
Swiftalytics.setTrackingNameForViewController(for: SettingsViewController.self, trackingType:.navigationTitle)
// Dynamic with function
Swiftalytics.setTrackingNameForViewController(for: OtherViewController.functionProducingAString)
使用trackingName(for:)
函数检索已为特定视图控制器声明的名称。在使用动态跟踪时,当调用此函数时将计算该视图控制器的跟踪名称。
extension UIViewController {
func viewDidAppear(animated: Bool) {
if let name = Swiftalytics.trackingName(for: self) {
// Report to your analytics service
println("Tracked view controller: "+name)
}
}
}
通过扩展UIViewController,您可以选择在视图生命周期中将分析事件发送到供应商的SDK或进行内部日志记录。《a href="https://github.com/orta/ARAnalytics">ARAnalytics强烈建议使用它将应用程序与选择的提供商解耦。
推荐使用自定义运算符来使用Swiftalytics,以实现简洁的领域特定语言。由于运算符重载在Swift中可能导致污染,因此框架中没有声明任何运算符。相反,建议创建一个用于视图跟踪的Swift文件,并在这个文件中使用私有作用域运算符,并在其中声明所有页面名称。
postfix operator <<
private postfix func <<<T: UIViewController>(trackClassFunction: @escaping ((T) -> () -> String)) {
Swiftalytics.setTrackingName(for: trackClassFunction)
}
private func >> <T: UIViewController>(left: T.Type, right: @autoclosure () -> String) {
Swiftalytics.setTrackingName(for: left, name: right)
}
private func >> <T: UIViewController>(left: T.Type, right: TrackingNameType) {
Swiftalytics.setTrackingName(for: left, trackingType: right)
}
private func >> <T: UIViewController>(left: T.Type, right: @escaping ((T) -> String)) {
Swiftalytics.setTrackingName(for: left, nameFunction: right)
}
请参阅演示项目中的ScreenTracking.swift,以获取建议的配置。
包含的示例项目展示了一个推荐视图跟踪设置,其中包含静态和动态跟踪。
Swiftalytics遵循MIT许可证。有关更多信息,请参阅LICENSE文件。