Skip to content
This repository has been archived by the owner on May 15, 2024. It is now read-only.

Commit

Permalink
Merge main to live (#2120)
Browse files Browse the repository at this point in the history
* Added check for reduced accuracy

* Adjusted iOS version check to use Xamarin.Essentials DeviceInfo API

* Changed DeviceInfo API version check to Platform API version check

Co-authored-by: James Montemagno <james.montemagno@gmail.com>

* Minor code fixes

* Update AppInfo.ios.tvos.watchos.macos.cs

* Update Xamarin.Essentials.csproj

* Bump AspNet.Security.OAuth.Apple to 3.1.8

Bump AspNet.Security.OAuth.Apple to 3.1.8 to resolve GHSA-3893-h8qg-6h5f.

* [BULK UPDATE] DocuTune - Rebranding links

* Update dependencies

* Enable CodeQL

* Update README.md

* Remove launch adjacent Fixes #2023

* Update App Center dependencies

* Update AndroidManifest.xml

* Update Xamarin.Essentials.csproj

* Update SecureStorage.android.cs

* Fix MediaPicker capture methods in Android 13+

Thanks to @Ghostbird in dotnet/maui#12766

* Update MediaPicker.android.cs

* Update MediaPicker.android.cs

* Update MediaPicker.android.cs

* error SA1027: Tabs and spaces should be used correctly

* Fix typos in MainThread.cs

Typo aysnc -> async

* Update FilePicker.xml

* Update azure-pipelines.yml

* Update README.md

* Update README.md

* fix share title on iOS

* Add compliance to buildpipline

* Update azure-pipelines.yml

* Update azure-pipelines.yml

* Fix

* Move files to right place

* Remove localization checks

* Remove gdn supression file

* Renamine devopsnuget.config to nuget.config

* Remove references to NuGet.config from cake

* Revert "Remove references to NuGet.config from cake"

This reverts commit 48fe60b.

* Revert "Renamine devopsnuget.config to nuget.config"

This reverts commit 953abd1.

* Add GDN suppress file

* Create NuGet.config

* dotnet tool restore first

* Revert "dotnet tool restore first"

This reverts commit 981b5d7.

* Use cake 2.1.0

* Hmm more cake

* Fix iOS Device Tests

* Revert "Fix iOS Device Tests"

This reverts commit 7db9187.

* Use Xcode 13.3

* Revert "Use Xcode 13.3"

This reverts commit 1138d28.

* Use macos-12 for iOS tests

* Revert "Revert "Use Xcode 13.3""

This reverts commit 7b5ab9c.

* Xcode 14.2

* Try fix iOS tests

* Update build.cake

* Update build.cake

* Bump xharness

* Updates for MonoAndroid13.0

* Update dependencies & obsoletes

* Set Windows JDK path

* Update azure-pipelines.yml

* Update azure-pipelines.yml

* Update azure-pipelines.yml

* Update build.cake

* Remove devopsnuget.config

* Add Boots to DeviceTests

* Cake.Boots version upgrade

* async

* Update azure-pipelines.yml

* Update dependencies

* Xcode update

* EnableMultiDex DeviceTests

* Update azure-pipelines.yml

* Update DeviceTests.Android.csproj

* Update build.cake

* Update azure-pipelines.yml

* Update build.cake

* Revert "Update azure-pipelines.yml"

This reverts commit f826488.

* Update azure-pipelines.yml

* Update azure-pipelines.yml

* Update azure-pipelines.yml

* Fix Android Emulators

* More Android emulator fixes

* Update build.cake

* Update build.cake

* Update build.cake

* Update build.cake

* Update build.cake

* Update build.cake

* Update azure-pipelines.yml

* Update azure-pipelines.yml

* Update azure-pipelines.yml

* Clean up cake file

* Reenable API23 tests

* Revert "Reenable API23 tests"

This reverts commit 22a7e2f.

* Reenable API30 tests

* Add API33 tests

* Update azure-pipelines.yml

* Update azure-pipelines.yml

* Update build.cake

* Update azure-pipelines.yml

* Add AndroidManifest entry for high sampling rate

* Disable API33 tests

* Disable API30 tests for now

* Fix failing auth redirect on Android

* Update CI version number

* Remove wrong Connectivity dispose calls on Android

* Make UWP FilePicker FutureAccessList more robust

* Add API34 compatibility for networking & battery

* Switch to Security v1 template for compliance (#2114)

* Update WebAuthenticator Sample app dependencies (#2116)

* Update WebAuthenticator Sample app to net8

* Revert "Update WebAuthenticator Sample app to net8"

This reverts commit 228ebdd.

* Update WebAuth Sample project dependencies

* Set APIScan version number

* Remove ms.prod = xamarin. Replaced by ms.service = xamarin (#2118)

Co-authored-by: Docs Allowlist Management <docs-allowlist-mgmt@microsoft.com>

* Remove ms.technology = xamarin-essentials paired with ms.prod = xamarin. Replaced by ms.subservice = xamarin-essentials paired with ms.service = xamarin (#2117)

Co-authored-by: Docs Allowlist Management <docs-allowlist-mgmt@microsoft.com>
Co-authored-by: Gerald Versluis <gerald.versluis@microsoft.com>

---------

Co-authored-by: Leon Lucardie <leon.lucardie@timetell.nl>
Co-authored-by: leonluc-dev <leonlucardie@gmail.com>
Co-authored-by: James Montemagno <james.montemagno@gmail.com>
Co-authored-by: Gerald Versluis <gerald@verslu.is>
Co-authored-by: Gerald Versluis <gerald.versluis@microsoft.com>
Co-authored-by: Martin Costello <martin@martincostello.com>
Co-authored-by: Alex Buck <abuck@microsoft.com>
Co-authored-by: Jonathan Dick <jodick@microsoft.com>
Co-authored-by: Matthew Leibowitz <mattleibow@live.com>
Co-authored-by: Ivo Snoza <39790891+ivosnoza@users.noreply.github.com>
Co-authored-by: dimonovdd <dimovde@yandex.ru>
Co-authored-by: learn-build-service-prod[bot] <113403604+learn-build-service-prod[bot]@users.noreply.github.com>
Co-authored-by: Docs Allowlist Management <docs-allowlist-mgmt@microsoft.com>
  • Loading branch information
14 people authored Jan 26, 2024
1 parent 6450045 commit 6d9b93a
Show file tree
Hide file tree
Showing 55 changed files with 880 additions and 174 deletions.
11 changes: 6 additions & 5 deletions DeviceTests/DeviceTests.Android/DeviceTests.Android.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<OutputType>Library</OutputType>
<RootNamespace>DeviceTests.Droid</RootNamespace>
<AssemblyName>XamarinEssentialsDeviceTestsAndroid</AssemblyName>
<TargetFrameworkVersion>v10.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v13.0</TargetFrameworkVersion>
<AndroidApplication>True</AndroidApplication>
<AndroidUseIntermediateDesignerFile>true</AndroidUseIntermediateDesignerFile>
<AndroidResgenClass>Resource</AndroidResgenClass>
Expand All @@ -19,6 +19,7 @@
<AndroidUseAapt2>true</AndroidUseAapt2>
<AndroidHttpClientHandlerType>Xamarin.Android.Net.AndroidClientHandler</AndroidHttpClientHandlerType>
<AndroidSupportedAbis>armeabi-v7a;x86;x86_64;arm64-v8a</AndroidSupportedAbis>
<AndroidEnableMultiDex>true</AndroidEnableMultiDex>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
Expand Down Expand Up @@ -57,13 +58,13 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2083" />
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2578" />
<PackageReference Include="System.Numerics.Vectors" Version="4.5.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.devices" Version="2.5.25" />
<PackageReference Include="Microsoft.DotNet.XHarness.TestRunners.Xunit" Version="1.0.0-prerelease.21620.1" />
<PackageReference Include="Xamarin.AndroidX.MediaRouter" Version="1.2.0.1" />
<PackageReference Include="Xamarin.AndroidX.Palette" Version="1.0.0.6" />
<PackageReference Include="Microsoft.DotNet.XHarness.TestRunners.Xunit" Version="1.0.0-prerelease.23212.1" />
<PackageReference Include="Xamarin.AndroidX.MediaRouter" Version="1.3.1.1" />
<PackageReference Include="Xamarin.AndroidX.Palette" Version="1.0.0.15" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Xamarin.Essentials\Xamarin.Essentials.csproj">
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0.1.0" package="com.xamarin.essentials.devicetests" android:installLocation="auto">
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="29" />
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" />
<uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
Expand Down Expand Up @@ -41,5 +42,5 @@
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
</queries>
<application android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:theme="@style/MainTheme"></application>
<application android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:theme="@style/MainTheme"></application>
</manifest>
7 changes: 4 additions & 3 deletions DeviceTests/DeviceTests.Shared/DeviceTests.Shared.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="MSBuild.Sdk.Extras/3.0.22">
<PropertyGroup>
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">Xamarin.iOS10;MonoAndroid10.0;uap10.0.16299</TargetFrameworks>
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">Xamarin.iOS10;MonoAndroid10.0;</TargetFrameworks>
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">Xamarin.iOS10;MonoAndroid13.0;uap10.0.16299</TargetFrameworks>
<TargetFrameworks Condition=" '$(OS)' != 'Windows_NT' ">Xamarin.iOS10;MonoAndroid13.0;</TargetFrameworks>
<AssemblyName>XamarinEssentialsDeviceTestsShared</AssemblyName>
<RootNamespace>DeviceTests.Shared</RootNamespace>
<Product>$(AssemblyName) ($(TargetFramework))</Product>
Expand All @@ -13,6 +13,7 @@
<DefineConstants>$(DefineConstants);</DefineConstants>
<MDocDocumentationDirectory>$(MSBuildThisFileDirectory)..\docs\en</MDocDocumentationDirectory>
<Configurations>Debug;Release</Configurations>
<BuildWithMSBuildOnMono>true</BuildWithMSBuildOnMono>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)'=='Debug' ">
<DebugType>full</DebugType>
Expand All @@ -23,7 +24,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Numerics.Vectors" Version="4.5.0" />
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2083" />
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2578" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.devices" Version="2.5.25" />
<PackageReference Include="UnitTests.HeadlessRunner" Version="2.0.0" />
Expand Down
2 changes: 2 additions & 0 deletions DeviceTests/DeviceTests.Shared/Geolocation_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,13 @@ await MainThread.InvokeOnMainThreadAsync(async () =>
});

var request = new GeolocationRequest(GeolocationAccuracy.Best);
request.RequestFullAccuracy = true;
var location = await Geolocation.GetLocationAsync(request);

Assert.NotNull(location);

Assert.True(location.Accuracy > 0);
Assert.False(location.ReducedAccuracy);
Assert.NotEqual(0.0, location.Latitude);
Assert.NotEqual(0.0, location.Longitude);

Expand Down
2 changes: 1 addition & 1 deletion DeviceTests/DeviceTests.UWP/DeviceTests.UWP.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="UnitTests.HeadlessRunner" Version="2.0.0" />
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2083" />
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2578" />
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform" Version="6.2.9" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.devices" Version="2.5.25" />
Expand Down
4 changes: 2 additions & 2 deletions DeviceTests/DeviceTests.iOS/DeviceTests.iOS.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,10 @@
<Reference Include="Xamarin.iOS" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2083" />
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2578" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.devices" Version="2.5.25" />
<PackageReference Include="Microsoft.DotNet.XHarness.TestRunners.Xunit" Version="1.0.0-prerelease.21620.1" />
<PackageReference Include="Microsoft.DotNet.XHarness.TestRunners.Xunit" Version="1.0.0-prerelease.23212.1" />
<PackageReference Include="System.Numerics.Vectors" Version="4.5.0" />
</ItemGroup>
<ItemGroup>
Expand Down
4 changes: 4 additions & 0 deletions DeviceTests/DeviceTests.iOS/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,9 @@
<string>Access to your location is required for cool things to happen!</string>
<key>NSContactsUsageDescription</key>
<string>Contacts</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>arm64</string>
</array>
</dict>
</plist>
116 changes: 103 additions & 13 deletions DeviceTests/build.cake
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
#addin nuget:?package=Cake.AppleSimulator&version=0.2.0
#addin nuget:?package=Cake.Android.Adb&version=3.2.0
#addin nuget:?package=Cake.Android.AvdManager&version=2.2.0
#addin nuget:?package=Cake.Android.SdkManager&version=3.0.2
#addin nuget:?package=Cake.FileHelpers&version=3.3.0
#addin nuget:?package=Cake.Boots&version=1.1.0.712-preview2

var TARGET = Argument("target", "Default");

var IOS_SIM_NAME = Argument("ios-device", EnvironmentVariable("IOS_SIM_NAME") ?? "iPhone 11");
var IOS_SIM_RUNTIME = Argument("ios-runtime", EnvironmentVariable("IOS_SIM_RUNTIME") ?? "com.apple.CoreSimulator.SimRuntime.iOS-14-2");
var IOS_SIM_NAME = Argument("ios-device", EnvironmentVariable("IOS_SIM_NAME") ?? "iPhone 14");
var IOS_SIM_RUNTIME = Argument("ios-runtime", EnvironmentVariable("IOS_SIM_RUNTIME") ?? "ios-simulator-64");
var IOS_PROJ = "./DeviceTests.iOS/DeviceTests.iOS.csproj";
var IOS_BUNDLE_ID = "com.xamarin.essentials.devicetests";
var IOS_IPA_PATH = "./DeviceTests.iOS/bin/iPhoneSimulator/Release/XamarinEssentialsDeviceTestsiOS.app";
Expand All @@ -33,15 +35,24 @@ var TCP_LISTEN_HOST = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName())
var OUTPUT_PATH = MakeAbsolute((DirectoryPath)"../output/");
var ANDROID_HOME = EnvironmentVariable("ANDROID_HOME");
// set up env
var ANDROID_SDK_ROOT = GetAndroidSDKPath();
var ANDROID_HOME = ANDROID_SDK_ROOT;
System.Environment.SetEnvironmentVariable("PATH",
$"{ANDROID_HOME}/tools/bin" + System.IO.Path.PathSeparator +
$"{ANDROID_HOME}/platform-tools" + System.IO.Path.PathSeparator +
$"{ANDROID_HOME}/emulator" + System.IO.Path.PathSeparator +
EnvironmentVariable("PATH"));
SetEnvironmentVariable("PATH", $"{ANDROID_SDK_ROOT}/tools/bin", prepend: true);
SetEnvironmentVariable("PATH", $"{ANDROID_SDK_ROOT}/cmdline-tools/5.0/bin", prepend: true);
SetEnvironmentVariable("PATH", $"{ANDROID_SDK_ROOT}/cmdline-tools/7.0/bin", prepend: true);
SetEnvironmentVariable("PATH", $"{ANDROID_SDK_ROOT}/cmdline-tools/latest/bin", prepend: true);
var RESTORE_CONFIG = MakeAbsolute((FilePath)"../devopsnuget.config").FullPath;
SetEnvironmentVariable("PATH", $"{ANDROID_SDK_ROOT}/platform-tools", prepend: true);
SetEnvironmentVariable("PATH", $"{ANDROID_SDK_ROOT}/emulator", prepend: true);
Information("Android SDK Root: {0}", ANDROID_SDK_ROOT);
string androidSdks = EnvironmentVariable("ANDROID_API_SDKS", "platform-tools,platforms;android-26,platforms;android-27,platforms;android-28,platforms;android-29,build-tools;29.0.3,platforms;android-30,build-tools;30.0.2,platforms;android-32,build-tools;32.0.0,platforms;android-33,build-tools;33.0.2");
Information("ANDROID_API_SDKS: {0}", androidSdks);
string[] androidSdkManagerInstalls = androidSdks.Split(',');
// utils
Expand Down Expand Up @@ -88,6 +99,28 @@ Task DownloadTcpTextAsync(int port, FilePath filename, Action waitAction = null)
});
}
void SetEnvironmentVariable(string name, string value, bool prepend = false)
{
var target = EnvironmentVariableTarget.Process;
if (prepend)
value = value + System.IO.Path.PathSeparator + EnvironmentVariable(name);
Environment.SetEnvironmentVariable(name, value, target);
Information("Setting environment variable: {0} = '{1}'", name, value);
}
string GetAndroidSDKPath()
{
var ANDROID_SDK_ROOT = Argument("android", EnvironmentVariable("ANDROID_SDK_ROOT") ?? EnvironmentVariable("ANDROID_HOME"));
if (string.IsNullOrEmpty(ANDROID_SDK_ROOT)) {
throw new Exception("Environment variable 'ANDROID_SDK_ROOT' or 'ANDROID_HOME' must be set to the Android SDK root.");
}

return ANDROID_SDK_ROOT;
}

// iOS tasks

Expand All @@ -100,7 +133,6 @@ Task("build-ios")
c.Properties["Platform"] = new List<string> { "iPhoneSimulator" };
c.Properties["BuildIpa"] = new List<string> { "true" };
c.Properties["ContinuousIntegrationBuild"] = new List<string> { "false" };
c.Properties["RestoreConfigFile"] = new List<string> { RESTORE_CONFIG };
c.Targets.Clear();
c.Targets.Add("Rebuild");
c.BinaryLogger = new MSBuildBinaryLogSettings {
Expand Down Expand Up @@ -138,14 +170,71 @@ Task("test-ios-emu")

// Android tasks

Task("boots")
.Does(async () =>
{
await Boots (Product.XamarinAndroid, ReleaseChannel.Stable);
});

Task("provision-androidsdk")
.Description("Install Xamarin.Android SDK")
.Does(() =>
{
Information ("ANDROID_HOME: {0}", ANDROID_HOME);
if(androidSdkManagerInstalls.Length > 0)
{
Information("Updating Android SDKs");
var androidSdkSettings = new AndroidSdkManagerToolSettings {
SkipVersionCheck = true
};
if(!String.IsNullOrWhiteSpace(ANDROID_HOME))
androidSdkSettings.SdkRoot = ANDROID_HOME;
try{
AcceptLicenses (androidSdkSettings);
}
catch(Exception exc)
{
Information("AcceptLicenses: {0}", exc);
}
try{
AndroidSdkManagerUpdateAll (androidSdkSettings);
}
catch(Exception exc)
{
Information("AndroidSdkManagerUpdateAll: {0}", exc);
}
try{
AcceptLicenses (androidSdkSettings);
}
catch(Exception exc)
{
Information("AcceptLicenses: {0}", exc);
}
try{
AndroidSdkManagerInstall (androidSdkManagerInstalls, androidSdkSettings);
}
catch(Exception exc)
{
Information("AndroidSdkManagerInstall: {0}", exc);
}
}
});

Task("build-android")
.IsDependentOn("provision-androidsdk")
.IsDependentOn("boots")
.Does(() =>
{
MSBuild(ANDROID_PROJ, c => {
c.Configuration = "Debug"; // needs to be debug so unit tests get discovered
c.Restore = true;
c.Properties["ContinuousIntegrationBuild"] = new List<string> { "false" };
c.Properties["RestoreConfigFile"] = new List<string> { RESTORE_CONFIG };
c.Targets.Clear();
c.Targets.Add("Rebuild");
c.Targets.Add("SignAndroidPackage");
Expand Down Expand Up @@ -188,12 +277,14 @@ Task("test-android-emu")
}
Information("Waited {0} seconds for the emulator to boot up.", waited);
var targetArch = ANDROID_EMU_TARGET.Split(';').Last();
// Run the tests
var resultCode = StartProcess("xharness", "android test " +
$"--app=\"{ANDROID_APK_PATH}\" " +
$"--package-name=\"{ANDROID_PKG_NAME}\" " +
$"--instrumentation=\"{ANDROID_INSTRUMENTATION_NAME}\" " +
$"--device-arch=\"x86\" " +
$"--device-arch=\"{targetArch}\" " +
$"--output-directory=\"{ANDROID_TEST_RESULTS_PATH}\" " +
$"--verbosity=\"Debug\" ");
Expand Down Expand Up @@ -225,7 +316,6 @@ Task("build-uwp")
c.Properties["AppxBundlePlatforms"] = new List<string> { "x86" };
c.Properties["AppxBundle"] = new List<string> { "Always" };
c.Properties["AppxPackageSigningEnabled"] = new List<string> { "true" };
c.Properties["RestoreConfigFile"] = new List<string> { RESTORE_CONFIG };
c.Targets.Clear();
c.Targets.Add("Rebuild");
c.BinaryLogger = new MSBuildBinaryLogSettings {
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion PRODUCT-FEEDBACK.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
We'd love to hear your thoughts on Xamarin.Essentials. Here are a few links to help get you to the right place:

### Setup and Common Questions
* Read through our full [Getting Started with Xamarin.Essetials Guide](https://docs.microsoft.com/xamarin/essentials/get-started)
* Read through our full [Getting Started with Xamarin.Essetials Guide](https://learn.microsoft.com/xamarin/essentials/get-started)
* [Frequently Asked Questions on our Wiki](https://github.com/xamarin/Essentials/wiki/FAQ-%7C-Essentials)

### Propose a Feature
Expand Down
30 changes: 17 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ iOS, Android, and UWP offer unique operating system and platform APIs that devel

## Questions

Get your technical questions answered by experts on [Microsoft Q&A](https://docs.microsoft.com/answers/topics/dotnet-xamarinessentials.html?WT.mc_id=friends-0000-jamont).
Get your technical questions answered by experts on [Microsoft Q&A](https://learn.microsoft.com/answers/topics/dotnet-xamarinessentials.html?WT.mc_id=friends-0000-jamont).

## Contribution Discussion

Expand All @@ -16,15 +16,7 @@ Contributing to Xamarin.Essentials? Join our [Discord server](https://discord.co

| Build Server | Type | Platform | Status |
|--------------|--------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| VSTS | Build | Windows | [![Build Status](https://dev.azure.com/devdiv/DevDiv/_apis/build/status/Xamarin/Components/Xamarin.Essentials?branchName=main)](https://dev.azure.com/xamarin/public/_build?definitionId=7&_a=summary) |
| App Center | Sample App | Android | [![Build status](https://build.appcenter.ms/v0.1/apps/7a1f46ca-ba2f-477e-aacc-ff013c7d5f7a/branches/main/badge)](https://appcenter.ms) |
| App Center | Sample App | iOS | [![Build status](https://build.appcenter.ms/v0.1/apps/43b39e9e-2b2b-482f-8afa-e9906334c85e/branches/main/badge)](https://appcenter.ms) |

## Sample App

Try out Xamarin.Essentials on your device!

* [Android Sample App](https://install.appcenter.ms/orgs/microsoft-liveplayer/apps/essentials-android/distribution_groups/public%20testers) via App Center.
| Azure DevOps | Build | Windows | [![Build Status](https://dev.azure.com/xamarin/public/_apis/build/status/xamarin/Essentials/Xamarin.Essentials%20(Public)?repoName=xamarin%2FEssentials&branchName=main)](https://dev.azure.com/xamarin/public/_build/latest?definitionId=7&repoName=xamarin%2FEssentials&branchName=main) |

## Installation

Expand All @@ -33,15 +25,27 @@ Xamarin.Essentials is available via NuGet & is included in every template:
* NuGet Official Releases: [![NuGet](https://img.shields.io/nuget/vpre/Xamarin.Essentials.svg?label=NuGet)](https://www.nuget.org/packages/Xamarin.Essentials)
* Nightly / CI Releases: https://aka.ms/xamarin-essentials-ci/index.json

Please read our [Getting Started with Xamarin.Essentials guide](https://docs.microsoft.com/xamarin/essentials/get-started?WT.mc_id=friends-0000-jamont) for full setup instructions.
Please read our [Getting Started with Xamarin.Essentials guide](https://learn.microsoft.com/xamarin/essentials/get-started?WT.mc_id=friends-0000-jamont) for full setup instructions.

## Xamarin.Essentials with .NET MAUI and iOS/Android .NET projects

Starting in .NET 6, Xamarin.Essentials was added into .NET MAUI directly. The team has worked hard to ensure that while it comes pre-configured with every .NET MAUI application, it is still available to all iOS and Android apps built with .NET. If you are building a .NET MAUI project there is nothing more for you to do, just start using the APIs. If you are migrating a Xamarin.iOS or Xamarin.Android app and want to use the Essentials APIs, then add the following into your project's csproj file:

```xml
<PropertyGroup>
<UseMauiEssentials>true</UseMauiEssentials>
</PropertyGroup>
```

Once you update to .NET MAUI Essentials, you will need to update any `using Xamarin.Essentials;` using statements (and any other namespace references) to the new .NET MAUI Essentials namespaces, which you can find in the [documentation](https://learn.microsoft.com/dotnet/maui/platform-integration).

## Documentation

Browse our [full documentation for Xamarin.Essentials](https://docs.microsoft.com/xamarin/essentials?WT.mc_id=friends-0000-jamont), including feature guides, on how to use each feature.
Browse our [full documentation for Xamarin.Essentials](https://learn.microsoft.com/xamarin/essentials?WT.mc_id=friends-0000-jamont), including feature guides, on how to use each feature.

## Supported Platforms

Platform support & feature support can be found on our [documentation](https://docs.microsoft.com/xamarin/essentials/platform-feature-support?WT.mc_id=friends-0000-jamont)
Platform support & feature support can be found on our [documentation](https://learn.microsoft.com/xamarin/essentials/platform-feature-support?WT.mc_id=friends-0000-jamont)


## Contributing
Expand Down
Loading

0 comments on commit 6d9b93a

Please sign in to comment.