Merge branch 'main-handler' into main-maui
|
@ -7,6 +7,12 @@
|
|||
"commands": [
|
||||
"dotnet-cake"
|
||||
]
|
||||
},
|
||||
"microsoft.dotnet.xharness.cli": {
|
||||
"version": "1.0.0-prerelease.21109.1",
|
||||
"commands": [
|
||||
"xharness"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
<Project>
|
||||
<ItemGroup Condition="$(TargetFramework.StartsWith('Xamarin.iOS')) != true ">
|
||||
<ItemGroup Condition="$(TargetFramework.StartsWith('Xamarin.iOS')) != true AND $(TargetFramework.StartsWith('net6.0-ios')) != true ">
|
||||
<Compile Remove="**\*.iOS.cs" />
|
||||
<None Include="**\*.iOS.cs" />
|
||||
<Compile Remove="**\iOS\*.cs" />
|
||||
|
@ -11,13 +11,13 @@
|
|||
<Compile Remove="**\Mac\*.cs" />
|
||||
<None Include="**\Mac\*.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="$(TargetFramework.StartsWith('Xamarin.Mac')) != true And $(TargetFramework.StartsWith('Xamarin.iOS')) != true ">
|
||||
<ItemGroup Condition="$(TargetFramework.StartsWith('Xamarin.Mac')) != true AND $(TargetFramework.StartsWith('Xamarin.iOS')) != true AND $(TargetFramework.StartsWith('net6.0-ios')) != true ">
|
||||
<Compile Remove="**\*.MaciOS.cs" />
|
||||
<None Include="**\*.MaciOS.cs" />
|
||||
<Compile Remove="**\MaciOS\*.cs" />
|
||||
<None Include="**\MaciOS\*.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="$(TargetFramework.StartsWith('MonoAndroid')) != true ">
|
||||
<ItemGroup Condition="$(TargetFramework.StartsWith('MonoAndroid')) != true AND $(TargetFramework.StartsWith('net6.0-android')) != true ">
|
||||
<Compile Remove="**\*.Android.cs" />
|
||||
<None Include="**\*.Android.cs" />
|
||||
<Compile Remove="**\Android\*.cs" />
|
||||
|
@ -40,6 +40,17 @@
|
|||
<None Include="**\Win32\*.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<!-- Android -->
|
||||
<PropertyGroup Condition="$(TargetFramework.StartsWith('net6.0-android'))">
|
||||
<DefineConstants>$(DefineConstants);MONOANDROID</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- iOS -->
|
||||
<PropertyGroup Condition=" '$(TargetFramework)' == 'net6.0-ios' ">
|
||||
<DefineConstants>$(DefineConstants);IOS</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="$(TargetFramework.StartsWith('netcoreapp')) == true ">
|
||||
<UseWpf>true</UseWpf>
|
||||
</PropertyGroup>
|
||||
|
@ -47,9 +58,18 @@
|
|||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
</PropertyGroup>
|
||||
<!-- If this becomes part of the product we will remove these but for now it's useful having them all in one place -->
|
||||
<ItemGroup Condition="$(TargetFramework.StartsWith('MonoAndroid')) == true ">
|
||||
<ItemGroup Condition="$(TargetFramework.StartsWith('MonoAndroid')) == true OR '$(TargetPlatformIdentifier)' == 'android' OR '$(TargetFramework)' == 'net6.0-android'">
|
||||
<PackageReference Include="Xamarin.AndroidX.Lifecycle.LiveData" Version="2.2.0.4" />
|
||||
<PackageReference Include="Xamarin.Google.Android.Material" Version="1.2.1.1" />
|
||||
<PackageReference Include="Xamarin.AndroidX.Legacy.Support.V4" Version="1.0.0.6" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
<PropertyGroup Condition="$(TargetFramework.StartsWith('net5.0-windows')) == true">
|
||||
<TargetPlatformMinVersion>10.0.17134.0</TargetPlatformMinVersion>
|
||||
<RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
|
||||
<DefineConstants>$(DefineConstants);DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;UWP_16299;UWP_18362;UWP_17134</DefineConstants>
|
||||
<NoWarn>$(NoWarn);NU5104</NoWarn>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition="$(TargetFramework.StartsWith('net5.0-windows')) == true">
|
||||
<PackageReference Include="Microsoft.WinUI" Version="3.0.0-preview3.201113.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
До Ширина: | Высота: | Размер: 6.5 KiB После Ширина: | Высота: | Размер: 6.5 KiB |
|
@ -0,0 +1,56 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.30926.220
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xamarin.Platform.Handlers-net6", "src\Platform.Handlers\src\Xamarin.Platform.Handlers\Xamarin.Platform.Handlers-net6.csproj", "{95BA42B5-B00E-4986-B9B5-517140378452}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample-net6", "src\Platform.Handlers\samples\Sample\Sample-net6.csproj", "{31D405F0-723E-4A6C-A52B-F4CB19A8D845}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Files", "Files", "{449F6071-A74F-4309-8D7B-7038CFD1B17B}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
README.md = README.md
|
||||
.nuspec\Xamarin.Forms.MultiTargeting.targets = .nuspec\Xamarin.Forms.MultiTargeting.targets
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xamarin.Forms.Core-net6", "src\Forms\src\Xamarin.Forms.Core\Xamarin.Forms.Core-net6.csproj", "{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.Droid-net6", "src\Platform.Handlers\samples\Sample.Droid\Sample.Droid-net6.csproj", "{3AE5B968-1916-4213-97E4-F88F51BCAB23}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.iOS-net6", "src\Platform.Handlers\samples\Sample.iOS\Sample.iOS-net6.csproj", "{B8D80A2B-F636-4E27-BCAA-EA601007B7F4}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{95BA42B5-B00E-4986-B9B5-517140378452}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{95BA42B5-B00E-4986-B9B5-517140378452}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{95BA42B5-B00E-4986-B9B5-517140378452}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{95BA42B5-B00E-4986-B9B5-517140378452}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{31D405F0-723E-4A6C-A52B-F4CB19A8D845}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{31D405F0-723E-4A6C-A52B-F4CB19A8D845}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{31D405F0-723E-4A6C-A52B-F4CB19A8D845}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{31D405F0-723E-4A6C-A52B-F4CB19A8D845}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AF64451F-E2BD-41C2-B083-F60C26AE2A9F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3AE5B968-1916-4213-97E4-F88F51BCAB23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3AE5B968-1916-4213-97E4-F88F51BCAB23}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3AE5B968-1916-4213-97E4-F88F51BCAB23}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
||||
{3AE5B968-1916-4213-97E4-F88F51BCAB23}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3AE5B968-1916-4213-97E4-F88F51BCAB23}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B8D80A2B-F636-4E27-BCAA-EA601007B7F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B8D80A2B-F636-4E27-BCAA-EA601007B7F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B8D80A2B-F636-4E27-BCAA-EA601007B7F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B8D80A2B-F636-4E27-BCAA-EA601007B7F4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {0B8ABEAD-D2B5-4370-A187-62B5ABE4EE50}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
24
README.md
|
@ -8,6 +8,30 @@
|
|||
* Evolution of [Xamarin.Forms](https://github.com/xamarin/xamarin.forms)
|
||||
* .NET 6
|
||||
|
||||
## Maui.sln
|
||||
|
||||
### SDKS required
|
||||
- Install the SDKs listed here https://github.com/xamarin/net6-samples
|
||||
|
||||
- And/or run the following
|
||||
|
||||
```
|
||||
dotnet tool install Cake.Tool -g
|
||||
dotnet cake --target=provision
|
||||
```
|
||||
|
||||
### Running
|
||||
|
||||
#### IDE
|
||||
- If you have Visual Studio 16.9 P4 installed you can open `Maui.sln` and run it from there.
|
||||
|
||||
#### Command Line
|
||||
|
||||
```
|
||||
dotnet build src\Platform.Handlers\samples\Sample.Droid\Sample.Droid-net6.csproj -t:Run
|
||||
dotnet build src\Platform.Handlers\samples\Sample.iOS\Sample.iOS-net6.csproj -t:Run
|
||||
```
|
||||
|
||||
## Current News
|
||||
|
||||
[![](Assets/poster-standup.png)](https://www.youtube.com/watch?v=5bK2ICHtMxo)
|
||||
|
|
104
build.cake
|
@ -22,7 +22,7 @@ PowerShell:
|
|||
#addin "nuget:?package=Cake.Android.Adb&version=3.2.0"
|
||||
#addin "nuget:?package=Cake.Git&version=0.21.0"
|
||||
#addin "nuget:?package=Cake.Android.SdkManager&version=3.0.2"
|
||||
#addin "nuget:?package=Cake.Boots&version=1.0.2.437"
|
||||
#addin "nuget:?package=Cake.Boots&version=1.0.3.556"
|
||||
#addin "nuget:?package=Cake.AppleSimulator&version=0.2.0"
|
||||
#addin "nuget:?package=Cake.FileHelpers&version=3.2.1"
|
||||
|
||||
|
@ -388,7 +388,7 @@ Task("provision-netsdk-local")
|
|||
|
||||
Information("Downloading: {0} to {1}", cabUrl, cabPath);
|
||||
DownloadFile(cabUrl, cabPath);
|
||||
InstallMsi(msiUrl, null, msiName);
|
||||
InstallMsiOrExe(msiUrl, null, msiName);
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
|
@ -541,7 +541,7 @@ Task("provision-uitests-uwp")
|
|||
if(!DirectoryExists(driverPath))
|
||||
{
|
||||
try{
|
||||
InstallMsi(UWP_APP_DRIVER_INSTALL_PATH, installPath);
|
||||
InstallMsiOrExe(UWP_APP_DRIVER_INSTALL_PATH, installPath);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
|
@ -550,8 +550,41 @@ Task("provision-uitests-uwp")
|
|||
}
|
||||
});
|
||||
|
||||
void InstallMsi(string msiFile, string installTo, string fileName = "InstallFile.msi")
|
||||
|
||||
async Task InstallMsiWithBoots(string msiFile, string installTo = null, string fileName = "InstallFile.msi")
|
||||
{
|
||||
bool success = false;
|
||||
|
||||
try
|
||||
{
|
||||
await Boots(msiFile);
|
||||
success = true;
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
Information("Boots failed: {0}", e);
|
||||
}
|
||||
|
||||
|
||||
if(success)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
InstallMsiOrExe(msiFile, installTo, fileName, !isCIBuild);
|
||||
success = true;
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
Information("Our attempt failed: {0}", e);
|
||||
}
|
||||
}
|
||||
|
||||
void InstallMsiOrExe(string msiFile, string installTo = null, string fileName = "InstallFile.msi", bool interactive = false)
|
||||
{
|
||||
if(msiFile.EndsWith(".exe") && fileName == "InstallFile.msi")
|
||||
fileName = "InstallFile.exe";
|
||||
|
||||
string installerPath = $"{System.IO.Path.GetTempPath()}{fileName}";
|
||||
|
||||
try
|
||||
|
@ -559,22 +592,35 @@ void InstallMsi(string msiFile, string installTo, string fileName = "InstallFile
|
|||
Information ("Installing: {0}", msiFile);
|
||||
DownloadFile(msiFile, installerPath);
|
||||
Information("File Downloaded To: {0}", installerPath);
|
||||
int result = -1;
|
||||
|
||||
var argumentBuilder =
|
||||
new ProcessArgumentBuilder()
|
||||
.Append("/a")
|
||||
.Append(installerPath)
|
||||
.Append("/qn");
|
||||
|
||||
if(!String.IsNullOrWhiteSpace(installTo))
|
||||
if(msiFile.EndsWith(".exe"))
|
||||
{
|
||||
Information("Installing into: {0}", installTo);
|
||||
argumentBuilder = argumentBuilder.Append("TARGETDIR=\"" + installTo + "\"");
|
||||
result = StartProcess(installerPath, new ProcessSettings {
|
||||
Arguments = new ProcessArgumentBuilder()
|
||||
.Append(@" /q")
|
||||
}
|
||||
);
|
||||
}
|
||||
else{
|
||||
var argumentBuilder =
|
||||
new ProcessArgumentBuilder()
|
||||
.Append("/a")
|
||||
.Append(installerPath);
|
||||
|
||||
var result = StartProcess("msiexec", new ProcessSettings {
|
||||
Arguments = argumentBuilder
|
||||
});
|
||||
if(!interactive)
|
||||
argumentBuilder = argumentBuilder.Append("/qn");
|
||||
|
||||
if(!String.IsNullOrWhiteSpace(installTo))
|
||||
{
|
||||
Information("Installing into: {0}", installTo);
|
||||
argumentBuilder = argumentBuilder.Append("TARGETDIR=\"" + installTo + "\"");
|
||||
}
|
||||
|
||||
result = StartProcess("msiexec", new ProcessSettings {
|
||||
Arguments = argumentBuilder
|
||||
});
|
||||
}
|
||||
|
||||
if(result != 0)
|
||||
throw new Exception("Failed to install: " + msiFile);
|
||||
|
@ -828,30 +874,6 @@ Task("BuildForNuget")
|
|||
}
|
||||
});
|
||||
|
||||
Task("BuildPages")
|
||||
.IsDependentOn("BuildTasks")
|
||||
.Description("Build Xamarin.Forms.Pages")
|
||||
.Does(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
var msbuildSettings = GetMSBuildSettings();
|
||||
var binaryLogger = new MSBuildBinaryLogSettings {
|
||||
Enabled = isCIBuild
|
||||
};
|
||||
|
||||
msbuildSettings.BinaryLogger = binaryLogger;
|
||||
binaryLogger.FileName = $"{artifactStagingDirectory}/win-pages-{configuration}.binlog";
|
||||
MSBuild("./build/Xamarin.Forms.Pages.sln", msbuildSettings.WithRestore());
|
||||
|
||||
}
|
||||
catch(Exception)
|
||||
{
|
||||
if(IsRunningOnWindows())
|
||||
throw;
|
||||
}
|
||||
});
|
||||
|
||||
Task("BuildTasks")
|
||||
.Description($"Build {BUILD_TASKS_PROJ}")
|
||||
.Does(() =>
|
||||
|
@ -891,7 +913,7 @@ Task("VSMAC")
|
|||
{
|
||||
StartVisualStudio();
|
||||
});
|
||||
|
||||
|
||||
Task("cg-android")
|
||||
.Description("Builds Android Control Gallery")
|
||||
.IsDependentOn("WriteGoogleMapsAPIKey")
|
||||
|
|
|
@ -9,7 +9,7 @@ Param(
|
|||
)
|
||||
|
||||
# Restore Cake tool
|
||||
& dotnet tool restore
|
||||
& dotnet tool restore --configfile eng/DevopsNuget.config
|
||||
|
||||
# Build Cake arguments
|
||||
$cakeArguments = @("$Script");
|
||||
|
|
2
build.sh
|
@ -17,7 +17,7 @@ for i in "$@"; do
|
|||
done
|
||||
|
||||
# Restore Cake tool
|
||||
dotnet tool restore
|
||||
dotnet tool restore --configfile eng/DevopsNuget.config
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "An error occured while installing Cake."
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
<add key="dotnet-eng" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" protocolVersion="3" />
|
||||
<add key="dotnet-public" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json" protocolVersion="3" />
|
||||
<add key="dotnet6" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json" />
|
||||
<add key="xamarin" value="https://pkgs.dev.azure.com/azure-public/vside/_packaging/xamarin-impl/nuget/v3/index.json" />
|
||||
</packageSources>
|
||||
<activePackageSource>
|
||||
<add key="All" value="(Aggregate source)" />
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
<!-- Auto install any missing Android SDKs -->
|
||||
<PropertyGroup Condition="'$(CI)' == 'true'">
|
||||
<AndroidRestoreOnBuild Condition="'$(AndroidRestoreOnBuild)' == ''">True</AndroidRestoreOnBuild>
|
||||
<AndroidRestoreOnBuild Condition="'$(AndroidRestoreOnBuild)' == ''">False</AndroidRestoreOnBuild>
|
||||
<AcceptAndroidSDKLicenses Condition="'$(AcceptAndroidSDKLicenses)' == ''">True</AcceptAndroidSDKLicenses>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
tools/
|
|
@ -0,0 +1,199 @@
|
|||
#addin nuget:?package=Cake.Android.Adb&version=3.2.0
|
||||
#addin nuget:?package=Cake.Android.AvdManager&version=2.2.0
|
||||
|
||||
string TARGET = Argument("target", "Test");
|
||||
|
||||
// required
|
||||
FilePath PROJECT = Argument("project", EnvironmentVariable("ANDROID_TEST_PROJECT") ?? "");
|
||||
string TEST_DEVICE = Argument("device", EnvironmentVariable("ANDROID_TEST_DEVICE") ?? "android-emulator-32_30");
|
||||
|
||||
// optional
|
||||
var BINLOG = Argument("binlog", EnvironmentVariable("ANDROID_TEST_BINLOG") ?? PROJECT + ".binlog");
|
||||
var TEST_APP = Argument("app", EnvironmentVariable("ANDROID_TEST_APP") ?? "");
|
||||
var TEST_APP_PACKAGE_NAME = Argument("package", EnvironmentVariable("ANDROID_TEST_APP_PACKAGE_NAME") ?? "");
|
||||
var TEST_APP_INSTRUMENTATION = Argument("instrumentation", EnvironmentVariable("ANDROID_TEST_APP_INSTRUMENTATION") ?? "");
|
||||
var TEST_RESULTS = Argument("results", EnvironmentVariable("ANDROID_TEST_RESULTS") ?? "");
|
||||
|
||||
// other
|
||||
string CONFIGURATION = "Debug"; // needs to be debug so unit tests get discovered
|
||||
string ANDROID_AVD = "DEVICE_TESTS_EMULATOR";
|
||||
string DEVICE_NAME = "Nexus 5X";
|
||||
string DEVICE_ID = "system-images;android-30;google_apis_playstore;x86";
|
||||
|
||||
// set up env
|
||||
var ANDROID_HOME = EnvironmentVariable("ANDROID_HOME");
|
||||
if (string.IsNullOrEmpty(ANDROID_HOME)) {
|
||||
throw new Exception("Environment variable 'ANDROID_HOME' must be set to the 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"));
|
||||
|
||||
Information("ANDROID_HOME {0}", ANDROID_HOME);
|
||||
Information("Project File: {0}", PROJECT);
|
||||
Information("Build Binary Log (binlog): {0}", BINLOG);
|
||||
Information("Build Configuration: {0}", CONFIGURATION);
|
||||
|
||||
var avdSettings = new AndroidAvdManagerToolSettings { SdkRoot = ANDROID_HOME };
|
||||
var adbSettings = new AdbToolSettings { SdkRoot = ANDROID_HOME };
|
||||
var emuSettings = new AndroidEmulatorToolSettings { SdkRoot = ANDROID_HOME, ArgumentCustomization = args => args.Append("-no-window") };
|
||||
|
||||
AndroidEmulatorProcess emulatorProcess = null;
|
||||
|
||||
Setup(context =>
|
||||
{
|
||||
// determine the device characteristics
|
||||
{
|
||||
var working = TEST_DEVICE.Trim().ToLower();
|
||||
var emulator = true;
|
||||
var arch = "x86";
|
||||
var api = 30;
|
||||
// version
|
||||
if (working.IndexOf("_") is int idx && idx > 0) {
|
||||
api = int.Parse(working.Substring(idx + 1));
|
||||
working = working.Substring(0, idx);
|
||||
}
|
||||
var parts = working.Split("-");
|
||||
// os
|
||||
if (parts[0] != "android")
|
||||
throw new Exception("Unexpected platform (expected: android) in device: " + TEST_DEVICE);
|
||||
// device/emulator
|
||||
if (parts[1] == "device")
|
||||
emulator = false;
|
||||
else if (parts[1] != "emulator" && parts[1] != "simulator")
|
||||
throw new Exception("Unexpected device type (expected: device|emulator) in device: " + TEST_DEVICE);
|
||||
// arch/bits
|
||||
if (parts[2] == "32") {
|
||||
if (emulator)
|
||||
arch = "x86";
|
||||
else
|
||||
arch = "armeabi-v7a";
|
||||
} else if (parts[2] == "64") {
|
||||
if (emulator)
|
||||
arch = "x86_64";
|
||||
else
|
||||
arch = "arm64-v8a";
|
||||
}
|
||||
DEVICE_ID = $"system-images;android-{api};google_apis_playstore;{arch}";
|
||||
|
||||
// we are not using a virtual device, so quit
|
||||
if (!emulator)
|
||||
return;
|
||||
}
|
||||
|
||||
Information("Test Device: {0}", TEST_DEVICE);
|
||||
Information("Test Device ID: {0}", DEVICE_ID);
|
||||
|
||||
// delete the AVD first, if it exists
|
||||
Information("Deleting AVD if exists: {0}...", ANDROID_AVD);
|
||||
try { AndroidAvdDelete(ANDROID_AVD, avdSettings); }
|
||||
catch { }
|
||||
|
||||
// create the new AVD
|
||||
Information("Creating AVD: {0}...", ANDROID_AVD);
|
||||
AndroidAvdCreate(ANDROID_AVD, DEVICE_ID, DEVICE_NAME, force: true, settings: avdSettings);
|
||||
|
||||
// start the emulator
|
||||
Information("Starting Emulator: {0}...", ANDROID_AVD);
|
||||
emulatorProcess = AndroidEmulatorStart(ANDROID_AVD, emuSettings);
|
||||
|
||||
// var waited = 0;
|
||||
// while (AdbShell("getprop sys.boot_completed", adbSettings).FirstOrDefault() != "1") {
|
||||
// System.Threading.Thread.Sleep(1000);
|
||||
// if (waited++ > 60 * 10)
|
||||
// break;
|
||||
// }
|
||||
// Information("Waited {0} seconds for the emulator to boot up.", waited);
|
||||
});
|
||||
|
||||
Teardown(context =>
|
||||
{
|
||||
// no virtual device was used
|
||||
if (emulatorProcess == null)
|
||||
return;
|
||||
|
||||
// stop and cleanup the emulator
|
||||
AdbEmuKill(adbSettings);
|
||||
|
||||
System.Threading.Thread.Sleep(5000);
|
||||
|
||||
// kill the process if it has not already exited
|
||||
try { emulatorProcess.Kill(); }
|
||||
catch { }
|
||||
|
||||
// delete the AVD
|
||||
try { AndroidAvdDelete(ANDROID_AVD, avdSettings); }
|
||||
catch { }
|
||||
});
|
||||
|
||||
Task("Build")
|
||||
.WithCriteria(!string.IsNullOrEmpty(PROJECT.FullPath))
|
||||
.Does(() =>
|
||||
{
|
||||
MSBuild(PROJECT.FullPath, c => {
|
||||
c.Configuration = CONFIGURATION;
|
||||
c.Restore = true;
|
||||
c.Properties["ContinuousIntegrationBuild"] = new List<string> { "false" };
|
||||
c.Targets.Clear();
|
||||
c.Targets.Add("Rebuild");
|
||||
c.Targets.Add("SignAndroidPackage");
|
||||
c.BinaryLogger = new MSBuildBinaryLogSettings {
|
||||
Enabled = true,
|
||||
FileName = BINLOG,
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
Task("Test")
|
||||
.IsDependentOn("Build")
|
||||
.Does(() =>
|
||||
{
|
||||
if (string.IsNullOrEmpty(TEST_APP)) {
|
||||
if (string.IsNullOrEmpty(PROJECT.FullPath))
|
||||
throw new Exception("If no app was specified, an app must be provided.");
|
||||
var binDir = PROJECT.GetDirectory().Combine("bin").Combine(CONFIGURATION).FullPath;
|
||||
var apps = GetFiles(binDir + "/*-Signed.apk");
|
||||
if (apps.Any()) {
|
||||
TEST_APP = apps.FirstOrDefault().FullPath;
|
||||
} else {
|
||||
apps = GetFiles(binDir + "/*.apk");
|
||||
TEST_APP = apps.First().FullPath;
|
||||
}
|
||||
}
|
||||
if (string.IsNullOrEmpty(TEST_APP_PACKAGE_NAME)) {
|
||||
var appFile = (FilePath)TEST_APP;
|
||||
appFile = appFile.GetFilenameWithoutExtension();
|
||||
TEST_APP_PACKAGE_NAME = appFile.FullPath.Replace("-Signed", "");
|
||||
}
|
||||
if (string.IsNullOrEmpty(TEST_APP_INSTRUMENTATION)) {
|
||||
TEST_APP_INSTRUMENTATION = TEST_APP_PACKAGE_NAME + ".TestInstrumentation";
|
||||
}
|
||||
if (string.IsNullOrEmpty(TEST_RESULTS)) {
|
||||
TEST_RESULTS = TEST_APP + "-results";
|
||||
}
|
||||
|
||||
Information("Test App: {0}", TEST_APP);
|
||||
Information("Test App Package Name: {0}", TEST_APP_PACKAGE_NAME);
|
||||
Information("Test App Instrumentation: {0}", TEST_APP_INSTRUMENTATION);
|
||||
Information("Test Results Directory: {0}", TEST_RESULTS);
|
||||
|
||||
CleanDirectories(TEST_RESULTS);
|
||||
|
||||
var settings = new DotNetCoreToolSettings
|
||||
{
|
||||
DiagnosticOutput = true,
|
||||
ArgumentCustomization = args=>args.Append("run xharness android test " +
|
||||
$"--app=\"{TEST_APP}\" " +
|
||||
$"--package-name=\"{TEST_APP_PACKAGE_NAME}\" " +
|
||||
$"--instrumentation=\"{TEST_APP_INSTRUMENTATION}\" " +
|
||||
$"--device-arch=\"x86\" " +
|
||||
$"--output-directory=\"{TEST_RESULTS}\" " +
|
||||
$"--verbosity=\"Debug\" ")
|
||||
};
|
||||
|
||||
DotNetCoreTool("tool", settings);
|
||||
});
|
||||
|
||||
RunTarget(TARGET);
|
|
@ -0,0 +1,76 @@
|
|||
#addin nuget:?package=Cake.AppleSimulator&version=0.2.0
|
||||
|
||||
string TARGET = Argument("target", "Test");
|
||||
|
||||
// required
|
||||
FilePath PROJECT = Argument("project", EnvironmentVariable("IOS_TEST_PROJECT") ?? "");
|
||||
string TEST_DEVICE = Argument("device", EnvironmentVariable("IOS_TEST_DEVICE") ?? "ios-simulator-64_14.4"); // comma separated in the form <platform>-<device|simulator>[-<32|64>][_<version>] (eg: ios-simulator-64_13.4,[...])
|
||||
|
||||
// optional
|
||||
var BINLOG = Argument("binlog", EnvironmentVariable("IOS_TEST_BINLOG") ?? PROJECT + ".binlog");
|
||||
var TEST_APP = Argument("app", EnvironmentVariable("IOS_TEST_APP") ?? "");
|
||||
var TEST_RESULTS = Argument("results", EnvironmentVariable("IOS_TEST_RESULTS") ?? "");
|
||||
|
||||
// other
|
||||
string PLATFORM = TEST_DEVICE.ToLower().Contains("simulator") ? "iPhoneSimulator" : "iPhone";
|
||||
string CONFIGURATION = "Release";
|
||||
|
||||
Information("Project File: {0}", PROJECT);
|
||||
Information("Build Binary Log (binlog): {0}", BINLOG);
|
||||
Information("Build Platform: {0}", PLATFORM);
|
||||
Information("Build Configuration: {0}", CONFIGURATION);
|
||||
|
||||
Task("Build")
|
||||
.WithCriteria(!string.IsNullOrEmpty(PROJECT.FullPath))
|
||||
.Does(() =>
|
||||
{
|
||||
MSBuild(PROJECT.FullPath, c => {
|
||||
c.Configuration = CONFIGURATION;
|
||||
c.Restore = true;
|
||||
c.Properties["Platform"] = new List<string> { PLATFORM };
|
||||
c.Properties["BuildIpa"] = new List<string> { "true" };
|
||||
c.Properties["ContinuousIntegrationBuild"] = new List<string> { "false" };
|
||||
c.Targets.Clear();
|
||||
c.Targets.Add("Rebuild");
|
||||
c.BinaryLogger = new MSBuildBinaryLogSettings {
|
||||
Enabled = true,
|
||||
FileName = BINLOG,
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
Task("Test")
|
||||
.IsDependentOn("Build")
|
||||
.Does(() =>
|
||||
{
|
||||
if (string.IsNullOrEmpty(TEST_APP)) {
|
||||
if (string.IsNullOrEmpty(PROJECT.FullPath))
|
||||
throw new Exception("If no app was specified, an app must be provided.");
|
||||
var binDir = PROJECT.GetDirectory().Combine("bin").Combine(PLATFORM).Combine(CONFIGURATION).FullPath;
|
||||
var apps = GetDirectories(binDir + "/*.app");
|
||||
TEST_APP = apps.First().FullPath;
|
||||
}
|
||||
if (string.IsNullOrEmpty(TEST_RESULTS)) {
|
||||
TEST_RESULTS = TEST_APP + "-results";
|
||||
}
|
||||
|
||||
Information("Test Device: {0}", TEST_DEVICE);
|
||||
Information("Test App: {0}", TEST_APP);
|
||||
Information("Test Results Directory: {0}", TEST_RESULTS);
|
||||
|
||||
CleanDirectories(TEST_RESULTS);
|
||||
|
||||
var settings = new DotNetCoreToolSettings
|
||||
{
|
||||
DiagnosticOutput = true,
|
||||
ArgumentCustomization = args=>args.Append("run xharness apple test " +
|
||||
$"--app=\"{TEST_APP}\" " +
|
||||
$"--targets=\"{TEST_DEVICE}\" " +
|
||||
$"--output-directory=\"{TEST_RESULTS}\" " +
|
||||
$"--verbosity=\"Debug\" ")
|
||||
};
|
||||
|
||||
DotNetCoreTool("tool", settings);
|
||||
});
|
||||
|
||||
RunTarget(TARGET);
|
|
@ -120,4 +120,113 @@ stages:
|
|||
provisionator.path : '$(System.DefaultWorkingDirectory)/eng/provisioning/provisioning.csx'
|
||||
provisionator.extraArguments : '--v'
|
||||
steps:
|
||||
- template: common/controlgallery-android.yml
|
||||
- template: common/controlgallery-android.yml
|
||||
|
||||
- stage: build_net6_windows
|
||||
displayName: NET6 Windows
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- job: net6
|
||||
workspace:
|
||||
clean: all
|
||||
displayName: Build NET 6 Windows
|
||||
timeoutInMinutes: 120
|
||||
pool:
|
||||
vmImage: windows-latest
|
||||
variables:
|
||||
DotNetVersion: 6.0.100-preview.1.21081.5
|
||||
DotNet.Cli.Telemetry.OptOut: true
|
||||
Android.Msi: https://dl.internalx.com/vsts-devdiv/Xamarin.Android/public/net6/4435786/master/abea285994fb4366de7c6c5e1ae9cc9ee22145dd/Microsoft.NET.Workload.Android.11.0.200.72.msi
|
||||
iOS.Msi: https://bosstoragemirror.azureedge.net/wrench/main/f01fde5cd9a7ffffcdc8d241200c35988700fa00/4449408/package/Microsoft.NET.Workload.iOS.14.3.100-ci.main.1079.msi
|
||||
LogDirectory: $(Build.ArtifactStagingDirectory)\logs
|
||||
steps:
|
||||
- powershell: |
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
Invoke-WebRequest -Uri "https://dot.net/v1/dotnet-install.ps1" -OutFile dotnet-install.ps1
|
||||
& .\dotnet-install.ps1 -Version $(DotNetVersion) -InstallDir "$env:ProgramFiles\dotnet\" -Verbose
|
||||
& dotnet --list-sdks
|
||||
displayName: install .NET $(DotNetVersion)
|
||||
errorActionPreference: stop
|
||||
|
||||
- powershell: |
|
||||
& dotnet tool install --global boots
|
||||
& boots $(Android.Msi)
|
||||
& boots $(iOS.Msi)
|
||||
displayName: install .NET workloads
|
||||
errorActionPreference: stop
|
||||
|
||||
- powershell: |
|
||||
& dotnet restore Maui.sln --configfile eng\DevopsNuget.config
|
||||
& dotnet build Maui.sln -c Debug -bl:$(LogDirectory)\Debug.binlog
|
||||
& dotnet build Maui.sln -c Release -bl:$(LogDirectory)\Release.binlog
|
||||
displayName: build samples
|
||||
errorActionPreference: stop
|
||||
|
||||
- task: PublishPipelineArtifact@1
|
||||
displayName: publish artifacts
|
||||
inputs:
|
||||
artifactName: NET6-WINDOWS
|
||||
targetPath: $(Build.ArtifactStagingDirectory)
|
||||
condition: always()
|
||||
|
||||
- stage: build_net6_macOS
|
||||
displayName: NET6 macOS
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- job: net6
|
||||
workspace:
|
||||
clean: all
|
||||
displayName: Build NET 6 macOS
|
||||
timeoutInMinutes: 120
|
||||
pool:
|
||||
vmImage: macOS-latest
|
||||
variables:
|
||||
DotNetVersion: 6.0.100-preview.1.21081.5
|
||||
DotNet.Cli.Telemetry.OptOut: true
|
||||
Android.Pkg: https://dl.internalx.com/vsts-devdiv/Xamarin.Android/public/net6/4435786/master/abea285994fb4366de7c6c5e1ae9cc9ee22145dd/Microsoft.NET.Workload.Android-11.0.200-ci.master.72.pkg
|
||||
iOS.Pkg: https://bosstoragemirror.azureedge.net/wrench/main/f01fde5cd9a7ffffcdc8d241200c35988700fa00/4449408/package/notarized/Microsoft.iOS.Bundle.14.3.100-ci.main.1079.pkg
|
||||
LogDirectory: $(Build.ArtifactStagingDirectory)\logs
|
||||
DotNet.Root: /usr/local/share/dotnet/
|
||||
DotNet.Tools: ~/.dotnet/tools
|
||||
|
||||
steps:
|
||||
- task: UseDotNet@2
|
||||
displayName: install .NET Core 3.1
|
||||
inputs:
|
||||
version: 3.1.x
|
||||
installationPath: $(DotNet.Root)
|
||||
|
||||
- bash: >
|
||||
export PATH="$(DotNet.Root):$(DotNet.Tools):$PATH" &&
|
||||
curl -L https://dot.net/v1/dotnet-install.sh > dotnet-install.sh &&
|
||||
sh dotnet-install.sh --version $(DotNetVersion) --install-dir $DOTNET_ROOT --verbose &&
|
||||
dotnet --list-sdks &&
|
||||
echo "##vso[task.setvariable variable=PATH]$PATH"
|
||||
displayName: install .NET $(DotNetVersion)
|
||||
|
||||
- bash: |
|
||||
dotnet tool install --global boots
|
||||
boots $(Android.Pkg)
|
||||
boots $(iOS.Pkg)
|
||||
displayName: install .NET workloads
|
||||
|
||||
- bash: |
|
||||
set -x
|
||||
mkdir -p ~/Library/Preferences/Xamarin
|
||||
rm -f ~/Library/Preferences/Xamarin/Settings.plist
|
||||
/usr/libexec/PlistBuddy -c "add :AppleSdkRoot string $(dirname $(dirname $(xcode-select -p)))" ~/Library/Preferences/Xamarin/Settings.plist || true
|
||||
cat ~/Library/Preferences/Xamarin/Settings.plist || true
|
||||
displayName: configure vsmac xcode
|
||||
|
||||
- bash: |
|
||||
dotnet restore Maui.sln --configfile eng/DevopsNuget.config &&
|
||||
dotnet build Maui.sln -c Debug -bl:$(LogDirectory)/Debug.binlog &&
|
||||
dotnet build Maui.sln -c Release -bl:$(LogDirectory)/Release.binlog
|
||||
displayName: build samples
|
||||
|
||||
- task: PublishPipelineArtifact@1
|
||||
displayName: publish artifacts
|
||||
inputs:
|
||||
artifactName: NET6-OSX
|
||||
targetPath: $(Build.ArtifactStagingDirectory)
|
||||
condition: always()
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
using Xamarin.Forms.CustomAttributes;
|
||||
using Xamarin.Forms.Internals;
|
||||
|
||||
#if UITEST
|
||||
using Xamarin.Forms.Core.UITests;
|
||||
using Xamarin.UITest;
|
||||
using NUnit.Framework;
|
||||
#endif
|
||||
|
||||
namespace Xamarin.Forms.Controls.Issues
|
||||
{
|
||||
#if UITEST
|
||||
[Category(UITestCategories.ManualReview)]
|
||||
#endif
|
||||
[Preserve(AllMembers = true)]
|
||||
[Issue(IssueTracker.Github, 12259, "App crash when rendering label with FormattedText", PlatformAffected.macOS)]
|
||||
public class Issue12259 : TestContentPage // or TestFlyoutPage, etc ...
|
||||
{
|
||||
protected override void Init()
|
||||
{
|
||||
var label = new Label();
|
||||
|
||||
var fs = new FormattedString();
|
||||
|
||||
fs.Spans.Add(new Span { Text = "Learn more at " });
|
||||
|
||||
fs.Spans.Add(new Span { Text = "https://aka.ms/xamarin-quickstart ", FontAttributes = FontAttributes.Bold });
|
||||
|
||||
label.FormattedText = fs;
|
||||
|
||||
Content = label;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -54,7 +54,7 @@ namespace Xamarin.Forms.Controls.Issues
|
|||
await Task.Delay(1000);
|
||||
|
||||
_vm.Data.Add(Success);
|
||||
|
||||
|
||||
_vm.IsBusy = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@ using Xamarin.Forms.Core.UITests;
|
|||
|
||||
namespace Xamarin.Forms.Controls.Issues
|
||||
{
|
||||
[Issue(IssueTracker.Github, 13126, "[Bug] Regression: 5.0.0-pre5 often fails to draw dynamically loaded collection view content",
|
||||
PlatformAffected.iOS, issueTestNumber:1)]
|
||||
[Issue(IssueTracker.Github, 13126, "[Bug] Regression: 5.0.0-pre5 often fails to draw dynamically loaded collection view content",
|
||||
PlatformAffected.iOS, issueTestNumber: 1)]
|
||||
#if UITEST
|
||||
[NUnit.Framework.Category(UITestCategories.CollectionView)]
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<controls:TestContentPage
|
||||
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:controls="clr-namespace:Xamarin.Forms.Controls"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d"
|
||||
x:Class="Xamarin.Forms.Controls.Issues.Issue13437"
|
||||
Title="Issue 13437">
|
||||
<ContentPage.Content>
|
||||
<StackLayout>
|
||||
<Label
|
||||
Padding="12"
|
||||
BackgroundColor="Black"
|
||||
TextColor="White"
|
||||
Text="Tap each Button to change the CollectionView ItemsLayout. If in all cases, the ItemsLayout changes correctly, the test has passed."/>
|
||||
<Button x:Name="ButtonOne"/>
|
||||
<Button x:Name="ButtonTwo"/>
|
||||
<Button x:Name="ButtonThree"/>
|
||||
<Button x:Name="ButtonFour"/>
|
||||
<CollectionView
|
||||
x:Name="Collection"
|
||||
ItemsSource="{Binding Items}">
|
||||
<CollectionView.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Label
|
||||
Text="{Binding Text}"
|
||||
WidthRequest="100"/>
|
||||
</DataTemplate>
|
||||
</CollectionView.ItemTemplate>
|
||||
</CollectionView>
|
||||
</StackLayout>
|
||||
</ContentPage.Content>
|
||||
</controls:TestContentPage>
|
|
@ -0,0 +1,95 @@
|
|||
using System.Collections.Generic;
|
||||
using Xamarin.Forms.CustomAttributes;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
#if UITEST
|
||||
using Xamarin.Forms.Core.UITests;
|
||||
using Xamarin.UITest;
|
||||
using NUnit.Framework;
|
||||
#endif
|
||||
|
||||
namespace Xamarin.Forms.Controls.Issues
|
||||
{
|
||||
[Issue(IssueTracker.Github, 13437, "[Bug] Changing ItemsLayout of CollectionView at runtime does not work on UWP",
|
||||
PlatformAffected.UWP)]
|
||||
public partial class Issue13437 : TestContentPage
|
||||
{
|
||||
public Issue13437()
|
||||
{
|
||||
#if APP
|
||||
InitializeComponent();
|
||||
|
||||
ButtonOne.Text = "Set Vertical List";
|
||||
ButtonOne.Command = new Command(() =>
|
||||
{
|
||||
SetVerticalList();
|
||||
});
|
||||
|
||||
ButtonTwo.Text = "Set Horizontal List";
|
||||
ButtonTwo.Command = new Command(() =>
|
||||
{
|
||||
SetHorizontalList();
|
||||
});
|
||||
|
||||
ButtonThree.Text = "Set Grid 2 List";
|
||||
ButtonThree.Command = new Command(() =>
|
||||
{
|
||||
SetTwoGrid();
|
||||
});
|
||||
|
||||
ButtonFour.Text = "Set Grid 3 List";
|
||||
ButtonFour.Command = new Command(() =>
|
||||
{
|
||||
SetThreeGrid();
|
||||
});
|
||||
|
||||
var collection = new ObservableCollection<Issue13437Model>();
|
||||
|
||||
for (int i = 0; i < 42; i++)
|
||||
{
|
||||
collection.Add(new Issue13437Model { Text = "Label " + i.ToString() });
|
||||
}
|
||||
|
||||
Collection.ItemsSource = collection;
|
||||
|
||||
BindingContext = new ViewModel10482();
|
||||
#endif
|
||||
}
|
||||
|
||||
protected override void Init()
|
||||
{
|
||||
|
||||
}
|
||||
#if APP
|
||||
void SetVerticalList()
|
||||
{
|
||||
Collection.ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Vertical);
|
||||
}
|
||||
|
||||
void SetHorizontalList()
|
||||
{
|
||||
Collection.ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Horizontal);
|
||||
}
|
||||
|
||||
void SetTwoGrid()
|
||||
{
|
||||
Collection.ItemsLayout = new GridItemsLayout(ItemsLayoutOrientation.Vertical)
|
||||
{
|
||||
Span = 2,
|
||||
HorizontalItemSpacing = 5,
|
||||
VerticalItemSpacing = 5
|
||||
};
|
||||
}
|
||||
|
||||
void SetThreeGrid()
|
||||
{
|
||||
Collection.ItemsLayout = new GridItemsLayout(3, ItemsLayoutOrientation.Vertical);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
public class Issue13437Model
|
||||
{
|
||||
public string Text { get; set; }
|
||||
}
|
||||
}
|
|
@ -59,7 +59,7 @@ namespace Xamarin.Forms.Controls.Issues
|
|||
{
|
||||
ShowsResults = true;
|
||||
ItemsSource = Enumerable.Range(0, 100)
|
||||
.Select(_=> "searchresult")
|
||||
.Select(_ => "searchresult")
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,9 @@
|
|||
<Compile Include="$(MSBuildThisFileDirectory)CollectionViewGroupTypeIssue.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Issue11214.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Issue13109.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Issue13437.xaml.cs">
|
||||
<DependentUpon>Issue13437.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Issue13126.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Issue13126_2.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Issue13551.cs" />
|
||||
|
@ -1722,6 +1725,7 @@
|
|||
<Compile Include="$(MSBuildThisFileDirectory)ShellFlyoutContentWithZeroMargin.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)LabelFormattedTextHtmlPadding.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Issue13436.xaml.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Issue12259.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Issue13476.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ShellFlyoutHeaderBehavior.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Issue8701.cs" />
|
||||
|
@ -2670,6 +2674,10 @@
|
|||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Issue13437.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)VisualGallery.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
|
|
|
@ -19,7 +19,9 @@
|
|||
GalleryBuilder.NavButton("IndicatorView Gallery", () =>
|
||||
new IndicatorsSample(), Navigation),
|
||||
GalleryBuilder.NavButton("Indicator MaxVisible Gallery", () =>
|
||||
new IndicatorsSampleMaximumVisible(), Navigation)
|
||||
new IndicatorsSampleMaximumVisible(), Navigation),
|
||||
GalleryBuilder.NavButton("Indicator VisualState", () =>
|
||||
new IndicatorsTemplateSample(), Navigation)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:local="clr-namespace:Xamarin.Forms.Controls"
|
||||
mc:Ignorable="d"
|
||||
x:Class="Xamarin.Forms.Controls.IndicatorsSample">
|
||||
x:Class="Xamarin.Forms.Controls.GalleryPages.IndicatorsSample">
|
||||
<ContentPage.Resources>
|
||||
<OnPlatform x:Key="IonicsFontFamily" x:TypeArguments="x:String">
|
||||
<On Platform="iOS" Value="Ionicons" />
|
||||
|
@ -25,7 +25,7 @@
|
|||
<DataTemplate>
|
||||
<Frame BackgroundColor="{Binding Color}">
|
||||
<Grid HorizontalOptions="Center" VerticalOptions="Center">
|
||||
<Label Text="{Binding Name}" FontSize="25"></Label>
|
||||
<Label Text="{Binding Name}" FontSize="25"/>
|
||||
</Grid>
|
||||
</Frame>
|
||||
</DataTemplate>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace Xamarin.Forms.Controls
|
||||
namespace Xamarin.Forms.Controls.GalleryPages
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class IndicatorsSample : ContentPage
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="Xamarin.Forms.Controls.IndicatorsSampleMaximumVisible">
|
||||
x:Class="Xamarin.Forms.Controls.GalleryPages.IndicatorsSampleMaximumVisible">
|
||||
<ContentPage.Resources>
|
||||
<OnPlatform x:Key="IonicsFontFamily" x:TypeArguments="x:String">
|
||||
<On Platform="iOS" Value="Ionicons" />
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
using System;
|
||||
using Xamarin.Forms.Controls.GalleryPages.CollectionViewGalleries.CarouselViewGalleries;
|
||||
|
||||
namespace Xamarin.Forms.Controls
|
||||
namespace Xamarin.Forms.Controls.GalleryPages
|
||||
{
|
||||
public partial class IndicatorsSampleMaximumVisible : ContentPage
|
||||
{
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="Xamarin.Forms.Controls.GalleryPages.IndicatorsTemplateSample">
|
||||
<ContentPage.Resources>
|
||||
<OnPlatform x:Key="IonicsFontFamily" x:TypeArguments="x:String">
|
||||
<On Platform="iOS" Value="Ionicons" />
|
||||
<On Platform="Android" Value="fonts/ionicons.ttf#" />
|
||||
<On Platform="UWP" Value="Assets/Fonts/ionicons.ttf#ionicons" />
|
||||
</OnPlatform>
|
||||
<x:String x:Key="Indicator"></x:String>
|
||||
<Style x:Key="IndicatorLabelStyle" TargetType="Label">
|
||||
<Setter Property="VisualStateManager.VisualStateGroups">
|
||||
<VisualStateGroupList>
|
||||
<VisualStateGroup x:Name="CommonStates">
|
||||
<VisualState x:Name="Normal" >
|
||||
<VisualState.Setters>
|
||||
<Setter Property="TextColor"
|
||||
Value="Red" />
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
<VisualState x:Name="Selected">
|
||||
<VisualState.Setters>
|
||||
<Setter Property="TextColor"
|
||||
Value="LightSkyBlue" />
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
</VisualStateGroupList>
|
||||
</Setter>
|
||||
</Style>
|
||||
</ContentPage.Resources>
|
||||
<Grid Margin="20,20,20,20">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition></RowDefinition>
|
||||
<RowDefinition Height="Auto"></RowDefinition>
|
||||
<RowDefinition Height="Auto"></RowDefinition>
|
||||
</Grid.RowDefinitions>
|
||||
<CarouselView x:Name="carousel" ItemsSource="{Binding Items}" Grid.Row="0" Grid.RowSpan="3" IndicatorView="indicators">
|
||||
<CarouselView.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Frame BackgroundColor="{Binding Color}">
|
||||
<Grid HorizontalOptions="Center" VerticalOptions="Center">
|
||||
<Label Text="{Binding Name}" FontSize="25"></Label>
|
||||
</Grid>
|
||||
</Frame>
|
||||
</DataTemplate>
|
||||
</CarouselView.ItemTemplate>
|
||||
</CarouselView>
|
||||
<IndicatorView x:Name="indicators" Grid.Row="1" IndicatorColor="Transparent" SelectedIndicatorColor="Transparent" HorizontalOptions="Center" >
|
||||
<IndicatorView.IndicatorTemplate>
|
||||
<DataTemplate>
|
||||
<Label Style="{StaticResource IndicatorLabelStyle}"
|
||||
Text="{StaticResource Indicator}"
|
||||
FontFamily="{StaticResource IonicsFontFamily}"/>
|
||||
</DataTemplate>
|
||||
</IndicatorView.IndicatorTemplate>
|
||||
</IndicatorView>
|
||||
</Grid>
|
||||
</ContentPage>
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace Xamarin.Forms.Controls.GalleryPages
|
||||
{
|
||||
public partial class IndicatorsTemplateSample : ContentPage
|
||||
{
|
||||
public IndicatorsTemplateSample()
|
||||
{
|
||||
InitializeComponent();
|
||||
BindingContext = new GalleryPages.CollectionViewGalleries.CarouselViewGalleries.CarouselItemsGalleryViewModel(false, false);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,106 +0,0 @@
|
|||
# Suppress: EC112
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# Don't use tabs for indentation.
|
||||
[*]
|
||||
indent_style = space
|
||||
# (Please don't specify an indent_size here; that has too many unintended consequences.)
|
||||
|
||||
# Code files
|
||||
[*.{cs,csx,vb,vbx}]
|
||||
indent_size = 4
|
||||
|
||||
# Code files
|
||||
[*.sln]
|
||||
indent_size = 4
|
||||
|
||||
# Xml project files
|
||||
[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}]
|
||||
indent_size = 2
|
||||
|
||||
# Xml config files
|
||||
[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}]
|
||||
indent_size = 2
|
||||
|
||||
# JSON files
|
||||
[*.json]
|
||||
indent_size = 2
|
||||
|
||||
# XML files
|
||||
[*.xml]
|
||||
indent_size = 2
|
||||
|
||||
# Dotnet code style settings:
|
||||
[*.{cs,vb}]
|
||||
# Sort using and Import directives with System.* appearing first
|
||||
dotnet_sort_system_directives_first = true
|
||||
# Avoid "this." and "Me." if not necessary
|
||||
dotnet_style_qualification_for_field = false:suggestion
|
||||
dotnet_style_qualification_for_property = false:suggestion
|
||||
dotnet_style_qualification_for_method = false:suggestion
|
||||
dotnet_style_qualification_for_event = false:suggestion
|
||||
|
||||
# Use language keywords instead of framework type names for type references
|
||||
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
|
||||
dotnet_style_predefined_type_for_member_access = true:suggestion
|
||||
dotnet_style_require_accessibility_modifiers = omit_if_default:warning
|
||||
|
||||
# Suggest more modern language features when available
|
||||
dotnet_style_object_initializer = true:suggestion
|
||||
dotnet_style_collection_initializer = true:suggestion
|
||||
dotnet_style_coalesce_expression = true:suggestion
|
||||
dotnet_style_null_propagation = true:suggestion
|
||||
dotnet_style_explicit_tuple_names = true:suggestion
|
||||
|
||||
# Naming Conventions:
|
||||
# Pascal Casing
|
||||
dotnet_naming_symbols.method_and_property_symbols.applicable_kinds= method,property,enum
|
||||
dotnet_naming_symbols.method_and_property_symbols.applicable_accessibilities = *
|
||||
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
|
||||
|
||||
dotnet_naming_rule.methods_and_properties_must_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.methods_and_properties_must_be_pascal_case.symbols = method_and_property_symbols
|
||||
dotnet_naming_rule.methods_and_properties_must_be_pascal_case.style = pascal_case_style
|
||||
|
||||
# Non-public members must be lower-case
|
||||
dotnet_naming_symbols.non_public_symbols.applicable_kinds = field
|
||||
dotnet_naming_symbols.non_public_symbols.applicable_accessibilities = private
|
||||
dotnet_naming_style.all_lower_case_style.capitalization = camel_case
|
||||
|
||||
dotnet_naming_rule.non_public_members_must_be_lower_case.severity = warning
|
||||
dotnet_naming_rule.non_public_members_must_be_lower_case.symbols = non_public_symbols
|
||||
dotnet_naming_rule.non_public_members_must_be_lower_case.style = all_lower_case_style
|
||||
|
||||
# CSharp code style settings:
|
||||
[*.cs]
|
||||
# Do not prefer "var" everywhere
|
||||
csharp_style_var_for_built_in_types = true:error
|
||||
csharp_style_var_when_type_is_apparent = true:error
|
||||
csharp_style_var_elsewhere = true:error
|
||||
|
||||
# Prefer method-like constructs to have a block body
|
||||
csharp_style_expression_bodied_methods = true:suggestion
|
||||
csharp_style_expression_bodied_constructors = true:suggestion
|
||||
csharp_style_expression_bodied_operators = true:suggestion
|
||||
|
||||
# Prefer property-like constructs to have an expression-body
|
||||
csharp_style_expression_bodied_properties = true:suggestion
|
||||
csharp_style_expression_bodied_indexers = true:suggestion
|
||||
csharp_style_expression_bodied_accessors = true:suggestion
|
||||
|
||||
# Suggest more modern language features when available
|
||||
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
|
||||
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
|
||||
csharp_style_inlined_variable_declaration = true:suggestion
|
||||
csharp_style_throw_expression = true:suggestion
|
||||
csharp_style_conditional_delegate_call = true:suggestion
|
||||
|
||||
# Newline settings
|
||||
csharp_new_line_before_open_brace = all
|
||||
csharp_new_line_before_else = true
|
||||
csharp_new_line_before_catch = true
|
||||
csharp_new_line_before_finally = true
|
||||
csharp_new_line_before_members_in_object_initializers = true
|
||||
csharp_new_line_before_members_in_anonymous_types = true
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
###############################################################################
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
###############################################################################
|
||||
* text=auto
|
||||
|
||||
###############################################################################
|
||||
# Set default behavior for command prompt diff.
|
||||
#
|
||||
# This is need for earlier builds of msysgit that does not have it on by
|
||||
# default for csharp files.
|
||||
# Note: This is only used by command line
|
||||
###############################################################################
|
||||
*.cs diff=csharp
|
||||
|
||||
###############################################################################
|
||||
# Set the merge driver for project and solution files
|
||||
#
|
||||
# Merging from the command prompt will add diff markers to the files if there
|
||||
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||
# the diff markers are never inserted). Diff markers may cause the following
|
||||
# file extensions to fail to load in VS. An alternative would be to treat
|
||||
# these files as binary and thus will always conflict and require user
|
||||
# intervention with every merge. To do so, just uncomment the entries below
|
||||
###############################################################################
|
||||
#*.sln merge=binary
|
||||
#*.csproj merge=binary
|
||||
#*.vbproj merge=binary
|
||||
#*.vcxproj merge=binary
|
||||
#*.vcproj merge=binary
|
||||
#*.dbproj merge=binary
|
||||
#*.fsproj merge=binary
|
||||
#*.lsproj merge=binary
|
||||
#*.wixproj merge=binary
|
||||
#*.modelproj merge=binary
|
||||
#*.sqlproj merge=binary
|
||||
#*.wwaproj merge=binary
|
||||
|
||||
###############################################################################
|
||||
# behavior for image files
|
||||
#
|
||||
# image files are treated as binary by default.
|
||||
###############################################################################
|
||||
#*.jpg binary
|
||||
#*.png binary
|
||||
#*.gif binary
|
||||
|
||||
###############################################################################
|
||||
# diff behavior for common document formats
|
||||
#
|
||||
# Convert binary document formats to text before diffing them. This feature
|
||||
# is only available from the command line. Turn it on by uncommenting the
|
||||
# entries below.
|
||||
###############################################################################
|
||||
#*.doc diff=astextplain
|
||||
#*.DOC diff=astextplain
|
||||
#*.docx diff=astextplain
|
||||
#*.DOCX diff=astextplain
|
||||
#*.dot diff=astextplain
|
||||
#*.DOT diff=astextplain
|
||||
#*.pdf diff=astextplain
|
||||
#*.PDF diff=astextplain
|
||||
#*.rtf diff=astextplain
|
||||
#*.RTF diff=astextplain
|
||||
|
||||
# Force bash scripts to always use lf line endings so that if a repo is accessed
|
||||
# in Unix via a file share from Windows, the scripts will work.
|
||||
*.sh text eol=lf
|
||||
|
||||
# Force the docs to always use lf line endings
|
||||
docs/**/*.xml text eol=lf
|
|
@ -1,34 +0,0 @@
|
|||
Bug report best practices: [Submitting Issues](https://github.com/xamarin/Essentials/blob/main/SUBMITTING-ISSUES.md)
|
||||
|
||||
### Description
|
||||
|
||||
### Steps to Reproduce
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
### Expected Behavior
|
||||
|
||||
### Actual Behavior
|
||||
|
||||
### Basic Information
|
||||
|
||||
- Version with issue:
|
||||
- Last known good version:
|
||||
- IDE:
|
||||
- Platform Target Frameworks: <!-- All that apply -->
|
||||
- iOS: <!-- The version of the iOS SDK you are compiling against, e.g. 11.1 -->
|
||||
- Android: <!-- The version of the Android SDK you are compiling against, e.g. 7.1 -->
|
||||
- UWP: <!-- The version of the UWP SDK you are compiling against, e.g. 16299 -->
|
||||
- Android Support Library Version: <!-- if applicable -->
|
||||
- Nuget Packages:
|
||||
- Affected Devices:
|
||||
|
||||
### Screenshots
|
||||
|
||||
<!-- If the issue is a visual issue, please include screenshots showing the problem if possible -->
|
||||
|
||||
### Reproduction Link
|
||||
|
||||
<!-- Please upload or provide a link to a reproduction case -->
|
|
@ -1,43 +0,0 @@
|
|||
---
|
||||
name: Bug Report
|
||||
about: Create a report to help us improve
|
||||
title: "[Bug] "
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
<!-- Bug report best practices: https://github.com/xamarin/Essentials/wiki -->
|
||||
|
||||
### Description
|
||||
|
||||
### Steps to Reproduce
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
### Expected Behavior
|
||||
|
||||
### Actual Behavior
|
||||
|
||||
### Basic Information
|
||||
|
||||
- Version with issue:
|
||||
- Last known good version:
|
||||
- IDE:
|
||||
- Platform Target Frameworks: <!-- All that apply -->
|
||||
- iOS: <!-- The version of the iOS SDK you are compiling against, e.g. 11.1 -->
|
||||
- Android: <!-- The version of the Android SDK you are compiling against, e.g. 7.1 -->
|
||||
- UWP: <!-- The version of the UWP SDK you are compiling against, e.g. 16299 -->
|
||||
- Android Support Library Version: <!-- if applicable -->
|
||||
- Nuget Packages:
|
||||
- Affected Devices:
|
||||
|
||||
### Screenshots
|
||||
|
||||
<!-- If the issue is a visual issue, please include screenshots showing the problem if possible -->
|
||||
|
||||
### Reproduction Link
|
||||
|
||||
<!-- Please upload or provide a link to a reproduction case -->
|
|
@ -1,27 +0,0 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for Essentials
|
||||
title: "[Enhancement] YOUR IDEA!"
|
||||
labels: feature-request
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
Please provide a brief summary of your proposal. Two to three sentences is best here.
|
||||
|
||||
## API Changes
|
||||
|
||||
Include a list of all API changes, additions, subtractions as would be required by your proposal. These APIs should be considered placeholders, so the naming is not as important as getting the concepts correct. If possible you should include some "example" code of usage of your new API. You should also provide details of the level of availability for the feature on each of the supported platforms.
|
||||
|
||||
e.g.
|
||||
|
||||
In order to facilitate the new Shiny Button api, a bool is added to the Button class. This is done as a bool because it is simpler to data bind and other reasons...
|
||||
|
||||
var button = new Button ();
|
||||
button.MakeShiny = true; // new API
|
||||
|
||||
The MakeShiny API works even if the button is already visible.
|
||||
|
||||
## Intended Use Case
|
||||
Provide a detailed example of where your proposal would be used and for what purpose.
|
|
@ -1,39 +0,0 @@
|
|||
---
|
||||
name: New API Spec
|
||||
about: An official specification for new APIS
|
||||
title: "[Spec] "
|
||||
labels: "feature-request"
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
# [The feature]
|
||||
|
||||
Provide a concise description of the feature and the motivation for adding it to Xamarin.Essentials
|
||||
|
||||
# API
|
||||
|
||||
## [ class ]
|
||||
|
||||
### Properties
|
||||
|
||||
| API | Description |
|
||||
| ------------- | ------------- |
|
||||
| [name] | Gets or sets [description]. |
|
||||
|
||||
### Events
|
||||
|
||||
| API | Description |
|
||||
| ------------- | ------------- |
|
||||
| [name] | [API documentation/description] |
|
||||
|
||||
# Scenarios
|
||||
|
||||
# Platform Compatibility
|
||||
- Target Frameworks: <!-- All that apply -->
|
||||
- iOS: <!-- Support on iOS for the API -->
|
||||
- Android: <!-- Support on Android for the API -->
|
||||
- UWP: <!-- Support on UWP for the API -->
|
||||
# Backward Compatibility
|
||||
|
||||
# Difficulty : [low/medium/high]
|
|
@ -1,61 +0,0 @@
|
|||
<!--
|
||||
|
||||
HOL' UP! JUST A SEC!
|
||||
|
||||
After January 31, 2021, feature related pull requests cannot be guaranteed to merge by Xamarin.Essentials.
|
||||
|
||||
We are in the process of merging Xamarin.Essentials into the MAUI repository for improved experience.
|
||||
At this stage, MAUI will depend on Xamarin.Essentials, so we are moving it there so that they can be released together.
|
||||
|
||||
This repo can still be used for a time to fix any critical bugs and other issues. All new features will be postponed until the merge is complete.
|
||||
|
||||
Thanks for all the PRs in the past, we can't wait to have you contributing features very soon in our new and improved home!
|
||||
|
||||
PLEASE DELETE THE ALL THESE COMMENTS BEFORE SUBMITTING! THANKS!!!
|
||||
|
||||
-->
|
||||
|
||||
### Description of Change ###
|
||||
|
||||
Describe your changes here.
|
||||
|
||||
### Bugs Fixed ###
|
||||
|
||||
- Related to issue #
|
||||
|
||||
Provide links to issues here. Ensure that a GitHub issue was created for your feature or bug fix before sending PR.
|
||||
|
||||
### API Changes ###
|
||||
|
||||
List all API changes here (or just put None), example:
|
||||
|
||||
Added:
|
||||
|
||||
- `string Class.Property { get; set; }`
|
||||
- `void Class.Method();`
|
||||
|
||||
Changed:
|
||||
|
||||
- `object Cell.OldPropertyName` => `object Cell.NewPropertyName`
|
||||
|
||||
If there is an entirely new API, then you can use a more verbose style:
|
||||
|
||||
```csharp
|
||||
public static class NewClass {
|
||||
public static int SomeProperty { get; set; }
|
||||
public static void SomeMethod(string value);
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### Behavioral Changes ###
|
||||
|
||||
Describe any non-bug related behavioral changes that may change how users app behaves when upgrading to this version of the codebase.
|
||||
|
||||
### PR Checklist ###
|
||||
|
||||
- [ ] Has tests (if omitted, state reason in description)
|
||||
- [ ] Has samples (if omitted, state reason in description)
|
||||
- [ ] Rebased on top of `main` at time of PR
|
||||
- [ ] Changes adhere to coding standard
|
||||
- [ ] Updated documentation ([see walkthrough](https://github.com/xamarin/Essentials/wiki/Documenting-your-code-with-mdoc))
|
|
@ -1,299 +0,0 @@
|
|||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
Output/
|
||||
**/Resources/Resource.designer.cs
|
||||
|
||||
# Cake tools
|
||||
tools/
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Tt]mp/
|
||||
|
||||
# Visual Studio 2015 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUNIT
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
**/Properties/launchSettings.json
|
||||
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JustCode is a .NET coding add-in
|
||||
.JustCode
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# TODO: Comment the next line if you want to checkin your web deploy settings
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
appsettings.Development.json
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/packages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/packages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/packages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Typescript v1 declaration files
|
||||
typings/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
**/*.DS_Store
|
||||
docs/en/ns-.xml
|
|
@ -1,17 +0,0 @@
|
|||
param(
|
||||
[string]$buildCorePowershellUrl = "https://opbuildstorageprod.blob.core.windows.net/opps1container/.openpublishing.buildcore.ps1",
|
||||
[string]$parameters
|
||||
)
|
||||
# Main
|
||||
$errorActionPreference = 'Stop'
|
||||
|
||||
# Step-1: Download buildcore script to local
|
||||
echo "download build core script to local with source url: $buildCorePowershellUrl"
|
||||
$repositoryRoot = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
||||
$buildCorePowershellDestination = "$repositoryRoot\.openpublishing.buildcore.ps1"
|
||||
Invoke-WebRequest $buildCorePowershellUrl -OutFile "$buildCorePowershellDestination"
|
||||
|
||||
# Step-2: Run build core
|
||||
echo "run build core script with parameters: $parameters"
|
||||
& "$buildCorePowershellDestination" "$parameters"
|
||||
exit $LASTEXITCODE
|
|
@ -1,87 +0,0 @@
|
|||
{
|
||||
"docsets_to_publish": [
|
||||
{
|
||||
"docset_name": "XamarinEssentials",
|
||||
"build_source_folder": "docs/en",
|
||||
"build_output_subfolder": "XamarinEssentials",
|
||||
"locale": "en-us",
|
||||
"monikers": [],
|
||||
"moniker_ranges": [],
|
||||
"open_to_public_contributors": true,
|
||||
"type_mapping": {
|
||||
"Conceptual": "Content",
|
||||
"ManagedReference": "Content",
|
||||
"NetEnum": "Content",
|
||||
"NetDelegate": "Content",
|
||||
"NetNamespace": "Content",
|
||||
"NetMember": "Content",
|
||||
"NetType": "Content",
|
||||
"RestApi": "Content"
|
||||
},
|
||||
"build_entry_point": "docs",
|
||||
"template_folder": "_themes",
|
||||
"base_path": "dotnet",
|
||||
"site_name": "Docs",
|
||||
"customized_tasks": {
|
||||
"docset_prebuild": [
|
||||
"_dependentPackages/ECMA2Yaml/tools/Run.ps1",
|
||||
"_dependentPackages/CommonPlugins/tools/SplitTOC.ps1",
|
||||
"_dependentPackages/CommonPlugins/tools/DiffFolder.ps1"
|
||||
],
|
||||
"docset_postbuild": [
|
||||
"_dependentPackages/ECMA2Yaml/tools/PostBuild.ps1"
|
||||
]
|
||||
},
|
||||
"ECMA2Yaml": {
|
||||
"SourceXmlFolder": "docs/en",
|
||||
"OutputYamlFolder": "docs/en/api",
|
||||
"Flatten": true,
|
||||
"id": "XamarinEssentials",
|
||||
"SDPMode": true
|
||||
},
|
||||
"SplitTOC": [
|
||||
"docs/en/api/XamarinEssentials/toc.yml"
|
||||
],
|
||||
"DiffFolder": [
|
||||
"docs/en/api"
|
||||
]
|
||||
}
|
||||
],
|
||||
"notification_subscribers": [],
|
||||
"branches_to_filter": [],
|
||||
"skip_source_output_uploading": false,
|
||||
"need_preview_pull_request": false,
|
||||
"contribution_branch_mappings": {},
|
||||
"need_pr_comments": false,
|
||||
"dependent_repositories": [
|
||||
{
|
||||
"path_to_root": "_themes",
|
||||
"url": "https://github.com/Microsoft/templates.docs.msft",
|
||||
"branch": "master",
|
||||
"branch_mapping": {}
|
||||
}
|
||||
],
|
||||
"branch_target_mapping": {},
|
||||
"need_generate_pdf_url_template": false,
|
||||
"need_generate_pdf": false,
|
||||
"need_generate_intellisense": false,
|
||||
"dependent_packages": [
|
||||
{
|
||||
"id": "Microsoft.OpenPublishing.CommonPlugins",
|
||||
"nuget_feed": "https://www.myget.org/F/op/api/v2",
|
||||
"path_to_root": "_dependentPackages/CommonPlugins",
|
||||
"target_framework": "net45",
|
||||
"version": "latest"
|
||||
},
|
||||
{
|
||||
"id": "Microsoft.DocAsCode.ECMA2Yaml",
|
||||
"nuget_feed": "https://www.myget.org/F/op/api/v2",
|
||||
"path_to_root": "_dependentPackages/ECMA2Yaml",
|
||||
"target_framework": "net45",
|
||||
"version": "latest"
|
||||
}
|
||||
],
|
||||
"docs_build_engine": {
|
||||
"name": "docfx_v3"
|
||||
}
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
# Code of Conduct
|
||||
|
||||
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
|
|
@ -1,143 +0,0 @@
|
|||
# Contributing
|
||||
|
||||
Thanks you for your interest in contributing to Xamarin.Essentials! In this document we'll outline what you need to know about contributing and how to get started.
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
Please see our [Code of Conduct](CODE_OF_CONDUCT.md).
|
||||
|
||||
## Prerequisite
|
||||
|
||||
You will need to complete a Contribution License Agreement before any pull request can be accepted. Complete the CLA at https://cla.dotnetfoundation.org/.
|
||||
|
||||
## Contributing Code - Best Practices
|
||||
|
||||
### Enums
|
||||
* Always use `Unknown` at index 0 for return types that may have a value that is not known
|
||||
* Always use `Default` at index 0 for option types that can use the system default option
|
||||
* Follow naming guidelines for tense... `SensorSpeed` not `SensorSpeeds`
|
||||
* Assign values (0,1,2,3) for all enums
|
||||
|
||||
### Property Names
|
||||
* Include units only if one of the platforms includes it in their implementation. For instance HeadingMagneticNorth implies degrees on all platforms, but PressureInHectopascals is needed since platforms don't provide a consistent API for this.
|
||||
|
||||
### Units
|
||||
* Use the standard units and most well accepted units when possible. For instance Hectopascals are used on UWP/Android and iOS uses Kilopascals so we have chosen Hectopascals.
|
||||
|
||||
### Style
|
||||
* Prefer using `==` when checking for null instead of `is`
|
||||
|
||||
### Exceptions
|
||||
|
||||
We currently have different ways of indicating that nothing can be done:
|
||||
|
||||
- do nothing
|
||||
- throw `FeatureNotSupportedException`
|
||||
- throw `PlatformNotSupportedException`
|
||||
- throw `FeatureNotEnabledException`
|
||||
|
||||
One case where we do nothing is in Android's energy saver API: if we are not Lollipop, then we just fall through:
|
||||
https://github.com/xamarin/Essentials/blob/1.0.0/Xamarin.Essentials/Battery/Battery.android.cs#L12-L48
|
||||
|
||||
One case where we throw `FeatureNotSupportedException` is with the sensors: if there is no sensor X, then we throw.
|
||||
|
||||
One case (and the only case so far) where we throw `PlatformNotSupportedException` is in Android's text-to-speech API: if we try and speak, but we couldn't initialize, then we throw.
|
||||
|
||||
So far, I was able to determine that we throw `FeatureNotSupportedException` for:
|
||||
- the sensors on all platforms if we aren't able to access the hardware
|
||||
- we throw in the start and the stop (this one may be overkill, we can probably first check to see if it is started, and if not then just do nothing)
|
||||
- the Android external browser if there was no browser installed
|
||||
- the email API
|
||||
- Android: if there is no `message/rfc822` intent handler
|
||||
- iOS: (if the mail VC can't send, or if the `mailto:` doesn't have an app, or if trying to send HTML over the `mailto:` protocol
|
||||
- UWP: if the `EmailManager` is not available, or if trying to send HTML
|
||||
- the flashlight API on all platforms if there is no camera flash hardware
|
||||
- the phone dialler
|
||||
- Android / iOS: if the OS can't handle the `tel:` protocol
|
||||
- UWP: the `PhoneCallManager` is missing
|
||||
- the sms API
|
||||
- Android: if there is no `smsto:` intent handler
|
||||
- iOS: (if the message VC can't send
|
||||
- UWP: if the `ChatMessageManager` is not available
|
||||
- the vibration API on UWP if the `VibrationDevice` is not available or if no hardware was found
|
||||
|
||||
We throw a `PlatformNotSupportedException` for:
|
||||
- Android when we aren't able to initialize the text-to-speech engine
|
||||
|
||||
We throw a `FeatureNotEnabledException` for:
|
||||
- Geolocation if no providers are found
|
||||
|
||||
We do "nothing":
|
||||
- the Vibration API on iOS and android never actually checks, it just starts it
|
||||
- the Map API on Android and UWP just starts the URI, assuming that something will be there
|
||||
- the Geolocation API always assumes that there is a GPS and throws a `FeatureNotEnabledException` if there was no way to get the hardware
|
||||
- the KeepScreenOn feature just assumes the window flag will be honoured (probably is, but is there an api level/hardware limit?)
|
||||
- the energy saver API on android pre-Lollipop
|
||||
|
||||
## Documentation - mdoc
|
||||
|
||||
This project uses [mdoc](http://www.mono-project.com/docs/tools+libraries/tools/monodoc/generating-documentation/) to document types, members, and to add small code snippets and examples. mdoc files are simple xml files and there is an msbuild target you can invoke to help generate the xml placeholders.
|
||||
|
||||
Read the [Documenting your code with mdoc wiki page](https://github.com/xamarin/Essentials/wiki/Documenting-your-code-with-mdoc) for more information on this process.
|
||||
|
||||
Every pull request which affects public types or members should include corresponding mdoc xml file changes.
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
If you're looking for something to fix, please browse [open issues](https://github.com/xamarin/Essentials/issues).
|
||||
|
||||
Follow the style used by the [.NET Foundation](https://github.com/dotnet/runtime/blob/master/docs/coding-guidelines/coding-style.md), with two primary exceptions:
|
||||
|
||||
- We do not use the `private` keyword as it is the default accessibility level in C#.
|
||||
- We will **not** use `_` or `s_` as a prefix for internal or private field names
|
||||
- We will use `camelCaseFieldName` for naming internal or private fields in both instance and static implementations
|
||||
|
||||
Read and follow our [Pull Request template](https://github.com/xamarin/Essentials/blob/main/.github/PULL_REQUEST_TEMPLATE.md)
|
||||
|
||||
### Proposals
|
||||
|
||||
To propose a change or new feature, review the guidance below and then [open an issue using this template](https://github.com/xamarin/Essentials/issues/new).
|
||||
|
||||
#### Non-Starter Topics
|
||||
The following topics should generally not be proposed for discussion as they are non-starters:
|
||||
|
||||
* Large renames of APIs
|
||||
* Large non-backward-compatible breaking changes
|
||||
* Platform-Specifics which can be accomplished without changing Xamarin.Essentials
|
||||
* Avoid clutter posts like "+1" which do not serve to further the conversation
|
||||
|
||||
#### Guiding Principles for New Features
|
||||
|
||||
Any proposals for new feature work and new APIs should follow the spirit of these principles:
|
||||
|
||||
* APIs should be simple, direct, and generally implemented with static classes and methods whenever practical
|
||||
* Usage of interfaces is to be strictly avoided - APIs should be simple and performant
|
||||
* Custom UI should be entirely avoided
|
||||
* UI code is only allowable in cases where the platform provides an implementation (eg: Browser, Email Composer, Phone Dialer, etc)
|
||||
* New features should have native APIs available to allow implementation on a reasonable subset of the supported platforms, especially (iOS, Android, UWP)
|
||||
* No new external dependencies should be added to support implementation of new feature work (there can be exceptions but they must be thoroughly considered for the value being added)
|
||||
|
||||
#### Proposal States
|
||||
##### Open
|
||||
Open proposals are still under discussion. Please leave your concrete, constructive feedback on this proposal. +1s and other clutter posts which do not add to the discussion will be removed.
|
||||
|
||||
##### Accepted
|
||||
Accepted proposals are proposals that both the community and core Xamarin.Essentials agree should be a part of Xamarin.Essentials. These proposals are ready for implementation, but do not yet have a developer actively working on them. These proposals are available for anyone to work on, both community and the core Xamarin.Essentials team.
|
||||
|
||||
If you wish to start working on an accepted proposal, please reply to the thread so we can mark you as the implementor and change the title to In Progress. This helps to avoid multiple people working on the same thing. If you decide to work on this proposal publicly, feel free to post a link to the branch as well for folks to follow along.
|
||||
|
||||
###### What "Accepted" does mean
|
||||
* Any community member is welcome to work on the idea.
|
||||
* The core Xamarin.Essentials team _may_ consider working on this idea on their own, but has not done so until it is marked "In Progress" with a team member assigned as the implementor.
|
||||
* Any pull request implementing the proposal will be welcomed with an API and code review.
|
||||
|
||||
###### What "Accepted" does not mean
|
||||
* The proposal will ever be implemented, either by a community member or by the core Xamarin.Essentials team.
|
||||
* The core Xamarin.Essentials team is committing to implementing a proposal, even if nobody else does. Accepted proposals simply mean that the core Xamarin.Essentials team and the community agree that this proposal should be a part of Xamarin.Essentials.
|
||||
|
||||
##### In Progress
|
||||
Once a developer has begun work on a proposal, either from the core Xamarin.Essentials team or a community member, the proposal is marked as in progress with the implementors name and (possibly) a link to a development branch to follow along with progress.
|
||||
|
||||
#### Rejected
|
||||
Rejected proposals will not be implemented or merged into Xamarin.Essentials. Once a proposal is rejected, the thread will be closed and the conversation is considered completed, pending considerable new information or changes.
|
|
@ -1,18 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
|
||||
<PropertyGroup>
|
||||
<LangVersion>8.0</LangVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)Xamarin.Essentials.ruleset</CodeAnalysisRuleSet>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="All" />
|
||||
<AdditionalFiles Include="$(MSBuildThisFileDirectory)stylecop.json" InProject="false" Visible="false" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -1,25 +0,0 @@
|
|||
Xamarin.Essentials
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) Microsoft Corporation
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -1,17 +0,0 @@
|
|||
The MIT License (MIT)
|
||||
Copyright (c) Microsoft Corporation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial
|
||||
portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
|
||||
NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -1,14 +0,0 @@
|
|||
# Xamarin.Essentials Feedback
|
||||
|
||||
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)
|
||||
* [Frequently Asked Questions on our Wiki](https://github.com/xamarin/Essentials/wiki/FAQ-%7C-Essentials)
|
||||
|
||||
### Propose a Feature
|
||||
* Read our [short guide](https://github.com/xamarin/Essentials/wiki/Proposing-New-Features) and then [file an issue](https://github.com/xamarin/Essentials/issues/new)
|
||||
|
||||
### Report an Issue
|
||||
* Browse through [current open and closed issues first](https://github.com/xamarin/Essentials/issues?utf8=%E2%9C%93&q=is%3Aissue)
|
||||
* [File an issue](https://github.com/xamarin/Essentials/issues/new) if it hasn't been reported
|
|
@ -1,79 +0,0 @@
|
|||
# Xamarin.Essentials
|
||||
|
||||
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.
|
||||
|
||||
## 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).
|
||||
|
||||
## Contribution Discussion
|
||||
|
||||
Contributing to Xamarin.Essentials? Join our [Discord server](https://discord.com/invite/Y8828kE) and chat with the team
|
||||
|
||||
## Build Status
|
||||
|
||||
| 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.
|
||||
|
||||
## Installation
|
||||
|
||||
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.
|
||||
|
||||
## 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.
|
||||
|
||||
## 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)
|
||||
|
||||
|
||||
## Contributing
|
||||
|
||||
Please read through our [Contribution Guide](CONTRIBUTING.md). We are not accepting new PRs for full features, however any [issue that is marked as `up for grabs`](https://github.com/xamarin/Essentials/issues?q=is%3Aissue+is%3Aopen+label%3A%22up+for+grabs%22) 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.
|
||||
|
||||
## Visual Studio
|
||||
|
||||
A minimum version of Visual Studio 2019 16.3 or Visual Studio for Mac 2019 8.3 are required to build and compile Xamarin.Essentials.
|
||||
|
||||
### Workloads needed:
|
||||
|
||||
* Xamarin
|
||||
* .NET Core
|
||||
* UWP
|
||||
|
||||
### You will need the following SDKs
|
||||
|
||||
* Android 10.0, 9.0, 8.1, 8.0, 7.1, 7.0, & 6.0 SDK Installed
|
||||
* UWP 10.0.16299 SDK Installed
|
||||
|
||||
Your can run the included `android-setup.ps1` script in **Administrator Mode** and it will automatically setup your Android environment.
|
||||
|
||||
## FAQ
|
||||
|
||||
Here are some frequently asked questions about Xamarin.Essentials, but be sure to read our full [FAQ on our Wiki](https://github.com/xamarin/Essentials/wiki#feature-faq).
|
||||
|
||||
## License
|
||||
|
||||
Please see the [License](LICENSE).
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
If you think you've found a bug to report, before doing anything else you should check the [Issues](https://github.com/xamarin/Essentials/issues) page to see if an issue has already been filed! This can help reduce the number of duplicate reports.
|
||||
|
||||
If you're ready to submit a new issue, taking the following steps helps expedite the bug triage process:
|
||||
|
||||
* Validate that the issue is not resolved with the latest stable, pre-release, or nightly builds.
|
||||
|
||||
* If you are able and time allows, create a minimized reproduction project using only the code necessary to reproduce the issue; this helps us as we then know precisely what code is being used.
|
||||
|
||||
* Before compressing the reproduction project, make certain to clean the solution as well as manually delete any bin/obj folders, e.g.:
|
||||
|
||||
[ProjectRoot]/ProjectName/bin
|
||||
[ProjectRoot]/ProjectName/obj
|
||||
[ProjectRoot]/ProjectName.Android/bin
|
||||
[ProjectRoot]/ProjectName.Android/obj
|
||||
[ProjectRoot]/ProjectName.iOS/bin
|
||||
[ProjectRoot]/ProjectName.iOS/obj
|
||||
[ProjectRoot]/ProjectName.UWP/bin
|
||||
[ProjectRoot]/ProjectName.UWP/obj
|
||||
|
||||
Please make certain to remove the packages folder as well to cut down on size.
|
||||
|
||||
* Please make note if the issue only occurs on particular platforms, so we can run reproductions on each and compare.
|
||||
|
||||
* In the case of a regression, please confirm as such as well as the last working, pre-regression build you may be aware of, if possible. Providing a reproduction with the working package installed to begin with also helps, as we can then simply upgrade it and compare against the latest stable to confirm.
|
||||
|
||||
* In some cases, issues may only occur on specific devices, with specific versions of the OS, or when targeting specific OS versions within the project itself. Some issues also occur on devices, but not on simulators. This information is incredibly helpful.
|
||||
|
||||
* Please upload reproductions directly to the report as an attachment; this guarantees future access to the file.
|
||||
|
||||
# Android Specific Concerns #
|
||||
|
||||
Please let us know any issues which may stem from different versions of the support library packages (e.g. Xamarin.Android.Support.v7.AppCompat), as sometimes bugs may only occur when specific versions are used.
|
||||
|
||||
# iOS Specific Concerns #
|
||||
|
||||
To be added
|
||||
|
||||
# UWP-specific Concerns #
|
||||
|
||||
Please make note if an issue appears hardware-specific (slower machines, multiple monitors, etc.), due to the desktop component.
|
||||
|
||||
# Contributing #
|
||||
|
||||
Think you may have a bug fix, or you'd like to work on fixing one yourself? We greatly welcome PRs with fixes from the community! Check out the [Contribute page](CONTRIBUTING.md) for more info.
|
|
@ -1,7 +0,0 @@
|
|||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
|
||||
<ItemGroup>
|
||||
<FirstParty Include="Xamarin.Essentials.dll" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -1,15 +0,0 @@
|
|||
##Legal Notices
|
||||
Microsoft and any contributors grant you a license to the Microsoft documentation and other content
|
||||
in this repository under the [Creative Commons Attribution 4.0 International Public License](https://creativecommons.org/licenses/by/4.0/legalcode),
|
||||
see the [LICENSE](LICENSE) file, and grant you a license to any code in the repository under the [MIT License](https://opensource.org/licenses/MIT), see the
|
||||
[LICENSE-CODE](LICENSE-CODE) file.
|
||||
|
||||
Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation
|
||||
may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries.
|
||||
The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks.
|
||||
Microsoft's general trademark guidelines can be found at http://go.microsoft.com/fwlink/?LinkID=254653.
|
||||
|
||||
Privacy information can be found at https://privacy.microsoft.com/en-us/
|
||||
|
||||
Microsoft and any contributors reserve all others rights, whether under their respective copyrights, patents,
|
||||
or trademarks, whether by implication, estoppel or otherwise.
|
|
@ -1,211 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RuleSet Name="Rules for Xamarin.Essentials" Description="Code analysis rules for Xamarin.Essentials." ToolsVersion="15.0">
|
||||
<IncludeAll Action="Warning" />
|
||||
<Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.Analyzers">
|
||||
<Rule Id="SA0001" Action="None" />
|
||||
<Rule Id="SA0002" Action="Warning" />
|
||||
<Rule Id="SA1000" Action="Warning" />
|
||||
<Rule Id="SA1001" Action="Warning" />
|
||||
<Rule Id="SA1002" Action="Warning" />
|
||||
<Rule Id="SA1003" Action="Warning" />
|
||||
<Rule Id="SA1004" Action="Warning" />
|
||||
<Rule Id="SA1005" Action="Warning" />
|
||||
<Rule Id="SA1006" Action="Warning" />
|
||||
<Rule Id="SA1007" Action="Warning" />
|
||||
<Rule Id="SA1008" Action="Warning" />
|
||||
<Rule Id="SA1009" Action="Warning" />
|
||||
<Rule Id="SA1010" Action="Warning" />
|
||||
<Rule Id="SA1011" Action="Warning" />
|
||||
<Rule Id="SA1012" Action="Warning" />
|
||||
<Rule Id="SA1013" Action="Warning" />
|
||||
<Rule Id="SA1014" Action="Warning" />
|
||||
<Rule Id="SA1015" Action="Warning" />
|
||||
<Rule Id="SA1016" Action="Warning" />
|
||||
<Rule Id="SA1017" Action="Warning" />
|
||||
<Rule Id="SA1018" Action="Warning" />
|
||||
<Rule Id="SA1019" Action="Warning" />
|
||||
<Rule Id="SA1020" Action="Warning" />
|
||||
<Rule Id="SA1021" Action="Warning" />
|
||||
<Rule Id="SA1022" Action="Warning" />
|
||||
<Rule Id="SA1023" Action="Warning" />
|
||||
<Rule Id="SA1024" Action="Warning" />
|
||||
<Rule Id="SA1025" Action="Warning" />
|
||||
<Rule Id="SA1026" Action="Warning" />
|
||||
<Rule Id="SA1027" Action="Warning" />
|
||||
<Rule Id="SA1028" Action="Warning" />
|
||||
<Rule Id="SA1100" Action="Warning" />
|
||||
<Rule Id="SA1101" Action="None" />
|
||||
<Rule Id="SA1102" Action="Warning" />
|
||||
<Rule Id="SA1103" Action="Warning" />
|
||||
<Rule Id="SA1104" Action="Warning" />
|
||||
<Rule Id="SA1105" Action="Warning" />
|
||||
<Rule Id="SA1106" Action="Warning" />
|
||||
<Rule Id="SA1107" Action="Warning" />
|
||||
<Rule Id="SA1108" Action="Warning" />
|
||||
<Rule Id="SA1109" Action="Warning" />
|
||||
<Rule Id="SA1110" Action="Warning" />
|
||||
<Rule Id="SA1111" Action="Warning" />
|
||||
<Rule Id="SA1112" Action="Warning" />
|
||||
<Rule Id="SA1113" Action="Warning" />
|
||||
<Rule Id="SA1114" Action="Warning" />
|
||||
<Rule Id="SA1115" Action="Warning" />
|
||||
<Rule Id="SA1116" Action="Warning" />
|
||||
<Rule Id="SA1117" Action="Warning" />
|
||||
<Rule Id="SA1118" Action="Warning" />
|
||||
<Rule Id="SA1119" Action="Warning" />
|
||||
<Rule Id="SA1120" Action="Warning" />
|
||||
<Rule Id="SA1121" Action="Warning" />
|
||||
<Rule Id="SA1122" Action="Warning" />
|
||||
<Rule Id="SA1123" Action="Warning" />
|
||||
<Rule Id="SA1124" Action="Warning" />
|
||||
<Rule Id="SA1125" Action="Warning" />
|
||||
<Rule Id="SA1126" Action="Warning" />
|
||||
<Rule Id="SA1127" Action="Warning" />
|
||||
<Rule Id="SA1128" Action="Warning" />
|
||||
<Rule Id="SA1129" Action="Warning" />
|
||||
<Rule Id="SA1130" Action="Warning" />
|
||||
<Rule Id="SA1131" Action="Warning" />
|
||||
<Rule Id="SA1132" Action="Warning" />
|
||||
<Rule Id="SA1133" Action="Warning" />
|
||||
<Rule Id="SA1134" Action="Warning" />
|
||||
<Rule Id="SA1135" Action="Warning" />
|
||||
<Rule Id="SA1136" Action="Warning" />
|
||||
<Rule Id="SA1137" Action="Warning" />
|
||||
<Rule Id="SA1139" Action="Warning" />
|
||||
<Rule Id="SA1200" Action="Warning" />
|
||||
<Rule Id="SA1201" Action="None" />
|
||||
<Rule Id="SA1202" Action="None" />
|
||||
<Rule Id="SA1203" Action="Warning" />
|
||||
<Rule Id="SA1204" Action="Warning" />
|
||||
<Rule Id="SA1205" Action="Warning" />
|
||||
<Rule Id="SA1206" Action="Warning" />
|
||||
<Rule Id="SA1207" Action="Warning" />
|
||||
<Rule Id="SA1208" Action="Warning" />
|
||||
<Rule Id="SA1209" Action="Warning" />
|
||||
<Rule Id="SA1210" Action="Warning" />
|
||||
<Rule Id="SA1211" Action="Warning" />
|
||||
<Rule Id="SA1212" Action="Warning" />
|
||||
<Rule Id="SA1213" Action="Warning" />
|
||||
<Rule Id="SA1214" Action="Warning" />
|
||||
<Rule Id="SA1215" Action="Warning" />
|
||||
<Rule Id="SA1216" Action="Warning" />
|
||||
<Rule Id="SA1217" Action="Warning" />
|
||||
<Rule Id="SA1300" Action="Warning" />
|
||||
<Rule Id="SA1301" Action="Warning" />
|
||||
<Rule Id="SA1302" Action="Warning" />
|
||||
<Rule Id="SA1303" Action="None" />
|
||||
<Rule Id="SA1304" Action="Warning" />
|
||||
<Rule Id="SA1305" Action="None" />
|
||||
<Rule Id="SA1306" Action="Warning" />
|
||||
<Rule Id="SA1307" Action="Warning" />
|
||||
<Rule Id="SA1308" Action="Warning" />
|
||||
<Rule Id="SA1309" Action="Warning" />
|
||||
<Rule Id="SA1310" Action="Warning" />
|
||||
<Rule Id="SA1311" Action="None" />
|
||||
<Rule Id="SA1312" Action="Warning" />
|
||||
<Rule Id="SA1313" Action="Warning" />
|
||||
<Rule Id="SA1314" Action="Warning" />
|
||||
<Rule Id="SA1400" Action="None" />
|
||||
<Rule Id="SA1401" Action="Warning" />
|
||||
<Rule Id="SA1402" Action="None" />
|
||||
<Rule Id="SA1403" Action="Warning" />
|
||||
<Rule Id="SA1404" Action="Warning" />
|
||||
<Rule Id="SA1405" Action="Warning" />
|
||||
<Rule Id="SA1406" Action="Warning" />
|
||||
<Rule Id="SA1407" Action="Warning" />
|
||||
<Rule Id="SA1408" Action="Warning" />
|
||||
<Rule Id="SA1409" Action="Warning" />
|
||||
<Rule Id="SA1410" Action="Warning" />
|
||||
<Rule Id="SA1411" Action="Warning" />
|
||||
<Rule Id="SA1412" Action="Warning" />
|
||||
<Rule Id="SA1413" Action="None" />
|
||||
<Rule Id="SA1500" Action="Warning" />
|
||||
<Rule Id="SA1501" Action="Warning" />
|
||||
<Rule Id="SA1502" Action="Warning" />
|
||||
<Rule Id="SA1503" Action="None" />
|
||||
<Rule Id="SA1504" Action="Warning" />
|
||||
<Rule Id="SA1505" Action="Warning" />
|
||||
<Rule Id="SA1506" Action="Warning" />
|
||||
<Rule Id="SA1507" Action="Warning" />
|
||||
<Rule Id="SA1508" Action="Warning" />
|
||||
<Rule Id="SA1509" Action="Warning" />
|
||||
<Rule Id="SA1510" Action="Warning" />
|
||||
<Rule Id="SA1511" Action="Warning" />
|
||||
<Rule Id="SA1512" Action="None" />
|
||||
<Rule Id="SA1513" Action="None" />
|
||||
<Rule Id="SA1514" Action="Warning" />
|
||||
<Rule Id="SA1515" Action="Warning" />
|
||||
<Rule Id="SA1516" Action="Warning" />
|
||||
<Rule Id="SA1517" Action="Warning" />
|
||||
<Rule Id="SA1518" Action="Warning" />
|
||||
<Rule Id="SA1519" Action="Warning" />
|
||||
<Rule Id="SA1520" Action="Warning" />
|
||||
<Rule Id="SA1600" Action="None" />
|
||||
<Rule Id="SA1601" Action="None" />
|
||||
<Rule Id="SA1602" Action="None" />
|
||||
<Rule Id="SA1603" Action="None" />
|
||||
<Rule Id="SA1604" Action="None" />
|
||||
<Rule Id="SA1605" Action="None" />
|
||||
<Rule Id="SA1606" Action="None" />
|
||||
<Rule Id="SA1607" Action="None" />
|
||||
<Rule Id="SA1608" Action="None" />
|
||||
<Rule Id="SA1609" Action="None" />
|
||||
<Rule Id="SA1610" Action="None" />
|
||||
<Rule Id="SA1611" Action="None" />
|
||||
<Rule Id="SA1612" Action="None" />
|
||||
<Rule Id="SA1613" Action="None" />
|
||||
<Rule Id="SA1614" Action="None" />
|
||||
<Rule Id="SA1615" Action="None" />
|
||||
<Rule Id="SA1616" Action="None" />
|
||||
<Rule Id="SA1617" Action="None" />
|
||||
<Rule Id="SA1618" Action="None" />
|
||||
<Rule Id="SA1619" Action="None" />
|
||||
<Rule Id="SA1620" Action="None" />
|
||||
<Rule Id="SA1621" Action="None" />
|
||||
<Rule Id="SA1622" Action="None" />
|
||||
<Rule Id="SA1623" Action="None" />
|
||||
<Rule Id="SA1624" Action="None" />
|
||||
<Rule Id="SA1625" Action="None" />
|
||||
<Rule Id="SA1626" Action="Warning" />
|
||||
<Rule Id="SA1627" Action="None" />
|
||||
<Rule Id="SA1628" Action="None" />
|
||||
<Rule Id="SA1629" Action="None" />
|
||||
<Rule Id="SA1630" Action="None" />
|
||||
<Rule Id="SA1631" Action="None" />
|
||||
<Rule Id="SA1632" Action="None" />
|
||||
<Rule Id="SA1633" Action="None" />
|
||||
<Rule Id="SA1634" Action="None" />
|
||||
<Rule Id="SA1635" Action="None" />
|
||||
<Rule Id="SA1636" Action="None" />
|
||||
<Rule Id="SA1637" Action="None" />
|
||||
<Rule Id="SA1638" Action="None" />
|
||||
<Rule Id="SA1639" Action="None" />
|
||||
<Rule Id="SA1640" Action="None" />
|
||||
<Rule Id="SA1641" Action="None" />
|
||||
<Rule Id="SA1642" Action="None" />
|
||||
<Rule Id="SA1643" Action="None" />
|
||||
<Rule Id="SA1644" Action="None" />
|
||||
<Rule Id="SA1645" Action="None" />
|
||||
<Rule Id="SA1646" Action="None" />
|
||||
<Rule Id="SA1647" Action="None" />
|
||||
<Rule Id="SA1648" Action="None" />
|
||||
<Rule Id="SA1649" Action="None" />
|
||||
<Rule Id="SA1650" Action="None" />
|
||||
<Rule Id="SA1651" Action="None" />
|
||||
<Rule Id="SA1652" Action="None" />
|
||||
<Rule Id="SX1101" Action="Warning" />
|
||||
<Rule Id="SX1309" Action="None" />
|
||||
<Rule Id="SX1309S" Action="None" />
|
||||
<Rule Id="xUnit1026" Action="None" />
|
||||
<!--
|
||||
=================================================================================================================
|
||||
Rules that are configured in the stylecop.json file
|
||||
https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/documentation/Configuration.md
|
||||
=================================================================================================================
|
||||
SA1200: Using directives must be placed correctly.
|
||||
settings.orderingRules.systemUsingDirectivesFirst
|
||||
settings.orderingRules.usingDirectivesPlacement
|
||||
=================================================================================================================
|
||||
-->
|
||||
</Rules>
|
||||
</RuleSet>
|
|
@ -1,519 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29505.209
|
||||
MinimumVisualStudioVersion = 15.0.26124.0
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Essentials", "Xamarin.Essentials\Xamarin.Essentials.csproj", "{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples", "Samples\Samples\Samples.csproj", "{B4227123-2EEB-494A-A221-C061B5659AED}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.Android", "Samples\Samples.Android\Samples.Android.csproj", "{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.iOS", "Samples\Samples.iOS\Samples.iOS.csproj", "{AB6242B7-634F-4839-A991-7629D0D2C636}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Samples.Tizen", "Samples\Samples.Tizen\Samples.Tizen.csproj", "{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.UWP", "Samples\Samples.UWP\Samples.UWP.csproj", "{5A1D97F2-6703-4278-BBF2-12C065F7E94A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests", "Tests\Tests.csproj", "{2CE6F352-F61F-452F-9098-7800B3B06EEF}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DeviceTests.Shared", "DeviceTests\DeviceTests.Shared\DeviceTests.Shared.csproj", "{D30EA5AD-6C9B-4517-9767-41C2E62946DB}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceTests.Android", "DeviceTests\DeviceTests.Android\DeviceTests.Android.csproj", "{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceTests.iOS", "DeviceTests\DeviceTests.iOS\DeviceTests.iOS.csproj", "{EE8FC716-27FC-405B-BD27-AF17E01A6671}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceTests.UWP", "DeviceTests\DeviceTests.UWP\DeviceTests.UWP.csproj", "{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{6330A0D0-E784-42A6-B975-451E609B907B}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{EE4495FA-9869-45CF-A11D-69F2218C6F62}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample.Server.WebAuthenticator", "Samples\Sample.Server.WebAuthenticator\Sample.Server.WebAuthenticator.csproj", "{553D51A8-8E79-40D9-9FB3-9FC2386FF886}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.Mac", "Samples\Samples.Mac\Samples.Mac.csproj", "{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|ARM = Debug|ARM
|
||||
Debug|ARM64 = Debug|ARM64
|
||||
Debug|iPhone = Debug|iPhone
|
||||
Debug|iPhoneSimulator = Debug|iPhoneSimulator
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|ARM = Release|ARM
|
||||
Release|ARM64 = Release|ARM64
|
||||
Release|iPhone = Release|iPhone
|
||||
Release|iPhoneSimulator = Release|iPhoneSimulator
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{CD6D6AE6-83A1-41B1-BD7C-C555A77C288B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|ARM.Deploy.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|ARM64.Deploy.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|iPhone.Deploy.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|x64.Deploy.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Debug|x86.Deploy.0 = Debug|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|Any CPU.Deploy.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|ARM.Deploy.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|ARM64.Deploy.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|iPhone.Deploy.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|x64.Build.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|x64.Deploy.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|x86.Build.0 = Release|Any CPU
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C}.Release|x86.Deploy.0 = Release|Any CPU
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|Any CPU.Deploy.0 = Debug|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|ARM.ActiveCfg = Debug|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|ARM.Build.0 = Debug|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|ARM.Deploy.0 = Debug|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|ARM64.ActiveCfg = Debug|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|ARM64.Build.0 = Debug|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|ARM64.Deploy.0 = Debug|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|iPhone.ActiveCfg = Debug|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|iPhone.Build.0 = Debug|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|iPhone.Deploy.0 = Debug|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|x64.Build.0 = Debug|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|x64.Deploy.0 = Debug|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|x86.Build.0 = Debug|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Debug|x86.Deploy.0 = Debug|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|Any CPU.Build.0 = Release|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|Any CPU.Deploy.0 = Release|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|ARM.ActiveCfg = Release|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|ARM.Build.0 = Release|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|ARM.Deploy.0 = Release|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|ARM64.ActiveCfg = Release|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|ARM64.Build.0 = Release|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|ARM64.Deploy.0 = Release|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|iPhone.ActiveCfg = Release|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|iPhone.Build.0 = Release|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|iPhone.Deploy.0 = Release|iPhone
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|x64.ActiveCfg = Release|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|x64.Build.0 = Release|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|x64.Deploy.0 = Release|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|x86.ActiveCfg = Release|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|x86.Build.0 = Release|iPhoneSimulator
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636}.Release|x86.Deploy.0 = Release|iPhoneSimulator
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|x64.Build.0 = Release|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65}.Release|x86.Build.0 = Release|Any CPU
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|Any CPU.Build.0 = Debug|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|Any CPU.Deploy.0 = Debug|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|ARM64.Deploy.0 = Debug|ARM64
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|iPhone.ActiveCfg = Debug|ARM
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|iPhone.Build.0 = Debug|ARM
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|iPhone.Deploy.0 = Debug|ARM
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|iPhoneSimulator.Build.0 = Debug|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|iPhoneSimulator.Deploy.0 = Debug|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|x64.Build.0 = Debug|x64
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|x86.Build.0 = Debug|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Debug|x86.Deploy.0 = Debug|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|Any CPU.ActiveCfg = Release|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|Any CPU.Build.0 = Release|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|Any CPU.Deploy.0 = Release|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|ARM.Build.0 = Release|ARM
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|ARM.Deploy.0 = Release|ARM
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|ARM64.Deploy.0 = Release|ARM64
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|iPhone.ActiveCfg = Release|ARM
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|iPhone.Build.0 = Release|ARM
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|iPhone.Deploy.0 = Release|ARM
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|iPhoneSimulator.ActiveCfg = Release|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|iPhoneSimulator.Build.0 = Release|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|iPhoneSimulator.Deploy.0 = Release|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|x64.ActiveCfg = Release|x64
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|x64.Build.0 = Release|x64
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|x64.Deploy.0 = Release|x64
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|x86.ActiveCfg = Release|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|x86.Build.0 = Release|x86
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A}.Release|x86.Deploy.0 = Release|x86
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|x64.Build.0 = Release|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB}.Release|x86.Build.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|ARM.Deploy.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|ARM64.Deploy.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|iPhone.Deploy.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|x64.Deploy.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Debug|x86.Deploy.0 = Debug|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|Any CPU.Deploy.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|ARM.Deploy.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|ARM64.Deploy.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|iPhone.Deploy.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|x64.Build.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|x64.Deploy.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|x86.Build.0 = Release|Any CPU
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1}.Release|x86.Deploy.0 = Release|Any CPU
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|Any CPU.Deploy.0 = Debug|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|ARM.ActiveCfg = Debug|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|ARM.Build.0 = Debug|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|ARM.Deploy.0 = Debug|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|ARM64.ActiveCfg = Debug|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|ARM64.Build.0 = Debug|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|ARM64.Deploy.0 = Debug|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|iPhone.ActiveCfg = Debug|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|iPhone.Build.0 = Debug|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|iPhone.Deploy.0 = Debug|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|x64.Build.0 = Debug|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|x64.Deploy.0 = Debug|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|x86.Build.0 = Debug|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Debug|x86.Deploy.0 = Debug|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|Any CPU.Build.0 = Release|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|Any CPU.Deploy.0 = Release|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|ARM.ActiveCfg = Release|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|ARM.Build.0 = Release|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|ARM.Deploy.0 = Release|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|ARM64.ActiveCfg = Release|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|ARM64.Build.0 = Release|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|ARM64.Deploy.0 = Release|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|iPhone.ActiveCfg = Release|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|iPhone.Build.0 = Release|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|iPhone.Deploy.0 = Release|iPhone
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|x64.ActiveCfg = Release|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|x64.Build.0 = Release|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|x64.Deploy.0 = Release|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|x86.ActiveCfg = Release|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|x86.Build.0 = Release|iPhoneSimulator
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671}.Release|x86.Deploy.0 = Release|iPhoneSimulator
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|Any CPU.Build.0 = Debug|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|Any CPU.Deploy.0 = Debug|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|ARM64.Deploy.0 = Debug|ARM64
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|iPhone.ActiveCfg = Debug|ARM
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|iPhone.Build.0 = Debug|ARM
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|iPhone.Deploy.0 = Debug|ARM
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|iPhoneSimulator.Build.0 = Debug|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|iPhoneSimulator.Deploy.0 = Debug|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|x64.Build.0 = Debug|x64
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|x86.Build.0 = Debug|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Debug|x86.Deploy.0 = Debug|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|Any CPU.ActiveCfg = Release|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|Any CPU.Build.0 = Release|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|Any CPU.Deploy.0 = Release|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|ARM.Build.0 = Release|ARM
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|ARM.Deploy.0 = Release|ARM
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|ARM64.Deploy.0 = Release|ARM64
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|iPhone.ActiveCfg = Release|ARM
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|iPhone.Build.0 = Release|ARM
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|iPhone.Deploy.0 = Release|ARM
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|iPhoneSimulator.ActiveCfg = Release|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|iPhoneSimulator.Build.0 = Release|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|iPhoneSimulator.Deploy.0 = Release|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|x64.ActiveCfg = Release|x64
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|x64.Build.0 = Release|x64
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|x64.Deploy.0 = Release|x64
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|x86.ActiveCfg = Release|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|x86.Build.0 = Release|x86
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B}.Release|x86.Deploy.0 = Release|x86
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|x64.Build.0 = Release|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886}.Release|x86.Build.0 = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|x64.Build.0 = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{B4227123-2EEB-494A-A221-C061B5659AED} = {6330A0D0-E784-42A6-B975-451E609B907B}
|
||||
{3C0CDEF3-495E-45F4-8B12-0E05EF11295C} = {6330A0D0-E784-42A6-B975-451E609B907B}
|
||||
{AB6242B7-634F-4839-A991-7629D0D2C636} = {6330A0D0-E784-42A6-B975-451E609B907B}
|
||||
{70574463-7D8F-47F2-9DF0-8D3EA97DFB65} = {6330A0D0-E784-42A6-B975-451E609B907B}
|
||||
{5A1D97F2-6703-4278-BBF2-12C065F7E94A} = {6330A0D0-E784-42A6-B975-451E609B907B}
|
||||
{2CE6F352-F61F-452F-9098-7800B3B06EEF} = {EE4495FA-9869-45CF-A11D-69F2218C6F62}
|
||||
{D30EA5AD-6C9B-4517-9767-41C2E62946DB} = {EE4495FA-9869-45CF-A11D-69F2218C6F62}
|
||||
{CB2072E0-A437-4811-AE17-16CAE0DDA1B1} = {EE4495FA-9869-45CF-A11D-69F2218C6F62}
|
||||
{EE8FC716-27FC-405B-BD27-AF17E01A6671} = {EE4495FA-9869-45CF-A11D-69F2218C6F62}
|
||||
{4BD0D88F-7E7A-4C3B-9E34-BF3717A8FF4B} = {EE4495FA-9869-45CF-A11D-69F2218C6F62}
|
||||
{553D51A8-8E79-40D9-9FB3-9FC2386FF886} = {6330A0D0-E784-42A6-B975-451E609B907B}
|
||||
{89899D16-4BD1-49B1-9903-9F6BB26C5DC5} = {6330A0D0-E784-42A6-B975-451E609B907B}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {E012047E-6826-4037-8D1A-5606CD7D345D}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -1,53 +0,0 @@
|
|||
$androidSdkHome = $ENV:ANDROID_HOME
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($androidSdkHome))
|
||||
{
|
||||
if ($ENV:OS -eq "Windows_NT")
|
||||
{
|
||||
$androidSdkHome = "C:\Program Files (x86)\Android\android-sdk\"
|
||||
}
|
||||
else
|
||||
{
|
||||
$androidSdkHome = Resolve-Path "~/Library/Developer/Xamarin/android-sdk-macosx"
|
||||
}
|
||||
|
||||
Write-Host "Couldn't locate ANDROID_HOME, using: $androidSdkHome"
|
||||
}
|
||||
|
||||
Write-Host "Using Android SDK Home: $androidSdkHome"
|
||||
|
||||
Write-Host "Installing Global dotnet android tool..."
|
||||
dotnet tool install --global --add-source https://www.myget.org/F/xam-dotnet-tools/api/v3/index.json AndroidSdk.Tool
|
||||
|
||||
Write-Host "Installing and/or Updating Android SDK..."
|
||||
Write-Host "This may take awhile..."
|
||||
android --home="$androidSdkHome" sdk download
|
||||
|
||||
Write-Host "Installing API 23..."
|
||||
android --home="$androidSdkHome" sdk --install="platforms;android-23"
|
||||
|
||||
Write-Host "Installing API 24..."
|
||||
android --home="$androidSdkHome" sdk --install="platforms;android-24"
|
||||
|
||||
Write-Host "Installing API 25..."
|
||||
android --home="$androidSdkHome" sdk --install="platforms;android-25"
|
||||
|
||||
Write-Host "Installing API 26..."
|
||||
android --home="$androidSdkHome" sdk --install="platforms;android-26"
|
||||
|
||||
Write-Host "Installing API 27..."
|
||||
android --home="$androidSdkHome" sdk --install="platforms;android-27"
|
||||
|
||||
Write-Host "Installing API 28..."
|
||||
android --home="$androidSdkHome" sdk --install="platforms;android-28"
|
||||
|
||||
Write-Host "Installing API 29..."
|
||||
android --home="$androidSdkHome" sdk --install="platforms;android-29"
|
||||
|
||||
Write-Host "Installing API 29 Emulator Image (x86_64 - google_apis)..."
|
||||
android --home="$androidSdkHome" sdk --install="system-images;android-29;google_apis;x86_64"
|
||||
|
||||
Write-Host "Creating XamarinEmulator virtual device..."
|
||||
android --home="$androidSdkHome" emulator create XamarinEmulator "system-images;android-29;google_apis;x86_64" --device=Pixel --force
|
||||
|
||||
Write-Host "Done!"
|
|
@ -1,10 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
echo "Variables:"
|
||||
|
||||
# Updating manifest
|
||||
sed -i '' "s/AC_IOS/$AC_IOS/g" $BUILD_REPOSITORY_LOCALPATH/Samples/Samples/Helpers/CommonConstants
|
||||
|
||||
sed -i '' "s/APP-SECRET/$APP_SECRET/g" $BUILD_REPOSITORY_LOCALPATH/Samples/Samples.iOS/Info.plist
|
||||
|
||||
echo "Manifest updated!"
|
|
@ -1,215 +0,0 @@
|
|||
trigger:
|
||||
- main
|
||||
- develop
|
||||
- refs/tags/*
|
||||
|
||||
pr:
|
||||
- main
|
||||
- develop
|
||||
|
||||
variables:
|
||||
BASE_VERSION: 1.6.0
|
||||
PREVIEW_LABEL: 'ci'
|
||||
BUILD_NUMBER: $[counter(format('{0}_{1}_{2}', variables['BASE_VERSION'], variables['PREVIEW_LABEL'], variables['Build.SourceBranch']), 1)]
|
||||
NUGET_VERSION: $[format('{0}-{1}.{2}', variables['BASE_VERSION'], variables['PREVIEW_LABEL'], variables['BUILD_NUMBER'])]
|
||||
GIT_SHA: $(Build.SourceVersion)
|
||||
GIT_BRANCH_NAME: $(Build.SourceBranchName)
|
||||
AREA_PATH: 'DevDiv\Xamarin SDK\Build and Tools'
|
||||
|
||||
resources:
|
||||
repositories:
|
||||
- repository: internal-templates
|
||||
type: github
|
||||
name: xamarin/yaml-templates
|
||||
endpoint: xamarin
|
||||
- repository: components
|
||||
type: github
|
||||
name: xamarin/XamarinComponents
|
||||
endpoint: xamarin
|
||||
|
||||
stages:
|
||||
- stage: build
|
||||
displayName: Build Library
|
||||
jobs:
|
||||
- template: .ci/build.yml@components
|
||||
parameters:
|
||||
areaPath: 'DevDiv\Xamarin SDK'
|
||||
masterBranchName: 'main'
|
||||
preBuildSteps:
|
||||
- pwsh: |
|
||||
$pr = "pr." + $env:SYSTEM_PULLREQUEST_PULLREQUESTNUMBER
|
||||
$nuget = $env:BASE_VERSION + "-" + $pr + "." + $env:BUILD_NUMBER
|
||||
Write-Host "Preview label: $pr"
|
||||
Write-Host "NuGet version: $nuget"
|
||||
Write-Host "##vso[task.setvariable variable=PREVIEW_LABEL]$pr"
|
||||
Write-Host "##vso[task.setvariable variable=NUGET_VERSION]$nuget"
|
||||
displayName: Use a special preview label for PRs
|
||||
condition: eq(variables['Build.Reason'], 'PullRequest')
|
||||
- pwsh: |
|
||||
$tagVersion = $env:BUILD_SOURCEBRANCHNAME
|
||||
Write-Host "Tag version: $tagVersion"
|
||||
Write-Host "##vso[task.setvariable variable=NUGET_VERSION]$tagVersion"
|
||||
displayName: Override version for tags
|
||||
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/')
|
||||
- pwsh: |
|
||||
Write-Host "##vso[build.updatebuildnumber]$env:NUGET_VERSION"
|
||||
displayName: Update the build number with a more readable one
|
||||
|
||||
- ${{ if eq(variables['System.TeamProject'], 'devdiv') }}:
|
||||
- stage: signing
|
||||
displayName: Sign Artifacts
|
||||
dependsOn: [ 'build' ]
|
||||
jobs:
|
||||
- template: sign-artifacts/jobs/v2.yml@internal-templates
|
||||
parameters:
|
||||
condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/')
|
||||
|
||||
- stage: devicetests
|
||||
displayName: Device Tests
|
||||
dependsOn: []
|
||||
jobs:
|
||||
- job: devicetests_uwp
|
||||
displayName: UWP
|
||||
# skip for now
|
||||
condition: false
|
||||
pool:
|
||||
vmImage: windows-2019
|
||||
steps:
|
||||
- script: 'certutil -importpfx $(Build.SourcesDirectory)\DeviceTests\DeviceTests.UWP\DeviceTests.UWP_TemporaryKey.pfx'
|
||||
displayName: 'Run certutil'
|
||||
- powershell: |
|
||||
cd DeviceTests
|
||||
.\build.ps1 --target=test-uwp-emu --settings_skipverification=true --verbosity=diagnostic
|
||||
displayName: 'Run Device Tests - UWP'
|
||||
- task: PublishTestResults@2
|
||||
displayName: 'Publish Test Results'
|
||||
inputs:
|
||||
testResultsFormat: XUnit
|
||||
testResultsFiles: '**/xunit-*.xml'
|
||||
testRunTitle: 'Device Tests - UWP'
|
||||
|
||||
- template: .ci/build.yml@components
|
||||
parameters:
|
||||
name: devicetests_ios
|
||||
runChecks: false
|
||||
displayName: iOS
|
||||
publishOutputSuffix: '-ios'
|
||||
windowsImage: ''
|
||||
areaPath: $(AREA_PATH)
|
||||
verbosity: diagnostic
|
||||
cakeFile: DeviceTests/build.cake
|
||||
cakeTarget: test-ios-emu
|
||||
cakeExtraArgs: --ios-device="`"iPhone 11`"" --ios-runtime="`"com.apple.CoreSimulator.SimRuntime.iOS-14-2`""
|
||||
|
||||
- template: .ci/build.yml@components
|
||||
parameters:
|
||||
name: devicetests_android_api_21
|
||||
runChecks: false
|
||||
displayName: Android API 21
|
||||
publishOutputSuffix: '-android21'
|
||||
windowsImage: ''
|
||||
areaPath: $(AREA_PATH)
|
||||
verbosity: diagnostic
|
||||
cakeFile: DeviceTests/build.cake
|
||||
cakeTarget: test-android-emu
|
||||
cakeExtraArgs: --avd-target="`"system-images;android-21;google_apis;x86`""
|
||||
preBuildSteps:
|
||||
- bash: sh -c "echo \"y\" | $ANDROID_HOME/tools/bin/sdkmanager \"system-images;android-21;google_apis;x86\""
|
||||
displayName: Install the Android emulators
|
||||
|
||||
- template: .ci/build.yml@components
|
||||
parameters:
|
||||
name: devicetests_android_api_22
|
||||
runChecks: false
|
||||
displayName: Android API 22
|
||||
publishOutputSuffix: '-android22'
|
||||
windowsImage: ''
|
||||
areaPath: $(AREA_PATH)
|
||||
verbosity: diagnostic
|
||||
cakeFile: DeviceTests/build.cake
|
||||
cakeTarget: test-android-emu
|
||||
cakeExtraArgs: --avd-target="`"system-images;android-22;google_apis;x86`""
|
||||
preBuildSteps:
|
||||
- bash: sh -c "echo \"y\" | $ANDROID_HOME/tools/bin/sdkmanager \"system-images;android-22;google_apis;x86\""
|
||||
displayName: Install the Android emulators
|
||||
|
||||
- template: .ci/build.yml@components
|
||||
parameters:
|
||||
name: devicetests_android_api_23
|
||||
runChecks: false
|
||||
continueOnError: true
|
||||
displayName: Android API 23
|
||||
publishOutputSuffix: '-android23'
|
||||
windowsImage: ''
|
||||
areaPath: $(AREA_PATH)
|
||||
verbosity: diagnostic
|
||||
cakeFile: DeviceTests/build.cake
|
||||
cakeTarget: test-android-emu
|
||||
cakeExtraArgs: --avd-target="`"system-images;android-23;google_apis;x86`""
|
||||
preBuildSteps:
|
||||
- bash: sh -c "echo \"y\" | $ANDROID_HOME/tools/bin/sdkmanager \"system-images;android-23;google_apis;x86\""
|
||||
displayName: Install the Android emulators
|
||||
|
||||
- template: .ci/build.yml@components
|
||||
parameters:
|
||||
name: devicetests_android_api_24
|
||||
runChecks: false
|
||||
displayName: Android API 24
|
||||
publishOutputSuffix: '-android24'
|
||||
windowsImage: ''
|
||||
areaPath: $(AREA_PATH)
|
||||
verbosity: diagnostic
|
||||
cakeFile: DeviceTests/build.cake
|
||||
cakeTarget: test-android-emu
|
||||
cakeExtraArgs: --avd-target="`"system-images;android-24;google_apis;x86`""
|
||||
preBuildSteps:
|
||||
- bash: sh -c "echo \"y\" | $ANDROID_HOME/tools/bin/sdkmanager \"system-images;android-24;google_apis;x86\""
|
||||
displayName: Install the Android emulators
|
||||
|
||||
- template: .ci/build.yml@components
|
||||
parameters:
|
||||
name: devicetests_android_api_26
|
||||
runChecks: false
|
||||
displayName: Android API 26
|
||||
publishOutputSuffix: '-android26'
|
||||
windowsImage: ''
|
||||
areaPath: $(AREA_PATH)
|
||||
verbosity: diagnostic
|
||||
cakeFile: DeviceTests/build.cake
|
||||
cakeTarget: test-android-emu
|
||||
cakeExtraArgs: --avd-target="`"system-images;android-26;google_apis;x86`""
|
||||
preBuildSteps:
|
||||
- bash: sh -c "echo \"y\" | $ANDROID_HOME/tools/bin/sdkmanager \"system-images;android-26;google_apis;x86\""
|
||||
displayName: Install the Android emulators
|
||||
|
||||
- template: .ci/build.yml@components
|
||||
parameters:
|
||||
name: devicetests_android_api_29
|
||||
runChecks: false
|
||||
displayName: Android API 29
|
||||
publishOutputSuffix: '-android29'
|
||||
windowsImage: ''
|
||||
areaPath: $(AREA_PATH)
|
||||
verbosity: diagnostic
|
||||
cakeFile: DeviceTests/build.cake
|
||||
cakeTarget: test-android-emu
|
||||
cakeExtraArgs: --avd-target="`"system-images;android-29;google_apis;x86`""
|
||||
preBuildSteps:
|
||||
- bash: sh -c "echo \"y\" | $ANDROID_HOME/tools/bin/sdkmanager \"system-images;android-29;google_apis;x86\""
|
||||
displayName: Install the Android emulators
|
||||
|
||||
- template: .ci/build.yml@components
|
||||
parameters:
|
||||
name: devicetests_android_api_30
|
||||
runChecks: false
|
||||
displayName: Android API 30
|
||||
publishOutputSuffix: '-android30'
|
||||
windowsImage: ''
|
||||
areaPath: $(AREA_PATH)
|
||||
verbosity: diagnostic
|
||||
cakeFile: DeviceTests/build.cake
|
||||
cakeTarget: test-android-emu
|
||||
cakeExtraArgs: --avd-target="`"system-images;android-30;google_apis;x86`""
|
||||
preBuildSteps:
|
||||
- bash: sh -c "echo \"y\" | $ANDROID_HOME/tools/bin/sdkmanager \"system-images;android-30;google_apis;x86\""
|
||||
displayName: Install the Android emulators
|
|
@ -1,91 +0,0 @@
|
|||
var TARGET = Argument("t", Argument("target", "ci"));
|
||||
|
||||
var NUGET_VERSION = EnvironmentVariable("NUGET_VERSION") ?? "1.0.0";
|
||||
var GIT_SHA = Argument("gitSha", EnvironmentVariable("GIT_SHA") ?? "");
|
||||
var GIT_BRANCH_NAME = Argument("gitBranch", EnvironmentVariable("GIT_BRANCH_NAME") ?? "");
|
||||
|
||||
Task("prepare")
|
||||
.Does(() =>
|
||||
{
|
||||
// Update .csproj nuget versions
|
||||
XmlPoke("./Xamarin.Essentials/Xamarin.Essentials.csproj", "/Project/PropertyGroup/PackageVersion", NUGET_VERSION);
|
||||
});
|
||||
|
||||
Task("libs")
|
||||
.IsDependentOn("prepare")
|
||||
.Does(() =>
|
||||
{
|
||||
MSBuild("./Xamarin.Essentials/Xamarin.Essentials.csproj", new MSBuildSettings()
|
||||
.EnableBinaryLogger("./output/binlogs/libs.binlog")
|
||||
.SetConfiguration("Release")
|
||||
.WithRestore());
|
||||
});
|
||||
|
||||
Task("nugets")
|
||||
.IsDependentOn("prepare")
|
||||
.IsDependentOn("libs")
|
||||
.IsDependentOn("docs")
|
||||
.Does(() =>
|
||||
{
|
||||
MSBuild("./Xamarin.Essentials/Xamarin.Essentials.csproj", new MSBuildSettings()
|
||||
.EnableBinaryLogger("./output/binlogs/nugets.binlog")
|
||||
.SetConfiguration("Release")
|
||||
.WithRestore()
|
||||
.WithProperty("PackageOutputPath", MakeAbsolute(new FilePath("./output/")).FullPath)
|
||||
.WithTarget("Pack"));
|
||||
});
|
||||
|
||||
Task("tests")
|
||||
.IsDependentOn("libs")
|
||||
.Does(() =>
|
||||
{
|
||||
var failed = 0;
|
||||
|
||||
foreach (var csproj in GetFiles("./Tests/**/*.csproj")) {
|
||||
try {
|
||||
DotNetCoreTest(csproj.FullPath, new DotNetCoreTestSettings {
|
||||
Configuration = "Release",
|
||||
Logger = $"trx;LogFileName={csproj.GetFilenameWithoutExtension()}.trx",
|
||||
});
|
||||
} catch (Exception) {
|
||||
failed++;
|
||||
}
|
||||
}
|
||||
|
||||
var output = $"./output/test-results/";
|
||||
EnsureDirectoryExists(output);
|
||||
CopyFiles($"./tests/**/TestResults/*.trx", output);
|
||||
|
||||
if (failed > 0)
|
||||
throw new Exception($"{failed} tests have failed.");
|
||||
});
|
||||
|
||||
Task("samples")
|
||||
.IsDependentOn("nugets")
|
||||
.Does(() =>
|
||||
{
|
||||
MSBuild("./Xamarin.Essentials.sln", new MSBuildSettings()
|
||||
.EnableBinaryLogger("./output/binlogs/samples.binlog")
|
||||
.SetConfiguration("Release")
|
||||
.WithRestore());
|
||||
});
|
||||
|
||||
Task("docs")
|
||||
.IsDependentOn("libs")
|
||||
.WithCriteria(IsRunningOnWindows())
|
||||
.Does(() =>
|
||||
{
|
||||
MSBuild("./Xamarin.Essentials/Xamarin.Essentials.csproj", new MSBuildSettings()
|
||||
.EnableBinaryLogger("./output/binlogs/docs.binlog")
|
||||
.SetConfiguration("Release")
|
||||
.WithRestore()
|
||||
.WithTarget("mdocupdatedocs"));
|
||||
});
|
||||
|
||||
Task("ci")
|
||||
.IsDependentOn("libs")
|
||||
.IsDependentOn("nugets")
|
||||
.IsDependentOn("tests")
|
||||
.IsDependentOn("samples");
|
||||
|
||||
RunTarget(TARGET);
|
|
@ -1,283 +0,0 @@
|
|||
#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.FileHelpers&version=3.3.0
|
||||
|
||||
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_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";
|
||||
var IOS_TEST_RESULTS_PATH = MakeAbsolute((FilePath)"../output/test-results/ios");
|
||||
|
||||
var ANDROID_PROJ = "./DeviceTests.Android/DeviceTests.Android.csproj";
|
||||
var ANDROID_APK_PATH = MakeAbsolute((FilePath)"./DeviceTests.Android/bin/Debug/com.xamarin.essentials.devicetests-Signed.apk");
|
||||
var ANDROID_INSTRUMENTATION_NAME = "com.xamarin.essentials.devicetests.TestInstrumentation";
|
||||
var ANDROID_TEST_RESULTS_PATH = MakeAbsolute((FilePath)"../output/test-results/android");
|
||||
var ANDROID_AVD = EnvironmentVariable("ANDROID_AVD") ?? "CABOODLE";
|
||||
var ANDROID_PKG_NAME = "com.xamarin.essentials.devicetests";
|
||||
var ANDROID_EMU_TARGET = Argument("avd-target", EnvironmentVariable("ANDROID_EMU_TARGET") ?? "system-images;android-30;google_apis_playstore;x86");
|
||||
var ANDROID_EMU_DEVICE = Argument("avd-device", EnvironmentVariable("ANDROID_EMU_DEVICE") ?? "Nexus 5X");
|
||||
|
||||
var UWP_PROJ = "./DeviceTests.UWP/DeviceTests.UWP.csproj";
|
||||
var UWP_TEST_RESULTS_PATH = MakeAbsolute((FilePath)"../output/test-results/uwp/TestResults.xml");
|
||||
var UWP_PACKAGE_ID = "ec0cc741-fd3e-485c-81be-68815c480690";
|
||||
|
||||
var TCP_LISTEN_TIMEOUT = 240;
|
||||
var TCP_LISTEN_PORT = 63559;
|
||||
var TCP_LISTEN_HOST = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName())
|
||||
.AddressList.First(f => f.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
|
||||
.ToString();
|
||||
|
||||
var OUTPUT_PATH = MakeAbsolute((DirectoryPath)"../output/");
|
||||
|
||||
var ANDROID_HOME = EnvironmentVariable("ANDROID_HOME");
|
||||
|
||||
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"));
|
||||
|
||||
|
||||
// utils
|
||||
|
||||
Task DownloadTcpTextAsync(int port, FilePath filename, Action waitAction = null)
|
||||
{
|
||||
filename = MakeAbsolute(filename);
|
||||
EnsureDirectoryExists(filename.GetDirectory());
|
||||
|
||||
return System.Threading.Tasks.Task.Run(() => {
|
||||
var tcpListener = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Any, port);
|
||||
tcpListener.Start();
|
||||
var listening = true;
|
||||
|
||||
System.Threading.Tasks.Task.Run(() => {
|
||||
// Sleep until timeout elapses or tcp listener stopped after a successful connection
|
||||
var elapsed = 0;
|
||||
while(elapsed <= TCP_LISTEN_TIMEOUT && listening) {
|
||||
System.Threading.Thread.Sleep(1000);
|
||||
elapsed++;
|
||||
Information($"Still waiting for tests... {elapsed}/{TCP_LISTEN_TIMEOUT}");
|
||||
waitAction?.Invoke();
|
||||
}
|
||||
|
||||
// If still listening, timeout elapsed, stop the listener
|
||||
if (listening) {
|
||||
tcpListener.Stop();
|
||||
listening = false;
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
var tcpClient = tcpListener.AcceptTcpClient();
|
||||
|
||||
using (var file = System.IO.File.Open(filename.FullPath, System.IO.FileMode.Create))
|
||||
using (var stream = tcpClient.GetStream())
|
||||
stream.CopyTo(file);
|
||||
|
||||
tcpClient.Close();
|
||||
tcpListener.Stop();
|
||||
listening = false;
|
||||
} catch {
|
||||
throw new Exception("Test results listener failed or timed out.");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// iOS tasks
|
||||
|
||||
Task("build-ios")
|
||||
.Does(() =>
|
||||
{
|
||||
MSBuild(IOS_PROJ, c => {
|
||||
c.Configuration = "Release";
|
||||
c.Restore = true;
|
||||
c.Properties["Platform"] = new List<string> { "iPhoneSimulator" };
|
||||
c.Properties["BuildIpa"] = new List<string> { "true" };
|
||||
c.Properties["ContinuousIntegrationBuild"] = new List<string> { "false" };
|
||||
c.Targets.Clear();
|
||||
c.Targets.Add("Rebuild");
|
||||
c.BinaryLogger = new MSBuildBinaryLogSettings {
|
||||
Enabled = true,
|
||||
FileName = OUTPUT_PATH.CombineWithFilePath("binlogs/device-tests-ios-build.binlog").FullPath,
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
Task("test-ios-emu")
|
||||
.IsDependentOn("build-ios")
|
||||
.Does(() =>
|
||||
{
|
||||
// Clean up after previous runs
|
||||
CleanDirectories(IOS_TEST_RESULTS_PATH.FullPath);
|
||||
|
||||
// Run the tests
|
||||
var resultCode = StartProcess("xharness", "ios test " +
|
||||
$"--app=\"{IOS_IPA_PATH}\" " +
|
||||
$"--targets=\"ios-simulator-64\" " +
|
||||
$"--output-directory=\"{IOS_TEST_RESULTS_PATH}\" " +
|
||||
$"--verbosity=\"Debug\" ");
|
||||
|
||||
// Rename test result files
|
||||
var resultFiles = GetFiles($"{IOS_TEST_RESULTS_PATH}/*.xml");
|
||||
foreach (var resultFile in resultFiles) {
|
||||
MoveFile(resultFile, resultFile.ChangeExtension("TestResults.xml"));
|
||||
}
|
||||
|
||||
if (resultCode != 0)
|
||||
throw new Exception("xharness had an error.");
|
||||
});
|
||||
|
||||
|
||||
// Android tasks
|
||||
|
||||
Task("build-android")
|
||||
.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.Targets.Clear();
|
||||
c.Targets.Add("Rebuild");
|
||||
c.Targets.Add("SignAndroidPackage");
|
||||
c.BinaryLogger = new MSBuildBinaryLogSettings {
|
||||
Enabled = true,
|
||||
FileName = OUTPUT_PATH.CombineWithFilePath("binlogs/device-tests-android-build.binlog").FullPath,
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
Task("test-android-emu")
|
||||
.IsDependentOn("build-android")
|
||||
.Does(() =>
|
||||
{
|
||||
// Clean up after previous runs
|
||||
CleanDirectories(ANDROID_TEST_RESULTS_PATH.FullPath);
|
||||
|
||||
var avdSettings = new AndroidAvdManagerToolSettings { SdkRoot = ANDROID_HOME };
|
||||
var adbSettings = new AdbToolSettings { SdkRoot = ANDROID_HOME };
|
||||
var emuSettings = new AndroidEmulatorToolSettings { SdkRoot = ANDROID_HOME, ArgumentCustomization = args => args.Append("-no-window") };
|
||||
|
||||
// Delete AVD first, if it exists
|
||||
Information("Deleting AVD if exists: {0}...", ANDROID_AVD);
|
||||
try { AndroidAvdDelete(ANDROID_AVD, avdSettings); }
|
||||
catch { }
|
||||
|
||||
// Create the AVD
|
||||
Information("Creating AVD: {0}...", ANDROID_AVD);
|
||||
AndroidAvdCreate(ANDROID_AVD, ANDROID_EMU_TARGET, ANDROID_EMU_DEVICE, force: true, settings: avdSettings);
|
||||
|
||||
// Start the emulator
|
||||
Information("Starting Emulator: {0}...", ANDROID_AVD);
|
||||
var emulatorProcess = AndroidEmulatorStart(ANDROID_AVD, emuSettings);
|
||||
|
||||
var waited = 0;
|
||||
while (AdbShell("getprop sys.boot_completed", adbSettings).FirstOrDefault() != "1") {
|
||||
System.Threading.Thread.Sleep(1000);
|
||||
if (waited++ > 60 * 10)
|
||||
break;
|
||||
}
|
||||
Information("Waited {0} seconds for the emulator to boot up.", waited);
|
||||
|
||||
// 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\" " +
|
||||
$"--output-directory=\"{ANDROID_TEST_RESULTS_PATH}\" " +
|
||||
$"--verbosity=\"Debug\" ");
|
||||
|
||||
// Stop / cleanup the emulator
|
||||
AdbEmuKill(adbSettings);
|
||||
|
||||
System.Threading.Thread.Sleep(5000);
|
||||
|
||||
// Kill the process if it has not already exited
|
||||
try { emulatorProcess.Kill(); }
|
||||
catch { }
|
||||
|
||||
if (resultCode != 0)
|
||||
throw new Exception("xharness had an error.");
|
||||
|
||||
Information("Done Tests");
|
||||
});
|
||||
|
||||
|
||||
// UWP tasks
|
||||
|
||||
Task("build-uwp")
|
||||
.Does(() =>
|
||||
{
|
||||
MSBuild(UWP_PROJ, c => {
|
||||
c.Configuration = "Debug";
|
||||
c.Restore = true;
|
||||
c.Properties["ContinuousIntegrationBuild"] = new List<string> { "false" };
|
||||
c.Properties["AppxBundlePlatforms"] = new List<string> { "x86" };
|
||||
c.Properties["AppxBundle"] = new List<string> { "Always" };
|
||||
c.Properties["AppxPackageSigningEnabled"] = new List<string> { "true" };
|
||||
c.Targets.Clear();
|
||||
c.Targets.Add("Rebuild");
|
||||
c.BinaryLogger = new MSBuildBinaryLogSettings {
|
||||
Enabled = true,
|
||||
FileName = OUTPUT_PATH.CombineWithFilePath("binlogs/device-tests-uwp-build.binlog").FullPath,
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
Task("test-uwp-emu")
|
||||
.IsDependentOn("build-uwp")
|
||||
.WithCriteria(IsRunningOnWindows())
|
||||
.Does(() =>
|
||||
{
|
||||
var uninstallPS = new Action(() => {
|
||||
try {
|
||||
StartProcess("powershell",
|
||||
"$app = Get-AppxPackage -Name " + UWP_PACKAGE_ID + "; if ($app) { Remove-AppxPackage -Package $app.PackageFullName }");
|
||||
} catch { }
|
||||
});
|
||||
|
||||
// Try to uninstall the app if it exists from before
|
||||
uninstallPS();
|
||||
|
||||
var certPath = GetFiles("./**/DeviceTests.UWP_TemporaryKey.pfx").First();
|
||||
Information("Installing certificate: {0}", certPath);
|
||||
|
||||
StartProcess("certutil", "-p Microsoft -importpfx \"" + MakeAbsolute(certPath).FullPath + "\"");
|
||||
|
||||
// Install the appx
|
||||
var dependencies = GetFiles("./**/AppPackages/**/Dependencies/x86/*.appx");
|
||||
foreach (var dep in dependencies) {
|
||||
Information("Installing Dependency appx: {0}", dep);
|
||||
StartProcess("powershell", "Add-AppxPackage -Path \"" + MakeAbsolute(dep).FullPath + "\"");
|
||||
}
|
||||
var appxBundlePath = GetFiles("./**/AppPackages/**/*.msixbundle").First();
|
||||
Information("Installing appx: {0}", appxBundlePath);
|
||||
StartProcess("powershell", "Add-AppxPackage -Path \"" + MakeAbsolute(appxBundlePath).FullPath + "\"");
|
||||
|
||||
// Start the TCP Test results listener
|
||||
Information("Started TCP Test Results Listener on port: {0}:{1}", TCP_LISTEN_HOST, TCP_LISTEN_PORT);
|
||||
var tcpListenerTask = DownloadTcpTextAsync(TCP_LISTEN_PORT, UWP_TEST_RESULTS_PATH);
|
||||
|
||||
// Launch the app
|
||||
Information("Running appx: {0}", appxBundlePath);
|
||||
var ip = TCP_LISTEN_HOST.Replace(".", "-");
|
||||
var executeCommand = $"xamarin-essentials-device-tests://{ip}_{TCP_LISTEN_PORT}";
|
||||
Information("Running appx: {0}", executeCommand);
|
||||
StartProcess("explorer", executeCommand);
|
||||
|
||||
// Wait for the test results to come back
|
||||
Information("Waiting for tests...");
|
||||
tcpListenerTask.Wait();
|
||||
|
||||
// Uninstall the app(this will terminate it too)
|
||||
uninstallPS();
|
||||
});
|
||||
|
||||
|
||||
RunTarget(TARGET);
|
|
@ -1,260 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
|
||||
<!--
|
||||
============================================================
|
||||
SetupMDoc
|
||||
|
||||
Set all the variables needed for mdoc.
|
||||
This runs during the build and package phases.
|
||||
============================================================
|
||||
-->
|
||||
<Target Name="_MDocSetup">
|
||||
<PropertyGroup>
|
||||
<_ManagedExeLauncher Condition=" '$(OS)' != 'Windows_NT' And Exists ('/Library/Frameworks/Mono.framework/Versions/Current/bin/mono') ">/Library/Frameworks/Mono.framework/Versions/Current/bin/mono</_ManagedExeLauncher>
|
||||
<_ManagedExeLauncher Condition=" '$(OS)' != 'Windows_NT' And Exists ('/usr/local/bin/mono') ">/usr/local/bin/mono</_ManagedExeLauncher>
|
||||
<_ManagedExeLauncher Condition=" '$(OS)' != 'Windows_NT' And Exists ('/usr/bin/mono') ">/usr/bin/mono</_ManagedExeLauncher>
|
||||
<_ManagedExeLauncher Condition=" '$(OS)' != 'Windows_NT' And '$(_ManagedExeLauncher)' == '' ">mono</_ManagedExeLauncher>
|
||||
<MDocVersion Condition=" '%(Identity)' == 'mdoc' ">@(PackageReference -> '%(Version)')</MDocVersion>
|
||||
<MDocPackagePath Condition=" '%(Name)' == 'mdoc' ">@(PackageDefinitions -> '%(ResolvedPath)')</MDocPackagePath>
|
||||
<MDocPackagePath Condition=" '$(MDocPackagePath)' == '' ">$(NuGetPackageRoot)\mdoc\$(MDocVersion)</MDocPackagePath>
|
||||
<MDocToolPath>$(MDocPackagePath)\tools\mdoc.exe</MDocToolPath>
|
||||
<MDocOutputName>$(TargetName).xml</MDocOutputName>
|
||||
<MDocOutputPath>$(TargetDir)$(MDocOutputName)</MDocOutputPath>
|
||||
<_ShouldGenerateDocs Condition=" '$(MDocDocumentationDirectory)' != '' and Exists('$(MDocDocumentationDirectory)\index.xml') ">true</_ShouldGenerateDocs>
|
||||
</PropertyGroup>
|
||||
</Target>
|
||||
|
||||
<!--
|
||||
============================================================
|
||||
MDocGenerateDocs
|
||||
|
||||
Generated the XML documentation file using mdoc.
|
||||
This runs during the build phase.
|
||||
============================================================
|
||||
-->
|
||||
<Target Name="MDocGenerateDocs"
|
||||
AfterTargets="CoreCompile" DependsOnTargets="_MDocSetup">
|
||||
<ItemGroup Condition=" '$(_ShouldGenerateDocs)' == 'true' ">
|
||||
<FileWrites Include="$(MDocOutputPath)" />
|
||||
</ItemGroup>
|
||||
<Exec Condition=" '$(_ShouldGenerateDocs)' == 'true' "
|
||||
Command="$(_ManagedExeLauncher) "$(MDocToolPath)" export-msxdoc --debug --out="$(MDocOutputPath)" "$(MDocDocumentationDirectory)"" />
|
||||
</Target>
|
||||
|
||||
<!--
|
||||
============================================================
|
||||
MDocAddFilesToPackage
|
||||
|
||||
Make sure the mdoc output goes into the final package.
|
||||
This runs during the package phase.
|
||||
============================================================
|
||||
-->
|
||||
<Target Name="MDocAddFilesToPackage"
|
||||
BeforeTargets="_GetBuildOutputFilesWithTfm" DependsOnTargets="_MDocSetup">
|
||||
<ItemGroup Condition=" '$(_ShouldGenerateDocs)' == 'true' ">
|
||||
<BuildOutputInPackage Include="$(MDocOutputPath)" TargetFramework="$(TargetFramework)" TargetPath="$(MDocOutputName)" />
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
<!--
|
||||
============================================================
|
||||
MDocUpdateDocs
|
||||
|
||||
Update the docs in the documentation directory using the
|
||||
compiled assemblies.
|
||||
This runs as a separate task.
|
||||
============================================================
|
||||
-->
|
||||
<Target Name="MDocUpdateDocs"
|
||||
DependsOnTargets="_MDocSetup">
|
||||
<!-- bits for resolving references on Windows -->
|
||||
<PropertyGroup Condition=" '$(OS)' == 'Windows_NT' ">
|
||||
<FrameworkReferenceAssemblyPath>$(VsInstallRoot)\Common7\IDE\ReferenceAssemblies\Microsoft\Framework</FrameworkReferenceAssemblyPath>
|
||||
<WindowsKitsReferenceAssemblyPath>$(MSBuildProgramFiles32)\Windows Kits\10\References\10.0.16299.0</WindowsKitsReferenceAssemblyPath>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(OS)' == 'Windows_NT' ">
|
||||
<MDocReferenceAssembly Include="$(FrameworkReferenceAssemblyPath)\MonoAndroid\v1.0" />
|
||||
<MDocReferenceAssembly Include="$(FrameworkReferenceAssemblyPath)\MonoAndroid\v10.0" />
|
||||
<MDocReferenceAssembly Include="$(FrameworkReferenceAssemblyPath)\Xamarin.iOS\v1.0" />
|
||||
<MDocReferenceAssembly Include="$(FrameworkReferenceAssemblyPath)\Xamarin.TVOS\v1.0" />
|
||||
<MDocReferenceAssembly Include="$(FrameworkReferenceAssemblyPath)\Xamarin.WatchOS\v1.0" />
|
||||
<MDocReferenceAssembly Include="$(FrameworkReferenceAssemblyPath)\Xamarin.Mac\v2.0" />
|
||||
<MDocReferenceAssembly Include="$(WindowsKitsReferenceAssemblyPath)\Windows.Foundation.FoundationContract\5.0.0.0" />
|
||||
<MDocReferenceAssembly Include="$(WindowsKitsReferenceAssemblyPath)\Windows.Foundation.UniversalApiContract\5.0.0.0" />
|
||||
</ItemGroup>
|
||||
<!-- the actual task -->
|
||||
<PropertyGroup>
|
||||
<BinConfigDir>$(MSBuildProjectDirectory)\bin\$(Configuration)\</BinConfigDir>
|
||||
<TmpDir>$(MSBuildProjectDirectory)\tmp\</TmpDir>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<MDocReferenceAssembly Include="$(BinConfigDir)monoandroid10.0" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<MDocReferenceAssemblies>@(MDocReferenceAssembly -> '--lib="%(Identity)"', ' ')</MDocReferenceAssemblies>
|
||||
</PropertyGroup>
|
||||
<RemoveDir Directories="$(TmpDir)" />
|
||||
<MakeDir Directories="$(TmpDir)" />
|
||||
<Copy SourceFiles="$(MDocDocumentationDirectory)\..\frameworks.xml" DestinationFolder="$(TmpDir)" />
|
||||
<Copy SourceFiles="$(BinConfigDir)netstandard2.0\$(AssemblyName).dll" DestinationFolder="$(TmpDir)xamarin-essentials" />
|
||||
<Copy SourceFiles="$(BinConfigDir)monoandroid10.0\$(AssemblyName).dll" DestinationFolder="$(TmpDir)xamarin-essentials-android" />
|
||||
<Copy SourceFiles="$(BinConfigDir)xamarin.ios10\$(AssemblyName).dll" DestinationFolder="$(TmpDir)xamarin-essentials-ios" />
|
||||
<Copy SourceFiles="$(BinConfigDir)xamarin.mac20\$(AssemblyName).dll" DestinationFolder="$(TmpDir)xamarin-essentials-macos" />
|
||||
<Copy SourceFiles="$(BinConfigDir)xamarin.tvos10\$(AssemblyName).dll" DestinationFolder="$(TmpDir)xamarin-essentials-tvos" />
|
||||
<Copy SourceFiles="$(BinConfigDir)xamarin.watchos10\$(AssemblyName).dll" DestinationFolder="$(TmpDir)xamarin-essentials-watchos" />
|
||||
<Copy SourceFiles="$(BinConfigDir)uap10.0.16299\$(AssemblyName).dll" DestinationFolder="$(TmpDir)xamarin-essentials-uwp" />
|
||||
<Exec Command="$(_ManagedExeLauncher) "$(MDocToolPath)" update --debug --lang=DocId --delete --frameworks="$(TmpDir)frameworks.xml" --out="$(MDocDocumentationDirectory)" $(MDocReferenceAssemblies)" />
|
||||
<_FormatDocs DocsRoot="$(MDocDocumentationDirectory)" />
|
||||
<_VerifyAllDocsAreComplete DocsRoot="$(MDocDocumentationDirectory)" />
|
||||
</Target>
|
||||
|
||||
<!--
|
||||
============================================================
|
||||
MDocVerifyDocs
|
||||
|
||||
Makes sure all the docs are filled in.
|
||||
This runs as a separate task.
|
||||
============================================================
|
||||
-->
|
||||
<Target Name="MDocVerifyDocs"
|
||||
DependsOnTargets="_MDocSetup">
|
||||
<_FormatDocs DocsRoot="$(MDocDocumentationDirectory)" />
|
||||
<_VerifyAllDocsAreComplete DocsRoot="$(MDocDocumentationDirectory)" />
|
||||
</Target>
|
||||
|
||||
<!--
|
||||
===================================================================================================================
|
||||
_FormatDocs
|
||||
|
||||
Make sure the docs are all uniform after editing in various apps or tools.
|
||||
===================================================================================================================
|
||||
-->
|
||||
<UsingTask TaskName="_FormatDocs" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll" >
|
||||
<ParameterGroup>
|
||||
<DocsRoot ParameterType="System.String" />
|
||||
</ParameterGroup>
|
||||
<Task>
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Using Namespace="System.Xml" />
|
||||
<Using Namespace="System.Xml.Linq" />
|
||||
<Code Type="Fragment" Language="cs"><![CDATA[
|
||||
foreach (var file in Directory.EnumerateFiles(DocsRoot, "*.xml", SearchOption.AllDirectories)) {
|
||||
var xdoc = XDocument.Load(file);
|
||||
|
||||
// special case for Android resources: don't process
|
||||
if (xdoc.Root.Name == "Type") {
|
||||
var nameAttr = xdoc.Root.Attribute("FullName");
|
||||
if (nameAttr != null && (nameAttr.Value == "Xamarin.Essentials.Resource" || nameAttr.Value.StartsWith("Xamarin.Essentials.Resource+"))) {
|
||||
File.Delete(file);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (xdoc.Root.Name == "Overview") {
|
||||
foreach (var type in xdoc.Root.Descendants("Type").ToArray()) {
|
||||
var nameAttr = type.Attribute("Name");
|
||||
if (nameAttr != null && (nameAttr.Value == "Resource" || nameAttr.Value.StartsWith("Resource+"))) {
|
||||
type.Remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (xdoc.Root.Name == "Framework") {
|
||||
foreach (var type in xdoc.Root.Descendants("Type").ToArray()) {
|
||||
var nameAttr = type.Attribute("Name");
|
||||
if (nameAttr != null && (nameAttr.Value == "Xamarin.Essentials.Resource" || nameAttr.Value.StartsWith("Xamarin.Essentials.Resource/"))) {
|
||||
type.Remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// the tooling can't handle the ToPlatform* that differs only on return types
|
||||
if (xdoc.Root.Name == "Type") {
|
||||
var typeNameAttr = xdoc.Root.Attribute("FullName");
|
||||
if (typeNameAttr != null && typeNameAttr.Value.EndsWith("Extensions")) {
|
||||
foreach (var member in xdoc.Root.Descendants("Member").ToArray()) {
|
||||
var memberNameAttr = member.Attribute("MemberName");
|
||||
if (memberNameAttr != null && memberNameAttr.Value.StartsWith("ToPlatform")) {
|
||||
member.Remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (xdoc.Root.Name == "Overview") {
|
||||
foreach (var member in xdoc.Root.Descendants("Member").ToArray()) {
|
||||
var memberNameAttr = member.Attribute("MemberName");
|
||||
if (memberNameAttr != null && memberNameAttr.Value.StartsWith("ToPlatform")) {
|
||||
member.Remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (xdoc.Root.Name == "Framework") {
|
||||
foreach (var type in xdoc.Root.Descendants("Type").ToArray()) {
|
||||
var typeNameAttr = type.Attribute("Name");
|
||||
if (typeNameAttr != null && typeNameAttr.Value.EndsWith("Extensions")) {
|
||||
foreach (var member in type.Descendants("Member").ToArray()) {
|
||||
var memberNameAttr = member.Attribute("Id");
|
||||
if (memberNameAttr != null && memberNameAttr.Value.Contains(".ToPlatform")) {
|
||||
member.Remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var settings = new XmlWriterSettings {
|
||||
Encoding = new UTF8Encoding(),
|
||||
Indent = true,
|
||||
NewLineChars = "\n",
|
||||
OmitXmlDeclaration = true,
|
||||
};
|
||||
using (var writer = XmlWriter.Create(file, settings)) {
|
||||
xdoc.Save(writer);
|
||||
writer.Flush();
|
||||
}
|
||||
File.AppendAllText(file, "\n");
|
||||
}
|
||||
]]></Code>
|
||||
</Task>
|
||||
</UsingTask>
|
||||
|
||||
<!--
|
||||
===================================================================================================================
|
||||
_VerifyAllDocsAreComplete
|
||||
|
||||
Make sure the docs are all filled in.
|
||||
===================================================================================================================
|
||||
-->
|
||||
<UsingTask TaskName="_VerifyAllDocsAreComplete" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll" >
|
||||
<ParameterGroup>
|
||||
<DocsRoot ParameterType="System.String" />
|
||||
</ParameterGroup>
|
||||
<Task>
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Using Namespace="System.IO" />
|
||||
<Using Namespace="System.Xml" />
|
||||
<Using Namespace="System.Xml.Linq" />
|
||||
<Code Type="Fragment" Language="cs"><![CDATA[
|
||||
foreach (var file in Directory.EnumerateFiles(DocsRoot, "*.xml", SearchOption.AllDirectories)) {
|
||||
var xdoc = XDocument.Load(file);
|
||||
var incomplete = xdoc.Descendants("Docs").Where(x => x.Descendants().Any(d => d.Value == "To be added."));
|
||||
foreach (var node in incomplete) {
|
||||
if (node.Parent.Name == "Type" && xdoc.Root.Name == "Type") {
|
||||
var typename = xdoc.Root.Attribute("FullName").Value;
|
||||
Log.LogWarning("Missing docs for {0}.", typename);
|
||||
} else if (node.Parent.Name == "Member" && xdoc.Root.Name == "Type") {
|
||||
var typename = xdoc.Root.Attribute("FullName").Value;
|
||||
var member = node.Parent.Attribute("MemberName").Value;
|
||||
var memberType = node.Parent.Element("MemberType").Value.ToLower();
|
||||
Log.LogWarning("Missing docs for {2} '{0}.{1}'.", typename, member, memberType);
|
||||
} else {
|
||||
Log.LogWarning("Missing docs in {0}.", file);
|
||||
}
|
||||
}
|
||||
}
|
||||
]]></Code>
|
||||
</Task>
|
||||
</UsingTask>
|
||||
|
||||
</Project>
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
"$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json",
|
||||
|
||||
"settings": {
|
||||
"layoutRules": {
|
||||
"newlineAtEndOfFile": "require"
|
||||
},
|
||||
"orderingRules": {
|
||||
"systemUsingDirectivesFirst": true,
|
||||
"usingDirectivesPlacement": "outsideNamespace"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -48,9 +48,9 @@
|
|||
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\LICENSE" PackagePath="" Pack="true" />
|
||||
<None Include="..\Assets\xamarin.essentials_128x128.png" PackagePath="icon.png" Pack="true" />
|
||||
<None Include="..\nugetreadme.txt" PackagePath="readme.txt" Pack="true" />
|
||||
<None Include="..\..\..\..\LICENSE" PackagePath="" Pack="true" />
|
||||
<None Include="..\..\..\..\Assets\xamarin.essentials_128x128.png" PackagePath="icon.png" Pack="true" />
|
||||
<None Include="nugetreadme.txt" PackagePath="readme.txt" Pack="true" />
|
||||
<PackageReference Include="mdoc" Version="5.7.4.10" PrivateAssets="All" />
|
||||
<PackageReference Include="Xamarin.Build.TypeRedirector" Version="0.1.2-preview" PrivateAssets="all" />
|
||||
<Compile Include="**\*.shared.cs" />
|
||||
|
|
|
@ -95,9 +95,15 @@ namespace Xamarin.Forms
|
|||
var maxVisible = _indicatorView.MaximumVisible;
|
||||
var position = _indicatorView.Position;
|
||||
var selectedIndex = position >= maxVisible ? maxVisible - 1 : position;
|
||||
Children[index].BackgroundColor = index == selectedIndex
|
||||
bool isSelected = index == selectedIndex;
|
||||
Children[index].BackgroundColor = isSelected
|
||||
? GetColorOrDefault(_indicatorView.SelectedIndicatorColor, Color.Gray)
|
||||
: GetColorOrDefault(_indicatorView.IndicatorColor, Color.Silver);
|
||||
|
||||
VisualStateManager.GoToState(Children[index], isSelected
|
||||
? VisualStateManager.CommonStates.Selected
|
||||
: VisualStateManager.CommonStates.Normal);
|
||||
|
||||
}
|
||||
|
||||
IsVisible = indicatorCount > 1 || !_indicatorView.HideSingle;
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netstandard2.1;netstandard2.0</TargetFrameworks>
|
||||
<RootNamespace>Xamarin.Forms.Core</RootNamespace>
|
||||
<AssemblyName>Xamarin.Forms</AssemblyName>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Remove="Internals\Legacy\**" />
|
||||
<EmbeddedResource Remove="Internals\Legacy\**" />
|
||||
<None Remove="Internals\Legacy\**" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Xaml\Diagnostics\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\Platform.Handlers\src\Xamarin.Platform.Handlers\Xamarin.Platform.Handlers-net6.csproj" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<GitInfoReportImportance>high</GitInfoReportImportance>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.microsoft.sample_droid">
|
||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29" />
|
||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="30" />
|
||||
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"></application>
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
</manifest>
|
|
@ -0,0 +1,16 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0-android</TargetFramework>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>Sample.Droid</RootNamespace>
|
||||
<AssemblyName>Sample.Droid</AssemblyName>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Remove="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Sample\Sample-net6.csproj" />
|
||||
<PackageReference Include="Xamarin.Essentials" Version="1.6.1" />
|
||||
<PackageReference Include="Xamarin.AndroidX.Browser" Version="1.3.0.4" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -18,7 +18,7 @@
|
|||
<AndroidResgenFile>Resources\Resource.designer.cs</AndroidResgenFile>
|
||||
<AndroidResgenClass>Resource</AndroidResgenClass>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<TargetFrameworkVersion>v10.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v11.0</TargetFrameworkVersion>
|
||||
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
|
||||
<MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
|
||||
<MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
using AppKit;
|
||||
using CoreGraphics;
|
||||
using Foundation;
|
||||
|
||||
namespace Sample.Mac
|
||||
{
|
||||
[Register("AppDelegate")]
|
||||
public class AppDelegate : NSApplicationDelegate
|
||||
{
|
||||
public AppDelegate()
|
||||
{
|
||||
}
|
||||
|
||||
public override void DidFinishLaunching(NSNotification notification)
|
||||
{
|
||||
var mainWindow = NSApplication.SharedApplication.KeyWindow;
|
||||
|
||||
if (mainWindow != null)
|
||||
{
|
||||
var frame = mainWindow.Frame;
|
||||
frame.Size = new CGSize(1024, 768);
|
||||
mainWindow.SetFrame(frame, true);
|
||||
}
|
||||
}
|
||||
|
||||
public override void WillTerminate(NSNotification notification)
|
||||
{
|
||||
// Insert code here to tear down your application
|
||||
}
|
||||
}
|
||||
}
|
До Ширина: | Высота: | Размер: 7.9 KiB |
До Ширина: | Высота: | Размер: 20 KiB |
До Ширина: | Высота: | Размер: 711 B |
До Ширина: | Высота: | Размер: 1.4 KiB |
До Ширина: | Высота: | Размер: 20 KiB |
До Ширина: | Высота: | Размер: 58 KiB |
До Ширина: | Высота: | Размер: 1.4 KiB |
До Ширина: | Высота: | Размер: 3.3 KiB |
До Ширина: | Высота: | Размер: 58 KiB |
До Ширина: | Высота: | Размер: 174 KiB |
|
@ -1,68 +0,0 @@
|
|||
{
|
||||
"images": [
|
||||
{
|
||||
"filename": "AppIcon-16.png",
|
||||
"size": "16x16",
|
||||
"scale": "1x",
|
||||
"idiom": "mac"
|
||||
},
|
||||
{
|
||||
"filename": "AppIcon-16@2x.png",
|
||||
"size": "16x16",
|
||||
"scale": "2x",
|
||||
"idiom": "mac"
|
||||
},
|
||||
{
|
||||
"filename": "AppIcon-32.png",
|
||||
"size": "32x32",
|
||||
"scale": "1x",
|
||||
"idiom": "mac"
|
||||
},
|
||||
{
|
||||
"filename": "AppIcon-32@2x.png",
|
||||
"size": "32x32",
|
||||
"scale": "2x",
|
||||
"idiom": "mac"
|
||||
},
|
||||
{
|
||||
"filename": "AppIcon-128.png",
|
||||
"size": "128x128",
|
||||
"scale": "1x",
|
||||
"idiom": "mac"
|
||||
},
|
||||
{
|
||||
"filename": "AppIcon-128@2x.png",
|
||||
"size": "128x128",
|
||||
"scale": "2x",
|
||||
"idiom": "mac"
|
||||
},
|
||||
{
|
||||
"filename": "AppIcon-256.png",
|
||||
"size": "256x256",
|
||||
"scale": "1x",
|
||||
"idiom": "mac"
|
||||
},
|
||||
{
|
||||
"filename": "AppIcon-256@2x.png",
|
||||
"size": "256x256",
|
||||
"scale": "2x",
|
||||
"idiom": "mac"
|
||||
},
|
||||
{
|
||||
"filename": "AppIcon-512.png",
|
||||
"size": "512x512",
|
||||
"scale": "1x",
|
||||
"idiom": "mac"
|
||||
},
|
||||
{
|
||||
"filename": "AppIcon-512@2x.png",
|
||||
"size": "512x512",
|
||||
"scale": "2x",
|
||||
"idiom": "mac"
|
||||
}
|
||||
],
|
||||
"info": {
|
||||
"version": 1,
|
||||
"author": "xcode"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,33 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleName</key>
|
||||
<string>Sample.Mac</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.companyname.Sample-Mac</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.15</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string></string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
<key>NSMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>XSAppIconAssets</key>
|
||||
<string>Assets.xcassets/AppIcon.appiconset</string>
|
||||
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,13 +0,0 @@
|
|||
using AppKit;
|
||||
|
||||
namespace Sample.Mac
|
||||
{
|
||||
static class MainClass
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
NSApplication.Init();
|
||||
NSApplication.Main(args);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,719 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="17154" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="B8D-0N-5wS">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17154"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Application-->
|
||||
<scene sceneID="JPo-4y-FX3">
|
||||
<objects>
|
||||
<application id="hnw-xV-0zn" sceneMemberID="viewController">
|
||||
<menu key="mainMenu" title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||
<items>
|
||||
<menuItem title="Sample.Mac" id="1Xt-HY-uBw">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Sample.Mac" systemMenu="apple" id="uQy-DD-JDr">
|
||||
<items>
|
||||
<menuItem title="About Sample.Mac" id="5kV-Vb-QxS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="orderFrontStandardAboutPanel:" target="Ady-hI-5gd" id="Exp-CZ-Vem"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
||||
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
|
||||
<menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
|
||||
<menuItem title="Services" id="NMo-om-nkz">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
|
||||
<menuItem title="Hide Sample.Mac" keyEquivalent="h" id="Olw-nP-bQN">
|
||||
<connections>
|
||||
<action selector="hide:" target="Ady-hI-5gd" id="PnN-Uc-m68"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="hideOtherApplications:" target="Ady-hI-5gd" id="VT4-aY-XCT"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Show All" id="Kd2-mp-pUS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="unhideAllApplications:" target="Ady-hI-5gd" id="Dhg-Le-xox"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
|
||||
<menuItem title="Quit Sample.Mac" keyEquivalent="q" id="4sb-4s-VLi">
|
||||
<connections>
|
||||
<action selector="terminate:" target="Ady-hI-5gd" id="Te7-pn-YzF"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="File" id="dMs-cI-mzQ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="File" id="bib-Uj-vzu">
|
||||
<items>
|
||||
<menuItem title="New" keyEquivalent="n" id="Was-JA-tGl">
|
||||
<connections>
|
||||
<action selector="newDocument:" target="Ady-hI-5gd" id="4Si-XN-c54"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Open…" keyEquivalent="o" id="IAo-SY-fd9">
|
||||
<connections>
|
||||
<action selector="openDocument:" target="Ady-hI-5gd" id="bVn-NM-KNZ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Open Recent" id="tXI-mr-wws">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="oas-Oc-fiZ">
|
||||
<items>
|
||||
<menuItem title="Clear Menu" id="vNY-rz-j42">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="clearRecentDocuments:" target="Ady-hI-5gd" id="Daa-9d-B3U"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="m54-Is-iLE"/>
|
||||
<menuItem title="Close" keyEquivalent="w" id="DVo-aG-piG">
|
||||
<connections>
|
||||
<action selector="performClose:" target="Ady-hI-5gd" id="HmO-Ls-i7Q"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Save…" keyEquivalent="s" id="pxx-59-PXV">
|
||||
<connections>
|
||||
<action selector="saveDocument:" target="Ady-hI-5gd" id="teZ-XB-qJY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Save As…" keyEquivalent="S" id="Bw7-FT-i3A">
|
||||
<connections>
|
||||
<action selector="saveDocumentAs:" target="Ady-hI-5gd" id="mDf-zr-I0C"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Revert to Saved" keyEquivalent="r" id="KaW-ft-85H">
|
||||
<connections>
|
||||
<action selector="revertDocumentToSaved:" target="Ady-hI-5gd" id="iJ3-Pv-kwq"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="aJh-i4-bef"/>
|
||||
<menuItem title="Page Setup…" keyEquivalent="P" id="qIS-W8-SiK">
|
||||
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="runPageLayout:" target="Ady-hI-5gd" id="Din-rz-gC5"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Print…" keyEquivalent="p" id="aTl-1u-JFS">
|
||||
<connections>
|
||||
<action selector="print:" target="Ady-hI-5gd" id="qaZ-4w-aoO"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Edit" id="5QF-Oa-p0T">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Edit" id="W48-6f-4Dl">
|
||||
<items>
|
||||
<menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
|
||||
<connections>
|
||||
<action selector="undo:" target="Ady-hI-5gd" id="M6e-cu-g7V"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
|
||||
<connections>
|
||||
<action selector="redo:" target="Ady-hI-5gd" id="oIA-Rs-6OD"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
|
||||
<menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
|
||||
<connections>
|
||||
<action selector="cut:" target="Ady-hI-5gd" id="YJe-68-I9s"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
|
||||
<connections>
|
||||
<action selector="copy:" target="Ady-hI-5gd" id="G1f-GL-Joy"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
|
||||
<connections>
|
||||
<action selector="paste:" target="Ady-hI-5gd" id="UvS-8e-Qdg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="pasteAsPlainText:" target="Ady-hI-5gd" id="cEh-KX-wJQ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Delete" id="pa3-QI-u2k">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="delete:" target="Ady-hI-5gd" id="0Mk-Ml-PaM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
|
||||
<connections>
|
||||
<action selector="selectAll:" target="Ady-hI-5gd" id="VNm-Mi-diN"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
|
||||
<menuItem title="Find" id="4EN-yA-p0u">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Find" id="1b7-l0-nxx">
|
||||
<items>
|
||||
<menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="cD7-Qs-BN4"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="WD3-Gg-5AJ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="NDo-RZ-v9R"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="HOh-sY-3ay"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="Ady-hI-5gd" id="U76-nv-p5D"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
|
||||
<connections>
|
||||
<action selector="centerSelectionInVisibleArea:" target="Ady-hI-5gd" id="IOG-6D-g5B"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
|
||||
<items>
|
||||
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
|
||||
<connections>
|
||||
<action selector="showGuessPanel:" target="Ady-hI-5gd" id="vFj-Ks-hy3"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
|
||||
<connections>
|
||||
<action selector="checkSpelling:" target="Ady-hI-5gd" id="fz7-VC-reM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
|
||||
<menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleContinuousSpellChecking:" target="Ady-hI-5gd" id="7w6-Qz-0kB"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleGrammarChecking:" target="Ady-hI-5gd" id="muD-Qn-j4w"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticSpellingCorrection:" target="Ady-hI-5gd" id="2lM-Qi-WAP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Substitutions" id="9ic-FL-obx">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
|
||||
<items>
|
||||
<menuItem title="Show Substitutions" id="z6F-FW-3nz">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="orderFrontSubstitutionsPanel:" target="Ady-hI-5gd" id="oku-mr-iSq"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
|
||||
<menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleSmartInsertDelete:" target="Ady-hI-5gd" id="3IJ-Se-DZD"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smart Quotes" id="hQb-2v-fYv">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticQuoteSubstitution:" target="Ady-hI-5gd" id="ptq-xd-QOA"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smart Dashes" id="rgM-f4-ycn">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticDashSubstitution:" target="Ady-hI-5gd" id="oCt-pO-9gS"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smart Links" id="cwL-P1-jid">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticLinkDetection:" target="Ady-hI-5gd" id="Gip-E3-Fov"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Data Detectors" id="tRr-pd-1PS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticDataDetection:" target="Ady-hI-5gd" id="R1I-Nq-Kbl"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Text Replacement" id="HFQ-gK-NFA">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticTextReplacement:" target="Ady-hI-5gd" id="DvP-Fe-Py6"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Transformations" id="2oI-Rn-ZJC">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Transformations" id="c8a-y6-VQd">
|
||||
<items>
|
||||
<menuItem title="Make Upper Case" id="vmV-6d-7jI">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="uppercaseWord:" target="Ady-hI-5gd" id="sPh-Tk-edu"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Make Lower Case" id="d9M-CD-aMd">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="lowercaseWord:" target="Ady-hI-5gd" id="iUZ-b5-hil"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Capitalize" id="UEZ-Bs-lqG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="capitalizeWord:" target="Ady-hI-5gd" id="26H-TL-nsh"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Speech" id="xrE-MZ-jX0">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Speech" id="3rS-ZA-NoH">
|
||||
<items>
|
||||
<menuItem title="Start Speaking" id="Ynk-f8-cLZ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="startSpeaking:" target="Ady-hI-5gd" id="654-Ng-kyl"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Stop Speaking" id="Oyz-dy-DGm">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="stopSpeaking:" target="Ady-hI-5gd" id="dX8-6p-jy9"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Format" id="jxT-CU-nIS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Format" id="GEO-Iw-cKr">
|
||||
<items>
|
||||
<menuItem title="Font" id="Gi5-1S-RQB">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Font" systemMenu="font" id="aXa-aM-Jaq">
|
||||
<items>
|
||||
<menuItem title="Show Fonts" keyEquivalent="t" id="Q5e-8K-NDq">
|
||||
<connections>
|
||||
<action selector="orderFrontFontPanel:" target="YLy-65-1bz" id="WHr-nq-2xA"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Bold" tag="2" keyEquivalent="b" id="GB9-OM-e27">
|
||||
<connections>
|
||||
<action selector="addFontTrait:" target="YLy-65-1bz" id="hqk-hr-sYV"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Italic" tag="1" keyEquivalent="i" id="Vjx-xi-njq">
|
||||
<connections>
|
||||
<action selector="addFontTrait:" target="YLy-65-1bz" id="IHV-OB-c03"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Underline" keyEquivalent="u" id="WRG-CD-K1S">
|
||||
<connections>
|
||||
<action selector="underline:" target="Ady-hI-5gd" id="FYS-2b-JAY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="5gT-KC-WSO"/>
|
||||
<menuItem title="Bigger" tag="3" keyEquivalent="+" id="Ptp-SP-VEL">
|
||||
<connections>
|
||||
<action selector="modifyFont:" target="YLy-65-1bz" id="Uc7-di-UnL"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smaller" tag="4" keyEquivalent="-" id="i1d-Er-qST">
|
||||
<connections>
|
||||
<action selector="modifyFont:" target="YLy-65-1bz" id="HcX-Lf-eNd"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="kx3-Dk-x3B"/>
|
||||
<menuItem title="Kern" id="jBQ-r6-VK2">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Kern" id="tlD-Oa-oAM">
|
||||
<items>
|
||||
<menuItem title="Use Default" id="GUa-eO-cwY">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="useStandardKerning:" target="Ady-hI-5gd" id="6dk-9l-Ckg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use None" id="cDB-IK-hbR">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="turnOffKerning:" target="Ady-hI-5gd" id="U8a-gz-Maa"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Tighten" id="46P-cB-AYj">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="tightenKerning:" target="Ady-hI-5gd" id="hr7-Nz-8ro"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Loosen" id="ogc-rX-tC1">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="loosenKerning:" target="Ady-hI-5gd" id="8i4-f9-FKE"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Ligatures" id="o6e-r0-MWq">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Ligatures" id="w0m-vy-SC9">
|
||||
<items>
|
||||
<menuItem title="Use Default" id="agt-UL-0e3">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="useStandardLigatures:" target="Ady-hI-5gd" id="7uR-wd-Dx6"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use None" id="J7y-lM-qPV">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="turnOffLigatures:" target="Ady-hI-5gd" id="iX2-gA-Ilz"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use All" id="xQD-1f-W4t">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="useAllLigatures:" target="Ady-hI-5gd" id="KcB-kA-TuK"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Baseline" id="OaQ-X3-Vso">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Baseline" id="ijk-EB-dga">
|
||||
<items>
|
||||
<menuItem title="Use Default" id="3Om-Ey-2VK">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="unscript:" target="Ady-hI-5gd" id="0vZ-95-Ywn"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Superscript" id="Rqc-34-cIF">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="superscript:" target="Ady-hI-5gd" id="3qV-fo-wpU"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Subscript" id="I0S-gh-46l">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="subscript:" target="Ady-hI-5gd" id="Q6W-4W-IGz"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Raise" id="2h7-ER-AoG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="raiseBaseline:" target="Ady-hI-5gd" id="4sk-31-7Q9"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Lower" id="1tx-W0-xDw">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="lowerBaseline:" target="Ady-hI-5gd" id="OF1-bc-KW4"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="Ndw-q3-faq"/>
|
||||
<menuItem title="Show Colors" keyEquivalent="C" id="bgn-CT-cEk">
|
||||
<connections>
|
||||
<action selector="orderFrontColorPanel:" target="Ady-hI-5gd" id="mSX-Xz-DV3"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="iMs-zA-UFJ"/>
|
||||
<menuItem title="Copy Style" keyEquivalent="c" id="5Vv-lz-BsD">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="copyFont:" target="Ady-hI-5gd" id="GJO-xA-L4q"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste Style" keyEquivalent="v" id="vKC-jM-MkH">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="pasteFont:" target="Ady-hI-5gd" id="JfD-CL-leO"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Text" id="Fal-I4-PZk">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Text" id="d9c-me-L2H">
|
||||
<items>
|
||||
<menuItem title="Align Left" keyEquivalent="{" id="ZM1-6Q-yy1">
|
||||
<connections>
|
||||
<action selector="alignLeft:" target="Ady-hI-5gd" id="zUv-R1-uAa"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Center" keyEquivalent="|" id="VIY-Ag-zcb">
|
||||
<connections>
|
||||
<action selector="alignCenter:" target="Ady-hI-5gd" id="spX-mk-kcS"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Justify" id="J5U-5w-g23">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="alignJustified:" target="Ady-hI-5gd" id="ljL-7U-jND"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Align Right" keyEquivalent="}" id="wb2-vD-lq4">
|
||||
<connections>
|
||||
<action selector="alignRight:" target="Ady-hI-5gd" id="r48-bG-YeY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="4s2-GY-VfK"/>
|
||||
<menuItem title="Writing Direction" id="H1b-Si-o9J">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Writing Direction" id="8mr-sm-Yjd">
|
||||
<items>
|
||||
<menuItem title="Paragraph" enabled="NO" id="ZvO-Gk-QUH">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem id="YGs-j5-SAR">
|
||||
<string key="title"> Default</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeBaseWritingDirectionNatural:" target="Ady-hI-5gd" id="qtV-5e-UBP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="Lbh-J2-qVU">
|
||||
<string key="title"> Left to Right</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeBaseWritingDirectionLeftToRight:" target="Ady-hI-5gd" id="S0X-9S-QSf"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="jFq-tB-4Kx">
|
||||
<string key="title"> Right to Left</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeBaseWritingDirectionRightToLeft:" target="Ady-hI-5gd" id="5fk-qB-AqJ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="swp-gr-a21"/>
|
||||
<menuItem title="Selection" enabled="NO" id="cqv-fj-IhA">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem id="Nop-cj-93Q">
|
||||
<string key="title"> Default</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeTextWritingDirectionNatural:" target="Ady-hI-5gd" id="lPI-Se-ZHp"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="BgM-ve-c93">
|
||||
<string key="title"> Left to Right</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeTextWritingDirectionLeftToRight:" target="Ady-hI-5gd" id="caW-Bv-w94"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="RB4-Sm-HuC">
|
||||
<string key="title"> Right to Left</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeTextWritingDirectionRightToLeft:" target="Ady-hI-5gd" id="EXD-6r-ZUu"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="fKy-g9-1gm"/>
|
||||
<menuItem title="Show Ruler" id="vLm-3I-IUL">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleRuler:" target="Ady-hI-5gd" id="FOx-HJ-KwY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Copy Ruler" keyEquivalent="c" id="MkV-Pr-PK5">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="copyRuler:" target="Ady-hI-5gd" id="71i-fW-3W2"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste Ruler" keyEquivalent="v" id="LVM-kO-fVI">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="pasteRuler:" target="Ady-hI-5gd" id="cSh-wd-qM2"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="View" id="H8h-7b-M4v">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="View" id="HyV-fh-RgO">
|
||||
<items>
|
||||
<menuItem title="Show Toolbar" keyEquivalent="t" id="snW-S8-Cw5">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="toggleToolbarShown:" target="Ady-hI-5gd" id="BXY-wc-z0C"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Customize Toolbar…" id="1UK-8n-QPP">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="runToolbarCustomizationPalette:" target="Ady-hI-5gd" id="pQI-g3-MTW"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="hB3-LF-h0Y"/>
|
||||
<menuItem title="Show Sidebar" keyEquivalent="s" id="kIP-vf-haE">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="toggleSidebar:" target="Ady-hI-5gd" id="iwa-gc-5KM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="toggleFullScreen:" target="Ady-hI-5gd" id="dU3-MA-1Rq"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Window" id="aUF-d1-5bR">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
|
||||
<items>
|
||||
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
|
||||
<connections>
|
||||
<action selector="performMiniaturize:" target="Ady-hI-5gd" id="VwT-WD-YPe"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Zoom" id="R4o-n2-Eq4">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="performZoom:" target="Ady-hI-5gd" id="DIl-cC-cCs"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
|
||||
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="arrangeInFront:" target="Ady-hI-5gd" id="DRN-fu-gQh"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Help" id="wpr-3q-Mcd">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
|
||||
<items>
|
||||
<menuItem title="Sample.Mac Help" keyEquivalent="?" id="FKE-Sm-Kum">
|
||||
<connections>
|
||||
<action selector="showHelp:" target="Ady-hI-5gd" id="y7X-2Q-9no"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="Voe-Tx-rLC" id="PrD-fu-P6m"/>
|
||||
</connections>
|
||||
</application>
|
||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate"/>
|
||||
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||
<customObject id="Ady-hI-5gd" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="75" y="0.0"/>
|
||||
</scene>
|
||||
<!--Window Controller-->
|
||||
<scene sceneID="R2V-B0-nI4">
|
||||
<objects>
|
||||
<windowController id="B8D-0N-5wS" sceneMemberID="viewController">
|
||||
<window key="window" title="Xamarin" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" visibleAtLaunch="NO" animationBehavior="default" titlebarAppearsTransparent="YES" id="IQv-IB-iLA">
|
||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="1024" height="768"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1680" height="1027"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="B8D-0N-5wS" id="98r-iN-zZc"/>
|
||||
</connections>
|
||||
</window>
|
||||
<connections>
|
||||
<segue destination="XfG-lQ-9wD" kind="relationship" relationship="window.shadowedContentViewController" id="cq2-FE-JQM"/>
|
||||
</connections>
|
||||
</windowController>
|
||||
<customObject id="Oky-zY-oP4" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="75" y="250"/>
|
||||
</scene>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="hIz-AP-VOD">
|
||||
<objects>
|
||||
<viewController id="XfG-lQ-9wD" customClass="ViewController" sceneMemberID="viewController">
|
||||
<view key="view" wantsLayer="YES" id="m2S-Jp-Qdl">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</view>
|
||||
</viewController>
|
||||
<customObject id="rPt-NT-nkU" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="75" y="655"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
|
@ -1,104 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{C9FD5CC4-54CC-4DF1-9113-26ECBB688BEE}</ProjectGuid>
|
||||
<ProjectTypeGuids>{A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>Sample.Mac</RootNamespace>
|
||||
<AssemblyName>Sample.Mac</AssemblyName>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkIdentifier>Xamarin.Mac</TargetFrameworkIdentifier>
|
||||
<MonoMacResourcePrefix>Resources</MonoMacResourcePrefix>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug</OutputPath>
|
||||
<DefineConstants>DEBUG;</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<EnableCodeSigning>false</EnableCodeSigning>
|
||||
<CodeSigningKey>Mac Developer</CodeSigningKey>
|
||||
<CreatePackage>false</CreatePackage>
|
||||
<EnablePackageSigning>false</EnablePackageSigning>
|
||||
<IncludeMonoRuntime>false</IncludeMonoRuntime>
|
||||
<UseSGen>true</UseSGen>
|
||||
<UseRefCounting>true</UseRefCounting>
|
||||
<HttpClientHandler></HttpClientHandler>
|
||||
<LinkMode></LinkMode>
|
||||
<XamMacArch></XamMacArch>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release</OutputPath>
|
||||
<DefineConstants></DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<EnableCodeSigning>false</EnableCodeSigning>
|
||||
<CreatePackage>true</CreatePackage>
|
||||
<EnablePackageSigning>false</EnablePackageSigning>
|
||||
<IncludeMonoRuntime>true</IncludeMonoRuntime>
|
||||
<UseSGen>true</UseSGen>
|
||||
<UseRefCounting>true</UseRefCounting>
|
||||
<CodeSignEntitlements>Entitlements.plist</CodeSignEntitlements>
|
||||
<LinkMode>SdkOnly</LinkMode>
|
||||
<HttpClientHandler></HttpClientHandler>
|
||||
<XamMacArch></XamMacArch>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="Xamarin.Mac" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Contents.json" />
|
||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-128.png" />
|
||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-128%402x.png" />
|
||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-16.png" />
|
||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-16%402x.png" />
|
||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-256.png" />
|
||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-256%402x.png" />
|
||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-32.png" />
|
||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-32%402x.png" />
|
||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-512.png" />
|
||||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\AppIcon-512%402x.png" />
|
||||
<ImageAsset Include="Assets.xcassets\Contents.json" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Resources\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Info.plist" />
|
||||
<None Include="Entitlements.plist" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Main.cs" />
|
||||
<Compile Include="AppDelegate.cs" />
|
||||
<Compile Include="ViewController.cs" />
|
||||
<Compile Include="ViewController.designer.cs">
|
||||
<DependentUpon>ViewController.cs</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<InterfaceDefinition Include="Main.storyboard" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Sample\Sample.csproj">
|
||||
<Project>{28164E00-92FB-4EEE-927C-D0CF672A004D}</Project>
|
||||
<Name>Sample</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\..\..\Xamarin.Forms.Core\Xamarin.Forms.Core.csproj">
|
||||
<Project>{57B8B73D-C3B5-4C42-869E-7B2F17D354AC}</Project>
|
||||
<Name>Xamarin.Forms.Core</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\src\Xamarin.Platform.Handlers\Xamarin.Platform.Handlers.csproj">
|
||||
<Project>{29913989-0F70-48D8-8EDE-B1DD217F21D1}</Project>
|
||||
<Name>Xamarin.Platform.Handlers</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Mac\Xamarin.Mac.CSharp.targets" />
|
||||
</Project>
|
|
@ -1,32 +0,0 @@
|
|||
using System;
|
||||
using AppKit;
|
||||
using Foundation;
|
||||
using Xamarin.Platform;
|
||||
|
||||
namespace Sample.Mac
|
||||
{
|
||||
public partial class ViewController : NSViewController
|
||||
{
|
||||
public ViewController(IntPtr handle) : base(handle)
|
||||
{
|
||||
var app = new MyApp();
|
||||
|
||||
IView content = app.CreateView();
|
||||
|
||||
View = content.ToNative();
|
||||
}
|
||||
|
||||
public override NSObject RepresentedObject
|
||||
{
|
||||
get
|
||||
{
|
||||
return base.RepresentedObject;
|
||||
}
|
||||
set
|
||||
{
|
||||
base.RepresentedObject = value;
|
||||
// Update the view, if already loaded.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,8 +1,12 @@
|
|||
using Foundation;
|
||||
using UIKit;
|
||||
using Xamarin.Platform;
|
||||
|
||||
#if !NET6_0
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Platform.iOS;
|
||||
#endif
|
||||
|
||||
using System.Threading.Tasks;
|
||||
using System.Linq;
|
||||
|
||||
|
@ -11,7 +15,11 @@ namespace Sample.iOS
|
|||
// The UIApplicationDelegate for the application. This class is responsible for launching the
|
||||
// User Interface of the application, as well as listening (and optionally responding) to application events from iOS.
|
||||
[Register("AppDelegate")]
|
||||
#if !NET6_0
|
||||
public class AppDelegate : FormsApplicationDelegate, IUIApplicationDelegate
|
||||
#else
|
||||
public class AppDelegate : UIApplicationDelegate, IUIApplicationDelegate
|
||||
#endif
|
||||
{
|
||||
UIWindow _window;
|
||||
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0-ios</TargetFramework>
|
||||
<RuntimeIdentifier>ios-x64</RuntimeIdentifier>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>Sample.iOS</RootNamespace>
|
||||
<AssemblyName>Sample.iOS</AssemblyName>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Remove="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\Forms\src\Xamarin.Forms.Core\Xamarin.Forms.Core-net6.csproj" />
|
||||
<ProjectReference Include="..\Sample\Sample-net6.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Properties\" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -33,7 +33,7 @@ namespace Sample
|
|||
|
||||
void RegisterLegacyRendererAgainstFormsControl()
|
||||
{
|
||||
#if MONOANDROID
|
||||
#if MONOANDROID && !NET6_0
|
||||
|
||||
// register renderer with old registrar so it can get shimmed
|
||||
// This will move to some extension method
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net6.0-android;net6.0-ios;</TargetFrameworks>
|
||||
<RootNamespace>Sample</RootNamespace>
|
||||
<AssemblyName>Sample</AssemblyName>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\..\..\..\.nuspec\Xamarin.Forms.MultiTargeting.targets" />
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\Forms\src\Xamarin.Forms.Core\Xamarin.Forms.Core-net6.csproj" />
|
||||
<ProjectReference Include="..\..\src\Xamarin.Platform.Handlers\Xamarin.Platform.Handlers-net6.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -7,10 +7,10 @@ using NativeView = UIKit.UIButton;
|
|||
using NativeView = AppKit.NSButton;
|
||||
#elif MONOANDROID
|
||||
using NativeView = AndroidX.AppCompat.Widget.AppCompatButton;
|
||||
#elif NETCOREAPP
|
||||
using NativeView = System.Windows.Controls.Button;
|
||||
#elif NETSTANDARD
|
||||
using NativeView = System.Object;
|
||||
#elif WINDOWS
|
||||
using NativeView = Microsoft.UI.Xaml.Controls.Button;
|
||||
#endif
|
||||
|
||||
namespace Xamarin.Platform.Handlers
|
||||
|
|
|
@ -74,7 +74,7 @@ namespace Xamarin.Platform.Handlers
|
|||
handler.TypedNativeView?.UpdateThumbColor(slider, DefaultThumbColor);
|
||||
}
|
||||
|
||||
void OnControlValueChanged(object sender, EventArgs eventArgs)
|
||||
void OnControlValueChanged(object? sender, EventArgs eventArgs)
|
||||
{
|
||||
if (TypedNativeView == null || VirtualView == null)
|
||||
return;
|
||||
|
@ -82,12 +82,12 @@ namespace Xamarin.Platform.Handlers
|
|||
VirtualView.Value = TypedNativeView.Value;
|
||||
}
|
||||
|
||||
void OnTouchDownControlEvent(object sender, EventArgs e)
|
||||
void OnTouchDownControlEvent(object? sender, EventArgs e)
|
||||
{
|
||||
VirtualView?.DragStarted();
|
||||
}
|
||||
|
||||
void OnTouchUpControlEvent(object sender, EventArgs e)
|
||||
void OnTouchUpControlEvent(object? sender, EventArgs e)
|
||||
{
|
||||
VirtualView?.DragCompleted();
|
||||
}
|
||||
|
|
|
@ -5,8 +5,6 @@ using NativeView = UIKit.UIView;
|
|||
using NativeView = AppKit.NSView;
|
||||
#elif MONOANDROID
|
||||
using NativeView = Android.Views.View;
|
||||
#elif NETCOREAPP
|
||||
using NativeView = System.Windows.FrameworkElement;
|
||||
#elif NETSTANDARD
|
||||
using NativeView = System.Object;
|
||||
#endif
|
||||
|
|
|
@ -22,7 +22,7 @@ namespace Xamarin.Platform
|
|||
|
||||
var color = view.BackgroundColor;
|
||||
|
||||
if (color != null && !color.IsDefault)
|
||||
if (!color.IsDefault)
|
||||
nativeView.BackgroundColor = color.ToNative();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -295,7 +295,7 @@ namespace Xamarin.Forms
|
|||
}
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
if (obj is Color)
|
||||
{
|
||||
|
|
|
@ -103,7 +103,7 @@ namespace Xamarin.Forms
|
|||
return string.Equals(FontFamily, other.FontFamily) && FontSize.Equals(other.FontSize) && NamedSize == other.NamedSize && FontAttributes == other.FontAttributes;
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
if (ReferenceEquals(null, obj))
|
||||
{
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace Xamarin.Forms
|
|||
Y = sz.Height;
|
||||
}
|
||||
|
||||
public override bool Equals(object o)
|
||||
public override bool Equals(object? o)
|
||||
{
|
||||
if (!(o is Point))
|
||||
return false;
|
||||
|
|
|
@ -65,7 +65,7 @@ namespace Xamarin.Forms
|
|||
|
||||
public bool Equals(Rect other) => X.Equals(other.X) && Y.Equals(other.Y) && Width.Equals(other.Width) && Height.Equals(other.Height);
|
||||
|
||||
public override bool Equals(object obj)
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
if (obj is null)
|
||||
return false;
|
||||
|
|
|
@ -71,8 +71,8 @@ namespace Xamarin.Forms
|
|||
{
|
||||
return X.Equals(other.X) && Y.Equals(other.Y) && Width.Equals(other.Width) && Height.Equals(other.Height);
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
if (obj is null)
|
||||
return false;
|
||||
|
|
|
@ -87,7 +87,7 @@ namespace Xamarin.Forms
|
|||
return _width.Equals(other._width) && _height.Equals(other._height);
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
if (ReferenceEquals(null, obj))
|
||||
return false;
|
||||
|
|
|
@ -59,7 +59,7 @@ namespace Xamarin.Forms
|
|||
return Left.Equals(other.Left) && Top.Equals(other.Top) && Right.Equals(other.Right) && Bottom.Equals(other.Bottom);
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
if (ReferenceEquals(null, obj))
|
||||
return false;
|
||||
|
|
|
@ -69,7 +69,8 @@ namespace Xamarin.Platform
|
|||
public TTypeRender GetHandler(Type type)
|
||||
{
|
||||
List<Type> types = new List<Type> { type };
|
||||
Type baseType = type.BaseType;
|
||||
|
||||
Type? baseType = type.BaseType;
|
||||
|
||||
while (baseType != null)
|
||||
{
|
||||
|
@ -90,7 +91,7 @@ namespace Xamarin.Platform
|
|||
public Type GetRendererType(Type type)
|
||||
{
|
||||
List<Type> types = new List<Type> { type };
|
||||
Type baseType = type.BaseType;
|
||||
Type? baseType = type.BaseType;
|
||||
|
||||
while (baseType != null)
|
||||
{
|
||||
|
@ -124,12 +125,16 @@ namespace Xamarin.Platform
|
|||
try
|
||||
{
|
||||
var newObject = Activator.CreateInstance(handler);
|
||||
|
||||
if(newObject == null)
|
||||
throw new ArgumentException($"No Handler found for type: {type}", nameof(type));
|
||||
|
||||
return (TTypeRender)newObject;
|
||||
}
|
||||
catch (Exception ex)
|
||||
catch (Exception)
|
||||
{
|
||||
if (Debugger.IsAttached)
|
||||
throw ex;
|
||||
throw;
|
||||
}
|
||||
|
||||
return default(TTypeRender);
|
||||
|
|