Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions APP_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ This repository was generated using the **nventive Mobile Template**.
### Local Development Requirements
All development is expected to be done from Visual Studio in a Windows environment.

- .NET 8
- Visual Studio 2022 (17.4 and above)
- .NET 9
- Visual Studio 2022 (17.12 and above)
- We recommend validating your components using this [Uno guide](https://platform.uno/docs/articles/get-started-vs-2022.html).
- For mobile development, MAUI workloads are required.
- You can install them using [`uno-check`](https://platform.uno/docs/articles/external/uno.check/doc/using-uno-check.html).
- For local iOS compilation and debugging, you need access to Mac with Xcode 14.2 (more recent versions may work too).
- For local iOS compilation and debugging, you need access to Mac with Xcode 16 (more recent versions may work too).
> 💡 You'll need an [Apple provisioning profile](https://developer.apple.com/help/account/manage-profiles/create-a-development-provisioning-profile/) to start your application.

### Pipelines Requirements
Expand All @@ -42,7 +42,7 @@ If you're unfamiliar with Azure Pipeline, you should at least read about the fol
- You can follow [this guide](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/pipelines-sign-up?view=azure-devops) for more details.
- For compilation, access to the the following [Microsoft-hosted agents](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops&tabs=yaml) is required.
- `windows-2022`
- `macOS-13`
- `macOS-15`
- For deployment, access to Mac agents with the following capabilities is required.
- `fastlane 2.212.1`

Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Prefix your items with `(Template)` if the change is about the template and not
- Moved many components from the presentation layer to the data access layer.
- Disabled simulated API call delays in automated tests.
- Updated Configuration documentation and uno workaround comment.
- Cleanup (fixes warnings on Windows, fixes vulnerabilities and renamed extensions) & Update packages.

## 3.8.X
- Updated from .NET 8 to .NET 9.
Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<!-- Microsoft.VisualStudio.Threading.Analyzers has the async void analyzers. -->
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.12.19" PrivateAssets="all" />
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.13.2" PrivateAssets="all" />
<PackageReference Include="GooseAnalyzers" Version="1.0.0" PrivateAssets="all" />
</ItemGroup>

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ From left to right: WinUI, iOS, and Android.

## Requirements

Visual Studio 2022 with .NET 8 are required.
Visual Studio 2022 with .NET 9 are required.

This template largely relies on Uno Platform, if you want to make sure you got everything installed correctly on your machine, we encourage you to use `uno-check`, the documentation is available [here](https://platform.uno/docs/articles/uno-check.html)

Expand Down
14 changes: 12 additions & 2 deletions src/ApplicationTemplate.sln
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,34 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "root", "root", "{8711E408-6
..\.azure-pipelines.yml = ..\.azure-pipelines.yml
..\.editorconfig = ..\.editorconfig
..\.gitignore = ..\.gitignore
..\APP_README.md = ..\APP_README.md
..\CODE_OF_CONDUCT.md = ..\CODE_OF_CONDUCT.md
..\CONTRIBUTING.md = ..\CONTRIBUTING.md
..\Directory.Build.props = ..\Directory.Build.props
..\nuget.config = ..\nuget.config
..\README.md = ..\README.md
..\stylecop.json = ..\stylecop.json
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "doc", "doc", "{4A31B4ED-94EB-43BC-91DD-7B142DEB887C}"
ProjectSection(SolutionItems) = preProject
..\doc\Architecture.md = ..\doc\Architecture.md
..\doc\AzurePipelines.md = ..\doc\AzurePipelines.md
..\CHANGELOG.md = ..\CHANGELOG.md
..\doc\Configuration.md = ..\doc\Configuration.md
..\doc\DataLoading.md = ..\doc\DataLoading.md
..\doc\DefaultAnalytics.md = ..\doc\DefaultAnalytics.md
..\doc\DependencyInjection.md = ..\doc\DependencyInjection.md
..\doc\Diagnostics.md = ..\doc\Diagnostics.md
..\doc\Environments.md = ..\doc\Environments.md
..\doc\ErrorHandling.md = ..\doc\ErrorHandling.md
..\doc\ForcedUpdate.md = ..\doc\ForcedUpdate.md
..\doc\HTTP.md = ..\doc\HTTP.md
..\doc\KillSwitch.md = ..\doc\KillSwitch.md
..\doc\Localization.md = ..\doc\Localization.md
..\doc\Logging.md = ..\doc\Logging.md
..\doc\PlatformSpecifics.md = ..\doc\PlatformSpecifics.md
..\README.md = ..\README.md
..\doc\Reviews.md = ..\doc\Reviews.md
..\doc\Scheduling.md = ..\doc\Scheduling.md
..\doc\Serialization.md = ..\doc\Serialization.md
..\doc\Startup.md = ..\doc\Startup.md
Expand Down Expand Up @@ -64,8 +74,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{6E8378CB
..\build\canary-merge.yml = ..\build\canary-merge.yml
..\build\gitversion-config.yml = ..\build\gitversion-config.yml
..\build\stage-build.yml = ..\build\stage-build.yml
..\build\stage-release-firebase-app-distribution.yml = ..\build\stage-release-firebase-app-distribution.yml
..\build\stage-release-appstore.yml = ..\build\stage-release-appstore.yml
..\build\stage-release-firebase-app-distribution.yml = ..\build\stage-release-firebase-app-distribution.yml
..\build\stage-release-googleplay.yml = ..\build\stage-release-googleplay.yml
..\build\steps-build-android.yml = ..\build\steps-build-android.yml
..\build\steps-build-ios.yml = ..\build\steps-build-ios.yml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="DynamicData" Version="9.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="9.0.1" />
<PackageReference Include="Microsoft.Extensions.Http" Version="9.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.1" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.1" />
<PackageReference Include="DynamicData" Version="9.2.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.Http" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.3" />
<PackageReference Include="Reactive.Annex" Version="2.0.0" />
<PackageReference Include="Refit" Version="8.0.0" />
<PackageReference Include="ReviewService.Abstractions" Version="1.0.0" />
<PackageReference Include="System.Text.Json" Version="9.0.1" />
<PackageReference Include="System.Text.Json" Version="9.0.3" />
<PackageReference Include="MallardMessageHandlers" Version="2.0.0" />
<PackageReference Include="Nventive.Persistence.Reactive" Version="0.5.0" />
<PackageReference Include="Nventive.Persistence" Version="0.5.0" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,26 @@
<PackageReference Include="Chinook.SectionsNavigation.Uno.WinUI" Version="3.0.2" />
<PackageReference Include="ExtendedSplashScreen.Uno.WinUI" Version="2.0.0" />
<PackageReference Include="MessageDialogService.Uno.WinUI" Version="2.0.0" />
<PackageReference Include="Microsoft.Maui.Essentials" Version="9.0.30" />
<PackageReference Include="Microsoft.Maui.Essentials" Version="9.0.50" />
<PackageReference Include="Nventive.Persistence.Uno.WinUI" Version="0.5.0" />
<PackageReference Include="Nventive.View.Uno.WinUI" Version="0.6.0" />
<PackageReference Include="Reactive.Annex.Uno.WinUI" Version="2.0.0" />
<PackageReference Include="ReviewService.NativePrompters" Version="1.0.0" />
<PackageReference Include="Uno.CommunityToolkit.WinUI" Version="7.1.204" />
<PackageReference Include="Uno.Material.WinUI" Version="5.3.1" />
<PackageReference Include="Uno.Material.WinUI" Version="5.4.0" />
<PackageReference Include="Uno.Microsoft.Xaml.Behaviors.Interactivity.WinUI" Version="2.4.2" />
<PackageReference Include="Uno.Microsoft.Xaml.Behaviors.WinUI.Managed" Version="2.4.2" />
<PackageReference Include="Uno.Toolkit.WinUI.Material" Version="6.3.7" />
<PackageReference Include="Uno.WinUI" Version="5.6.30" />
<PackageReference Include="Uno.WinUI.DevServer" Version="5.6.30" Condition="'$(Configuration)'=='Debug'" />
<PackageReference Include="Uno.WinUI.Lottie" Version="5.6.30" />
<PackageReference Include="Uno.UI.Adapter.Microsoft.Extensions.Logging" Version="5.6.30" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="9.0.1" />
<PackageReference Include="Uno.Toolkit.WinUI.Material" Version="6.4.3" />
<PackageReference Include="Uno.WinUI" Version="5.6.81" />
<PackageReference Include="Uno.WinUI.DevServer" Version="5.6.81" Condition="'$(Configuration)'=='Debug'" />
<PackageReference Include="Uno.WinUI.Lottie" Version="5.6.81" />
<PackageReference Include="Uno.UI.Adapter.Microsoft.Extensions.Logging" Version="5.6.81" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="9.0.3" />
<PackageReference Include="Serilog.Sinks.Xamarin" Version="1.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />

<!-- It would normally be a transitive dependency, however, the version included with one of the packages has a vulnerability. -->
<PackageReference Include="System.Private.Uri" Version="4.3.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ApplicationTemplate.Access\ApplicationTemplate.Access.csproj" />
Expand Down Expand Up @@ -102,6 +105,9 @@
<PackageReference Include="Uno.UniversalImageLoader" Version="1.9.37" />
<PackageReference Include="Mono.AotProfiler.Android" Version="7.0.0" />
<PackageReference Include="Xamarin.Kotlin.StdLib.Jdk8" Version="2.0.21.2" />

<!-- Required with the last version of Uno otherwise an exception is thrown in the main activity. -->
<PackageReference Include="Xamarin.AndroidX.AppCompat" Version="1.7.0.5" />
</ItemGroup>
<ItemGroup>
<AndroidAotProfile Include="custom.aprof" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@

<ItemGroup>
<PackageReference Include="ByteSize" Version="2.1.2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.1" />
<PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="9.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="9.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="9.0.3" />
<PackageReference Include="ReviewService" Version="1.0.0" />
<PackageReference Include="Uno.SourceGenerationTasks" Version="4.2.0" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="9.0.0" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using Chinook.DynamicMvvm;
using FluentValidation;
using Microsoft.Extensions.Localization;
using Presentation;
using Uno.Extensions;

namespace ApplicationTemplate.Presentation;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
using System;
using System.Globalization;
using System.Linq;
using System.Text;
using FluentValidation;
using Uno.Extensions;

namespace Presentation;
namespace FluentValidation;

public static class ValidatorExtensions
public static class RuleBuilderExtensions
{
/// <summary>
/// Adds a validation rule that checks whether the age is over 18 years old based on the date of birth.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,42 @@
using System;
using System.Linq;
using System.Reactive.Linq;
using System.Threading;
using System.Threading.Tasks;
using Chinook.StackNavigation;

namespace Chinook.SectionsNavigation;

/// <summary>
/// Extensions for <see cref="ISectionsNavigator"/>.
/// </summary>
public static class SectionsNavigatorExtensions
{
/// <summary>
/// Gets an observable of the last page type from currently active section.
/// The observable pushes a value whenever a navigation request is processed with the type of the last page ViewModel.
/// </summary>
/// <param name="sectionsNavigator">The sections navigator.</param>
/// <returns>An observable of types.</returns>
public static IObservable<Type> ObserveActiveSectionLastPageType(this ISectionsNavigator sectionsNavigator)
{
return sectionsNavigator
.ObserveStateChanged()
.Where(args => args.EventArgs.CurrentState.LastRequestState == NavigatorRequestState.Processed)
.Select(args =>
{
var state = args.EventArgs.CurrentState;
return state.ActiveSection?.State.Stack.LastOrDefault()?.ViewModel.GetType();
})
.StartWith(sectionsNavigator.State.ActiveSection?.State.Stack.LastOrDefault()?.ViewModel.GetType());
}

public static IObservable<SectionsNavigatorEventArgs> ObserveProcessedState(this ISectionsNavigator sectionsNavigator)
{
return sectionsNavigator
.ObserveStateChanged()
.Where(args => args.EventArgs.CurrentState.LastRequestState == NavigatorRequestState.Processed)
.Select(args => args.EventArgs);
}

/// <summary>
/// Observes the active section and returns its name.
/// </summary>
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

<ItemGroup>
<PackageReference Include="AutoFixture.Xunit2" Version="4.18.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="NSubstitute.Analyzers.CSharp" Version="1.0.17">
<PrivateAssets>all</PrivateAssets>
Expand All @@ -21,7 +21,7 @@
<PackageReference Include="Serilog.Sinks.XUnit" Version="3.0.19" />
<PackageReference Include="FluentAssertions" Version="7.1.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.1">
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
Expand All @@ -33,9 +33,13 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

<!-- They would normally be transitive dependencies, however, the versions included with the packages have a vulnerability. -->
<PackageReference Include="System.Net.Http" Version="4.3.4" />
<PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\ApplicationTemplate.Presentation\ApplicationTemplate.Presentation.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ApplicationTemplate.Presentation\ApplicationTemplate.Presentation.csproj" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

<ItemGroup>
<PackageReference Include="AutoFixture.Xunit2" Version="4.18.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="NSubstitute.Analyzers.CSharp" Version="1.0.17">
<PrivateAssets>all</PrivateAssets>
Expand All @@ -20,7 +20,7 @@
<PackageReference Include="Serilog.Sinks.XUnit" Version="3.0.19" />
<PackageReference Include="FluentAssertions" Version="7.1.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.1">
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
Expand All @@ -32,6 +32,10 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

<!-- They would normally be transitive dependencies, however, the versions included with the packages have a vulnerability. -->
<PackageReference Include="System.Net.Http" Version="4.3.4" />
<PackageReference Include="System.Text.RegularExpressions" Version="4.3.1" />
</ItemGroup>

<ItemGroup>
Expand Down
Loading