콘솔로 이동

iOS에서 Performance Monitoring 시작하기

시작하기 전에

아직 추가하지 않았다면 iOS 프로젝트에 Firebase를 추가합니다.

1단계: 앱에 Performance Monitoring 추가

  1. 프로젝트용으로 만든 Podfile을 열거나 pod init을 실행하여 Podfile을 만든 후 대상 섹션 안에 다음 줄을 추가합니다.

    pod 'Firebase/Analytics'
    pod 'Firebase/Performance'
  2. Podfile 디렉토리에서 다음 명령어를 실행하여 Performance Monitoring SDK를 설치합니다.

    pod install
  3. Xcode를 사용하여 .xcworkspace 파일을 엽니다.

  4. UIApplicationDelegate에서 Firebase 모듈을 가져옵니다.

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  5. 일반적으로 앱의 application:didFinishLaunchingWithOptions: 메소드에서 FirebaseApp 공유 인스턴스를 구성합니다.

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. 앱을 다시 컴파일합니다.

이제 Firebase는 자동 traceHTTP/S 네트워크 요청을 모니터링합니다.

2단계: Firebase Console에서 Performance Monitoring 결과 확인

  1. Xcode 시뮬레이터에서 앱을 실행합니다(Product(제품) -> Run(실행)).

  2. Firebase Console에 Performance Monitoring 결과가 나타나는지 확인합니다.

    결과는 일반적으로 12시간 이내에 나타납니다.

3단계: (선택사항) 맞춤 trace 및 맞춤 측정항목 추가

맞춤 trace는 앱의 특정 코드에 연결된 성능 데이터 보고서입니다. 맞춤 trace에 관한 자세한 내용은 Performance Monitoring 개요를 참조하세요.

앱에 맞춤 trace가 여러 개 있을 수 있으며, 한 번에 둘 이상의 커스텀 trace를 실행할 수도 있습니다. 각 맞춤 trace에는 앱의 성능 관련 이벤트를 계수하는 하나 이상의 측정항목이 있을 수 있으며, 이러한 측정항목은 해당 측정항목을 생성한 trace와 연결됩니다.

맞춤 trace와 측정항목의 이름에는 선행 공백이나 후행 공백, 선행 밑줄(_)이 없어야 하며, 이름의 최대 길이는 32자(영문 기준)입니다.

  1. 헤더에 Performance Monitoring 모듈을 추가합니다.

    Swift

    import FirebasePerformance
    

    Objective-C

    @import FirebasePerformance;
    
  2. 맞춤 trace를 시작 및 중지하려면 trace를 생성할 코드를 다음과 유사한 코드 줄로 래핑해야 합니다.

    Swift

    let trace = Performance.startTrace(name: "customTraceName")
    
    // code that you want to trace
    
    trace.stop()
    

    Objective-C

    FIRTrace *trace = [FIRPerformance startTraceWithName:@"customTraceName"];
    
    // code that you want to trace
    
    [trace stop];
    
  3. 맞춤 측정항목을 추가하려면 이벤트가 발생할 때마다 다음과 유사한 코드 줄을 추가합니다. 예를 들어 이 맞춤 측정항목은 캐시 적중 또는 재시도와 같은 성능 관련 이벤트를 계수합니다.

    Swift

    let trace = Performance.startTrace(name: "customTraceName")
    
    trace.incrementMetric(named:"eventName", by: 1)
    // code that you want to trace (and log custom metrics)
    
    trace.stop()
    

    Objective-C

    FIRTrace *trace = [FIRPerformance startTraceWithName:@"customTraceName"];
    
    [trace incrementMetric:@"eventName" by:1];
    // code that you want to trace (and log custom metrics)
    
    [trace stop];
    

4단계: (선택사항) 특정 네트워크 요청의 모니터링 추가

Performance Monitoring에서는 네트워크 요청을 자동으로 수집합니다. 앱의 네트워크 요청이 대부분 포함되지만 일부는 보고되지 않을 수도 있습니다.

Performance Monitoring에 맞춤 네트워크 요청을 포함하려면 앱에 다음 코드를 추가합니다.

Swift

guard let metric = HTTPMetric(url: "https://www.google.com", httpMethod: .get) else { return }

metric.start()
guard let url = URL(string: "https://www.google.com") else { return }
let request: URLRequest = URLRequest(url:url)
let session = URLSession(configuration: .default)
let dataTask = session.dataTask(with: request) { (urlData, response, error) in
        if let httpResponse = response as? HTTPURLResponse {
         metric.responseCode = httpResponse.statusCode
        }
        metric.stop()
}
dataTask.resume()

Objective-C

@property (nonatomic) FIRHTTPMetric *metric;

- (void)beginManualNetworkInstrumentation {
  self.metric =
      [[FIRHttpMetric alloc] initWithURL:[NSURL URLWithString:@"https://www.google.com"]
                              HTTPMethod:FIRHTTPMethodGET];

  [self.metric start];

  NSURLRequest *request =
      [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.google.com"]];
  NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
                                                                delegate:self];
  [connection resume];
}

- (void)connection:(NSURLConnection *)connection
    didReceiveResponse:(NSURLResponse *) response {
  NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response
  self.metric.responseCode = httpResponse.statusCode;
  [self.metric stop];
}

이런 방식으로 특별히 캡처한 HTTP/S 네트워크 요청은 Performance Monitoring에서 자동으로 캡처한 네트워크 요청과 함께 Firebase Console에 표시됩니다.

5단계: 앱 배포 후 결과 확인

Xcode 시뮬레이터와 하나 이상의 테스트 기기를 사용하여 Performance Monitoring을 검증한 후 업데이트된 앱 버전을 사용자에게 배포할 수 있습니다.

Firebase Console에서 성능 데이터를 모니터링할 수 있습니다.

알려진 문제

  • Performance Monitoring과 GTMSQLite의 호환성 문제가 있는 것으로 알려져 있습니다. GTMSQLite를 사용하는 앱에서는 Performance Monitoring을 사용하지 않는 것이 좋습니다.
  • FirebaseApp.configure()를 호출한 후 메소드 재구성이 Performance Monitoring SDK를 방해할 수 있습니다.
  • iOS 8.0~8.2 시뮬레이터의 알려진 문제로 인해 Performance Monitoring에서 성능 이벤트를 캡처하지 못합니다. iOS 8.3 시뮬레이터 및 이후 버전에서는 이 문제가 해결되었습니다.
  • NSURLSession의 backgroundSessionConfiguration을 사용하여 설정한 연결은 연결 시간이 예상보다 깁니다. 이러한 연결은 프로세스 외부에서 실행되며 실행 시기가 처리 중인 콜백 이벤트를 반영합니다.

다음 단계