Guidelines for implementing a new WinUI/WinRT API

Implementing a new WinUI/WinRT API generally requires:

  • Finding the generated API source file (e.g. src\Uno.UWP\Generated\3.0.0.0\Windows.Data.Pdf\PdfDocument.cs).
  • Copying the file to the non-generated location (e.g. src\Uno.UWP\Data.Pdf\PdfDocument.cs).
  • Keeping only the members that need to be implemented in the non-generated location.
  • Removing (completely or partially depending on the platforms) the implemented members in the generated file.

If your API implementation is for a specific platform:

  • You can use a platform suffix in the source file name (PdfDocument.Android.cs) so the file is built only for this platform.

  • Remove the parts that relate to your platform in the NotImplemented attribute:

    #if __ANDROID__ || __IOS__ || IS_UNIT_TESTS || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || __MACOS__
    [global::Uno.NotImplemented("__ANDROID__", "__IOS__", "IS_UNIT_TESTS", "__WASM__", "__SKIA__", "__NETSTD_REFERENCE__", "__MACOS__")]
    public  global::Windows.Data.Pdf.PdfPageDimensions Dimensions
    {
    #endif
    

    becomes

    #if false || __IOS__ || IS_UNIT_TESTS || __WASM__ || __SKIA__ || __NETSTD_REFERENCE__ || __MACOS__
    [global::Uno.NotImplemented("__IOS__", "IS_UNIT_TESTS", "__WASM__", "__SKIA__", "__NETSTD_REFERENCE__", "__MACOS__")]
    public  global::Windows.Data.Pdf.PdfPageDimensions Dimensions
    {
    #endif
    

    when implemented for Android only.

When implementing a feature, try to place as much code as possible in a common source file (a non-suffixed file), so that it is reused across platforms. Make sure to follow partial classes coding guidelines.

Note that the generated files may be overridden at any point, and placing custom code (aside from changing the NotImplemented values) will be overwritten.