Windows Support
Important
Visual Studio App Center is scheduled for retirement on March 31, 2025. While you can continue to use Visual Studio App Center until it is fully retired, there are several recommended alternatives that you may consider migrating to.
App Center currently supports diagnostics for UWP, WPF, and WinForms applications. This section explains the new experience for UWP apps as part of the 2.5.0 SDK release. For more information on WPF and WinForms applications, see diagnostics features and WPF/WinForms SDK.
Universal Windows Platform
App Center supports the full diagnostics feature set for both sideloaded and Windows Store UWP apps using the 2.5.0 SDK or later versions. To enable App Center’s diagnostics for your UWP app, follow App Center's UWP SDK documentation to integrate the App Center SDK. You can learn more about the complete feature set in the diagnostics features documentation.
New diagnostics experience
With the 2.5.0 SDK release in October 2019, App Center released a new diagnostics experience. This section details the improvements and transition experience with the new release.
What improvements were made?
The new and improved diagnostics experience includes the following additions:
- A full symbolication experience that allows you to upload symbols in App Center. See the symbolication section below for more details.
- Support for handled exceptions
- Number of users affected per crash or error group
- Ability to add annotations per crash or error group
- Ability to mark crash and error groups as open, closed, or ignored
- Ability to download crash and error reports
- Ability to attach, view, and download one binary and one text attachment to your crash reports
- Crash and error report details per crash instance, including when the app launched, when it crashed, and what country/region and language the device used
You can learn more about each feature in the App Center diagnostics documentation.
What's the transition experience?
After you update to the App Center UWP SDK Version 2.5.0, you'll see crash and error data coming into the App Center Diagnostics portal in a new and improved UI. For crash and error data displayed in the new Diagnostics UI, you need to use the APIs listed under the errors section. Learn more about how the old crashes APIs map to the new errors APIs in the API transition documentation.
Symbolication
UWP crash reports show the stack trace for the thread that caused the crash. When the application is using .NET Native (typically in release builds) the stack trace may contain memory addresses instead of class names, methods, file names, and line numbers needed to read and understand the crashes.
Unsymbolicated crashes
Unsymbolicated crashes are displayed in the App Center Diagnostics section so you can view some details even before uploading symbols. The missing symbols from these crashes will be shown in the "unsymbolicated" tab. If the missing symbols are uploaded, the unsymbolicated crash group will be replaced by a symbolicated crash group.
Uploading symbols
To get the memory addresses translated, you need to upload a .appxsym
file to App Center, which contains all information required for symbolication.
Generate the symbols locally
To obtain an .appxsym
file, you must create an app bundle as described here. Once you've created the bundle, you'll find the symbols file as an .appxsym
file inside the app bundle folder.
Symbols for applications built in App Center Build
The App Center Build and Distribution services can automatically generate a valid symbol file and upload to the Diagnostics service. If you use App Center to build and auto distribute your app to your end users, you don't need to manually obtain and upload the symbol files to App Center.
Symbols for applications published to the Microsoft Store
When you publish your application to the store, the .NET Native compilation happens on server side. So, you need to download the symbols from the Partner Center.
- Locate your application in the list and click on it.
- Expand Product management menu from the left panel.
- Click on Manage packages.
- Click on Show packages on the top-right corner for the Submission (version) you want symbols for.
- Locate the package for the version you need symbols for, and click on links for all the supported architectures to download all symbols (such as the Download Windows 10 symbol file (x64) link).
Note
Your application must declare a dependency on any version of .NET Native to generate debug symbols.
This declaration should be included in the <Dependencies>
section of your AppxManifest.xml
. Example:
<PackageDependency Name="Microsoft.NET.Native.Framework.2.2" MinVersion="2.2.29512.0" Publisher="CN=Microsoft Corporation, 0=Microsoft Corporation, L=Redmond, S=Washington, C=US"/>
<PackageDependency Name="Microsoft.NET.Native.Runtime.2.2" MinVersion="2 2.28604.0" Publisher="CN=Microsoft Corporation, 0=Microsoft Corporation, L=Redmond, S=Washington, C=US"/>
App Center Portal
- Log into App Center and select your app.
- In the left menu, navigate to the Diagnostics section and select Symbols.
- In the top-right corner, click Upload symbols and upload the file.
- After the symbols are indexed by App Center, crashes will be symbolicated for you.
App Center API
The process for uploading symbols through the API involves a series of three API calls: one to allocate space on our backend, one to upload the file, and one to update the status of the upload. The body of the first API call should set symbol_type
to UWP
.
- Trigger a
POST
request to the symbol_uploads API. This call allocates space on our backend for your file and returns asymbol_upload_id
and anupload_url
property.
curl -X POST 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads' \
-H 'accept: application/json' \
-H 'X-API-Token: {API TOKEN}' \
-H 'Content-Type: application/json' \
-d '{JSON BODY}'
- Using the
upload_url
property returned from the first step, make aPUT
request with the header:"x-ms-blob-type: BlockBlob"
and supply the location of your file on disk. This call uploads the file to our backend storage accounts. Learn more about PUT Blob request headers .
curl -X PUT '{upload_url}' \
-H 'x-ms-blob-type: BlockBlob' \
--upload-file '{path to file}'
- Make a
PATCH
request to the symbol_uploads API using thesymbol_upload_id
property returned from the first step. In the body of the request, specify whether you want to set the status of the upload tocommitted
(successfully completed) the upload process, oraborted
(unsuccessfully completed).
curl -X PATCH 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads/{symbol_upload_id}' \
-H 'accept: application/json' \
-H 'X-API-Token: {API TOKEN}' \
-H 'Content-Type: application/json' \
-d '{ "status": "committed" }'
Note
The symbol uploads API doesn't work for files that are larger than 256MB. Use the App Center CLI to upload these files. You can install the App Center CLI by following the instructions in our App Center CLI repo.
App Center CLI
You can also use the CLI to upload symbol files:
appcenter crashes upload-symbols --appxsym {symbol file}
Ignoring symbols
When App Center doesn't have all the symbol files to fully symbolicate crash reports, the crashes are listed in the Unsymbolicated tab. The required symbols are uploaded from this page if you have access to them.
If you can't upload the symbols, you can mark them as Ignored by selecting rows in the table and clicking the Ignore versions button. This button tells App Center to process the crashes and symbolicate them as fully as possible with the symbols on file. Once they've finished processing, they'll appear in the Crashes tab partially symbolicated. New crashes that also depend on those same symbol IDs marked as ignored will bypass the Unsymbolicated tab as they come in and flow through the system.
WinRT, Silverlight, and Other Platforms
App Center doesn't support any other Windows platforms besides UWP, WPF, and WinForms. If you have a Windows app with native C++ crashes, you can upload these crashes to App Center via the upload crashes API.