diff --git a/samples/UnoSample/README.md b/samples/UnoSample/README.md index 09e409e3..2dc09858 100644 --- a/samples/UnoSample/README.md +++ b/samples/UnoSample/README.md @@ -5,44 +5,14 @@ This solution contains an Uno Desktop application that targets both Windows and ## Prerequisites This solution will publish the application out to the Velopack Flow service. To test the full publish you will need to create a [Velopack Flow account](https://app.velopack.io). -The solution assumes that you have downloaded and installed the Velopack CLI (`vpk`) global tool. This tool can be installed by running `dotnet tool install -g vpk`. You will then need ot authenticate with the Velopack Flow servie by running `vpk login` and signing in with your Velopack Flow account. +The solution assumes that you have downloaded and installed the Velopack CLI (`vpk`) global tool. This tool can be installed by running `dotnet tool install -g vpk`. +You will need to authenticate with the Velopack Flow service by running `vpk login` and signing in with your Velopack Flow account. ## The Application -Inside of `Presentation` the `MainPage.xaml` contains the main UI for viewing the current version, checking for updates, and applying the latest update. +`Presentation/MainPage.xaml` contains the main UI for viewing the current version, checking for updates, and applying the latest update. The `MainViewModel.cs` contains the logic for checking for updates and applying them. The key piece of the setup is the initialization of the `UpdateManager` with the `VelopackFlowUpdateSource` which provides the interaction with the Velopack Flow service. -The `Main` methods in the `Platforms\Desktop\Program.cs` has been updated to contain the [Velopack application startup hook](https://docs.velopack.io/integrating/overview). - -The `Main` methods in the `Platforms\MacCatalyst\Main.maccatalyst.cs` has been updated to contain the [Velopack application startup hook](https://docs.velopack.io/integrating/overview). - -Finally, for the WinUI platform, a little more work is needed as the `Main` method is auto-generated by default. -First, the generation of the `Main` method needs to be disabled by defining `DISABLE_XAML_GENERATED_MAIN` constant in the csproj. -```xml - - $(DefineConstants);DISABLE_XAML_GENERATED_MAIN - -``` -Next the `Main` method needs to be added so a new `Platforms\Windows\Program.cs` file is added with a standard content, and the [Velopack application startup hook](https://docs.velopack.io/integrating/overview): -```csharp -[STAThread] -public static void Main(string[] args) -{ - // It's important to Run() the VelopackApp as early as possible in app startup. - VelopackApp.Build() - .WithFirstRun((v) => { /* Your first run code here */ }) - .Run(); - - WinRT.ComWrappersSupport.InitializeComWrappers(); - - Application.Start((p) => - { - var context = new DispatcherQueueSynchronizationContext( - DispatcherQueue.GetForCurrentThread()); - SynchronizationContext.SetSynchronizationContext(context); - new App(); - }); -} -``` +The `App.xaml.cs` has been updated to contain the [Velopack application startup hook](https://docs.velopack.io/integrating/overview). ### Updating the Project file There are two properties to set in the `csproj` file to enable the Velopack Flow integration. These are: @@ -51,12 +21,19 @@ There are two properties to set in the `csproj` file to enable the Velopack Flow Velopack.UnoSample ``` -`VelopackPackId` is the unique identifier for the application. This is used to identify the application in the Velopack Flow service. It must be unique among all applications. +`VelopackPackId` is the unique identifier for the application. This is used to identify the application in the Velopack Flow service. It must be unique among all applications.You **MUST** change this to be your own application identifier. `VelopackPushOnPublish` is a boolean value that determines if the application should be pushed to the Velopack Flow service when it is published. This should be set to `true` to enable the integration. ### Building installers To build the local installers run the following command replacing `` with the desired version number. -The `-f` option is used to specify the target framework. This can be any of the desktop frameworks specified in the `csproj` file. +The `-f` option is used to specify the target framework. Because each target platform should result in a different build, you likely will want to specify a different Velopack channel for each target platform. By default, it will default to your target OS. You can specify the channel by adding `-p:VelopackChannel=` to the command. + +This can be any of the desktop frameworks specified in the `csproj` file. ```bash -dotnet publish -c Release -f net8.0-desktop -p:Version= +dotnet publish -c Release -f net8.0-desktop -p:VelopackChannel= -p:Version= +``` + +For example: +```bash +dotnet publish -c Release -f net8.0-desktop -p:VelopackChannel=win-desktop -p:Version=1.0.5 ``` diff --git a/samples/UnoSample/UnoSample.sln b/samples/UnoSample/UnoSample.sln index 1e12cd07..787f438b 100644 --- a/samples/UnoSample/UnoSample.sln +++ b/samples/UnoSample/UnoSample.sln @@ -11,6 +11,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Directory.Build.targets = Directory.Build.targets Directory.Packages.props = Directory.Packages.props global.json = global.json + README.md = README.md EndProjectSection EndProject Global diff --git a/samples/UnoSample/UnoSample/App.xaml.cs b/samples/UnoSample/UnoSample/App.xaml.cs index 2a881e1e..26a1a4ae 100644 --- a/samples/UnoSample/UnoSample/App.xaml.cs +++ b/samples/UnoSample/UnoSample/App.xaml.cs @@ -1,4 +1,5 @@ using Uno.Resizetizer; +using Velopack; namespace UnoSample; public partial class App : Application @@ -9,6 +10,11 @@ public partial class App : Application /// public App() { + // It's important to Run() the VelopackApp as early as possible in app startup. + VelopackApp.Build() + .WithFirstRun((v) => { /* Your first run code here */ }) + .Run(); + this.InitializeComponent(); } diff --git a/samples/UnoSample/UnoSample/Platforms/Desktop/Program.cs b/samples/UnoSample/UnoSample/Platforms/Desktop/Program.cs index 3e9601f0..37959b14 100644 --- a/samples/UnoSample/UnoSample/Platforms/Desktop/Program.cs +++ b/samples/UnoSample/UnoSample/Platforms/Desktop/Program.cs @@ -1,5 +1,4 @@ using Uno.UI.Runtime.Skia; -using Velopack; namespace UnoSample; public class Program @@ -7,11 +6,6 @@ public class Program [STAThread] public static void Main(string[] args) { - // It's important to Run() the VelopackApp as early as possible in app startup. - VelopackApp.Build() - .WithFirstRun((v) => { /* Your first run code here */ }) - .Run(); - #if (!useDependencyInjection && useLoggingFallback) App.InitializeLogging(); diff --git a/samples/UnoSample/UnoSample/Platforms/MacCatalyst/Main.maccatalyst.cs b/samples/UnoSample/UnoSample/Platforms/MacCatalyst/Main.maccatalyst.cs index 0cd78a0e..32579dc0 100644 --- a/samples/UnoSample/UnoSample/Platforms/MacCatalyst/Main.maccatalyst.cs +++ b/samples/UnoSample/UnoSample/Platforms/MacCatalyst/Main.maccatalyst.cs @@ -1,5 +1,4 @@ using UIKit; -using Velopack; namespace UnoSample.MacCatalyst; public class EntryPoint @@ -7,11 +6,6 @@ public class EntryPoint // This is the main entry point of the application. public static void Main(string[] args) { - // It's important to Run() the VelopackApp as early as possible in app startup. - VelopackApp.Build() - .WithFirstRun((v) => { /* Your first run code here */ }) - .Run(); - // if you want to use a different Application Delegate class from "AppDelegate" // you can specify it here. UIApplication.Main(args, null, typeof(App)); diff --git a/samples/UnoSample/UnoSample/Platforms/Windows/Program.cs b/samples/UnoSample/UnoSample/Platforms/Windows/Program.cs index bffedb4d..c0e01031 100644 --- a/samples/UnoSample/UnoSample/Platforms/Windows/Program.cs +++ b/samples/UnoSample/UnoSample/Platforms/Windows/Program.cs @@ -2,25 +2,22 @@ using Microsoft.UI.Dispatching; using Velopack; namespace UnoSample; -public static class Program -{ - // https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/migrate-to-windows-app-sdk/guides/applifecycle?WT.mc_id=DT-MVP-5003472#single-instancing-in-main-or-wwinmain - [STAThread] - public static void Main(string[] args) - { - // It's important to Run() the VelopackApp as early as possible in app startup. - VelopackApp.Build() - .WithFirstRun((v) => { /* Your first run code here */ }) - .Run(); +//public static class Program +//{ +// // https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/migrate-to-windows-app-sdk/guides/applifecycle?WT.mc_id=DT-MVP-5003472#single-instancing-in-main-or-wwinmain +// [STAThread] +// public static void Main(string[] args) +// { - WinRT.ComWrappersSupport.InitializeComWrappers(); - Application.Start((p) => - { - var context = new DispatcherQueueSynchronizationContext( - DispatcherQueue.GetForCurrentThread()); - SynchronizationContext.SetSynchronizationContext(context); - new App(); - }); - } -} +// WinRT.ComWrappersSupport.InitializeComWrappers(); + +// Application.Start((p) => +// { +// var context = new DispatcherQueueSynchronizationContext( +// DispatcherQueue.GetForCurrentThread()); +// SynchronizationContext.SetSynchronizationContext(context); +// new App(); +// }); +// } +//} diff --git a/samples/UnoSample/UnoSample/UnoSample.csproj b/samples/UnoSample/UnoSample/UnoSample.csproj index f7871837..880d17f9 100644 --- a/samples/UnoSample/UnoSample/UnoSample.csproj +++ b/samples/UnoSample/UnoSample/UnoSample.csproj @@ -54,9 +54,9 @@ - +