* [dotnet] Don't run the linker nor install_name_tool when running in offline mode on Windows.
When running in offline mode on Windows, we only want to compile the C# code
(to make sure it compiles). We do this by adding an '$(IsMacEnabled)' == 'true'
checks to code that we don't want to run in offline mode.
The linker fails like this, and the easiest fix is to just disable it:
> dotnet build .\HelloiOS\HelloiOS.csproj -p:IsMacEnabled=false
Microsoft (R) Build Engine version 16.8.0-preview-20475-05+aed5e7ed0 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.
Determining projects to restore...
Restored C:\src\net5-samples\HelloiOS\HelloiOS.csproj (in 6.28 sec).
You are using a preview version of .NET. See: https://aka.ms/dotnet-core-preview
HelloiOS -> C:\src\net5-samples\HelloiOS\bin\Debug\net5.0-ios\ios-x64\HelloiOS.dll
ILLink : error IL1012: IL Linker has encountered an unexpected error. Please report the issue at https://github.com/mono/linker/issues [C:\src\net5-samples\HelloiOS\HelloiOS.csproj]
Fatal error in IL Linker
Unhandled exception. System.DllNotFoundException: Unable to load DLL '/usr/lib/libSystem.dylib' or one of its dependencies: The specified module could not be found. (0x8007007E)
at Xamarin.Bundler.Target.realpath(String path, IntPtr zero)
at Xamarin.Bundler.Target.GetRealPath(String path)
at Cache.set_Location(String value)
at Xamarin.Linker.LinkerConfiguration..ctor(String linker_file)
at Xamarin.Linker.LinkerConfiguration.GetInstance(LinkContext context)
at Xamarin.Linker.ConfigurationAwareStep.get_Configuration()
at Xamarin.SetupStep.Process()
at Mono.Linker.Steps.BaseStep.Process(LinkContext context)
at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
at Mono.Linker.Pipeline.Process(LinkContext context)
at Mono.Linker.Driver.Run(ILogger customLogger)
at Mono.Linker.Driver.Main(String[] args)
And disables install_name_tool too:
> dotnet build .\HelloiOS\HelloiOS.csproj -p:IsMacEnabled=false -p:PublishTrimmed=false
Xamarin.Shared.Sdk.targets(391,3): error MSB3073: The command "xcrun install_name_tool -id @executable_path/libSystem.IO.Compression.Native.dylib obj\Debug\net5.0-ios\ios-x64\nativelibraries/libSystem.IO.Compression.Native.dylib" exited with code 9009.
* Set PublishTrimmed after importing our existing Xamarin.iOS/Xamarin.Mac targets.
Because setting PublishTrimmed depends on knowing the value of IsMacEnabled,
which is set in our existing Xamarin.iOS/Xamarin.Mac targets.
Also remove the comment about having to set PublishTrimmed before including
Microsoft.NET.Sdk, because that's not accurate anymore (see
2939a6fdbc).
* [tests] Fix sample tests to take into account when a platform has been disabled.
* [devops] The INCLUDE_MAC/INCLUDE_IOS variables might not exist.
Co-authored-by: Rolf Bjarne Kvinge <rolf@xamarin.com>
note: this is not a breaking change (even if it looks like one, even in
API diff) since there is a `[NoMac]` in `d16-8-xm` that was removed (and
never released for XM) in `xcode12`.
Adding a test to check a specific error code to see if the strings in other locales are translated. This test will be added to the Localization wiki in Maccore accessible to the xamarin-macios team: https://github.com/xamarin/maccore/wiki/Localization
* Add a `Microsoft.NET.Workload.<platform>` directory which contains
`WorkloadManifest.json` and `WorkloadManifest.targets` required for the
workload resolver.
* For testing, this directory is installed into our local dotnet directory
(`dotnet/sdk-manifests/5.0.100/Microsoft.NET.Workload.<platform>`).
* Convert `Microsoft.<platform>.Sdk` to an SDK workload pack.
* Replace `Sdk.props` with `AutoImport.props`, and include the default
inclusion itemgroups definitions from here.
* Split default inclusion logic in two:
* The itemgroups that import the default items has been moved into a props
file and included from `AutoImport.props`. They're also conditioned
based on the TargetPlatformIdentifier.
* The rest of the logic (to enable default inclusion) is left in the
.targets file.
* Merge several .props files into .targets files to follow the convention that
.props files should be loaded before the main csproj, and .targets files
after (these .props files were loaded after, so to avoid confusion the
simplest solution was to merge their contents into the applicable .targets
file and delete the .props files).
* Bundle the workload (WorkloadManifest.json/WorklooadManifest.targets) and
the sdk + ref packs into an installable macOS pkg (and upload these
packages).
* Updates tests to import `Microsoft.NET.Sdk` instead of
`Microsoft.<platform>.Sdk` (this also required a Touch.Unit bump).
* Install the sdk + ref packs into the local dotnet directory (using symlinks
to our on-disk nuget representation). This is required for local testing.
* Add some documentation.
* Finally fix a couple of bugs that these changes uncovered.
Ref: https://github.com/xamarin/xamarin-android/pull/5195
* [msbuild] Make the default value for IsMacEnabled property dependent upon the OS.
Also make it overridable by only setting it if it's not already set.
* Use $([MSBuild]::IsOSPlatform('windows')) instead of $(OS)
The $(OS) value isn't standardized, so there's no sane check we can do against
it.
The template takes each platform as input, and adds a TargetPlatformIdentifier condition
to the item groups.
This also means removing Xamarin.Shared.Sdk.DefaultItems.props, and put all the generated
logic into Microsoft.<platform>.Sdk.DefaultItems.props.
We can't use an identical default items file for all four platforms, because the
file is loaded once for each platform, and if the file is identical it means it'll
get repeated four times (and everything included by default will be included four
times, ending up with build errors).