Skip to content

Apple.Extras

AvantiPoint.Apple.Extras

Secondary MSBuild SDK for native .NET iOS, MAUI, and Uno heads that host Apple companion projects. Baseline — not .

Add the SDK version to global.json and use ordinary ProjectReference items:

<Project Sdk="Microsoft.NET.Sdk;AvantiPoint.Apple.Extras">
<PropertyGroup>
<TargetFramework>net10.0-ios</TargetFramework>
<OutputType>Exe</OutputType>
<PublishAot>true</PublishAot>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="../MyApp.Watch/MyApp.Watch.csproj" />
<ProjectReference Include="../MyApp.Shared/MyApp.Shared.csproj" />
</ItemGroup>
</Project>
  • Uno: keep Uno.Sdk first.
  • MAUI: retain UseMaui and SingleProject.

Extras classifies companion references before restore, excludes Apple app projects on Android, and preserves ordinary shared-library references. On iOS it builds and embeds Watch and App Clip apps. App Clips must target net10.0-ios; native iOS, MAUI, and Uno parent simulator paths are verified.

Widget projects targeting net10.0-ios build through ordinary references into Microsoft’s native extension embedding/signing pipeline; C# widget configuration/timeline/UI verified with a native iOS host; MAUI/Uno Widget simulator acceptance also passes. Native macOS heads can reference net10.0-macos widgets (embed under Contents/PlugIns); C# AppKit head launches under Native AOT, but macOS system Widget execution is still unverified.

Extras supplies build integration only. The iOS head keeps Microsoft’s Foundation/UIKit bindings; Extras does not inject a placeholder WidgetKit assembly or expose simulated ActivityKit/WidgetCenter operations. Real phone-side WidgetKit/ActivityKit integration remains future work.

Acceptance toolchain called out in the Apple.Sdk README: Xcode 26.6 with .NET 10.0.302 / workload 10.0.302.0; package versions 26.6.x. Physical-device checks remain outstanding. Child restore must preserve shared-library target frameworks.

Extras records Watch/App Clip/Widget bundles it embeds. Removing or renaming references prunes obsolete recorded products before signing; unrelated extensions stay untouched. Watch copies replace the previous child directory. Run Clean when adopting tracking over an older output tree. Output-directory changes never delete the previous directory.