AppDynamics は、アプリケーションがクラッシュスナップショット用の人間が判読可能なスタックトレースを生成するために、dSYM ファイルを必要とします。スナップショットの重要性の詳細については、「人間が判読能なクラッシュスナップショットの取得」を参照してください。 

アプリケーションを更新する場合は、新しいアプリケーションバージョン用の新しい dSYM ファイルを用意する必要があります。dSYM ファイルには、特定の Xcode ビルドにリンクする UUID が含まれているため、AppDynamics は、追加情報を使用せずに、正しい dSYM ファイルと着信クラッシュレポートを明確に照合できます。

dSYM ファイルをアップロードするには:

  1. dSYM ファイルを有効にします

  2. ビルドのたびに自動でファイルをアップロードするように環境をセットアップするか、ファイルを手動でアップロードします

dSYM ファイルの有効化

アプリケーションがクラッシュした場合に生成されるクラッシュスナップショットに、人間が判読可能な情報をエージェントが提供できるようにするには、[DWARF with dSYM] ファイルオプションを使用してコンパイルし、アプリケーション用のデバッグシンボルファイルを作成します。

dSYM を有効にするには:

  1. Xcode の [Project Navigator] で、プロジェクトを選択します。
  2. ターゲットリストで、アプリケーションを構築するターゲットを選択します。
  3. [Build Settings] タブを選択します。
  4. [Build Options] セクションで、[Debugging Information Format] が [DWARF with dSYM File] に設定されていることを確認します。

ビルドごとに AppDynamics に dSYM ファイルを自動でアップロードする

dSYM ファイルのアップロードを自動化すると、ビルドのたびに必要な手動手順の数が削減され、すべてのビルドで適切な dSYM ファイルを AppDynamics が使用できるようになります。

  1. Xcode の [Project Navigator] で、プロジェクトを選択します。
  2. アプリケーションターゲットをクリックします。
  3. [Settings] エディタで [Build Phase] タブを選択します。
  4. メインパネルの左上隅にある [+] アイコンをクリックします。
  5. ドロップダウンから [New Run Script Phase] を選択します。
  6. スクリプトボックスで、次の行を追加します。

    export ADRUM_ACCOUNT_NAME="<Account_Name_HERE>" // From the View License - End User Monitoring section of the License Page
    export ADRUM_LICENSE_KEY="<License_Key_HERE>"  // From the View License - End User Monitoring section of the License Page
    SCRIPT=$(/usr/bin/find "${SRCROOT}" -name xcode_build_dsym_upload.sh | head -n 1)
    /bin/sh "${SCRIPT}"
    SWIFT
  7. また、必要に応じて設定できるオプションパラメータもあります。これらを設定するには、上記の 2 番目の export ステートメントの後に次の行を追加します。有効にするには、1 に設定します。

    export ADRUM_UPLOAD_WHEN_BUILT_FOR_SIMULATOR=0
    export ADRUM_TREAT_UPLOAD_FAILURES_AS_ERRORS=0
    export ADRUM_EUM_PROCESSOR="<EUM_SERVER_URL>"
    SWIFT

    最後のステートメントは、SaaS ベースの EUM アカウントの地域クラウドロケーションまたはオンプレミスサーバの URL を設定するために使用する必要があります。

手動で AppDynamics に dSYM ファイルをアップロードする


ファイルを手動でアップロードするには:

  1. Xcode から dSYM ファイルを取得します
  2. UI を使用して AppDynamics に dSYM ファイルをアップロードする
    か、
    API を使用して AppDynamics に dSYM ファイルをアップロードします
  3. REST API を使用してアップロードされた dSYM を確認します

Xcode から dSYM ファイルを取得する

  1. Xcode で、[Product] [> Build] を選択して Xcode ビルドを実行します。
  2. [View > Navigators > Show Report Navigator] を選択して、ログナビゲータを表示します。

    古いバージョンの Xcode では [Show Log Navigator] です。 

  3. 最新のビルドのログエントリをクリックします。
  4. ログの末尾付近で、「Generate <Your_App_Name>.app.dSYM」という名前のログエントリの上にマウスのカーソルを合わせます。
  5. エントリの右側にあるボタンをクリックして、展開します。
    表示されたコマンドの末尾が、dSYM ファイルへのパスです。
  6. Finder でこの dSYM ファイルに移動します。
  7. dSYM ファイルを右クリックし、[Compress] を選択します。
  8. [Finder] が生成した .zip ファイルを AppDynamics にアップロードします。

UI を使用して AppDynamics に dSYM ファイルをアップロードする

  1. モバイル アプリケーション メニューから、[Configuration] をクリックします。
  2. [Mobile App Configuration] をクリックします。
  3. dSYM Files で、 アイコンをクリックします。
  4. [Upload Missing dSYM Mapping] ダイアログで、[Choose File] をクリックします。
    アップローダは、拡張子が .zip のファイルに対応しています。
  5. ファイルブラウザで、インストゥルメント化されたアプリケーションの圧縮された dSYM ファイルを選択します。
  6. [Upload] をクリックします。

REST API を使用して AppDynamics に dSYM ファイルをアップロードする

API では HTTP 基本認証が使用されます。ユーザ名は EUM アカウント名で、パスワードは EUM ライセンスキーです。

HTTP 基本認証ログイン情報のセットアップ
  1. コントローラ UI の右上隅で、[Settings >] [License] をクリックします。

  2. [Account Usage] タブで、[User Experience] セクションまで下にスクロールします。
  3. ライセンスキーの横にある [Show] をクリックして、EUM ライセンスキーを表示します。これが、認証用のパスワードです。
  4. EUM アカウント名と EUM ライセンスキーを URL エンコードします。

dSYM ファイルの送信

PUT リクエストの本文で dSYM を zip アーカイブとして次の URI へ送信します。

https://api.eum-appdynamics.com/v2/account/<EUM_Account_Name>/ios-dsym
https://fra-api.eum-appdynamics.com/v2/account/<EUM_Account_Name>/ios-dsym
https://syd-api.eum-appdynamics.com/v2/account/<EUM_Account_Name>/ios-dsym

Content-Type ヘッダー -H Content-Type:application/octet-stream、および URL エンコードされたアカウント名(ユーザ名)とライセンスキー(パスワード)をこのコールに設定する必要があります。

Sample Request and Response

これは、REST API を使用した要求と応答の例です。

アップロードのリクエスト

次の例では、curl を使用して「UISampleApp.app.dSYM.zip」という名前の dSYM ファイルを送信します。EUM アカウント名は「Example account」、パスワードは EUM ライセンスキー「Example-License-Key-4e8ec2ae6cfe」ですアカウント名が URL エンコードされると、アカウント名のスペースはプラス記号に置き換えられます。

curl -v -H Content-Type:application/octet-stream --upload-file UISampleApp.app.dSYM.zip --user Example account:Example-License-Key-4e8ec2ae6cfe https://api.eum-appdynamics.com/v2/account/Example+account/ios-dsym 
BASH
curl -v -H Content-Type:application/octet-stream --upload-file UISampleApp.app.dSYM.zip --user Example account:Example-License-Key-4e8ec2ae6cfe https://fra-api.eum-appdynamics.com/v2/account/Example+account/ios-dsym 
BASH
curl -v -H Content-Type:application/octet-stream --upload-file UISampleApp.app.dSYM.zip --user Example account:Example-License-Key-4e8ec2ae6cfe https://syd-api.eum-appdynamics.com/v2/account/Example+account/ios-dsym 
BASH
アップロードの応答

サンプルリクエストが成功した場合の出力は次のようになります。

* About to connect() to api.eum-appdynamics.com port 443 (#0)*   Trying ::1...
* connected
* Connected to api.eum-appdynamics.com (::1) port 443 (#0)
* Server auth using Basic with user 'Example+account'
> PUT /v2/account/Example+Account/ios-dsym  HTTP/1.1
> Authorization: Basic SW50ZXJuYWwrdGVzdCthY2NvdW50OlRlc3RBY2N0LTFlMzktNDVkMy05MzAzLTRlOGVjMmFlNmNmZQ==
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.5
> Host: localhost:7001
> Accept: */*
> Content-Length: 0
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
< HTTP/1.1 200 OK
< Content-Length: 0
< Server: Jetty(8.1.4.v20120524)
<
* Connection #0 to host api.eum-appdynamics.com left intact
* Closing connection #0
BASH
* About to connect() to fra-api.eum-appdynamics.com port 443 (#0)*   Trying ::1...
* connected
* Connected to fra-api.eum-appdynamics.com (::1) port 443 (#0)
* Server auth using Basic with user 'Example+account'
> PUT /v2/account/Example+Account/ios-dsym  HTTP/1.1
> Authorization: Basic SW50ZXJuYWwrdGVzdCthY2NvdW50OlRlc3RBY2N0LTFlMzktNDVkMy05MzAzLTRlOGVjMmFlNmNmZQ==
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.5
> Host: localhost:7001
> Accept: */*
> Content-Length: 0
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
< HTTP/1.1 200 OK
< Content-Length: 0
< Server: Jetty(8.1.4.v20120524)
<
* Connection #0 to host fra-api.eum-appdynamics.com left intact
* Closing connection #0
BASH
* About to connect() to syd-api.eum-appdynamics.com port 443 (#0)*   Trying ::1...
* connected
* Connected to syd-api.eum-appdynamics.com (::1) port 443 (#0)
* Server auth using Basic with user 'Example+account'
> PUT /v2/account/Example+Account/ios-dsym  HTTP/1.1
> Authorization: Basic SW50ZXJuYWwrdGVzdCthY2NvdW50OlRlc3RBY2N0LTFlMzktNDVkMy05MzAzLTRlOGVjMmFlNmNmZQ==
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.5
> Host: localhost:7001
> Accept: */*
> Content-Length: 0
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
< HTTP/1.1 200 OK
< Content-Length: 0
< Server: Jetty(8.1.4.v20120524)
<
* Connection #0 to host syd-api.eum-appdynamics.com left intact
* Closing connection #0
BASH


REST API を使用してアップロードされた dSYM を確認する

2 つの REST API を使用して dSYM が正常にアップロードされたことを確認できます。

  1. アップロードした最近 50 件の dSYM の UUID リストを取得します
  2. 特定の dSYM がアップロードされているかどうかを確認します

アップロードされた最近 50 件の dSYM リスト

dsymQuery メソッドでは、アカウントにアップロードされた最近の dSYM ファイル(最大 50 件)の UUID リストとアップロード時刻を取得できます。その応答は、アップロード時刻が最新のものから、JSON 形式で表示されます。

  1. REST API を使用して AppDynamics に dSYM ファイルをアップロードする」の説明に従って、認証を設定します。

  2. 次のようにフォームの GET リクエストを作成します。

    curl --user Example+account:Example-License-Key-4e8ec2ae6cfe https://<EUM_Cloud/Server_Host:Port>/v2/account/Example+account/crash-symbol-file-query/dsym
    BASH

    - EUM_Cloud は、SaaS ベースの EUM クラウド URL を指します。完全なリストについては、「Cisco AppDynamics SaaS Domains and IP Ranges」を参照してください。 

    - EUM_Server_Host は、オンプレミス EUM サーバを指す URL を指します。

    - EUM_Account_Name は、EUM アカウント名です。

    - GUID_To_Check は、対象の ProGuard ファイルの GUID です。

Sample Request
curl --user Example+account:Example-License-Key-4e8ec2ae6cfe  https://api.eum-appdynamics.com:443/v2/account/Example+account/crash-symbol-file-query/dsym
BASH
curl --user Example+account:Example-License-Key-4e8ec2ae6cfe  https://fra-api.eum-appdynamics.com:443/v2/account/Example+account/crash-symbol-file-query/dsym
BASH
curl --user Example+account:Example-License-Key-4e8ec2ae6cfe  https://syd-api.eum-appdynamics.com:443/v2/account/Example+account/crash-symbol-file-query/dsym
BASH


Sample Response 

{"dSymFiles":[
{"uploadTime":"mm/dd/yyyy 14:15:32","UUID2":"my_uuid2"},
{"uploadTime":"mm/dd/yyyy 14:15:32","UUID":"my_uuid"}
]}
JSON

UUID による特定の dSYM の確認

checkForDSymFile メソッドでは、UUID によって特定の dSYM がアップロードされたかどうかを確認できます。アップロード時刻が応答で返されます。

  1. REST API を使用して AppDynamics に dSYM ファイルをアップロードする」の説明に従って、認証を設定します。
  2. 次のようにフォームの GET リクエストを作成します。

    curl --user Example+account:Example-License-Key-4e8ec2ae6cfe https://<EUM_Cloud/Server_Host:Port>/v2/account/Example+account/crash-symbol-file-query/dsym/uuid/<UUID_to_Check>
    BASH

    - EUM_Cloud は、SaaS ベースの EUM クラウド URL を指します。完全なリストについては、「Cisco AppDynamics SaaS Domains and IP Ranges」を参照してください。 

    - EUM_Server_Host は、オンプレミス EUM サーバを指す URL を指します。

    - EUM_Account_Name は、EUM アカウント名です。

    - GUID_To_Check は、対象の ProGuard ファイルの GUID です。

    サンプルリクエスト
    curl --user Example+account:Example-License-Key-4e8ec2ae6cfe  https://<EUM_Cloud/Server_Host:Port>/v2/account/Example+account/crash-symbol-file-query/dsym/uuid/<UUID_to_Check>
    BASH

    サンプル応答
    {"uploadTime":"mm/dd/yyyy 14:15:32","UUID":"my_uuid"}
    JSON