| S002 | S015 |
|---|---|
| 강병민(mike123789-dev) | 류연수(yeonduing) |
| J124 | J153 | J190 |
|---|---|---|
| 유선규(sunkest) | 이유택(lcpnine) | 조병건(marulloc) |
프로젝트의 목적은 다양한 프로젝트에서 독립적으로 적용 가능한 User Event Collector 제작 입니다.
DIVE 의 동작을 보이기 위하여 NAVER 스트리밍 서비스 VIBE를 Clone하여 이벤트를 수집했습니다.
User Event Collector DIVE는 자유도 높게 설계되어 프로젝트 마다 복합적인 이벤트를 수집할 수 있으며,
수집한 데이터는 UI/UX 개선에 중요한 데이터가 될 것입니다.
- Event
- Event Collector에서 제공하는 모든 이벤트.
Event프로토콜 채택
- EventManager
- 이벤트를 로깅하기 위한 최상단 API, 실제로 로깅을하지는 않고,
EventEngine을 이용하여 보냄.
- EventEngine
- 직접적으로 로깅 전송/저장을 담당.
EventSendable,EventFetchable프로토콜 채택
public protocol Event: Codable {
var name: String { get }
var createdAt: String? { get }
var metadata: [String: String]? { get }
}기본적으로 제공되는 이벤트
class BaseEvent: Event {
var name: String
var createdAt: String?
var metadata: [String: String]?
public init(name: String, createdAt: String?, metadata: [String: String]?) {
self.name = name
self.createdAt = createdAt
self.metadata = metadata
}
}Event 프로토콜을 채택하는 Custom Event의 예시
struct ScreenEvent: Event {
var name: String
var metadata: [String: String]?
private init(name: String, metadata: [String: String]? = nil) {
self.name = name
self.metadata = metadata
}
static let playerPushed = ScreenEvent(name: "playerPushed")
static let playerPopped = ScreenEvent(name: "playerPopped")
}public protocol EventSendable: class {
func send<T: Event>(_ event: T)
}
public protocol EventFetchable: class {
func fetch() -> [BaseEvent]
}
public protocol EventSendableAndFetchable: EventSendable, EventFetchable {
}기본적으로 제공되는 Engine
public final class MockServerEngine: EventSendable {
public init() {
}
public func send<T: Event>(_ event: T) {
print("MockServer - \(event.name)")
event.metadata?.forEach { key, value in
print("ㄴ \(key) : \(value)")
}
}
}Event protocol로 구현함으로써, 새로운 이벤트를 추가하는것은 매우 간편해집니다.
Event protocol을 채택하는 custom type의 이벤트를 구현함으로써, 원하는 이벤트에 대한 자동완성 결과를 볼수 있습니다.
EventSendable, EventFetchableprotocol을 채택하는 엔진을 다양하게 구현할수 있습니다.
그리고 상황에 맞게 필요한 엔진을 갈아 끼우는것도 매우 쉽습니다.
또한, EventManager는 다수의 엔진을 가질 수도 있습니다.
실제로 저희 앱에서는 back end server를 위한 engine과 core data를 위한 engine 두개를 구현하고 주입했습니다.
어느 프로젝트에서도 사용 가능하도록 Swift package manager를 이용한 설치가 가능합니다.
- Xcode 메뉴에서 File > Swift Packages > Add Package Dependency를 선택후
https://github.com/mike123789-dev/DiveEventCollector를 입력합니다











