Firebase의 새로운 SDK를 사용하고 싶다면 Cocoapods 1.0.0 이상을 사용하십시오.

TL;DR



요 전날 공개된 Firebase의 새로운 SDK를 사용하고 싶은 경우는, Cocoapods의 1.0.0 이상을 이용해 SDK의 도입을 실시한다.
로깅시의 AOP 라이브러리에서 Aspects를 이용하고 있는 경우에, 에러가 나오는 경우는 MOAspect로 환승하자.

고민한 것



Cocoapods 버전 0.39.0으로 새로워진 Firebase SDK를 설치하려고 하면 Segmentation fault: 11 라는 오류가 발생하여 빌드를 할 수 없다. FIR 로 시작하는 클래스가 코드상에 출현하지 않으면 (코멘트 아웃 등을 해) 빌드가 성공하기 때문에, Firebase의 SDK의 인스톨 방법에 문제가 있을 것 같은 느낌이었다.
  1. While loading members for 'FIRDatabaseReference' at <invalid loc>
  2. While deserializing decl #101 (PATTERN_BINDING_DECL)
  3. While deserializing decl #2 (VAR_DECL)

해결책



StackOverflow에 문제와 해결책이 있었고 Cocoapods 버전이 오래된 것이 문제처럼 보였습니다.
h tp : / / s tac ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 37347327 / u pg 등으로 d 푹 빠지면 세의 w

업데이트하면 무사히 컴파일이 성공했다.
그런 하루.



Cocoapods의 1.0.0을 이용하면 화면 표시를 GoogleAnalytics에 전송할 때 이용하고 있는 Aspects( htps : // 기주 b. 코 m / s 테이 페테 / 아 s pects )의 임포트시에 에러가 나게 되어 버렸다.



만들고 있는 앱에서는 GA에의 송신을 위해서만 AOP를 이용하고 있으므로, 최악 각 ViewController의 viewWillAppear(_:) 혹은 Aspects를 Cocoapods를 1.0.0에서 이용할 수 있도록 할 수 없는지 조사하기로 했다.

iOS에서 AOP를 할 수 있는 라이브러리



  • htps : // 기주 b. 코 m / s 테이 페테 / 아 s pects
  • Star 수가 3000 초과
  • 일부 로그 전송 라이브러리에서 종속 라이브러리로 사용되는 것처럼


  • htps : // 기주 b. 코 m / 모아이 / 모아 s pects
  • ぃ tp // 이 m / __도 합 / / ms / 에 fcd43016b9320cf6d63
  • Swift에서도 특히 스트레스없이 사용할 수 있습니다


  • 쉽게 찾은 곳, 위 두 가지.

    결론



    MOAspects를 이용하면 순조롭게 갈 수 있었다.
    UIViewController의 viewWillAppear(_:) 의 After에 Hook를 설정해, ScreenTrackable라고 하는 프로토콜에 준거한 ViewController의 경우만, 그 ScreenTrackable 프로토콜의 tracking이라고 하는 메소드를 실행하게 되어 있다.
    func setupHook() {
        MOAspects.hookInstanceMethodForClass(UIViewController.self,
            selector: #selector(UIViewController.viewWillAppear(_:)),
            position: .After,
            range: MOAspectsHookRangeAll) { (instance: AnyObject!) -> Void in
                if let instance = instance as? UIViewController {
                    if let viewController = instance as? ScreenTrackable {
                        viewController.tracking()
                    }
                }
        }
    }
    

    덧붙여서 ScreenTrackable 프로토콜은 이런 느낌.

    UIViewController+ScreenTrackable.swift
    protocol ScreenTrackable {
        func tracking()
    }
    
    extension ScreenTrackable where Self: UIViewController {
        func tracking() {
            let sceneName = self.sceneName() // クラス名からGAに送信するファイル名を取得する(※1)
            Event.Screen(sceneName).send() // GAに送信
        }
    }
    

    클래스명으로부터 GA에 송신하는 파일명을 취득하는 부분(※1)은, ぃ tp // m / t t / / ms / 647 094936287 6bd2d3 등에 방법이 쓰여져 있다. 또한, 그대로 클래스 명을 송신하는 것이 아니라, 대응하는 일본어의 화면 명으로 다시 송신하고있다. 이렇게 함으로써 GA로 현격하게 보기 쉬워진다.

    좋은 웹페이지 즐겨찾기