How Uno works on macOS

This article explores macOS-specific details of Uno's internals, with a focus on information that's useful for contributors to Uno. For an overview of how Uno works on all platforms, see this article.

UIElement inherits from NSView

UIElement in Uno is a native view on macOS, inheriting from the general NSView type. To elaborate, UIElement's base classes are the following: AppKit.NSViewUno.UI.Controls.BindableNSViewWindows.UI.Xaml.UIElement

Recall that UIElement implements DependencyObect as an interface in Uno.

Similarities with iOS

Since the iOS and macOS UI frameworks bear substantial resemblances, the same or very similar code can frequently be used to do the same thing on both platforms, which Uno takes advantage of where possible. Partial class definitions that are shared between iOS and macOS can be identified by the *.iOSmacOS.cs suffix. Since Uno's iOS support predates its macOS support, in some cases internal methods have been added to make macOS' API appear still closer to that of iOS and make code reuse easier, such as the SizeThatFits() method or the SetNeedsLayout() extension method.