Skip to content
Essential cross platform APIs for your mobile apps.
Branch: master
Clone or download
jonathanpeppers and mattleibow Use "portable" PDB files (#758)

In doing some performance testing with builds in VS 2019, I noticed:

    115 ms  _ConvertPdbFiles                           1 calls

And looking at files were converted:

        [Output] ConvertedFiles:

The Xamarin.Essentials NuGet package is shipping a non-portable PDB
file. This is a Windows-specific format that Mono doesn't support.

Xamarin.Android runs a tool called `pdb2mdb` when it encounters a
non-portable PDB file so symbols be converted to something that Mono
can use. If you have `DebugType=full` or `DebugType=pdbonly`,
Xamarin.Android has to do this extra work to convert it.

I see no drawbacks to just use `DebugType=portable` in this project
all the time?

Since Xamarin.Essentials uses sourcelink, I double-checked and they
support portable PDBs:

I sent a similar PR to Xamarin.Forms, shipping since 3.4. I wrote a
bit more detail on symbol files there if you need more info:

Latest commit 2d0af33 Apr 4, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Update Dec 23, 2018
Assets New Icons! (#218) Apr 27, 2018
DeviceTests [WIP] Xamarin.Essentials 1.1.0 (#663) Mar 15, 2019
Samples [WIP] Xamarin.Essentials 1.1.0 (#663) Mar 15, 2019
Tests [WIP] Xamarin.Essentials 1.1.0 (#663) Mar 15, 2019
Xamarin.Essentials Use "portable" PDB files (#758) Apr 4, 2019
docs [WIP] Xamarin.Essentials 1.1.0 (#663) Mar 15, 2019
.editorconfig No nested classes and no default access modifiers Apr 11, 2018
.gitattributes [WIP] Xamarin.Essentials 1.1.0 (#663) Mar 15, 2019
.gitignore Using the new mdoc frameworks (#161) Apr 10, 2018 Initialize open publishing repository:… Apr 10, 2018
.openpublishing.publish.config.json [WIP] Xamarin.Essentials 1.1.0 (#663) Mar 15, 2019 Initial attempt at contribution, submission docs, and templates Feb 23, 2018 Update (#692) Jan 28, 2019
CodeStyles.targets Rebranding to Xamarin.Essentials (#152) Apr 6, 2018
LICENSE Rebranding to Xamarin.Essentials (#152) Apr 6, 2018
LICENSE-CODE Initialize open publishing repository:… Apr 10, 2018 Create Product Feedback page for Docs (#369) Jul 16, 2018 [WIP] Xamarin.Essentials 1.1.0 (#663) Mar 15, 2019 Update links in markdown files Apr 10, 2018
ThirdPartyNotices Initialize open publishing repository:… Apr 10, 2018
Xamarin.Essentials.ruleset Rebranding to Xamarin.Essentials (#152) Apr 6, 2018
Xamarin.Essentials.sln [WIP] Xamarin.Essentials 1.1.0 (#663) Mar 15, 2019 Integrate App Center SDK into Sample App (#557) Nov 2, 2018
azure-pipelines.yml Update azure-pipelines.yml Mar 15, 2019
build.ps1 Integrate sourcelink - (#260) Aug 24, 2018
generate-docs.cmd [WIP] Xamarin.Essentials 1.1.0 (#663) Mar 15, 2019
nugetreadme.txt Update nugetreadme.txt Mar 26, 2019
stylecop.json We want to use spaces and not tabs Feb 28, 2018


Xamarin.Essentials gives developers essential cross-platform APIs for their mobile applications.

iOS, Android, and UWP offer unique operating system and platform APIs that developers have access to, all in C# leveraging Xamarin. It is great that developers have 100% API access in C# with Xamarin, but these APIs are different per platform. This means developers have to learn three different APIs to access platform-specific features. With Xamarin.Essentials, developers have a single cross-platform API that works with any iOS, Android, or UWP application that can be accessed from shared code no matter how the user interface is created.

Gitter chat

Build Status

Build Server Type Platform Status
VSTS Build Windows VSTS Build Status
Jenkins Device Tests macOS Build Status
App Center Sample App Android Build status
App Center Sample App iOS Build status

Sample App

Try out Xamarin.Essentials on your device!


Xamarin.Essentials is available via:

  • NuGet Official Releases: NuGet

Please read our Getting Started with Xamarin.Essentials guide for full setup instructions.


Browse our full documentation for Xamarin.Essentials, including feature guides, on how to use each feature.

Supported Platforms

Xamarin.Essentials is focused on the following platforms:

  • iOS (10+)
  • Android (4.4+)
  • UWP (Fall Creators Update+)

API Documentation

The following cross-platform APIs are available in Xamarin.Essentials:


Please read through our Contribution Guide. We are not accepting new PRs for full features, however any issue that is marked as up for grabs are open for community contributions. We encourage creating new issues for bugs found during usage that the team will triage. Additionally, we are open for code refactoring suggestions in PRs.

Building Xamarin.Essentials

Xamarin.Essentials is built with the new SDK-style projects with multi-targeting enabled. This means that all code for iOS, Android, and UWP exist inside of the Xamarin.Essentials project.

If building on Visual Studio 2017, you will need the following SDKs and workloads installed:

Workloads need:

  • Xamarin
  • .NET Core
  • UWP

You will need the following SDKs

  • Android 9.0, 8.1, 8.0, 7.1, 7.0, & 6.0 SDK Installed
  • UWP 10.0.16299 SDK Installed

If using Visual Studio for Mac the project can be built at the command line with MSBuild. To change the project type that you are working with, simply edit Xamarin.Essentials.csproj and modify the TargetFrameworks for only the project type you want to use.

To build through the command line, navigate to where Xamarin.Essentials.csproj exists then run:

msbuild /restore Xamarin.Essentials.csproj


Here are some frequently asked questions about Xamarin.Essentials, but be sure to read our full FAQ on our Wiki.


Please see the License.

You can’t perform that action at this time.