Files
AppKit/samples/AppKit.Sample.WinUI/Program.cs
T
James MaesandClaude Opus 5.5 83f028f188 AppKit: shared foundation packages for KofTwentyTwo Windows apps
Extracts the app-agnostic plumbing proven in gclo 1.0 into four packages that
every future KofTwentyTwo Windows app builds on:

- KofTwentyTwo.AppKit: AppInfo identity, AppPaths, BuildVersion, crash-safe
  FileActivityLog with retention, LogTail, atomic SettingsStore<T> with
  ShellSettings, Credential Manager secret vault, IUserPrompter seam
- KofTwentyTwo.AppKit.Updates: Velopack startup hook, never-throwing GitHub
  Releases update service with stable/dev channel selection, and the shared
  "check for updates" flow (UpdateCoordinator)
- KofTwentyTwo.AppKit.WinUI / .Wpf: code-built splash overlay, About, live log
  viewer, crash net, theme and window helpers, dialog adapters

The two framework-free packages are held to 100% line coverage (109 tests).
WinUI and WPF sample apps exercise every service and are driven end to end by
12 FlaUI tests. BrandTool generates the vector mark and multi-size .ico.

CI mirrors gclo's gates (zero warnings, coverage, UI tests, format, CodeQL,
dependency review); the release workflow packs, checksums, attests build
provenance, publishes a GitHub release, and pushes to nuget.org.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 07:10:42 -05:00

26 lines
763 B
C#

using KofTwentyTwo.AppKit.Updates;
using Microsoft.UI.Dispatching;
namespace AppKit.Sample.WinUI;
/// <summary>
/// Custom entry point (DISABLE_XAML_GENERATED_MAIN) so Velopack handles its install,
/// update, and uninstall hooks before any UI exists.
/// </summary>
public static class Program
{
[STAThread]
private static void Main()
{
VelopackStartup.Run();
// The remainder mirrors the XAML-generated Main.
WinRT.ComWrappersSupport.InitializeComWrappers();
Microsoft.UI.Xaml.Application.Start(callbackParams =>
{
SynchronizationContext.SetSynchronizationContext(new DispatcherQueueSynchronizationContext(DispatcherQueue.GetForCurrentThread()));
_ = new App();
});
}
}