Skip to content

Commit 7e4ca2c

Browse files
Initial MAUI support (#1663)
1 parent 93eb770 commit 7e4ca2c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1391
-25
lines changed

.github/workflows/build.yml

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@ jobs:
2121
strategy:
2222
fail-fast: false
2323
matrix:
24-
os: [ubuntu-latest, windows-latest, macos-latest]
24+
# Using macos-12 because we need Xcode 13.3 or later to build Sentry.Samples.Maui. (macos-latest currently points at macos-11 which uses Xcode 13.2)
25+
os: [ubuntu-latest, windows-latest, macos-12]
2526
include:
2627
- os: ubuntu-latest
2728
slnf: SentryLinux.slnf
2829
- os: windows-latest
2930
slnf: SentryWindows.slnf
30-
- os: macos-latest
31+
- os: macos-12
3132
slnf: SentryMac.slnf
3233

3334
steps:
@@ -36,11 +37,6 @@ jobs:
3637
with:
3738
submodules: recursive
3839

39-
- name: "Set up Java: 11"
40-
uses: actions/setup-java@v1
41-
with:
42-
java-version: 11
43-
4440
- name: Setup .NET SDK (Windows)
4541
if: startsWith(matrix.os, 'windows')
4642
uses: actions/setup-dotnet@v2
@@ -59,22 +55,22 @@ jobs:
5955
with:
6056
dotnet-version: 2.1.818
6157

62-
# .NET Android workload doesn't support Linux https://github.com/dotnet/sdk/issues/22411
63-
- name: Install Android workload (macOS)
64-
if: startsWith(matrix.os, 'macos')
65-
run: sudo dotnet workload install android
66-
67-
- name: Install Android workload (Windows)
68-
if: startsWith(matrix.os, 'windows')
69-
run: dotnet workload install android
70-
7158
- name: Dependency Caching
7259
uses: actions/cache@v3
7360
with:
7461
path: ~/.nuget/packages
75-
## we don't use a lockfile, so hash all files where we might be keeping <PackageReference> tags
76-
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.*proj', '**/*.props') }}
77-
restore-keys: ${{ runner.os }}-nuget
62+
# We don't use a lockfile, so hash all files where we might be keeping <PackageReference> tags
63+
# Workloads also get installed in the nuget packages cache, so if you modify workloads below, increment the number in the cache keys
64+
key: ${{ runner.os }}-nuget+workloads2-${{ hashFiles('**/*.*proj', '**/*.props') }}
65+
restore-keys: ${{ runner.os }}-nuget+workloads2
66+
67+
# .NET Android workloads don't support Linux https://github.com/dotnet/sdk/issues/22411
68+
- name: Install .NET Workloads (Windows)
69+
if: startsWith(matrix.os, 'windows')
70+
run: dotnet workload install maui-android maui-windows
71+
- name: Install .NET Workloads (macOS)
72+
if: startsWith(matrix.os, 'macos')
73+
run: dotnet workload install maui-android maui-ios maui-maccatalyst
7874

7975
- name: Build
8076
run: dotnet build ${{ matrix.slnf }} -c Release /p:CopyLocalLockFileAssemblies=true
@@ -98,6 +94,11 @@ jobs:
9894
if: startsWith(matrix.os, 'windows')
9995
run: dotnet pack ${{ matrix.slnf }} -c Release --no-build
10096

97+
- name: Pack (MAUI)
98+
# only pack on macos since we need ios native targets included
99+
if: startsWith(matrix.os, 'macos')
100+
run: dotnet pack src/Sentry.Maui -c Release --no-build
101+
101102
- name: Upload Verify Results
102103
if: failure()
103104
uses: actions/upload-artifact@v3
@@ -115,3 +116,13 @@ jobs:
115116
if-no-files-found: error
116117
path: |
117118
${{ github.workspace }}/src/**/Release/*.nupkg
119+
120+
- name: Archive Artifacts (MAUI)
121+
# only archive MAUI on macos since we only pack MAUI on macos. See Pack step.
122+
if: startsWith(matrix.os, 'macos')
123+
uses: actions/upload-artifact@v3
124+
with:
125+
name: ${{ github.sha }}
126+
if-no-files-found: error
127+
path: |
128+
${{ github.workspace }}/src/Sentry.Maui/bin/Release/*.nupkg

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
## Unreleased
44

5+
### Features
6+
7+
- Initial support for .NET MAUI ([#1663](https://github.com/getsentry/sentry-dotnet/pull/1663))
8+
- Initial support for `net6.0-android` apps ([#1288](https://github.com/getsentry/sentry-dotnet/pull/1288))
9+
510
### Fixes
611

712
- Remove IInternalSdkIntegration ([#1656](https://github.com/getsentry/sentry-dotnet/pull/1656))

CONTRIBUTING.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ For big feature it's advised to raise an issue to discuss it first.
2323
- `Sentry.DiagnosticSource.IntegrationTests.csproj` uses [SQL LocalDb](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/sql-server-express-localdb) - [download SQL LocalDB 2019](https://download.microsoft.com/download/7/c/1/7c14e92e-bdcb-4f89-b7cf-93543e7112d1/SqlLocalDB.msi). To avoid running these tests, unload `Sentry.DiagnosticSource.IntegrationTests.csproj` from the solution.
2424
* On macOS/Linux: [Mono 6 or higher](https://www.mono-project.com/download/stable) to run the unit tests on the `net4x` targets.
2525

26+
## .NET MAUI Requirements
27+
28+
To build any of `Sentry.Maui`, `Sentry.Maui.Tests`, or `Sentry.Samples.Maui`, you'll need to have .NET SDK 6.0.300 or greater installed, and have installed the MAUI workload installed, either through Visual Studio setup, or through `dotnet workload install maui`.
29+
You may also need other platform dependencies. See https://docs.microsoft.com/dotnet/maui/ for details. Basically, if you can build and run the "MyMauiApp" example you should also be able to build and run the Sentry MAUI sample app.
30+
2631
## API changes approval process
2732

2833
This repository uses [Verify](https://github.com/VerifyTests/Verify) to store the public API diffs in snapshot files.

Sentry.sln

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,12 @@ EndProject
141141
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sentry.Samples.Android", "samples\Sentry.Samples.Android\Sentry.Samples.Android.csproj", "{5CB9167E-ED23-4A67-8D3A-B66B0C5196C8}"
142142
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.DiagnosticSource.IntegrationTests", "test\Sentry.DiagnosticSource.IntegrationTests\Sentry.DiagnosticSource.IntegrationTests.csproj", "{F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}"
143143
EndProject
144+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Samples.Maui", "samples\Sentry.Samples.Maui\Sentry.Samples.Maui.csproj", "{EBCCABF9-F670-4C8D-AABC-4EB132961929}"
145+
EndProject
146+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Maui", "src\Sentry.Maui\Sentry.Maui.csproj", "{FFFC74C5-680B-43E3-9C42-A7A23B589CB6}"
147+
EndProject
148+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Maui.Tests", "test\Sentry.Maui.Tests\Sentry.Maui.Tests.csproj", "{143076C0-8D6B-4054-9F45-06B21655F417}"
149+
EndProject
144150
Global
145151
GlobalSection(SolutionConfigurationPlatforms) = preSolution
146152
Debug|Any CPU = Debug|Any CPU
@@ -325,6 +331,18 @@ Global
325331
{F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
326332
{F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
327333
{F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B}.Release|Any CPU.Build.0 = Release|Any CPU
334+
{EBCCABF9-F670-4C8D-AABC-4EB132961929}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
335+
{EBCCABF9-F670-4C8D-AABC-4EB132961929}.Debug|Any CPU.Build.0 = Debug|Any CPU
336+
{EBCCABF9-F670-4C8D-AABC-4EB132961929}.Release|Any CPU.ActiveCfg = Release|Any CPU
337+
{EBCCABF9-F670-4C8D-AABC-4EB132961929}.Release|Any CPU.Build.0 = Release|Any CPU
338+
{FFFC74C5-680B-43E3-9C42-A7A23B589CB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
339+
{FFFC74C5-680B-43E3-9C42-A7A23B589CB6}.Debug|Any CPU.Build.0 = Debug|Any CPU
340+
{FFFC74C5-680B-43E3-9C42-A7A23B589CB6}.Release|Any CPU.ActiveCfg = Release|Any CPU
341+
{FFFC74C5-680B-43E3-9C42-A7A23B589CB6}.Release|Any CPU.Build.0 = Release|Any CPU
342+
{143076C0-8D6B-4054-9F45-06B21655F417}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
343+
{143076C0-8D6B-4054-9F45-06B21655F417}.Debug|Any CPU.Build.0 = Debug|Any CPU
344+
{143076C0-8D6B-4054-9F45-06B21655F417}.Release|Any CPU.ActiveCfg = Release|Any CPU
345+
{143076C0-8D6B-4054-9F45-06B21655F417}.Release|Any CPU.Build.0 = Release|Any CPU
328346
EndGlobalSection
329347
GlobalSection(SolutionProperties) = preSolution
330348
HideSolutionNode = FALSE
@@ -377,6 +395,9 @@ Global
377395
{D870B028-16ED-4551-8B0F-5529479D04C9} = {83263231-1A2A-4733-B759-EEFF14E8C5D5}
378396
{5CB9167E-ED23-4A67-8D3A-B66B0C5196C8} = {77454495-55EE-4B40-A089-71B9E8F82E89}
379397
{F8120B9C-D4CA-43DA-B5E1-1CFBA7C36E3B} = {83263231-1A2A-4733-B759-EEFF14E8C5D5}
398+
{EBCCABF9-F670-4C8D-AABC-4EB132961929} = {77454495-55EE-4B40-A089-71B9E8F82E89}
399+
{FFFC74C5-680B-43E3-9C42-A7A23B589CB6} = {AF6AF4C7-8AA2-4D59-8064-2D79560904EB}
400+
{143076C0-8D6B-4054-9F45-06B21655F417} = {83263231-1A2A-4733-B759-EEFF14E8C5D5}
380401
EndGlobalSection
381402
GlobalSection(ExtensibilityGlobals) = postSolution
382403
SolutionGuid = {0C652B1A-DF72-4EE5-A98B-194FE2C054F6}

SentryCore.slnf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@
77
"test\\Sentry.Tests\\Sentry.Tests.csproj"
88
]
99
}
10-
}
10+
}

SentryLinux.slnf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,4 @@
4646
"test\\Sentry.Tunnel.Tests\\Sentry.Tunnel.Tests.csproj"
4747
]
4848
}
49-
}
49+
}

SentryMac.slnf

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"samples\\Sentry.Samples.GenericHost\\Sentry.Samples.GenericHost.csproj",
1818
"samples\\Sentry.Samples.Google.Cloud.Functions\\Sentry.Samples.Google.Cloud.Functions.csproj",
1919
"samples\\Sentry.Samples.Log4Net\\Sentry.Samples.Log4Net.csproj",
20+
"samples\\Sentry.Samples.Maui\\Sentry.Samples.Maui.csproj",
2021
"samples\\Sentry.Samples.ME.Logging\\Sentry.Samples.ME.Logging.csproj",
2122
"samples\\Sentry.Samples.NLog\\Sentry.Samples.NLog.csproj",
2223
"samples\\Sentry.Samples.Serilog\\Sentry.Samples.Serilog.csproj",
@@ -28,6 +29,7 @@
2829
"src\\Sentry.Extensions.Logging\\Sentry.Extensions.Logging.csproj",
2930
"src\\Sentry.Google.Cloud.Functions\\Sentry.Google.Cloud.Functions.csproj",
3031
"src\\Sentry.Log4Net\\Sentry.Log4Net.csproj",
32+
"src\\Sentry.Maui\\Sentry.Maui.csproj",
3133
"src\\Sentry.NLog\\Sentry.NLog.csproj",
3234
"src\\Sentry.Serilog\\Sentry.Serilog.csproj",
3335
"src\\Sentry.Tunnel\\Sentry.Tunnel.csproj",
@@ -40,11 +42,12 @@
4042
"test\\Sentry.Extensions.Logging.Tests\\Sentry.Extensions.Logging.Tests.csproj",
4143
"test\\Sentry.Google.Cloud.Functions.Tests\\Sentry.Google.Cloud.Functions.Tests.csproj",
4244
"test\\Sentry.Log4Net.Tests\\Sentry.Log4Net.Tests.csproj",
45+
"test\\Sentry.Maui.Tests\\Sentry.Maui.Tests.csproj",
4346
"test\\Sentry.NLog.Tests\\Sentry.NLog.Tests.csproj",
4447
"test\\Sentry.Serilog.Tests\\Sentry.Serilog.Tests.csproj",
4548
"test\\Sentry.Testing\\Sentry.Testing.csproj",
4649
"test\\Sentry.Tests\\Sentry.Tests.csproj",
4750
"test\\Sentry.Tunnel.Tests\\Sentry.Tunnel.Tests.csproj"
4851
]
4952
}
50-
}
53+
}

SentryMaui.slnf

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"solution": {
3+
"path": "Sentry.sln",
4+
"projects": [
5+
"samples\\Sentry.Samples.Maui\\Sentry.Samples.Maui.csproj",
6+
"src\\Sentry.Extensions.Logging\\Sentry.Extensions.Logging.csproj",
7+
"src\\Sentry.Maui\\Sentry.Maui.csproj",
8+
"src\\Sentry\\Sentry.csproj",
9+
"test\\Sentry.Extensions.Logging.Tests\\Sentry.Extensions.Logging.Tests.csproj",
10+
"test\\Sentry.Maui.Tests\\Sentry.Maui.Tests.csproj",
11+
"test\\Sentry.Testing\\Sentry.Testing.csproj",
12+
"test\\Sentry.Tests\\Sentry.Tests.csproj"
13+
]
14+
}
15+
}

SentryNoSamples.slnf

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"src\\Sentry.Extensions.Logging\\Sentry.Extensions.Logging.csproj",
1212
"src\\Sentry.Google.Cloud.Functions\\Sentry.Google.Cloud.Functions.csproj",
1313
"src\\Sentry.Log4Net\\Sentry.Log4Net.csproj",
14+
"src\\Sentry.Maui\\Sentry.Maui.csproj",
1415
"src\\Sentry.NLog\\Sentry.NLog.csproj",
1516
"src\\Sentry.Serilog\\Sentry.Serilog.csproj",
1617
"src\\Sentry.Tunnel\\Sentry.Tunnel.csproj",
@@ -24,11 +25,12 @@
2425
"test\\Sentry.Extensions.Logging.Tests\\Sentry.Extensions.Logging.Tests.csproj",
2526
"test\\Sentry.Google.Cloud.Functions.Tests\\Sentry.Google.Cloud.Functions.Tests.csproj",
2627
"test\\Sentry.Log4Net.Tests\\Sentry.Log4Net.Tests.csproj",
28+
"test\\Sentry.Maui.Tests\\Sentry.Maui.Tests.csproj",
2729
"test\\Sentry.NLog.Tests\\Sentry.NLog.Tests.csproj",
2830
"test\\Sentry.Serilog.Tests\\Sentry.Serilog.Tests.csproj",
2931
"test\\Sentry.Testing\\Sentry.Testing.csproj",
3032
"test\\Sentry.Tests\\Sentry.Tests.csproj",
3133
"test\\Sentry.Tunnel.Tests\\Sentry.Tunnel.Tests.csproj"
3234
]
3335
}
34-
}
36+
}

SentryWindows.slnf

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"samples\\Sentry.Samples.GenericHost\\Sentry.Samples.GenericHost.csproj",
1818
"samples\\Sentry.Samples.Google.Cloud.Functions\\Sentry.Samples.Google.Cloud.Functions.csproj",
1919
"samples\\Sentry.Samples.Log4Net\\Sentry.Samples.Log4Net.csproj",
20+
"samples\\Sentry.Samples.Maui\\Sentry.Samples.Maui.csproj",
2021
"samples\\Sentry.Samples.ME.Logging\\Sentry.Samples.ME.Logging.csproj",
2122
"samples\\Sentry.Samples.NLog\\Sentry.Samples.NLog.csproj",
2223
"samples\\Sentry.Samples.Serilog\\Sentry.Samples.Serilog.csproj",
@@ -28,6 +29,7 @@
2829
"src\\Sentry.Extensions.Logging\\Sentry.Extensions.Logging.csproj",
2930
"src\\Sentry.Google.Cloud.Functions\\Sentry.Google.Cloud.Functions.csproj",
3031
"src\\Sentry.Log4Net\\Sentry.Log4Net.csproj",
32+
"src\\Sentry.Maui\\Sentry.Maui.csproj",
3133
"src\\Sentry.NLog\\Sentry.NLog.csproj",
3234
"src\\Sentry.Serilog\\Sentry.Serilog.csproj",
3335
"src\\Sentry.Tunnel\\Sentry.Tunnel.csproj",
@@ -40,11 +42,12 @@
4042
"test\\Sentry.Extensions.Logging.Tests\\Sentry.Extensions.Logging.Tests.csproj",
4143
"test\\Sentry.Google.Cloud.Functions.Tests\\Sentry.Google.Cloud.Functions.Tests.csproj",
4244
"test\\Sentry.Log4Net.Tests\\Sentry.Log4Net.Tests.csproj",
45+
"test\\Sentry.Maui.Tests\\Sentry.Maui.Tests.csproj",
4346
"test\\Sentry.NLog.Tests\\Sentry.NLog.Tests.csproj",
4447
"test\\Sentry.Serilog.Tests\\Sentry.Serilog.Tests.csproj",
4548
"test\\Sentry.Testing\\Sentry.Testing.csproj",
4649
"test\\Sentry.Tests\\Sentry.Tests.csproj",
4750
"test\\Sentry.Tunnel.Tests\\Sentry.Tunnel.Tests.csproj"
4851
]
4952
}
50-
}
53+
}

samples/Directory.Build.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
<PropertyGroup>
77
<IsPackable>false</IsPackable>
8+
<SignAssembly>false</SignAssembly>
89
</PropertyGroup>
910

1011
<ItemGroup>

samples/Sentry.Samples.Maui/App.xaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version = "1.0" encoding = "UTF-8" ?>
2+
<Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
4+
xmlns:local="clr-namespace:Sentry.Samples.Maui"
5+
x:Class="Sentry.Samples.Maui.App">
6+
<Application.Resources>
7+
<ResourceDictionary>
8+
<ResourceDictionary.MergedDictionaries>
9+
<ResourceDictionary Source="Resources/Styles/Colors.xaml" />
10+
<ResourceDictionary Source="Resources/Styles/Styles.xaml" />
11+
</ResourceDictionary.MergedDictionaries>
12+
</ResourceDictionary>
13+
</Application.Resources>
14+
</Application>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace Sentry.Samples.Maui;
2+
3+
public partial class App : Application
4+
{
5+
public App()
6+
{
7+
InitializeComponent();
8+
9+
MainPage = new AppShell();
10+
}
11+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<Shell
3+
x:Class="Sentry.Samples.Maui.AppShell"
4+
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
5+
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
6+
xmlns:local="clr-namespace:Sentry.Samples.Maui"
7+
Shell.FlyoutBehavior="Disabled">
8+
9+
<ShellContent
10+
Title="Home"
11+
ContentTemplate="{DataTemplate local:MainPage}"
12+
Route="MainPage" />
13+
14+
</Shell>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace Sentry.Samples.Maui;
2+
3+
public partial class AppShell : Shell
4+
{
5+
public AppShell()
6+
{
7+
InitializeComponent();
8+
}
9+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
4+
x:Class="Sentry.Samples.Maui.MainPage">
5+
6+
<ScrollView>
7+
<VerticalStackLayout
8+
Spacing="25"
9+
Padding="30,0"
10+
VerticalOptions="Center">
11+
12+
<Image
13+
Source="dotnet_bot.png"
14+
SemanticProperties.Description="Cute dot net bot waving hi to you!"
15+
HeightRequest="200"
16+
HorizontalOptions="Center" />
17+
18+
<Label
19+
Text="Hello, World!"
20+
SemanticProperties.HeadingLevel="Level1"
21+
FontSize="32"
22+
HorizontalOptions="Center" />
23+
24+
<Label
25+
Text="Welcome to .NET Multi-platform App UI"
26+
SemanticProperties.HeadingLevel="Level2"
27+
SemanticProperties.Description="Welcome to dot net Multi platform App U I"
28+
FontSize="18"
29+
HorizontalOptions="Center" />
30+
31+
<Button
32+
x:Name="CounterBtn"
33+
Text="Click me"
34+
SemanticProperties.Hint="Counts the number of times you click"
35+
Clicked="OnCounterClicked"
36+
HorizontalOptions="Center" />
37+
38+
<Button
39+
x:Name="ExceptionBtn"
40+
Text="Throw Exception"
41+
SemanticProperties.Hint="Throws an unhandled exception"
42+
Clicked="OnExceptionClicked"
43+
HorizontalOptions="Center" />
44+
45+
</VerticalStackLayout>
46+
</ScrollView>
47+
48+
</ContentPage>

0 commit comments

Comments
 (0)