コンソールへ移動

iOS 向け Performance Monitoring を使ってみる

始める前に

まだ追加していない場合は、iOS プロジェクトに Firebase を追加します

ステップ 1: Performance Monitoring をアプリに追加する

  1. プロジェクト用に作成した podfile を開き(または pod init を実行して作成し)、ターゲット セクション内に次の行を追加します。

    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. FirebaseApp 共有インスタンスを構成します。通常はアプリの application:didFinishLaunchingWithOptions: メソッドで行います。

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  6. アプリを再コンパイルします。

これで、Firebase が自動トレースHTTP/S ネットワーク リクエストをモニタリングするようになります。

ステップ 2: Firebase コンソールで Performance Monitoring の結果を確認する

  1. Xcode シミュレータでアプリを実行します([Product] > [Run])。

  2. Firebase コンソールに Performance Monitoring の結果が表示されていることを確認します。

    結果は通常 12 時間以内に表示されます。

ステップ 3: (省略可)カスタム トレースとカスタム指標を追加する

カスタム トレースは、アプリ内の特定のコードに関連付けられたパフォーマンス データのレポートです。カスタム トレースの詳細については、Performance Monitoring の概要を参照してください。

アプリには複数のカスタム トレースを設定し、一度に複数を実行できます。各カスタム トレースには、アプリ内のパフォーマンス関連のイベントをカウントする 1 つ以上の指標を設定でき、これらの指標は、指標を作成するトレースに関連付けられています。

カスタム トレースと指標の名前には制限があります。先頭または末尾が空白でなく、先頭がアンダースコア(_)でない 32 文字以下の名前にする必要があります。

  1. Performance Monitoring モジュールをヘッダーに追加します。

    Swift

    import FirebasePerformance
    

    Objective-C

    @import FirebasePerformance;
    
  2. カスタム トレースを開始してその後で停止するには、トレースするコードを次のようなコード行で囲みます。

    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 コンソールに表示されます。

ステップ 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 を使用して接続を確立する場合、接続時間が予想よりも長くかかります。この場合の接続はプロセスの外部で実行され、そのタイミングはプロセス内のコールバック イベントを反映したものになります。

次のステップ