コンテンツにスキップ

トラブルシューティング

SDK 初期化時の異常チェック

Debug 環境で、Guance SDK を設定し、アプリケーションを初めて実行した後、Xcode のデバッガコンソールを確認してください。SDK はアサーションを使用して複数の設定の正しさをチェックし、設定に誤りがある場合はクラッシュして関連する警告を出力します。

例:SDK 設定時に datakit metrics の書き込みアドレスが設定されていない場合、プログラムはクラッシュし、コンソールに警告⚠️が出力されます。

*** Assertion failure in +[FTMobileAgent startWithConfigOptions:], FTMobileAgent.m:53
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'datakit metrics の書き込みアドレスを設定してください'

Debug デバッグを有効にする

Debug 環境では FTMobileConfig の設定項目 enableSDKDebugLog = YES を有効にし、Release 環境では無効にすることを推奨します。SDK のデバッグログは [FTLog] をプレフィックス識別子として使用します。[FTLog] を使用してフィルタリングできます。

注意schemeOS_ACTIVITY_MODE=disable が設定されている場合、SDK デバッグログは正常に出力されません。デバッグ時はこの設定を無効にすることを推奨します。

Release バージョンを公開する際は、Debug デバッグを無効にしてください

ログ例

データ同期

// 以下は正常な同期ログです
[FTLog][INFO] -[FTTrackDataManger flushWithEvents:type:] [line 143] 
                                                イベントのアップロードを開始今回のアップロードイベント数:2
[FTLog][INFO] -[FTRequestLineBody getRequestBodyWithEventArray:] [line 149]
Upload Datas Type:RUM
Line RequestDatas:
...... datas ......
[FTLog][INFO] -[FTTrackDataManger flushWithEvents:type:]_block_invoke [line 157] 
                                                Upload Response statusCode : 200

1.3.10 バージョンより前では Upload Response statusCode : 200 は出力されません。コンソールにエラーログがないか確認し、エラーログがなければアップロード成功です。

エラーログ: Network failure: ...... または サーバー異常、後ほど再試行してください ......

1.5.16 バージョン以降は、ログ内で [NETWORK] を検索することで、データ同期に関するすべてのログを確認できます

SDK 内部ログをキャッシュファイルに変換

// デフォルトパス:1.4.11-1.4.12 /Library/Caches/FTLogs/FTLog xxxx-xx-xx--xx/xx/xx/xxx.log
//         >= 1.4.13 /Documents/FTLogs/FTLog.log

// >= 1.4.11
 [[FTLog sharedInstance] registerInnerLogCacheToLogsDirectory:nil fileNamePrefix:nil];

// >= 1.4.13
//  方法1: デフォルトパス
 [[FTLog sharedInstance] registerInnerLogCacheToDefaultPath]
//  方法2: パスを指定
 NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject 
stringByAppendingPathComponent:@"ExampleName.log"];
 [[FTLog sharedInstance] registerInnerLogCacheToLogsFilePath:filePath];

内部ログの完全性を保つため、SDK 初期化より前にこの設定を行ってください

SDK は正常に動作するがデータがない

  • Datakit が正常に動作しているか確認する

  • SDK アップロードアドレス datakitUrl または datawayUrl正しく設定され、正しく初期化されていることを確認する。debug モードで、ログを確認してアップロードの問題を判断する

  • datakit が対応するワークスペースにデータをアップロードしているか、オフライン状態でないか確認する。これは Guance にログインし、「インフラ」を確認することで問題を特定できます。

データ収集の成功確認

Logger

FTLoggerConfig の設定項目 enableCustomLog = YES を設定し、カスタムログの収集とアップロードを有効にします。

SDK がログを収集すると、Xcode のデバッガコンソールに SDK のデバッグログが表示されます。

[FTLog][INFO] -[FTRecordModel initWithSource:op:tags:fields:tm:] [line 36] write data = {
    op = Logging;
    opdata =     {
        fields =         {
            message = "xxxxx収集されたログ内容XXXXX";
        };
        source = "df_rum_ios_log";
        tags =         {
             ...... 
        }
   }
}

op = Logging; が表示されれば、Logger 機能が正常に有効になり、データが正常に収集されたことを示します。

RUM

SDK バージョンが 1.4.14 未満の場合、Resource データと Action データ(launch action を除く)は View にバインドされます。View が収集されている状態でのみ正常に収集されます。

View の収集:FTRumConfig の設定項目 enableTraceUserView = YES を設定して自動収集を有効にするか、手動収集 -startViewWithName を使用します。

Xcode のデバッガコンソールで SDK のデバッグログを確認します。

[FTLog][INFO] -[FTRecordModel initWithSource:op:tags:fields:tm:] [line 36] write data = {
    op = RUM;
    opdata =     {
        fields =       {
            .......
        };
        source = action;
        tags =         {
            ........
        }       
   }
}

op = RUM; が表示されれば、RUM 機能が正常に有効になり、データが正常に収集されたことを示します。

Trace

enableLinkRumData = YES を設定すると、RUM Resource データに表示されます。Xcode のデバッガコンソールで SDK のデバッグログを確認します。

[FTLog][INFO] -[FTRecordModel initWithSource:op:tags:fields:tm:] [line 36] write data = {
    op = RUM;
    opdata =     {
        fields =         {
            duration = 5873084;
            "request_header" = "Accept:*/*\nx-datadog-parent-id:12914452039873665275\nx-datadog-trace-id:6849912365449426814\nx-datadog-origin:rum\nAccept-Language:en-US,en;q=0.9\nAccept-Encoding:gzip, deflate\nx-datadog-sampling-priority:2";
            ......
        };
        source = resource;
        tags =         {
            ......
            "span_id" = 12914452039873665275;
            "trace_id" = 6849912365449426814;
            ......
        };
    };

op = RUM;source = resource; のデータを見つけ、tagsspan_idtrace_id が含まれていれば、Trace 機能が正常に有効になっていることを示します。

データ損失

一部のデータ損失

1.RUM の特定の Session データや Log、Trace の数件のデータが失われた場合

まず、FTRUMConfig, FTLoggerConfig, FTTraceConfigsampleRate < 1 が設定されていないか確認する必要があります。

2.RUM の Resource イベントや Action イベント(launch action を除く)が失われた場合

View の自動収集が有効になっているか、Open API を使用した手動収集が行われているかを確認する必要があります。Resource イベントや Action イベントは View にバインドされているため、View が収集されている状態でのみ正常に収集されます。

3.SDK バージョンが 1.4.14 以下の場合、一部のデータが失われ、Xcode デバッガコンソールに次のようなデバッグログが表示される場合

*********このデータのフォーマットは不正です********
(null)*** 1717051153966272768
******************

SDK に渡される NSDictionary 型パラメータが以下の要件を満たしているか確認してください:

  • すべての辞書キーは NSString であること

  • すべてのオブジェクトは NSString, NSNumber, NSArray, NSDictionary または NSNull であること

  • NSNumber は NaN または無限大ではないこと

キーと値の両方に NSString を使用することを推奨します。

4.データをアップロードするデバイスのネットワークと、datakit をインストールしたデバイスのネットワークおよび負荷の問題を確認します。

Error データの損失 Crash タイプのデータ

  • Crash 収集機能が有効になっているか確認する

  • SDK の初期化が Crash より前に完了しているか確認する

  • Crash を捕捉する機能を持つ他のサードパーティコンポーネントを使用している場合は、そのコンポーネントの後に FTMobileSDK の初期化を配置する

  • Xcode のデバッグ段階であるかどうか

SDK では UNIX シグナルMach 例外 を使用してクラッシュを捕捉しています。これらの捕捉方法はどちらも、Xcode でデフォルトで有効になっている Debug executable の影響を受けます。これは SDK がこれらの例外を捕捉する前にインターセプトするため、デバッグ段階でもクラッシュを正常に捕捉したい場合は、Debug executable 機能を手動で無効にするか、Xcode 接続デバッグなしでテストを行う必要があります。 注意: Debug executable を無効にすると、ブレークポイントデバッグ機能が利用できなくなります。

troubleshooting_debug_executable

バージョン互換性の問題

RUM Resource イベントのパフォーマンス指標の欠落

影響バージョン:SDK バージョン 1.3.10 以下

SDK は iOS 9 以降をサポートしています。RUM Resource イベントのパフォーマンス指標は、システムが iOS 10 以降をサポートする API を使用して収集する必要があります。そのため、ユーザーデバイスのシステムが iOS 10 未満の場合、収集される Resource イベントにはパフォーマンス指標の部分が欠落します。

RUM Error データの carrier 属性が -- と表示される

iOS 16.4 以降、CoreTelephonyCTCarrier は非推奨となり、代替 API もありません。非推奨のメソッドを使用すると、静的値 -- が返されます。

WebView

[xxViewController retain]: message sent to deallocated instance xxx

影響バージョン:SDK バージョン 1.4.10 以下

原因:WebView を使用する際に、WebView にオブザーバーを追加し、オブザーバーが解放される前に WebView がそのオブザーバーを削除しなかった場合に発生します。SDK 内部で WebView に対して強参照を行っているため、WebView が解放されず、後続の KeyPath 変更時にオブザーバーに通知しようとしますが、オブザーバーは既に解放されているため、EXC_BAD_ACCESS エラーが発生します。

修正推奨

  • SDK バージョンをアップグレードする

  • または、オブザーバーが解放される前にそのオブザーバーを削除する。

   - (void)createWebView{
     [self.webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];
   }
   -(void)dealloc{
     [self.webView.scrollView removeObserver:self forKeyPath:@"contentSize"]
   }

フィードバック

このページは役に立ちましたか?