Skip to content

Open issues: Support targeting iOS and Android with the .NET SDK #11275

@richlander

Description

@richlander

This issue tracks open design topics for targeting iOS and Android and contributes to #11165. They are split into themes.

Note: Apologies in advance -- there are likely some already made design decisions hidden (not intentionally) under some of these questions. Where appropriate, assumptions are provided. If you have a question about these, feel free to ask.

Missing documents

  • We have a workloads overview doc, but not a "Supporting Xamarin scenarios on .NET 5 Overview". There are a set of scenarios and policy questions that apply there that are worth elevating from the design docs. There are a lot of people who might want a summary of our plans, but don't care about the details. This doc would satisfy that.

Installation

Assumption: For .NET 5.0, we will distribute iOS and Android support exclusively via VS [for Windows | for Mac]. We will support more distribute vehicles in .NET 6.0. This is purely a scoping (cost-related) decision.

  • Which installer technology should we use for .NET 5.0?
    • Our long-term plan is .nupkg files. It would be advantageous if we could make this change once, as opposed to two-step.
    • Open question is whether we can design a model for NuGet packages to fit within the VS installation (install, uninstall, repair) and side-by-side (preview vs stable; version n vs n-1; community vs Pro) models.

Composition

  • Can we create multiple workloads for iOS and Android?
    • The answer needs to be "yes".
    • We need to validate that we have a good model in place for components that are shared across workloads. This is mostly a function of a manifest design that enables the scenario, and manifest validation tools to ensure that manifests that represent more advanced scenarios are formed correctly.
  • How will users opt into new iOS and Android versions?
    • We expect them to update their Target Framework, as described @ https://github.com/dotnet/designs/blob/master/accepted/2020/minimum-os-version/minimum-os-version.md.
    • We plan to use the same model for previews and stable versions, at least initially. This means that we will ship stable and preview together in stable software.
    • They will be made available as opt-in software, possibly within an existing SDK feature band (like between 5.0.100 and 5.0.200). No existing projects or builds should change.
    • When a new stable version is made available, the templates will be updated to use the new version (updated TFM).
    • It is unclear what we'll do for templates with preview versions.
  • When would we drop support for an older version of the iOS or Android toolchain?
    • For iOS, we need to decide when we'd drop support for iOS14 (in the latest SDK) after adding support for iOS15.
    • We'd need a similar policy for Android.

Build

  • Which operations are supported in build vs publish?
    • Do we expose a set of publish only properties to enable publish behavior that does not affect regular builds?
    • Are all those publish options available as opt-in for build?
  • What is the model for resources in multi-targeted libraries? We need to define a convention for projects so that they can store their resources (for iOS, Android and Windows) in separate directories, so that the build just works (picks up and processes each of the resource separately, per multi-targeted build).
  • How do users specify that they want to use Mono for build or publish?
    • This is presumably not needed to target iOS and Android, but would be useful for console apps (at least for testing)?
    • Do we want to expose a way to use CoreCLR instead of Mono, in some scenarios, like to target macOS?
    • There are a few options: CLI argument, msbuild property, extend RID graph for Mono.

Run

  • What is the behavior for dotnet run for Xamarin workloads? We'll need to define the same thing for wasm.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions