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 Firestore と Authentication を使用するには、次のようにします。

    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 コンソールのパフォーマンス ダッシュボードに移動します。初期データが数分以内に表示されます。

    初期データが表示されない場合は、トラブルシューティングのヒントをご覧ください。

ステップ 3:(省略可)パフォーマンス イベントのログメッセージを表示する

  1. 次のようにデバッグ ロギングを有効にします。

    1. Xcode(v14.1 以上)で、[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 コンソールでデータを表示します。ダッシュボードでデータが更新されるまでに少し時間がかかることがあります。

アプリがパフォーマンス イベントをログに記録していない場合は、トラブルシューティングのヒントをご覧ください。

ステップ 4: (省略可)特定のコードのカスタム モニタリングを追加する

アプリの特定のコードに関連付けられたパフォーマンス データをモニタリングするには、カスタム コード トレースを計測可能にします。

カスタム コード トレースを使用すると、一連の画像の読み込みやデータベースのクエリなど、アプリが特定のタスクや一連のタスクを完了するのにかかる時間を測定できます。カスタム コード トレースのデフォルトの指標は期間ですが、キャッシュ ヒットやメモリ警告などのカスタム指標を追加することもできます。

コードで、Performance Monitoring SDK に用意された API を使用して、カスタム コード トレースの開始と終了を定義(および必要なカスタム指標を追加)します。

これらの機能の詳細とアプリに追加する方法については、特定のコードにモニタリングを追加するをご覧ください。

ステップ 5: アプリをデプロイして結果を確認する

Xcode シミュレータと 1 つまたは複数のテストデバイスを使用して Performance Monitoring を検証したら、アプリのアップデート バージョンをユーザーにデプロイします。

Firebase コンソールのパフォーマンス ダッシュボードでパフォーマンス データをモニタリングできます。

既知の問題

  • Performance Monitoring には、GTMSQLite との互換性に関する既知の問題があります。GTMSQLite を使用するアプリでは、Performance Monitoring を使用しないことをおすすめします。
  • FirebaseApp.configure() を呼び出した後のメソッドの実装入れ替えは、Performance Monitoring SDK に影響する可能性があります。
  • iOS 8.0~8.2 シミュレータの既知の問題により、Performance Monitoring でパフォーマンス イベントがキャプチャされなくなります。これらの問題は、iOS シミュレータ 8.3 以降のバージョンで修正されています。
  • NSURLSession の backgroundSessionConfiguration を使用して接続を確立する場合、接続時間が予想よりも長くかかります。この場合の接続はプロセスの外部で実行され、そのタイミングはプロセス内のコールバック イベントを反映したものになります。

次のステップ