API を使用してクラッシュをアップロードする
重要
Visual Studio App Center は、2025 年 3 月 31 日に廃止される予定です。 完全に廃止されるまで Visual Studio App Center を引き続き使用できますが、移行を検討できる推奨される代替手段がいくつかあります。
SDK を使用しない場合やカスタム プラットフォーム用に開発したくない場合は、クラッシュ レポートをアップロードできます。 クラッシュ、エラー、または添付ファイルのログを App Center にアップロードし、App Center 診断 UI で詳細を表示します。 次のセクションでは、クラッシュ、エラー、添付ファイルをアップロードする方法について説明します。
注意
App Center では、一意のアプリごとに 1 分あたり最大 60 件のクラッシュと処理されたエラーのみを受け入れます。 この制限を超えるクラッシュやエラーは取り込まれません。
レポートをアップロードするには、 で https://in.appcenter.ms/logs?Api-Version=1.0.0
App Center インジェスト エンドポイントを呼び出し、次のヘッダーを指定します。
-
Content-Type
: 本文の形式を表します。 現在、App Center では JSON 形式のみがサポートされています。 -
App-Secret
: 各アプリの一意の識別子である文字列。 アプリ シークレットは、アプリの設定で確認できます。 -
Install-ID
: カウントを追跡するために使用される任意の GUID を指定できる文字列。
ログのプロパティ:
-
type
: ログの種類が必要な文字列 - Apple クラッシュの場合は "appleError"、他のクラッシュの場合は "managedError"、エラーの場合は "handledError"、エラー添付ファイルの場合は "errorAttachment" です。 -
timestamp
: ログ タイムスタンプ日時を含む省略可能な文字列 (例: "2017-03-13T18:05:42Z" - 設定されている場合は、インジェストの将来の最大 72 時間である必要があります) -
appLaunchTimestamp
: アプリの起動時にタイムスタンプの日時を指定する必須の文字列 (例: "2017-03-13T18:05:42Z")。 -
device
: デバイス特性を持つ必須オブジェクト-
appVersion
: アプリケーション のバージョン名を持つ必須の文字列 (例: "1.1.0") -
appBuild
: アプリケーションのビルド番号を含む必須の文字列 (例: "42") -
sdkName
: SDK の名前を持つ必須の文字列。 SDK とプラットフォームの名前 (Android の場合は "appcenter.android"、カスタム プラットフォームの場合は "appcenter.custom" など) で構成されます -
sdkVersion
: "1.2.0" や "0.12.3-alpha.1" など、セマンティック バージョン管理形式の SDK のバージョンで必要な文字列 -
osName
: OS 名を含む必須の文字列 (例: "android") -
osVersion
: OS バージョンで必要な文字列 (例: "9.3.0") -
model
: デバイス モデルを含む省略可能な文字列 (例: "iPad2") -
locale
: 言語コードを含む必須の文字列 (例: "en-US") -
timeZoneOffset
: デバイスのタイム ゾーンの協定世界時 (UTC) からの省略可能なオフセット (-840 ~ 840)。 夏時間 (例: 120) を含む。
-
-
userId
: ログとユーザーの関連付けに使用される省略可能な文字列 -
exception
: 例外の詳細を含む必須オブジェクト-
type
: 例外の種類を持つ必須の文字列 -
frame
: スタック フレームを含む省略可能な配列 -
message
: 例外理由を含む省略可能な文字列 -
stackTrace
: 生スタック トレースを含む省略可能な文字列 -
innerException
: 内部例外を含む省略可能な配列
-
クラッシュ レポート、エラー レポート、添付ファイルをアップロードする方法の例を以下に示します。 詳細な仕様については、こちらの完全なファイルを 参照してください。
注意
アイテム保持ポリシーのため、レポート timestamp
は過去 25 日以内、または今後 3 日間以内である必要があります。
クラッシュ レポートをアップロードする
クラッシュ レポートをアップロードするには、次のプロパティが必要です。
-
processId
: プロセス識別子を持つ必須の整数 -
id
: 例外識別子を持つ必須の文字列。このレポートの一意の ID である必要があります -
fatal
: 例外によってクラッシュが発生したかどうかを示すブール値が必要です -
processName
: プロセス名を含む必須の文字列 -
appNamespace
: Android アプリでは必須。それ以外の場合は、使用されているプラットフォームに応じて、バンドル識別子、パッケージ識別子、または名前空間を含む省略可能な文字列。
Apple 形式以外のクラッシュ レポートをアップロードするには、ログの種類が "managedError" に設定されていることを確認します。
curl -X POST \
'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
-H 'Content-Type: application/json' \
-H 'app-secret: <app secret>' \
-H 'install-id: 00000000-0000-0000-0000-000000000001' \
-d '{
"logs": [
{
"type": "managedError",
"timestamp": "2019-10-08T04:22:23.516Z",
"appLaunchTimestamp": "2019-09-29T22:22:23.516Z",
"processId": "123",
"id": "bca65f46-46ee-451b-83bb-2e358c3f45bf",
"fatal": true,
"processName": "com.microsoft.appcenter.demo.project",
"device": {
"appVersion": "12.0",
"appBuild": "1",
"sdkName": "custom.android",
"sdkVersion": "1.0.0",
"osName": "android",
"osVersion": "9.3",
"model": "Pixel",
"locale": "en-US",
"appNamespace": "com.contoso.myapp"
},
"userId": "TestID",
"exception": {
"type": "java.lang.RuntimeException",
"frames": [
{
"className": "android.app.ActivityThread",
"fileName": "ActivityThread.java",
"lineNumber": 2575,
"methodName": "performResumeActivity"
},
{
"className": "android.app.ActivityThread",
"fileName": "ActivityThread.java",
"lineNumber": 2603,
"methodName": "handleResumeActivity"
},
{
"className": "android.app.ActivityThread",
"fileName": "ActivityThread.java",
"lineNumber": 2089,
"methodName": "handleLaunchActivity"
},
{
"className": "android.app.ActivityThread",
"fileName": "ActivityThread.java",
"lineNumber": 130,
"methodName": "access$600"
},
{
"className": "android.app.ActivityThread$H",
"fileName": "ActivityThread.java",
"lineNumber": 1195,
"methodName": "handleMessage"
},
{
"className": "android.os.Handler",
"fileName": "Handler.java",
"lineNumber": 99,
"methodName": "dispatchMessage"
},
{
"className": "android.os.Looper",
"fileName": "Looper.java",
"lineNumber": 137,
"methodName": "loop"
},
{
"className": "android.app.ActivityThread",
"fileName": "ActivityThread.java",
"lineNumber": 4745,
"methodName": "main"
}
],
"innerExceptions": [
{
"type": "java.lang.RuntimeException",
"frames": [
{
"className": "android.app.Activity",
"fileName": "Activity.java",
"lineNumber": 5084,
"methodName": "performResume"
},
{
"className": "android.app.ActivityThread",
"fileName": "ActivityThread.java",
"lineNumber": 2565,
"methodName": "performResumeActivity"
},
{
"className": "android.app.ActivityThread",
"fileName": "ActivityThread.java",
"lineNumber": 2603,
"methodName": "handleResumeActivity"
}
]
}
]
}
}
]
}'
Apple クラッシュ ログをアップロードする
Apple クラッシュ ログをアップロードするには、ログの種類が "appleError" に設定されていることを確認します。 次のプロパティも必要です。
-
primaryArchitectureId
: CPU プライマリ アーキテクチャで必要な整数 -
applicationPath
: アプリケーションへのパスを含む必須の文字列 -
osExceptionType
: OS 例外の種類を含む必須の文字列 -
osExceptionCode
: OS 例外コードを含む必須の文字列 -
osExceptionAddress
: OS 例外アドレスを含む必須の文字列 -
binaries
: エラーに関連付けられているバイナリを含む必須の配列
例:
curl -X POST \
'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
-H 'Content-Type: application/json' \
-H 'app-secret: <app secret>' \
-H 'install-id: 00000000-0000-0000-0000-000000000001' \
-d '{
"logs":
[
{
"type": "appleError",
"timestamp": "2019-10-08T02:44:55.000Z",
"appLaunchTimestamp": "2019-09-29T22:22:23.516Z",
"id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"applicationPath": "iOS/salesforce",
"osExceptionType": "CustomerIssue (TestIssue)",
"osExceptionCode": "0",
"osExceptionAddress": "0x00",
"processName": "salesforce",
"fatal": true,
"isTestMessage": false,
"device": {
"appVersion": "10.0",
"appBuild": "1",
"sdkName": "custom.ios",
"sdkVersion": "1.0.0",
"osName": "iOS",
"osVersion": "9.3",
"model": "iPhone9,1",
"locale": "en-US"
},
"userId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"fatal": true,
"threads": [
{
"id": 0,
"frames": [
{
"address": "0x000000018ada4d70",
"code": "0x18ad87000 + 122224"
},
{
"address": "0x0000000104463884",
"code": "0x10445c000 + 30852"
},
{
"address": "0x000000010438f640",
"code": "0x104388000 + 30272"
},
{
"address": "0x00000001b859fb64",
"code": "0x1b8229000 + 3631972"
}
]
},
{
"id": 1,
"frames": [
{
"address": "0x000000018bb4fce0",
"code": "0x18baa2000 + 711904"
},
{
"address": "0x000000018bbf7078",
"code": "0x18baa2000 + 1396856"
},
{
"address": "0x000000018baa8258",
"code": "0x18baa2000 + 25176"
},
{
"address": "0x000000018bb1c49c",
"code": "0x18baa2000 + 500892"
}
]
},
{
"id": 3,
"frames": [
{
"address": "0x000000018b755b9c",
"code": "0x18b732000 + 146332"
},
{
"address": "0x000000018b7dcd00",
"code": "0x18b7ce000 + 60672"
}
]
}
],
"binaries": [
{
"id": "d449e33d-7e74-379d-8b79-15ee104ed1df",
"startAddress": "0x0000000104388000",
"endAddress": "0x0000000104413fff",
"name": "CrashProbeiOS",
"path": "/var/containers/Bundle/Application/023013EA-0D58-4F6D-8B98-49E1372F4044/CrashProbeiOS.app/CrashProbeiOS",
"primaryArchitectureId": 16777228,
"architectureVariantId": 0
},
{
"id": "5da23653-d126-39f0-bdcf-994b3019f92c",
"startAddress": "0x000000010445c000",
"endAddress": "0x0000000104467fff",
"name": "CrashLibiOS",
"path": "/private/var/containers/Bundle/Application/023013EA-0D58-4F6D-8B98-49E1372F4044/CrashProbeiOS.app/Frameworks/CrashLibiOS.framework/CrashLibiOS",
"primaryArchitectureId": 16777228,
"architectureVariantId": 0
}
]
}
]
}'
カスタム クラッシュ ログをアップロードする
カスタム プラットフォームのクラッシュをアップロードするには、ログの種類が "managedError" に設定され、sdkName が "appcenter.custom" に設定されていることを確認します。 例:
curl -X POST \
'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
-H 'Content-Type: application/json' \
-H 'app-secret: <app secret>' \
-H 'install-id: 00000000-0000-0000-0000-000000000001' \
-d '{
"logs": [
{
"type": "managedError",
"id": "a7bea41b-1e4d-4e42-ae76-1025f4fdfc4f",
"userId": "TestID",
"timestamp": "2019-11-26T02:00:04Z",
"appLaunchTimestamp": "2019-11-26T02:00:04Z",
"architecture": "armeabi-v7a",
"fatal": true,
"processId": 4871,
"processName": "com.microsoft.appcenter.sasquatch.project",
"sid": "bca65f46-46ee-451b-83bb-2e358c3f45bf",
"errorThreadId": 1,
"errorThreadName": "main",
"device": {
"appBuild": "1337",
"appVersion": "7.1.0",
"appNamespace": "com.microsoft.appcenter.sasquatch.project",
"carrierCountry": "us",
"locale": "en_US",
"model": "Galaxy Nexus",
"oemName": "samsung",
"osApiLevel": 16,
"osBuild": "JRO03O",
"osName": "Android",
"osVersion": "5.0.0",
"screenSize": "720x1184",
"sdkName": "appcenter.custom",
"sdkVersion": "1.9.1",
"timeZoneOffset": -480
},
"exception": {
"frames": [
{
"className": "android.app.ActivityThread",
"fileName": "ActivityThread.java",
"lineNumber": 2575,
"methodName": "performResumeActivity"
},
{
"className": "android.app.ActivityThread",
"fileName": "ActivityThread.java",
"lineNumber": 2603,
"methodName": "handleResumeActivity"
},
{
"className": "android.app.ActivityThread",
"fileName": "ActivityThread.java",
"lineNumber": 2089,
"methodName": "handleLaunchActivity"
}
],
"innerExceptions": [
{
"frames": [
{
"className": "android.app.CustomActivity",
"fileName": "CustomActivity.java",
"lineNumber": 8673,
"methodName": "performCustomResume"
},
{
"className": "android.app.ActivityThread",
"fileName": "ActivityThread.java",
"lineNumber": 2565,
"methodName": "performResumeActivity"
}
],
"message": "Activity {com.microsoft.appcenter.sasquatch.project/com.microsoft.appcenter.sasquatch.activities.CrashSubActivity2} did not call through to super.onResume()",
"type": "android.app.CustomNotCalledException"
}
],
"message": "Unable to resume activity {com.microsoft.appcenter.sasquatch.project/com.microsoft.appcenter.sasquatch.activities.CrashSubActivity2}: android.app.SuperNotCalledException: Activity {com.microsoft.appcenter.sasquatch.project/com.microsoft.appcenter.sasquatch.activities.CrashSubActivity2} did not call through to super.onResume()",
"type": "java.lang.RuntimeException"
},
"threads": [
{
"frames": [
{
"className": "dalvik.system.NativeStart",
"fileName": "NativeStart.java",
"lineNumber": -2,
"methodName": "run"
}
],
"id": 369,
"name": "Binder_3"
},
{
"frames": [
{
"className": "dalvik.system.NativeStart",
"fileName": "NativeStart.java",
"lineNumber": -2,
"methodName": "run"
}
],
"id": 345,
"name": "Compiler"
}
]
}
]
}'
Breakpad クラッシュ ログとミニダンプをアップロードする
Android と Windows のカスタム Breakpad クラッシュをアップロードできます。 例:
curl -X POST \
'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
-H 'Content-Type: application/json' \
-H 'app-secret: <app secret>' \
-H 'install-id: 00000000-0000-0000-0000-000000000001' \
-d '{
"logs":
[
{
"type": "managedError",
"id": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"userId": "TestID",
"processId": 9448,
"processName": "Contoso.UWP.Puppet.exe",
"fatal": true,
"timestamp": "2019-10-08T06:22:23.530Z",
"architecture": "X64",
"timestamp": "2019-10-08T06:22:23.516Z",
"sid": "d4608adf-83b9-4f69-90ad-8bb0234080a7",
"device": {
"sdkName": "appcenter.custom",
"sdkVersion": "2.4.1-SNAPSHOT",
"model": "Parallels Virtual Platform",
"oemName": "Parallels Software International Inc.",
"osName": "WINDOWS",
"osVersion": "10.0.18363",
"osBuild": "10.0.18363.418",
"locale": "en-US",
"timeZoneOffset": -300,
"screenSize": "4608x2470",
"appVersion": "1.0",
"appBuild": "1.0",
"appNamespace": "10805zumoTestUser.AppCenter-Contoso.UWP.Puppet",
"carrierCountry": "us",
"wrapperSdkName": "custom.ndk"
},
"exception": {
"type": "minidump",
"wrapperSdkName": "custom.ndk"
}
},
{
"contentType": "application/octet-stream",
"errorId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
"fileName": "minidump.dmp",
"id": "7b975468-5656-40a5-8242-c1907b26fc31",
"sid": "03693776-cdd4-46b8-bbda-12af457f1732",
"timestamp": "2019-10-08T06:22:23.516Z",
"type": "errorAttachment",
"device": {
"sdkName": "appcenter.custom",
"sdkVersion": "2.4.1-SNAPSHOT",
"model": "Parallels Virtual Platform",
"oemName": "Parallels Software International Inc.",
"osName": "WINDOWS",
"osVersion": "10.0.18363",
"osBuild": "10.0.18363.418",
"locale": "en-US",
"timeZoneOffset": -300,
"screenSize": "4608x2470",
"appVersion": "1.0",
"appBuild": "1.0",
"appNamespace": "10805zumoTestUser.AppCenter-Contoso.UWP.Puppet",
"carrierCountry": "us",
"wrapperSdkName": "custom.ndk"
},
"data": "<base64 encoded minidump>"
}
]
}'
注意事項
Breakpad クラッシュをアップロードするには、フィールドを wrapperSdkName
"custom.ndk" に設定し、ミニダンプ ファイルを添付ファイルとしてクラッシュ レポートに添付する必要があります。 このページの添付ファイル セクションで添付ファイル を送信する方法について説明します。
クラッシュをシンボル化するには、API ドキュメントに従って、CLI または API を使用してシンボルをアップロードする必要があります。Android で Breakpad を使用している場合は、 Android NDK ドキュメント で指定されている両方のオプションがサポートされています。Windows で Breakpad を使用している場合は、オプション 2:"ブレークパッド シンボルのアップロード" のみがサポートされています。
注意
macOS からシンボルをアップロードする場合は、余分なフォルダーのシンボルをクリーンする必要があります (たとえば、__MACOSが生成され、これを削除するには、 を使用zip -d <symbols.zip> __MACOSX/\*
できます。
エラー レポートをアップロードする
処理されたエラーは、現在、Android、Xamarin、Unity、UWP、WPF、WinForms アプリでのみサポートされています。 エラー レポートをアップロードするには、ログの種類が "handledError" に設定されていることを確認します。
curl -X POST \
'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
-H 'Content-Type: application/json' \
-H 'app-secret: <app secret>' \
-H 'install-id: 00000000-0000-0000-0000-000000000001' \
-d '{
"logs":
[
{
"type": "handledError",
"timestamp": "2019-10-08T06:22:23.516Z",
"appLaunchTimestamp": "2019-09-29T22:22:23.516Z",
"id": "118dee14-9193-4ac3-9ef0-f6c11b43f2c4",
"device": {
"appVersion": "11.0",
"appBuild": "1",
"sdkName": "custom.android",
"sdkVersion": "1.0.0",
"osName": "android",
"osVersion": "9.3",
"model": "Pixel",
"locale": "en-US"
},
"userId": "TestID",
"exception": {
"type": "System.IO.IOException",
"message": "Server did not respond",
"stackTrace": " at Contoso.Forms.Puppet.FakeService+<>c.<DoStuffInBackground>b__0_0 () [0x00000] in <7ad93f134a5d4c00a8db8be9aa9c0f76>:0 \n at System.Threading.Tasks.Task`1[TResult].InnerInvoke () [0x0000f] in <b38d4262627948c1b945a72f56ce6466>:0 \n at System.Threading.Tasks.Task.Execute () [0x00010] in <b38d4262627948c1b945a72f56ce6466>:0 \n--- End of stack trace from previous location where exception was thrown ---\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <b38d4262627948c1b945a72f56ce6466>:0 \n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <b38d4262627948c1b945a72f56ce6466>:0 \n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <b38d4262627948c1b945a72f56ce6466>:0",
"innerExceptions": [
{
"type": "System.IO.IOException",
"message": "Network down",
"stackTrace": " at Contoso.Forms.Demo.CrashesContentPage.SendHttp () [0x00002] in <4fd9174f6e18457b9721bfba2cd78098>:0 ",
"wrapperSdkName": "appcenter.xamarin"
},
{
"type": "System.ArgumentException",
"message": "Invalid parameter",
"innerExceptions": [
{
"type": "System.ArgumentOutOfRangeException",
"message": "It is over 9000!",
"stackTrace": " at Contoso.Forms.Demo.CrashesContentPage.ValidateLength () [0x00002] in <4fd9174f6e18457b9721bfba2cd78098>:0 ",
}
],
}
],
}
}
]
}'
添付ファイルをアップロードする
すべての添付ファイルをクラッシュ レポートに関連付ける必要があります。 1 回の呼び出しまたは 2 回の個別の呼び出しで、クラッシュ レポートを含む添付ファイルをアップロードできます。
添付ファイル固有のプロパティ:
-
contentType
: テキストの "text/plain" など、コンテンツ タイプを持つ必須の文字列。 サポートされている種類の例については、 こちらを参照してください -
data
: base 64 としてエンコードされたデータを含む必須の文字列 -
errorId
: 添付ファイルに関連付けられているエラー レポートの一意識別子を含む必須の文字列 -
fileName
: "minidump.dmp" に設定されている NDK クラッシュに必要な文字列
注意
添付ファイルのサイズ制限は現在 7 MB です。 より大きな添付ファイルを送信しようとすると、エラーが発生します。
クラッシュ レポートと添付ファイルを 1 回の呼び出しでアップロードする例を次に示します。
curl -X POST \
'https://in.appcenter.ms/logs?Api-Version=1.0.0' \
-H 'Content-Type: application/json' \
-H 'app-secret: <app secret>' \
-H 'install-id: 00000000-0000-0000-0000-000000000001' \
-d '{
"logs": [
{
"type": "managedError",
"timestamp": "2019-10-01T02:22:23.516Z",
"appLaunchTimestamp": "2019-09-29T22:22:23.516Z",
"id": "bca65f46-46ee-451b-83bb-2e358c3f45bf",
"fatal": true,
"processName": "com.microsoft.appcenter.sasquatch.project",
"device": {
"appVersion": "13.0",
"appBuild": "1",
"sdkName": "appcenter.android",
"sdkVersion": "1.0.0",
"osName": "android",
"osVersion": "9.3",
"model": "Pixel",
"locale": "en-US"
},
"userId": "118dee14",
"fatal": true,
"exception": {
"type": "CustomerIssue",
"frames": []
}
},
{
"type": "errorAttachment",
"contentType": "text/plain",
"timestamp": "2019-10-01T02:22:23.516Z",
"data": "aGVsbG8=",
"errorId": "bca65f46-46ee-451b-83bb-2e358c3f45bf",
"id": "7caaea8e-dab1-4588-993c-95de2d9a4fd1",
"device": {
"appVersion": "13.0",
"appBuild": "1",
"sdkName": "appcenter.android",
"sdkVersion": "1.0.0",
"osName": "android",
"osVersion": "9.3",
"model": "Pixel",
"locale": "en-US"
}
}
]
}'