зеркало из https://github.com/DeGsoft/maui-linux.git
Merge branch '4.6.0'
This commit is contained in:
Коммит
e862b78305
|
@ -4,8 +4,8 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(CI)' == ''">
|
<PropertyGroup Condition="'$(CI)' == ''">
|
||||||
<CI>false</CI>
|
<CI>false</CI>
|
||||||
<CI Condition="'$(TF_BUILD)' == 'true'">true</CI>
|
<CI Condition="'$(TF_BUILD)' == 'true'">true</CI>
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
<ANDROID_RENDERERS>LEGACY</ANDROID_RENDERERS>
|
<ANDROID_RENDERERS>LEGACY</ANDROID_RENDERERS>
|
||||||
-->
|
-->
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(CI)' == 'true'">
|
<PropertyGroup Condition="'$(CI)' == 'true'">
|
||||||
<_XamarinFormsVersion>$(BUILD_BUILDNUMBER.Split(`+`)[0])</_XamarinFormsVersion>
|
<_XamarinFormsVersion>$(BUILD_BUILDNUMBER.Split(`+`)[0])</_XamarinFormsVersion>
|
||||||
<XamarinFormsVersion Condition="Exists('$(BUILD_SOURCESDIRECTORY)/Nuget/Xamarin.Forms.$(_XamarinFormsVersion).nupkg')" >$(_XamarinFormsVersion)</XamarinFormsVersion>
|
<XamarinFormsVersion Condition="Exists('$(BUILD_SOURCESDIRECTORY)/Nuget/Xamarin.Forms.$(_XamarinFormsVersion).nupkg')" >$(_XamarinFormsVersion)</XamarinFormsVersion>
|
||||||
|
@ -43,4 +43,10 @@
|
||||||
<AndroidTargetFrameworks Condition="'$(Use2017)' == 'true'">MonoAndroid90;</AndroidTargetFrameworks>
|
<AndroidTargetFrameworks Condition="'$(Use2017)' == 'true'">MonoAndroid90;</AndroidTargetFrameworks>
|
||||||
<AndroidTargetFrameworks Condition="'$(Use2017)' == 'false'">MonoAndroid90;MonoAndroid10.0;</AndroidTargetFrameworks>
|
<AndroidTargetFrameworks Condition="'$(Use2017)' == 'false'">MonoAndroid90;MonoAndroid10.0;</AndroidTargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!-- Auto install any missing Android SDKs -->
|
||||||
|
<PropertyGroup Condition="'$(CI)' == 'true'">
|
||||||
|
<AndroidRestoreOnBuild Condition="'$(AndroidRestoreOnBuild)' == ''">True</AndroidRestoreOnBuild>
|
||||||
|
<AcceptAndroidSDKLicenses Condition="'$(AcceptAndroidSDKLicenses)' == ''">True</AcceptAndroidSDKLicenses>
|
||||||
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
using Xamarin.Forms.CustomAttributes;
|
||||||
|
using Xamarin.Forms.Internals;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
#if UITEST
|
||||||
|
using Xamarin.UITest;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using Xamarin.Forms.Core.UITests;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace Xamarin.Forms.Controls.Issues
|
||||||
|
{
|
||||||
|
[Preserve(AllMembers = true)]
|
||||||
|
[Issue(IssueTracker.Github, 8291, "[Android] Editor - Text selection menu does not appear when selecting text on an editor placed within a ScrollView",
|
||||||
|
PlatformAffected.Android)]
|
||||||
|
#if UITEST
|
||||||
|
[NUnit.Framework.Category(UITestCategories.Editor)]
|
||||||
|
#endif
|
||||||
|
public class Issue8291 : TestContentPage
|
||||||
|
{
|
||||||
|
protected override void Init()
|
||||||
|
{
|
||||||
|
Content = new StackLayout()
|
||||||
|
{
|
||||||
|
Children =
|
||||||
|
{
|
||||||
|
new Label()
|
||||||
|
{
|
||||||
|
Text = "Only Relevant on Android"
|
||||||
|
},
|
||||||
|
new ScrollView()
|
||||||
|
{
|
||||||
|
Content = new Editor()
|
||||||
|
{
|
||||||
|
Text = "Press and hold this text. Text should become selected and context menu should open",
|
||||||
|
AutomationId = "PressEditor"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new ScrollView()
|
||||||
|
{
|
||||||
|
Content = new Entry()
|
||||||
|
{
|
||||||
|
Text = "Press and hold this text. Text should become selected and context menu should open",
|
||||||
|
AutomationId = "PressEntry"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#if UITEST && __ANDROID__
|
||||||
|
[Test]
|
||||||
|
public void ContextMenuShowsUpWhenPressAndHoldTextOnEditorAndEntryField()
|
||||||
|
{
|
||||||
|
RunningApp.TouchAndHold("PressEditor");
|
||||||
|
TestForPopup();
|
||||||
|
RunningApp.Tap("PressEntry");
|
||||||
|
RunningApp.TouchAndHold("PressEntry");
|
||||||
|
TestForPopup();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestForPopup()
|
||||||
|
{
|
||||||
|
var result = RunningApp.QueryUntilPresent(() =>
|
||||||
|
{
|
||||||
|
return RunningApp.Query("Paste")
|
||||||
|
.Union(RunningApp.Query("Share"))
|
||||||
|
.Union(RunningApp.Query("Copy"))
|
||||||
|
.Union(RunningApp.Query("Cut"))
|
||||||
|
.Union(RunningApp.Query("Select All"))
|
||||||
|
.ToArray();
|
||||||
|
});
|
||||||
|
|
||||||
|
Assert.IsNotNull(result);
|
||||||
|
Assert.IsTrue(result.Length > 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,6 +10,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)CollectionViewGroupTypeIssue.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)CollectionViewGroupTypeIssue.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Issue8291.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Issue2674.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Issue2674.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Issue6484.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Issue6484.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Issue6187.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Issue6187.cs" />
|
||||||
|
@ -1948,7 +1949,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Issue6403.xaml">
|
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Issue6403.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Issue9196.xaml">
|
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Issue9196.xaml">
|
||||||
|
@ -1982,4 +1983,4 @@
|
||||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -21,29 +21,25 @@ namespace Xamarin.Forms.Core.UITests
|
||||||
public void CarouselViewRemoveAndUpdateCurrentItem(string subgallery)
|
public void CarouselViewRemoveAndUpdateCurrentItem(string subgallery)
|
||||||
{
|
{
|
||||||
VisitSubGallery(subgallery);
|
VisitSubGallery(subgallery);
|
||||||
var position = App.WaitForElement(x => x.Marked("lblPosition")).First().Text;
|
|
||||||
Assert.IsTrue(position == "0");
|
CheckPositionValue("lblPosition", "0");
|
||||||
var currentItem = App.WaitForElement(x => x.Marked("lblCurrentItem")).First().Text;
|
CheckPositionValue("lblCurrentItem", "0");
|
||||||
Assert.IsTrue(currentItem == "0");
|
CheckPositionValue("lblSelected", "0");
|
||||||
var selected = App.WaitForElement(x => x.Marked("lblSelected")).First().Text;
|
|
||||||
Assert.IsTrue(selected == "0");
|
|
||||||
var rect = App.Query(c => c.Marked("TheCarouselView")).First().Rect;
|
var rect = App.Query(c => c.Marked("TheCarouselView")).First().Rect;
|
||||||
var centerX = rect.CenterX;
|
var centerX = rect.CenterX;
|
||||||
var rightX = rect.X - 5;
|
var rightX = rect.X - 5;
|
||||||
App.DragCoordinates(centerX + 40, rect.CenterY, rightX, rect.CenterY);
|
App.DragCoordinates(centerX + 40, rect.CenterY, rightX, rect.CenterY);
|
||||||
var positionAfter = App.WaitForElement(x => x.Marked("lblPosition")).First().Text;
|
|
||||||
Assert.IsTrue(positionAfter == "1");
|
CheckPositionValue("lblPosition", "1");
|
||||||
var currentItemAfter = App.WaitForElement(x => x.Marked("lblCurrentItem")).First().Text;
|
CheckPositionValue("lblCurrentItem", "1");
|
||||||
Assert.IsTrue(currentItemAfter == "1");
|
CheckPositionValue("lblSelected", "1");
|
||||||
var selectedAfter = App.WaitForElement(x => x.Marked("lblSelected")).First().Text;
|
|
||||||
Assert.IsTrue(selectedAfter == "1");
|
|
||||||
App.Tap(x => x.Marked("btnRemove"));
|
App.Tap(x => x.Marked("btnRemove"));
|
||||||
var positionAfterRemove = App.WaitForElement(x => x.Marked("lblPosition")).First().Text;
|
|
||||||
Assert.IsTrue(positionAfterRemove == "1");
|
CheckPositionValue("lblPosition", "1");
|
||||||
var currentItemAfterRemove = App.WaitForElement(x => x.Marked("lblCurrentItem")).First().Text;
|
CheckPositionValue("lblCurrentItem", "2");
|
||||||
Assert.IsTrue(currentItemAfterRemove == "2");
|
CheckPositionValue("lblSelected", "2");
|
||||||
var selectedAfterRemove = App.WaitForElement(x => x.Marked("lblSelected")).First().Text;
|
|
||||||
Assert.IsTrue(selectedAfterRemove == "2");
|
|
||||||
|
|
||||||
App.Back();
|
App.Back();
|
||||||
}
|
}
|
||||||
|
@ -53,17 +49,13 @@ namespace Xamarin.Forms.Core.UITests
|
||||||
public void CarouselViewRemoveFirstCurrentItem(string subgallery)
|
public void CarouselViewRemoveFirstCurrentItem(string subgallery)
|
||||||
{
|
{
|
||||||
VisitSubGallery(subgallery);
|
VisitSubGallery(subgallery);
|
||||||
var position = App.WaitForElement(x => x.Marked("lblPosition")).First().Text;
|
|
||||||
Assert.IsTrue(position == "0");
|
CheckPositionValue("lblPosition", "0");
|
||||||
var currentItem = App.WaitForElement(x => x.Marked("lblCurrentItem")).First().Text;
|
CheckPositionValue("lblCurrentItem", "0");
|
||||||
Assert.IsTrue(currentItem == "0");
|
|
||||||
App.Tap(x => x.Marked("btnRemove"));
|
App.Tap(x => x.Marked("btnRemove"));
|
||||||
var positionAfterRemove = App.WaitForElement(x => x.Marked("lblPosition")).First().Text;
|
CheckPositionValue("lblPosition", "0");
|
||||||
Assert.IsTrue(positionAfterRemove == "0");
|
CheckPositionValue("lblCurrentItem", "1");
|
||||||
var currentItemAfterRemove = App.WaitForElement(x => x.Marked("lblCurrentItem")).First().Text;
|
CheckPositionValue("lblSelected", "1");
|
||||||
Assert.IsTrue(currentItemAfterRemove == "1");
|
|
||||||
var selectedAfterRemove = App.WaitForElement(x => x.Marked("lblSelected")).First().Text;
|
|
||||||
Assert.IsTrue(selectedAfterRemove == "1");
|
|
||||||
|
|
||||||
App.Back();
|
App.Back();
|
||||||
}
|
}
|
||||||
|
@ -73,12 +65,11 @@ namespace Xamarin.Forms.Core.UITests
|
||||||
public void CarouselViewRemoveLastCurrentItem(string subgallery)
|
public void CarouselViewRemoveLastCurrentItem(string subgallery)
|
||||||
{
|
{
|
||||||
VisitSubGallery(subgallery);
|
VisitSubGallery(subgallery);
|
||||||
var position = App.WaitForElement(x => x.Marked("lblPosition")).First().Text;
|
|
||||||
Assert.IsTrue(position == "0");
|
CheckPositionValue("lblPosition", "0");
|
||||||
var currentItem = App.WaitForElement(x => x.Marked("lblCurrentItem")).First().Text;
|
CheckPositionValue("lblCurrentItem", "0");
|
||||||
Assert.IsTrue(currentItem == "0");
|
CheckPositionValue("lblSelected", "0");
|
||||||
var selected = App.WaitForElement(x => x.Marked("lblSelected")).First().Text;
|
|
||||||
Assert.IsTrue(selected == "0");
|
|
||||||
var rect = App.Query(c => c.Marked("TheCarouselView")).First().Rect;
|
var rect = App.Query(c => c.Marked("TheCarouselView")).First().Rect;
|
||||||
var centerX = rect.CenterX;
|
var centerX = rect.CenterX;
|
||||||
var rightX = rect.X - 5;
|
var rightX = rect.X - 5;
|
||||||
|
@ -86,24 +77,21 @@ namespace Xamarin.Forms.Core.UITests
|
||||||
App.DragCoordinates(centerX + 40, rect.CenterY, rightX, rect.CenterY);
|
App.DragCoordinates(centerX + 40, rect.CenterY, rightX, rect.CenterY);
|
||||||
App.DragCoordinates(centerX + 40, rect.CenterY, rightX, rect.CenterY);
|
App.DragCoordinates(centerX + 40, rect.CenterY, rightX, rect.CenterY);
|
||||||
App.DragCoordinates(centerX + 40, rect.CenterY, rightX, rect.CenterY);
|
App.DragCoordinates(centerX + 40, rect.CenterY, rightX, rect.CenterY);
|
||||||
var positionAfter = App.WaitForElement(x => x.Marked("lblPosition")).First().Text;
|
App.DragCoordinates(centerX + 40, rect.CenterY, rightX, rect.CenterY);
|
||||||
Assert.IsTrue(positionAfter == "4");
|
|
||||||
var currentItemAfter = App.WaitForElement(x => x.Marked("lblCurrentItem")).First().Text;
|
CheckPositionValue("lblPosition", "4");
|
||||||
Assert.IsTrue(currentItemAfter == "4");
|
CheckPositionValue("lblCurrentItem", "4");
|
||||||
var selectedAfter = App.WaitForElement(x => x.Marked("lblSelected")).First().Text;
|
CheckPositionValue("lblSelected", "4");
|
||||||
Assert.IsTrue(selectedAfter == "4");
|
|
||||||
App.Tap(x => x.Marked("btnRemove"));
|
App.Tap(x => x.Marked("btnRemove"));
|
||||||
var positionAfterRemove = App.WaitForElement(x => x.Marked("lblPosition")).First().Text;
|
|
||||||
Assert.IsTrue(positionAfterRemove == "3");
|
CheckPositionValue("lblPosition", "3");
|
||||||
var currentItemAfterRemove = App.WaitForElement(x => x.Marked("lblCurrentItem")).First().Text;
|
CheckPositionValue("lblCurrentItem", "3");
|
||||||
Assert.IsTrue(currentItemAfterRemove == "3");
|
CheckPositionValue("lblSelected", "3");
|
||||||
var selectedAfterRemove = App.WaitForElement(x => x.Marked("lblSelected")).First().Text;
|
|
||||||
Assert.IsTrue(selectedAfterRemove == "3");
|
|
||||||
|
|
||||||
App.Back();
|
App.Back();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[TestCase("IndicatorView")]
|
[TestCase("IndicatorView")]
|
||||||
public void CarouselViewFirstLastPosition(string subgallery)
|
public void CarouselViewFirstLastPosition(string subgallery)
|
||||||
{
|
{
|
||||||
|
@ -202,7 +190,6 @@ namespace Xamarin.Forms.Core.UITests
|
||||||
|
|
||||||
void VisitSubGallery(string galleryName, bool enableIndicator = false)
|
void VisitSubGallery(string galleryName, bool enableIndicator = false)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (enableIndicator)
|
if (enableIndicator)
|
||||||
App.Tap(t => t.Marked("EnableIndicatorView"));
|
App.Tap(t => t.Marked("EnableIndicatorView"));
|
||||||
|
|
||||||
|
@ -214,5 +201,18 @@ namespace Xamarin.Forms.Core.UITests
|
||||||
|
|
||||||
App.Tap(t => t.Marked(galleryName));
|
App.Tap(t => t.Marked(galleryName));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void CheckPositionValue(string marked, string value)
|
||||||
|
{
|
||||||
|
var positionAfter = App.QueryUntilPresent(() =>
|
||||||
|
{
|
||||||
|
var positionLabel = App.WaitForElement(x => x.Marked(marked));
|
||||||
|
if (positionLabel.First().Text == value)
|
||||||
|
return positionLabel;
|
||||||
|
return null;
|
||||||
|
}, delayInMs: 1000);
|
||||||
|
Assert.IsTrue(positionAfter[0].Text == value);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -51,6 +51,18 @@ namespace Xamarin.Forms.Platform.Android
|
||||||
_textColorSwitcher = _textColorSwitcher ?? new TextColorSwitcher(EditText.TextColors, Element.UseLegacyColorManagement());
|
_textColorSwitcher = _textColorSwitcher ?? new TextColorSwitcher(EditText.TextColors, Element.UseLegacyColorManagement());
|
||||||
_textColorSwitcher.UpdateTextColor(EditText, Element.TextColor);
|
_textColorSwitcher.UpdateTextColor(EditText, Element.TextColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnAttachedToWindow()
|
||||||
|
{
|
||||||
|
base.OnAttachedToWindow();
|
||||||
|
|
||||||
|
if (EditText.IsAlive() && EditText.Enabled)
|
||||||
|
{
|
||||||
|
// https://issuetracker.google.com/issues/37095917
|
||||||
|
EditText.Enabled = false;
|
||||||
|
EditText.Enabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class EditorRendererBase<TControl> : ViewRenderer<Editor, TControl>, ITextWatcher
|
public abstract class EditorRendererBase<TControl> : ViewRenderer<Editor, TControl>, ITextWatcher
|
||||||
|
|
|
@ -72,7 +72,7 @@ stages:
|
||||||
pool:
|
pool:
|
||||||
name: $(vs2019VmPool)
|
name: $(vs2019VmPool)
|
||||||
vmImage: $(vs2019VmImage)
|
vmImage: $(vs2019VmImage)
|
||||||
demands:
|
demands:
|
||||||
msbuild
|
msbuild
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
|
@ -93,7 +93,7 @@ stages:
|
||||||
pool:
|
pool:
|
||||||
name: $(vs2019VmPool)
|
name: $(vs2019VmPool)
|
||||||
vmImage: $(vs2019VmImage)
|
vmImage: $(vs2019VmImage)
|
||||||
demands:
|
demands:
|
||||||
msbuild
|
msbuild
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
|
@ -119,7 +119,7 @@ stages:
|
||||||
pool:
|
pool:
|
||||||
name: $(vs2019VmPool)
|
name: $(vs2019VmPool)
|
||||||
vmImage: $(vs2019VmImage)
|
vmImage: $(vs2019VmImage)
|
||||||
demands:
|
demands:
|
||||||
msbuild
|
msbuild
|
||||||
variables:
|
variables:
|
||||||
FormsIdAppend: ''
|
FormsIdAppend: ''
|
||||||
|
@ -136,7 +136,7 @@ stages:
|
||||||
pool:
|
pool:
|
||||||
name: $(vs2019VmPool)
|
name: $(vs2019VmPool)
|
||||||
vmImage: $(vs2019VmImage)
|
vmImage: $(vs2019VmImage)
|
||||||
demands:
|
demands:
|
||||||
- Agent.OS -equals Windows_NT
|
- Agent.OS -equals Windows_NT
|
||||||
- msbuild
|
- msbuild
|
||||||
strategy:
|
strategy:
|
||||||
|
@ -158,7 +158,7 @@ stages:
|
||||||
pool:
|
pool:
|
||||||
name: $(vs2019VmPool)
|
name: $(vs2019VmPool)
|
||||||
vmImage: $(vs2019VmImage)
|
vmImage: $(vs2019VmImage)
|
||||||
demands:
|
demands:
|
||||||
- Agent.OS -equals Windows_NT
|
- Agent.OS -equals Windows_NT
|
||||||
- msbuild
|
- msbuild
|
||||||
strategy:
|
strategy:
|
||||||
|
@ -185,7 +185,7 @@ stages:
|
||||||
pool:
|
pool:
|
||||||
name: $(vs2019VmPool)
|
name: $(vs2019VmPool)
|
||||||
vmImage: $(vs2019VmImage)
|
vmImage: $(vs2019VmImage)
|
||||||
demands:
|
demands:
|
||||||
- Agent.OS -equals Windows_NT
|
- Agent.OS -equals Windows_NT
|
||||||
- msbuild
|
- msbuild
|
||||||
variables:
|
variables:
|
||||||
|
@ -243,7 +243,7 @@ stages:
|
||||||
- job: osx
|
- job: osx
|
||||||
workspace:
|
workspace:
|
||||||
clean: all
|
clean: all
|
||||||
displayName: OSX Phase
|
displayName: OSX Phase 2017
|
||||||
pool:
|
pool:
|
||||||
name: $(osx2017VmPool)
|
name: $(osx2017VmPool)
|
||||||
vmImage: 'macOS-10.14'
|
vmImage: 'macOS-10.14'
|
||||||
|
@ -253,6 +253,7 @@ stages:
|
||||||
variables:
|
variables:
|
||||||
provisionator.osxPath : 'build/provisioning/provisioning.csx'
|
provisionator.osxPath : 'build/provisioning/provisioning.csx'
|
||||||
buildConfiguration: $(DefaultBuildConfiguration)
|
buildConfiguration: $(DefaultBuildConfiguration)
|
||||||
|
slnPath: $(SolutionFile)
|
||||||
iOSCertSecureFileName: 'Xamarin Forms iOS Certificate.p12'
|
iOSCertSecureFileName: 'Xamarin Forms iOS Certificate.p12'
|
||||||
iOSProvisioningSecureFileName: 'Xamarin Forms iOS Provisioning.mobileprovision'
|
iOSProvisioningSecureFileName: 'Xamarin Forms iOS Provisioning.mobileprovision'
|
||||||
buildForVS2017: 'true'
|
buildForVS2017: 'true'
|
||||||
|
@ -269,7 +270,7 @@ stages:
|
||||||
displayName: Sign Phase
|
displayName: Sign Phase
|
||||||
pool:
|
pool:
|
||||||
name: $(signVmImage)
|
name: $(signVmImage)
|
||||||
demands:
|
demands:
|
||||||
msbuild
|
msbuild
|
||||||
steps:
|
steps:
|
||||||
- template: build/steps/build-sign.yml
|
- template: build/steps/build-sign.yml
|
||||||
|
|
54
build.cake
54
build.cake
|
@ -37,18 +37,19 @@ PowerShell:
|
||||||
var target = Argument("target", "Default");
|
var target = Argument("target", "Default");
|
||||||
var configuration = Argument("configuration", "Debug");
|
var configuration = Argument("configuration", "Debug");
|
||||||
var packageVersion = Argument("packageVersion", "");
|
var packageVersion = Argument("packageVersion", "");
|
||||||
var releaseChannelArg = Argument("releaseChannel", "Stable");
|
var releaseChannelArg = Argument("CHANNEL", "Stable");
|
||||||
releaseChannelArg = EnvironmentVariable("releaseChannel") ?? releaseChannelArg;
|
releaseChannelArg = EnvironmentVariable("CHANNEL") ?? releaseChannelArg;
|
||||||
var teamProject = Argument("TeamProject", "");
|
var teamProject = Argument("TeamProject", "");
|
||||||
bool buildForVS2017 = Convert.ToBoolean(Argument("buildForVS2017", "false"));
|
bool buildForVS2017 = Convert.ToBoolean(Argument("buildForVS2017", "false"));
|
||||||
|
|
||||||
string artifactStagingDirectory = Argument("Build_ArtifactStagingDirectory", (string)null) ?? EnvironmentVariable("Build.ArtifactStagingDirectory") ?? EnvironmentVariable("Build_ArtifactStagingDirectory") ?? ".";
|
string artifactStagingDirectory = Argument("Build_ArtifactStagingDirectory", (string)null) ?? EnvironmentVariable("Build.ArtifactStagingDirectory") ?? EnvironmentVariable("Build_ArtifactStagingDirectory") ?? ".";
|
||||||
var ANDROID_HOME = EnvironmentVariable ("ANDROID_HOME") ??
|
var ANDROID_HOME = EnvironmentVariable("ANDROID_HOME") ??
|
||||||
(IsRunningOnWindows () ? "C:\\Program Files (x86)\\Android\\android-sdk\\" : "");
|
(IsRunningOnWindows () ? "C:\\Program Files (x86)\\Android\\android-sdk\\" : "");
|
||||||
|
|
||||||
string[] androidSdkManagerInstalls = new string[0];//new [] { "platforms;android-24", "platforms;android-28"};
|
string[] androidSdkManagerInstalls = new string[0]; //new [] { "platforms;android-24", "platforms;android-28", "platforms;android-29", "build-tools;29.0.3"};
|
||||||
|
|
||||||
|
|
||||||
|
Information ("ANDROID_HOME: {0}", ANDROID_HOME);
|
||||||
Information ("Team Project: {0}", teamProject);
|
Information ("Team Project: {0}", teamProject);
|
||||||
Information ("buildForVS2017: {0}", buildForVS2017);
|
Information ("buildForVS2017: {0}", buildForVS2017);
|
||||||
|
|
||||||
|
@ -110,12 +111,35 @@ if(String.IsNullOrWhiteSpace(monoSDK_macos))
|
||||||
monoSDK_macos = $"https://download.mono-project.com/archive/{monoMajorVersion}/macos-10-universal/MonoFramework-MDK-{monoVersion}.macos10.xamarin.universal.pkg";
|
monoSDK_macos = $"https://download.mono-project.com/archive/{monoMajorVersion}/macos-10-universal/MonoFramework-MDK-{monoVersion}.macos10.xamarin.universal.pkg";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
string androidSDK = IsRunningOnWindows() ? "" : androidSDK_macos;
|
string androidSDK_windows = "";
|
||||||
string monoSDK = IsRunningOnWindows() ? "" : monoSDK_macos;
|
string iOSSDK_windows = "";
|
||||||
string iosSDK = IsRunningOnWindows() ? "" : iOSSDK_macos;
|
string monoSDK_windows = "";
|
||||||
string macSDK = IsRunningOnWindows() ? "" : macSDK_macos;
|
string macSDK_windows = "";
|
||||||
|
|
||||||
|
if(!buildForVS2017)
|
||||||
|
{
|
||||||
|
androidSDK_macos = EnvironmentVariable("ANDROID_SDK_MAC", androidSDK_macos);
|
||||||
|
iOSSDK_macos = EnvironmentVariable("IOS_SDK_MAC", iOSSDK_macos);
|
||||||
|
monoSDK_macos = EnvironmentVariable("MONO_SDK_MAC", monoSDK_macos);
|
||||||
|
macSDK_macos = EnvironmentVariable("MAC_SDK_MAC", macSDK_macos);
|
||||||
|
|
||||||
|
androidSDK_windows = EnvironmentVariable("ANDROID_SDK_WINDOWS", "");
|
||||||
|
iOSSDK_windows = EnvironmentVariable("IOS_SDK_WINDOWS", "");
|
||||||
|
monoSDK_windows = EnvironmentVariable("MONO_SDK_WINDOWS", "");
|
||||||
|
macSDK_windows = EnvironmentVariable("MAC_SDK_WINDOWS", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
string androidSDK = IsRunningOnWindows() ? androidSDK_windows : androidSDK_macos;
|
||||||
|
string monoSDK = IsRunningOnWindows() ? monoSDK_windows : monoSDK_macos;
|
||||||
|
string iosSDK = IsRunningOnWindows() ? iOSSDK_windows : iOSSDK_macos;
|
||||||
|
string macSDK = IsRunningOnWindows() ? macSDK_windows : macSDK_macos;
|
||||||
|
|
||||||
|
|
||||||
|
Information ("androidSDK: {0}", androidSDK);
|
||||||
|
Information ("monoSDK: {0}", monoSDK);
|
||||||
|
Information ("macSDK: {0}", macSDK);
|
||||||
|
Information ("iosSDK: {0}", iosSDK);
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// TASKS
|
// TASKS
|
||||||
|
@ -140,6 +164,8 @@ Task("provision-macsdk")
|
||||||
else
|
else
|
||||||
await Boots (Product.XamarinMac, releaseChannel);
|
await Boots (Product.XamarinMac, releaseChannel);
|
||||||
}
|
}
|
||||||
|
else if(!String.IsNullOrWhiteSpace(macSDK))
|
||||||
|
await Boots(macSDK);
|
||||||
});
|
});
|
||||||
|
|
||||||
Task("provision-iossdk")
|
Task("provision-iossdk")
|
||||||
|
@ -152,6 +178,8 @@ Task("provision-iossdk")
|
||||||
else
|
else
|
||||||
await Boots (Product.XamariniOS, releaseChannel);
|
await Boots (Product.XamariniOS, releaseChannel);
|
||||||
}
|
}
|
||||||
|
else if(!String.IsNullOrWhiteSpace(iosSDK))
|
||||||
|
await Boots(iosSDK);
|
||||||
});
|
});
|
||||||
|
|
||||||
Task("provision-androidsdk")
|
Task("provision-androidsdk")
|
||||||
|
@ -163,10 +191,12 @@ Task("provision-androidsdk")
|
||||||
if(androidSdkManagerInstalls.Length > 0)
|
if(androidSdkManagerInstalls.Length > 0)
|
||||||
{
|
{
|
||||||
var androidSdkSettings = new AndroidSdkManagerToolSettings {
|
var androidSdkSettings = new AndroidSdkManagerToolSettings {
|
||||||
SdkRoot = ANDROID_HOME,
|
|
||||||
SkipVersionCheck = true
|
SkipVersionCheck = true
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if(!String.IsNullOrWhiteSpace(ANDROID_HOME))
|
||||||
|
androidSdkSettings.SdkRoot = ANDROID_HOME;
|
||||||
|
|
||||||
AcceptLicenses (androidSdkSettings);
|
AcceptLicenses (androidSdkSettings);
|
||||||
AndroidSdkManagerUpdateAll (androidSdkSettings);
|
AndroidSdkManagerUpdateAll (androidSdkSettings);
|
||||||
AcceptLicenses (androidSdkSettings);
|
AcceptLicenses (androidSdkSettings);
|
||||||
|
@ -179,6 +209,8 @@ Task("provision-androidsdk")
|
||||||
else
|
else
|
||||||
await Boots (Product.XamarinAndroid, releaseChannel);
|
await Boots (Product.XamarinAndroid, releaseChannel);
|
||||||
}
|
}
|
||||||
|
else if(!String.IsNullOrWhiteSpace(androidSDK))
|
||||||
|
await Boots(androidSDK);
|
||||||
});
|
});
|
||||||
|
|
||||||
Task("provision-monosdk")
|
Task("provision-monosdk")
|
||||||
|
@ -192,6 +224,8 @@ Task("provision-monosdk")
|
||||||
else
|
else
|
||||||
await Boots (Product.Mono, releaseChannel);
|
await Boots (Product.Mono, releaseChannel);
|
||||||
}
|
}
|
||||||
|
else if(!String.IsNullOrWhiteSpace(monoSDK))
|
||||||
|
await Boots(monoSDK);
|
||||||
});
|
});
|
||||||
|
|
||||||
Task("provision")
|
Task("provision")
|
||||||
|
|
|
@ -7,73 +7,72 @@ string androidSDK_windows = "";//"https://download.visualstudio.microsoft.com/do
|
||||||
string iOSSDK_windows = "";
|
string iOSSDK_windows = "";
|
||||||
string macSDK_windows = "";
|
string macSDK_windows = "";
|
||||||
|
|
||||||
string androidSDK_macos = "https://download.visualstudio.microsoft.com/download/pr/8f94ca38-039a-4c9f-a51a-a6cb33c76a8c/aa46188c5f7a2e0c6f2d4bd4dc261604/xamarin.android-10.2.0.100.pkg";
|
string androidSDK_macos = "";//"https://download.visualstudio.microsoft.com/download/pr/8f94ca38-039a-4c9f-a51a-a6cb33c76a8c/aa46188c5f7a2e0c6f2d4bd4dc261604/xamarin.android-10.2.0.100.pkg";
|
||||||
string monoSDK_macos = $"https://download.visualstudio.microsoft.com/download/pr/8f94ca38-039a-4c9f-a51a-a6cb33c76a8c/3a376d8c817ec4d720ecca2d95ceb4c1/monoframework-mdk-6.8.0.123.macos10.xamarin.universal.pkg";
|
string monoSDK_macos = "";//$"https://download.visualstudio.microsoft.com/download/pr/8f94ca38-039a-4c9f-a51a-a6cb33c76a8c/3a376d8c817ec4d720ecca2d95ceb4c1/monoframework-mdk-6.8.0.123.macos10.xamarin.universal.pkg";
|
||||||
string iOSSDK_macos = $"https://download.visualstudio.microsoft.com/download/pr/6e56949e-1beb-4550-abf9-ff404868de82/cf7090bee19401076987a57cd12f11e5/xamarin.ios-13.16.0.11.pkg";
|
string iOSSDK_macos = "";//$"https://download.visualstudio.microsoft.com/download/pr/6e56949e-1beb-4550-abf9-ff404868de82/cf7090bee19401076987a57cd12f11e5/xamarin.ios-13.16.0.11.pkg";
|
||||||
string macSDK_macos = $"https://download.visualstudio.microsoft.com/download/pr/6e56949e-1beb-4550-abf9-ff404868de82/547895e66c0543faccb25933d8691371/xamarin.mac-6.16.0.11.pkg";
|
string macSDK_macos = "";//$"https://download.visualstudio.microsoft.com/download/pr/6e56949e-1beb-4550-abf9-ff404868de82/547895e66c0543faccb25933d8691371/xamarin.mac-6.16.0.11.pkg";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (IsMac)
|
if (IsMac)
|
||||||
{
|
{
|
||||||
// Item (XreItem.Xcode_11_4_0).XcodeSelect ();
|
if (!Directory.Exists ("/Library/Frameworks/Mono.framework/Versions/Current/Commands/"))
|
||||||
|
{
|
||||||
|
Item ("Mono", "6.8.0.123")
|
||||||
|
.Source (_ => "https://download.mono-project.com/archive/6.8.0/macos-10-universal/MonoFramework-MDK-6.8.0.123.macos10.xamarin.universal.pkg");
|
||||||
|
}
|
||||||
|
|
||||||
|
ForceJavaCleanup();
|
||||||
|
Item (XreItem.Java_OpenJDK_1_8_0_25);
|
||||||
|
|
||||||
|
string releaseChannel = Environment.GetEnvironmentVariable ("CHANNEL");
|
||||||
|
|
||||||
|
if(releaseChannel == "Preview")
|
||||||
|
{
|
||||||
|
XamarinChannel("Preview");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
XamarinChannel("Stable");
|
||||||
|
}
|
||||||
|
|
||||||
if(!String.IsNullOrEmpty(monoSDK_macos))
|
if(!String.IsNullOrEmpty(monoSDK_macos))
|
||||||
Item ("Mono", monoVersion)
|
Item ("Mono", monoVersion)
|
||||||
.Source (_ => monoSDK_macos);
|
.Source (_ => monoSDK_macos);
|
||||||
|
|
||||||
if(!String.IsNullOrEmpty(androidSDK_macos))
|
if(!String.IsNullOrEmpty(androidSDK_macos))
|
||||||
Item ("Xamarin.Android", "10.2.0.100")
|
Item ("Xamarin.Android", "10.2.0.100")
|
||||||
.Source (_ => androidSDK_macos);
|
.Source (_ => androidSDK_macos);
|
||||||
|
|
||||||
if(!String.IsNullOrEmpty(iOSSDK_macos))
|
if(!String.IsNullOrEmpty(iOSSDK_macos))
|
||||||
Item ("Xamarin.iOS", "13.16.0.11")
|
Item ("Xamarin.iOS", "13.16.0.11")
|
||||||
.Source (_ => iOSSDK_macos);
|
.Source (_ => iOSSDK_macos);
|
||||||
|
|
||||||
if(!String.IsNullOrEmpty(macSDK_macos))
|
if(!String.IsNullOrEmpty(macSDK_macos))
|
||||||
Item ("Xamarin.Mac", "6.16.0.11")
|
Item ("Xamarin.Mac", "6.16.0.11")
|
||||||
.Source (_ => macSDK_macos);
|
.Source (_ => macSDK_macos);
|
||||||
|
|
||||||
ForceJavaCleanup();
|
|
||||||
|
|
||||||
var dotnetVersion = System.Environment.GetEnvironmentVariable("DOTNET_VERSION");
|
|
||||||
if (!string.IsNullOrEmpty(dotnetVersion))
|
|
||||||
{
|
|
||||||
// VSTS installs into a non-default location. Let's hardcode it here because why not.
|
|
||||||
var vstsBaseInstallPath = Path.Combine (Environment.GetEnvironmentVariable ("HOME"), ".dotnet", "sdk");
|
|
||||||
var vstsInstallPath = Path.Combine (vstsBaseInstallPath, dotnetVersion);
|
|
||||||
var defaultInstallLocation = Path.Combine ("/usr/local/share/dotnet/sdk/", dotnetVersion);
|
|
||||||
if (Directory.Exists (vstsBaseInstallPath) && !Directory.Exists (vstsInstallPath))
|
|
||||||
ln (defaultInstallLocation, vstsInstallPath);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!String.IsNullOrEmpty(androidSDK_windows))
|
if(!String.IsNullOrEmpty(androidSDK_windows))
|
||||||
Item ("Xamarin.Android", "10.0.0.43")
|
Item ("Xamarin.Android", "10.0.0.43")
|
||||||
.Source (_ => androidSDK_windows);
|
.Source (_ => androidSDK_windows);
|
||||||
|
|
||||||
if(!String.IsNullOrEmpty(iOSSDK_windows))
|
if(!String.IsNullOrEmpty(iOSSDK_windows))
|
||||||
Item ("Xamarin.iOS", "13.2.0.42")
|
Item ("Xamarin.iOS", "13.2.0.42")
|
||||||
.Source (_ => iOSSDK_windows);
|
.Source (_ => iOSSDK_windows);
|
||||||
|
|
||||||
if(!String.IsNullOrEmpty(macSDK_windows))
|
if(!String.IsNullOrEmpty(macSDK_windows))
|
||||||
Item ("Xamarin.Mac", "6.2.0.42")
|
Item ("Xamarin.Mac", "6.2.0.42")
|
||||||
.Source (_ => macSDK_windows);
|
.Source (_ => macSDK_windows);
|
||||||
|
|
||||||
if(!String.IsNullOrEmpty(monoSDK_windows))
|
if(!String.IsNullOrEmpty(monoSDK_windows))
|
||||||
Item ("Mono", monoVersion)
|
Item ("Mono", monoVersion)
|
||||||
.Source (_ => monoSDK_windows);
|
.Source (_ => monoSDK_windows);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Item(XreItem.Java_OpenJDK_1_8_0_25);
|
AndroidSdk()
|
||||||
AndroidSdk ().ApiLevel((AndroidApiLevel)24);
|
.ApiLevel((AndroidApiLevel)24)
|
||||||
AndroidSdk ().ApiLevel((AndroidApiLevel)28);
|
.ApiLevel((AndroidApiLevel)28)
|
||||||
AndroidSdk ().ApiLevel((AndroidApiLevel)29);
|
.ApiLevel((AndroidApiLevel)29)
|
||||||
|
.SdkManagerPackage ("build-tools;29.0.3");
|
||||||
void ln (string source, string destination)
|
|
||||||
{
|
|
||||||
Console.WriteLine ($"ln -sf {source} {destination}");
|
|
||||||
if (!Config.DryRun)
|
|
||||||
Exec ("/bin/ln", "-sf", source, destination);
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
var desiredXcode = Environment.GetEnvironmentVariable ("REQUIRED_XCODE");
|
||||||
|
if (string.IsNullOrEmpty (desiredXcode)) {
|
||||||
|
Console.WriteLine ("The environment variable 'REQUIRED_XCODE' must be exported and the value must be a valid value from the 'XreItem' enumeration.");
|
||||||
|
Environment.Exit (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
XreItem xreItem;
|
||||||
|
|
||||||
|
if(desiredXcode == "Latest")
|
||||||
|
xreItem = (XreItem)Enum.GetValues(typeof(XreItem)).Cast<int>().Max();
|
||||||
|
else
|
||||||
|
xreItem = (XreItem) Enum.Parse (typeof (XreItem), desiredXcode);
|
||||||
|
|
||||||
|
var item = Item (xreItem);
|
||||||
|
Console.WriteLine ("InstallPath: {0}", item.Version);
|
||||||
|
item.XcodeSelect ();
|
|
@ -52,7 +52,7 @@ jobs:
|
||||||
inputs:
|
inputs:
|
||||||
targetType: 'filePath'
|
targetType: 'filePath'
|
||||||
filePath: 'build.sh'
|
filePath: 'build.sh'
|
||||||
arguments: --target provision --TeamProject="$(System.TeamProject)" --releaseChannel=$(releaseChannel)
|
arguments: --target provision --TeamProject="$(System.TeamProject)"
|
||||||
|
|
||||||
- task: UseDotNet@2
|
- task: UseDotNet@2
|
||||||
displayName: 'Install .net core $(DOTNET_VERSION)'
|
displayName: 'Install .net core $(DOTNET_VERSION)'
|
||||||
|
|
|
@ -2,12 +2,24 @@ steps:
|
||||||
- checkout: self
|
- checkout: self
|
||||||
clean: true
|
clean: true
|
||||||
|
|
||||||
|
- task: xamops.azdevex.provisionator-task.provisionator@1
|
||||||
|
displayName: 'Provision Xcode'
|
||||||
|
condition: and(ne(variables['REQUIRED_XCODE'], ''), eq(variables['buildForVS2017'], 'false'))
|
||||||
|
inputs:
|
||||||
|
provisioning_script: 'build/provisioning/xcode.csx'
|
||||||
|
|
||||||
- task: xamops.azdevex.provisionator-task.provisionator@1
|
- task: xamops.azdevex.provisionator-task.provisionator@1
|
||||||
displayName: 'Provisionator'
|
displayName: 'Provisionator'
|
||||||
condition: and(eq(variables['provisioning'], 'true'), eq(variables['buildForVS2017'], 'false'))
|
condition: and(eq(variables['provisioning'], 'true'), eq(variables['buildForVS2017'], 'false'))
|
||||||
inputs:
|
inputs:
|
||||||
provisioning_script: $(provisionator.osxPath)
|
provisioning_script: $(provisionator.osxPath)
|
||||||
provisioning_extra_args: $(provisionator.extraArguments)
|
provisioning_extra_args: $(provisionator.extraArguments) --v
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
echo "##vso[task.prependpath]/Library/Frameworks/Mono.framework/Versions/Current/Commands/"
|
||||||
|
echo "##vso[task.prependpath]~/Library/Developer/Xamarin/android-sdk-macosx"
|
||||||
|
displayName: 'Setup SDK Paths'
|
||||||
|
condition: and(ne(variables['osx2019VmPool'], 'Azure Pipelines'), eq(variables['buildForVS2017'], 'false'))
|
||||||
|
|
||||||
- task: Bash@3
|
- task: Bash@3
|
||||||
displayName: 'Cake Provision'
|
displayName: 'Cake Provision'
|
||||||
|
@ -15,7 +27,7 @@ steps:
|
||||||
inputs:
|
inputs:
|
||||||
targetType: 'filePath'
|
targetType: 'filePath'
|
||||||
filePath: 'build.sh'
|
filePath: 'build.sh'
|
||||||
arguments: --target provision --TeamProject="$(System.TeamProject)" --buildForVS2017=$(buildForVS2017) --releaseChannel=$(releaseChannel)
|
arguments: --target provision --TeamProject="$(System.TeamProject)" --buildForVS2017=$(buildForVS2017)
|
||||||
|
|
||||||
- task: UseDotNet@2
|
- task: UseDotNet@2
|
||||||
displayName: 'Install .net core $(DOTNET_VERSION)'
|
displayName: 'Install .net core $(DOTNET_VERSION)'
|
||||||
|
@ -29,7 +41,7 @@ steps:
|
||||||
condition: ne(variables['NUGET_VERSION'], '')
|
condition: ne(variables['NUGET_VERSION'], '')
|
||||||
inputs:
|
inputs:
|
||||||
versionSpec: $(NUGET_VERSION)
|
versionSpec: $(NUGET_VERSION)
|
||||||
|
|
||||||
- task: DownloadBuildArtifacts@0
|
- task: DownloadBuildArtifacts@0
|
||||||
displayName: 'Download build artifact nuget'
|
displayName: 'Download build artifact nuget'
|
||||||
condition: eq(variables['System.TeamProject'], 'DevDiv')
|
condition: eq(variables['System.TeamProject'], 'DevDiv')
|
||||||
|
@ -128,7 +140,7 @@ steps:
|
||||||
Xamarin.Forms.Core.Android.UITests/bin/$(BuildConfiguration)/NUnit3.*
|
Xamarin.Forms.Core.Android.UITests/bin/$(BuildConfiguration)/NUnit3.*
|
||||||
Xamarin.Forms.Core.Android.UITests/bin/$(BuildConfiguration)/Plugin.*
|
Xamarin.Forms.Core.Android.UITests/bin/$(BuildConfiguration)/Plugin.*
|
||||||
Xamarin.Forms.Core.Android.UITests/bin/$(BuildConfiguration)/Xamarin.*
|
Xamarin.Forms.Core.Android.UITests/bin/$(BuildConfiguration)/Xamarin.*
|
||||||
|
|
||||||
TargetFolder: '$(build.artifactstagingdirectory)/android'
|
TargetFolder: '$(build.artifactstagingdirectory)/android'
|
||||||
CleanTargetFolder: true
|
CleanTargetFolder: true
|
||||||
flattenFolders: true
|
flattenFolders: true
|
||||||
|
|
Загрузка…
Ссылка в новой задаче