Apple 플랫폼에서 Performance Monitoring 시작하기

시작하기 전에

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

1단계: 앱에 Performance Monitoring 추가

Performance Monitoring SDK를 추가하면 Firebase에서 앱의 화면 렌더링에 대한 데이터, 앱의 수명 주기와 관련된 데이터(예: 앱 시작 시간), HTTP/S 네트워크 요청에 대한 데이터를 자동으로 수집하기 시작합니다.

Swift Package Manager를 사용해 Firebase 종속 항목을 설치하고 관리하세요.

  1. 앱 프로젝트를 연 상태로 Xcode에서 File(파일) > Add Packages(패키지 추가)로 이동합니다.
  2. 메시지가 표시되면 Firebase Apple 플랫폼 SDK 저장소를 추가합니다.
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Performance Monitoring 라이브러리를 선택합니다.
  5. 타겟 빌드 설정의 Other Linker Flags(기타 링커 플래그) 섹션에 -ObjC 플래그를 추가합니다.
  6. 완료되면 Xcode가 백그라운드에서 자동으로 종속 항목을 확인하고 다운로드하기 시작합니다.

그런 다음 Firebase 모듈을 구성합니다.

  1. UIApplicationDelegateFirebaseCore 모듈과 앱 대리자가 사용하는 다른 Firebase 모듈을 가져옵니다. 예를 들어 Cloud FirestoreAuthentication을 사용하려면 다음을 따르세요.

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. 앱 대리자의 application(_:didFinishLaunchingWithOptions:) 메서드에서 FirebaseApp 공유 인스턴스를 구성합니다.

    SwiftUI

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

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. SwiftUI를 사용하는 경우 앱 대리자를 만들고 UIApplicationDelegateAdaptor 또는 NSApplicationDelegateAdaptor를 통해 App 구조체에 연결해야 합니다. 앱 대리자 재구성도 중지해야 합니다. 자세한 내용은 SwiftUI 안내를 참조하세요.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          
  4. 앱을 다시 컴파일합니다.

2단계: 초기 데이터 표시를 위한 성능 이벤트 생성

앱에 SDK를 성공적으로 추가하면 Firebase에서 이벤트 처리를 시작합니다. 로컬에서 개발 중인 경우에는 앱과 상호작용하여 초기 데이터 수집 및 처리를 위한 이벤트를 생성합니다.

  1. 시뮬레이터 또는 테스트 기기를 사용하여 계속해서 앱을 개발합니다.

  2. 앱을 백그라운드와 포그라운드 간에 여러 번 전환하고, 화면을 탐색하여 앱과 상호작용하거나, 네트워크 요청을 트리거하여 이벤트를 생성합니다.

  3. Firebase Console의 성능 대시보드로 이동합니다. 몇 분 이내에 초기 데이터가 표시됩니다.

    초기 데이터가 표시되지 않으면 문제 해결 팁을 검토하세요.

3단계: (선택사항) 성능 이벤트의 로그 메시지 보기

  1. 다음과 같이 디버그 로깅을 사용 설정합니다.

    1. Xcode(최소 v15.2)에서 Product(제품) > Scheme(스키마) > Edit scheme(스키마 수정)을 선택합니다.
    2. 왼쪽 메뉴에서 Run(실행)을 선택한 다음 Arguments(인수) 탭을 선택합니다.
    3. Arguments Passed on Launch(실행 시 전달 인수) 섹션에 -FIRDebugEnabled를 추가합니다.
  2. 로그 메시지에 오류 메시지가 있는지 확인합니다.

  3. Performance Monitoring은 로그 메시지에 Firebase/Performance로 태그를 지정하므로 로그 메시지를 필터링할 수 있습니다.

  4. Performance Monitoring에서 성능 이벤트를 로깅 중임을 나타내는 다음 유형의 로그를 확인합니다.

    • Logging trace metric: TRACE_NAME, FIREBASE_PERFORMANCE_CONSOLE_URL
    • Logging network request trace: URL
  5. URL을 클릭하여 Firebase Console에서 데이터를 확인합니다. 대시보드에서 데이터를 업데이트하는 데 몇 분 정도 걸릴 수 있습니다.

앱에서 성능 이벤트를 로깅하고 있지 않으면 문제 해결 팁을 검토하세요.

4단계: (선택사항) 특정 코드에 대한 커스텀 모니터링 추가

앱의 특정 코드에 연결된 성능 데이터를 모니터링하려면 커스텀 코드 trace를 계측하면 됩니다.

커스텀 코드 trace를 사용하면 이미지 모음을 로드하거나 데이터베이스를 쿼리하는 등 앱이 특정 작업 또는 일련의 작업을 완료하는 데 걸리는 시간을 파악할 수 있습니다. 커스텀 코드 trace의 기본 측정항목은 기간이지만 캐시 적중 및 메모리 경고와 같은 커스텀 측정항목도 추가할 수 있습니다.

Performance Monitoring SDK에서 제공하는 API를 사용하여 코드에 커스텀 코드 trace의 시작과 끝을 정의하고 원하는 커스텀 측정항목을 추가합니다.

이러한 기능에 대한 정보와 앱에 기능을 추가하는 방법을 자세히 알아보려면 특정 코드에 대한 모니터링 추가를 참조하세요.

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을 사용하여 설정한 연결은 연결 시간이 예상보다 깁니다. 이러한 연결은 프로세스 외부에서 실행되며 실행 시기가 프로세스 내 콜백 이벤트를 반영합니다.

다음 단계