* [build] Update to .NET 6 Preview 4
Brings in Preview 4 updates for the Android, MaciOS, and .NET SDks.
Initial build attempts were failing with hundreds of errors:
D:\a\1\s\src\Essentials\src\Connectivity\Connectivity.ios.tvos.macos.cs(12,70): error BI1234: 'CTCellularData' is obsolete: 'Starting with ios14.0 Use the 'CallKit' API instead.' [D:\a\1\s\src\Essentials\src\Essentials-net6.csproj]
D:\a\1\s\src\Essentials\src\Compass\Compass.ios.cs(31,6): error CA1416: This call site is reachable on: 'iOS' 13.6 and later. 'CLLocationManager.HeadingFilter' is only supported on: 'macos' 11.0 and later. [D:\a\1\s\src\Essentials\src\Essentials-net6.csproj]
D:\a\1\s\src\Core\src\Platform\MaciOS\ColorExtensions.cs(64,13): error CA1416: This call site is reachable on: 'MacCatalyst' 13.5 and later. 'UIColor.SystemBackgroundColor.get' is supported on: 'ios' 13.0 and later. [D:\a\1\s\src\Core\src\Core-net6.csproj]
CSC : error AD0001: Analyzer 'Microsoft.NetCore.Analyzers.InteropServices.PlatformCompatibilityAnalyzer' threw an exception of type 'System.NullReferenceException' with message 'Object reference not set to an instance of an object.'. [D:\a\1\s\src\BlazorWebView\src\core\Microsoft.AspNetCore.Components.WebView.Maui.csproj]
The [platform compatibility analyzer][0] has been disabled for now, and
it can be enabled locally to work through the few hundred errors in
future PRs.
Once these issues were sorted, there were a handful of other breaks
that I've attempted to fix:
D:\a\1\s\src\Essentials\src\AssemblyInfo\AssemblyInfo.ios.tvos.watchos.macos.cs(3,12): error CS0618: 'LinkerSafeAttribute' is obsolete: 'Replace with '[assembly: System.Reflection.AssemblyMetadata ("IsTrimmable", "True")]'.' [D:\a\1\s\src\Essentials\src\Essentials-net6.csproj]
D:\a\1\s\src\Compatibility\Core\src\iOS\Renderers\TabbedRenderer.cs(422,33): error CS1503: Argument 1: cannot convert from 'UIKit.UIStringAttributes' to 'UIKit.UITextAttributes' [D:\a\1\s\src\Compatibility\Core\src\Compatibility-net6.csproj]
D:\a\1\s\src\Compatibility\Core\src\iOS\CollectionView\CarouselViewController.cs(106,23): error CS0114: 'CarouselViewController.DraggingStarted(UIScrollView)' hides inherited member 'UICollectionViewController.DraggingStarted(UIScrollView)'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword. [ D:\a\1\s\src\Compatibility\Core\src\Compatibility-net6.csproj]
D:\a\1\s\src\Compatibility\Core\src\iOS\CollectionView\CarouselViewController.cs(117,23): error CS0114: 'CarouselViewController.DraggingEnded(UIScrollView, bool)' hides inherited member 'UICollectionViewController.DraggingEnded(UIScrollView, bool)'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword. [ D:\a\1\s\src\Compatibility\Core\src\Compatibility-net6.csproj]
Finally it seems JDK 14 was being preferred on macOS machines in CI, so
I've set `$(JI_JAVA_HOME)` to the [pre-installed JDK 11][1].
[0]: https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1416
[1]: https://github.com/actions/virtual-environments/blob/macOS-10.15/20210419.2/images/macos/macos-10.15-Readme.md#java
* Apply feedback, bump p4 bits, provision xcode 12.5 rc
* Use Big Sur pool, clean up duplicate variable declaration
* Revert "Use Big Sur pool, clean up duplicate variable declaration"
This reverts commit b91482e10c.
* Disable linker for ios and catalyst
Co-authored-by: Rui Marinho <me@ruimarinho.net>
CI is currently downloading/installing .NET 6 twice, once via
`UseDotNet` in `.yml` and again via `DotNet.csproj`.
I don't think we actually need to do call `UseDotNet`, I was able to
run `eng\package.ps1` without .NET 6 installed.
* WinUI3 Desktop Head
* - Fix up Compatibility Proiect
* - fix conditionals
* - temp remove windows pack restriction
* - namespace fixes
* - winui
* - add WinUI to SLN
* - change handlers to windows
* - fixes
* - additional handlers
* - essentials fixes
* - msbuild
* - add more
* - fix comment
* - transitive
* - check for windows
* - windows conditional
* - vs path
* - restore;build
* - remove target
* - build first
* -remove
* Building again!
* - add global.json file
* - set MauiPlatforms
* - remove things
* Make it at least run
* - split out restore/build
* - magic?
* - 5
* Put stuff here and try more
* - add restore
* - fix essentials
* Get it closer
* Go simple or go home
* diffs
* - net5 checks
* - winui fixes
* - files
* - preview versions
* - maybe?
* - add code back in
* Update package.ps1
Fix usage of $dotnet, moved around if and try-finally
* Whoops
* Update package.ps1
Add /restore flag, fix double //
* - fixed pri runtime paths
* - copy xbf files around
* - fix
* - fix path
* Fonts
* - windows only nugets
* - fix targets
* Fonts now working
* ws
* //TODO WINUI3
* More mappings
* - builds
* - remove props
* - props
* Button has all the things done so far
* - layout basics
* Don't reference the build tasks, then all is well
* - shims
* - fix shim measuring
* - fix resource loading
* Uncomment the things in Forms
* - tweak measure
* update
* Remove old code
* Revert "Remove old code"
This reverts commit 2b63ebab0e.
* Add image for goodness
* - measure
* - always build winui for core
* - add created handlers
* - add mappers
* Build windows and macos now
* Always pack
* - call arrange on the children again
* - fix
* - embrace it
* - fix condition
* - maybe
* This might work
* that
* - fix
* - fix
* - no more
* Use the correct path to the image
* No more SimpleApp
* This actually works...
Co-authored-by: Matthew Leibowitz <mattleibow@live.com>
Co-authored-by: Jonathan Peppers <jonathan.peppers@microsoft.com>
* Make sure to push Xamarin.UITests
* [Build] Copy Controls.CustomAttributes
* [Build] Remove extra references on UITests projects
* [Build] Make sure to just publish as artifacts the Microsoft.Maui nupkg
* Try fix ios build
* Fix uitest projoject
Based on: https://github.com/jonathanpeppers/maui-workload
This adds a new `DotNet.csproj` that provisions a local .NET 6 install
into `.\bin\dotnet\`.
Next, it uses versions defined in `eng/Versions.props` as required by
.NET version bumping infrastructure (called Darc):
<Project>
<PropertyGroup>
<MicrosoftNETSdkPackageVersion>6.0.100-preview.2.21155.3</MicrosoftNETSdkPackageVersion>
<MicrosoftAndroidSdkPackageVersion>11.0.200-ci.main.148</MicrosoftAndroidSdkPackageVersion>
<MicrosoftMacCatalystSdkPackageVersion>14.3.100-ci.main.337</MicrosoftMacCatalystSdkPackageVersion>
<MicrosoftiOSSdkPackageVersion>14.4.100-ci.main.1192</MicrosoftiOSSdkPackageVersion>
</PropertyGroup>
</Project>
Next, we can use these versions to consume NuGet packages for workloads:
<PackageDownload Include="Microsoft.NET.Workload.Android" Version="[$(MicrosoftAndroidSdkPackageVersion)]" />
<PackageDownload Include="Microsoft.NET.Workload.MacCatalyst" Version="[$(MicrosoftMacCatalystSdkPackageVersion)]" />
<PackageDownload Include="Microsoft.NET.Workload.iOS" Version="[$(MicrosoftiOSSdkPackageVersion)]" />
Then the other packs they depend on:
<PackageDownload Include="Microsoft.Android.Ref" Version="[$(MicrosoftAndroidSdkPackageVersion)]" />
<PackageDownload Include="Microsoft.Android.Sdk.win-x64" Version="[$(MicrosoftAndroidSdkPackageVersion)]" Condition="$([MSBuild]::IsOSPlatform('windows'))" />
<PackageDownload Include="Microsoft.Android.Sdk.osx-x64" Version="[$(MicrosoftAndroidSdkPackageVersion)]" Condition="$([MSBuild]::IsOSPlatform('osx'))" />
<PackageDownload Include="Microsoft.Android.Sdk.BundleTool" Version="[$(MicrosoftAndroidSdkPackageVersion)]" />
<PackageDownload Include="Microsoft.MacCatalyst.Ref" Version="[$(MicrosoftMacCatalystSdkPackageVersion)]" />
<PackageDownload Include="Microsoft.MacCatalyst.Sdk" Version="[$(MicrosoftMacCatalystSdkPackageVersion)]" />
<PackageDownload Include="Microsoft.iOS.Ref" Version="[$(MicrosoftiOSSdkPackageVersion)]" />
<PackageDownload Include="Microsoft.iOS.Sdk" Version="[$(MicrosoftiOSSdkPackageVersion)]" />
After doing this, I can build .NET 6 projects with:
> .\bin\dotnet\dotnet.exe build .\src\Controls\samples\Controls.Sample.SingleProject\Maui.Controls.Sample.SingleProject.csproj
I can even build MacCatalyst apps on Windows!
I updated `build.cake` so the following builds for .NET 6 and opens
Visual Studio:
> dotnet cake --target=VS-NET6
This is the equivalent of these commands if you want to run them
individually:
dotnet build src\DotNet\DotNet.csproj
.\bin\dotnet\dotnet build Microsoft.Maui.BuildTasks-net6.sln
.\bin\dotnet\dotnet build Microsoft.Maui-net6.sln
.\eng\dogfood.ps1
~~ Other Changes ~~
* Rework CI setup to use .\bin\dotnet\dotnet
* We don't need boots or URLs anymore
* Fixed `MSBuildTests` to use .\bin\dotnet\dotnet if found and fall
back to the system `dotnet`
* Moved `.nuspec\package.ps1` to `eng\package.ps1`
~~ What problems does this solve? ~~
* MacCatalyst builds on Windows! (offline build that checks C#)
* Building Maui always gets you the right things installed.
* Maui becoming a .NET workload will be a breeze. We can copy files
into `.\bin\dotnet\sdk-manifests` and `.\bin\dotnet\packs`.
* We can use Darc to bump dependencies within .NET:
https://github.com/dotnet/arcade/blob/main/Documentation/Darc.md
* Try build ControlGallery
Try build android controlgallery new path
Fix
Fix android uitests reference
Don't build iOS for now
* - only set content description for UI Test build
* Add Environment.Build.props back
* Update boots version
* Fix LinkDescription.xml
Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
6be8a1c1 ignored some failing tests, but it seems like we should have
fixed and modernized the tests instead.
Some parts of these tests seem out of date:
* We don't need to build long-form .NET framework projects.
* We should generate/build `net6.0` projects instead of `netstandard2`.
* We should run `dotnet build` instead of MSBuild. We don't need
`Microsoft.Build.Locator` anymore.
* `RestoreIfNeeded()` is no longer needed because `dotnet build`
implicitly restores.
* I fixed the `DesignTimeBuild()` test that can just use the `Compile`
target now.
* The `sdkStyle` parameter is no longer needed anymore for any of
these tests, so we have 1/2 as many tests now.
I mostly deleted code here.
~~ Other changes ~~
Some other stuff was needed for this test to work:
* Move usage of dotnet-install.ps1|sh to yaml
* We now install .NET 6 for the `Build Windows` stage.
* Disable code coverage in child processes
* Add the `msbuild.binlog` file as a test attachment.
Co-authored-by: Rui Marinho <me@ruimarinho.net>
* Add Mac Catalyst to the CI
* pack on mac just in case
* test
* Start adding catalyst support
* first maccatalyst frameworks to testthe waters
* oksy
* this for future
* revert
* revert
* Include maccatalyst for single project
* Treat Catalyst mostly like iOS for now
* Don't try fallback path for catalyst since API isn't there
* Xib not needed anymore
* Include iOS bits for catalyst on the compat project
* Fix linebreak mode to not use deprecated API (for catalyst too)
* Fix text/string attribute usage for catalyst/mac
* Fixed string attribute usage for catalyst/mac
* new toys
* Fix Delegate cast for catalyst
* Fix single project includes for catalyst
* Remove scene delegate for now
* Add catalyst specific assets for single project
* fix things
* Stop building catalyst on windows
* hax
* was bad hax
* Use UIStringAttributes for iOS and Catalyst both
* Do it right
* Revert "Use UIStringAttributes for iOS and Catalyst both"
This reverts commit 0d4b90aecb.
* Fix the build tasks
Co-authored-by: Matthew Leibowitz <mattleibow@live.com>
Co-authored-by: Jonathan Peppers <jonathan.peppers@microsoft.com>
* [Build] Remove old steps
* Fix reference of unit tests cspro
* Enable xaml unit tests
* [Build] Add build of xaml unit tests
* Try fix targets
* Fix Forms naming
* More naming fixes
* Revert versions
* Remove .Core
* More .Core removals and Fix Platform references
* Add RootNamespace to Build.Tasks
* Fix more Xamarin.Forms old usage
* Fix dll on build.targets
* Fix _XFBuildTasksLocation
* More fixes to _MauiBuildTasksLocation
* More fixes _MauiBuildTasksLocation
* Fix _MauiBuildTasksLocation
* remove debug info
* Remove issues for now
* Rename maps namespace
* Fix Assembly tests
* Fix more targets
* More map rename fixes
* Fix xaml reference on unit tests
* Fix MauiXamlCValidateOnly naming
* More MauiXamlCValidateOnly
* Add xaml page to sample
* Fix namespace on sample page
* oh, yeah
* Fix sample references
* Try run on release the xaml unit tests
* Try continueOnerror
* Update build-windows.yml
* added via the directory props
* ws
* We mights need this
* I think I did this
* This can be reused
* 🤦♀️
* this as well after the peppers PR
* Fix some bad renames
* i see
* Fix merge
* Fix sample
* Remove FromSource
* Add the packages
* this
* Yaysies!
* Fix all the non-msbuild tests
* Adding things back and gallery
* this
* Build the tasks first
* Got the Android control gallery running
* remove from the sln
* Xaml pages
* Reference XAML
* this
* better XAML
* this
* restore
* maybe
* include correctly
* symbols
* Try set the versions
* remove unused steps templates
versions things more cool yay
* Updating code to pre-fix xaml
* Now we do the targets
* Revert "Now we do the targets"
This reverts commit 2ce4984d48a00c1eab8037cdd8a35690feb0038e.
* maybe this?
* We have to set the variables
* Add the control gallery and xaml unit tests
* This might help
* xaml page
* Try use matrix for build/release macOS
* Fix variables
* Fix end of script
* use matrix for build on windows
* Fix Artifact upload at same time
Co-authored-by: Stephane Delcroix <stephane@delcroix.org>
Co-authored-by: Matthew Leibowitz <mattleibow@live.com>
* Add some common nupkg properties to everything
* Remove project property refactored into directory build props
* Remove properties now in common dir build props
* Add net6 version of project
* More net6
* Only target netstandard2.0 now
net4* is no longer needed as there's no more vs2017 support
* Clean up strong naming a bit
* Update dependencies
* Package all the things for build tasks in the -t:Pack
* Add more net6 project versions
* Clean up whitespace
* Needed moar NET6
* Name fixes
* Added meta project for packaging and package script
* Remove assembly copyright (now duplicates)
* Add resizetizer, add params to package script
* Disable strong naming for now
We need to re-evaluate how we do this a bit, we should probably use the `al` tool to do it now, and I believe the StrongNamer package may not work anymore, but we can do the same thing in a custom target at a later date.
* Fix path to tasks assembly
* don't build ios on android specific project
* Finish rename of toolbox file
* - add cake
* - fix cake extras
* fix the copy for the IDE
* Try packing on CI
* versions baby!
* build release
* this should od it
* this
* oops
* Move to an empty folder
* Use new symbol formats
* no symbols for build tasks and the head
* symbol all the things
* Compiler error with commented out code XD
* oopsies
* only build transitive
* Try this
* log everything
* This might work
* REPORTS
* previews
* needed
* versions
* duh
* Update build.cake
Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
Co-authored-by: Matthew Leibowitz <mattleibow@live.com>
Bump to Microsoft.Android.Sdk 11.0.200.118. This is needed for a fix
to support net6.0-android NuGet packages.
We have new AndroidX packages:
<PackageReference Include="Xamarin.AndroidX.AppCompat" Version="1.2.0.7-net6preview01" />
<PackageReference Include="Xamarin.Google.Android.Material" Version="1.3.0.1-net6preview01" />
These are available on the same feed we have the iOS/Android runtime
packs for .NET 6:
<add key="xamarin" value="https://pkgs.dev.azure.com/azure-public/vside/_packaging/xamarin-impl/nuget/v3/index.json" />
These packs support both Xamarin.Android & .NET 6 because they contain
both sets of assemblies, such as:
* `lib/monoandroid90/Xamarin.AndroidX.*.dll`
* `lib/net6.0-android/Xamarin.AndroidX.*.dll`
To consolidate our AndroidX package versions, we can a new MSBuild
pattern for declaring NuGet package versions that
dotnet/project-system uses:
accdee5926/Directory.Build.targets (L3)accdee5926/build/import/Packages.targets
1. List packages in `.csproj` files as they are needed. But leave off
`%(Version)` completely.
2. A `Directory.Build.targets` somewhere does: `<PackageReference
Update="YourPackage" Version="1.0.0" />` This allows you to put the
version in one place, and you don't need to check platforms or
anything, because the `Update` doesn't do anything if the `.csproj`
file isn't using that package.
We could do this pattern across the whole Maui repo, but I just set
this up for the `AndroidX` and `Microsoft.Extensions` packages for
now.
~~ .NET 6 Linker ~~
Since we are using .NET 6 AndroidX packages, the following workaround
is no longer needed, so I removed them:
<PropertyGroup>
<_DotNetPackageVersion>6.0.0-preview.2.21110.7</_DotNetPackageVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.CodeDom" Version="$(_DotNetPackageVersion)" />
<PackageReference Include="System.Diagnostics.EventLog" Version="$(_DotNetPackageVersion)" />
<PackageReference Include="System.Diagnostics.PerformanceCounter" Version="$(_DotNetPackageVersion)" />
<PackageReference Include="System.IO.Ports" Version="$(_DotNetPackageVersion)" />
<PackageReference Include="System.Security.Permissions" Version="$(_DotNetPackageVersion)" />
<PackageReference Include="System.Threading.AccessControl" Version="$(_DotNetPackageVersion)" />
</ItemGroup>
Previously, the AndroidX packages were Xamarin.Android libraries, and
they would cause the linker to crash in `Release` builds:
ILLink : error IL1012: IL Linker has encountered an unexpected error. Please report the issue at https://github.com/mono/linker/issues
Fatal error in IL Linker
Unhandled exception. Mono.Linker.InternalErrorException: Step 'LoadReferencesStep' failed when processing assembly 'Maui.Controls.Sample.SingleProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
---> Mono.Linker.LinkerFatalErrorException: ILLink: error IL1010: Assembly 'Maui.Controls.Sample.SingleProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' cannot be loaded due to failure in processing 'Microsoft.Maui, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' reference
---> Mono.Linker.LinkerFatalErrorException: ILLink: error IL1010: Assembly 'Microsoft.Maui, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' cannot be loaded due to failure in processing 'Xamarin.AndroidX.AppCompat, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' reference
---> Mono.Linker.LinkerFatalErrorException: ILLink: error IL1010: Assembly 'Xamarin.AndroidX.AppCompat, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' cannot be loaded due to failure in processing 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' reference
---> Mono.Linker.LinkerFatalErrorException: ILLink: error IL1009: Assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' reference 'System.Security.Permissions, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' could not be resolved
---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'System.Security.Permissions, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
---> System.IO.FileNotFoundException: Unable to find 'System.Security.Permissions.dll' or 'System.Security.Permissions.exe' file
~~ AndroidX obsoleted FragmentStatePagerAdapter ~~
Initially I got several warnings (that became errors), such as:
error CS0618: 'FragmentStatePagerAdapter' is obsolete...
I don't know what should be done here, so I ignored the warning in the
two files that have a problem for now:
#pragma warning disable 618
* Update cake and yaml
* Reset simulator isn't working
* [Build] Remove restore from yaml
* [Build]Update the restore on cake
* [Build] Build android gallery uitests from cake