Skip to content

Commit

Permalink
feat: add Aptabase.Core
Browse files Browse the repository at this point in the history
Fixes aptabase#4

The GitHub repository should be renamed to aptabase-dotnet following the merge of this pull request. Maui should work... (I can't test that, I'm on Fedora Linux)
  • Loading branch information
BrycensRanch committed Dec 19, 2024
1 parent c58006e commit 3955993
Show file tree
Hide file tree
Showing 56 changed files with 590 additions and 202 deletions.
48 changes: 37 additions & 11 deletions .github/workflows/nuget_push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,60 @@ on:
workflow_dispatch:

jobs:
build:
build-maui:
runs-on: windows-latest
name: Update NuGet package
name: Update Aptabase.Maui NuGet package
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup .NET Core @ Latest
uses: actions/setup-dotnet@v4

- name: Setup JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
java-version: '11'
distribution: 'adopt'

- name: Extract Version from csproj
id: get_version
run: |
$version = Select-String -Path "./src/Aptabase.Maui.csproj" -Pattern '<Version>(.*)</Version>' | ForEach-Object { $_.Matches.Groups[1].Value }
$version = Select-String -Path "./src/Aptabase.Maui/Aptabase.Maui.csproj" -Pattern '<Version>(.*)</Version>' | ForEach-Object { $_.Matches.Groups[1].Value }
echo "PackageVersion=$version" | Out-File -Append -FilePath $env:GITHUB_ENV
shell: powershell

- name: Build and Publish
- name: Build and Publish Aptabase.Maui
run: |
cd ./src/
cd ./src/Aptabase.Maui
dotnet restore Aptabase.Maui.csproj
dotnet pack Aptabase.Maui.csproj -c Release -o artifacts -p:PackageVersion=${{ env.PackageVersion }}
- name: Push
run: dotnet nuget push ./src/artifacts/Aptabase.Maui.${{ env.PackageVersion }}.nupkg -k ${{ secrets.NUGET_APIKEY }} -s https://api.nuget.org/v3/index.json
- name: Push Aptabase.Maui Package
run: dotnet nuget push ./src/Aptabase.Maui/artifacts/Aptabase.Maui.${{ env.PackageVersion }}.nupkg -k ${{ secrets.NUGET_APIKEY }} -s https://api.nuget.org/v3/index.json

build-core:
runs-on: ubuntu-latest
name: Build and Publish Aptabase.Core NuGet package
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup .NET Core @ Latest
uses: actions/setup-dotnet@v4

- name: Extract Version from csproj
id: get_version_core
run: |
$version = Select-String -Path "./src/Aptabase.Core/Aptabase.Core.csproj" -Pattern '<Version>(.*)</Version>' | ForEach-Object { $_.Matches.Groups[1].Value }
echo "PackageVersion=$version" | Out-File -Append -FilePath $env:GITHUB_ENV
shell: bash

- name: Build and Publish Aptabase.Core
run: |
cd ./src/Aptabase.Core
dotnet restore Aptabase.Core.csproj
dotnet pack Aptabase.Core.csproj -c Release -o artifacts -p:PackageVersion=${{ env.PackageVersion }}
- name: Push Aptabase.Core Package
run: dotnet nuget push ./src/Aptabase.Core/artifacts/Aptabase.Core.${{ env.PackageVersion }}.nupkg -k ${{ secrets.NUGET_APIKEY }} -s https://api.nuget.org/v3/index.json
94 changes: 54 additions & 40 deletions Aptabase.MAUI.sln → Aptabase.NET.sln
Original file line number Diff line number Diff line change
@@ -1,40 +1,54 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.33530.505
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aptabase.Maui", "src\Aptabase.Maui.csproj", "{CDBA84BA-F326-4162-B509-31892E9CAF2E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelloWorld", "test\HelloWorld\HelloWorld.csproj", "{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{8BFFEF39-1EA0-4D6D-9988-322A74A6558D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{19E5FDF2-25B6-48AA-BB1B-8BBA9E8323E1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{CDBA84BA-F326-4162-B509-31892E9CAF2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CDBA84BA-F326-4162-B509-31892E9CAF2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CDBA84BA-F326-4162-B509-31892E9CAF2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CDBA84BA-F326-4162-B509-31892E9CAF2E}.Release|Any CPU.Build.0 = Release|Any CPU
{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{CDBA84BA-F326-4162-B509-31892E9CAF2E} = {8BFFEF39-1EA0-4D6D-9988-322A74A6558D}
{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E} = {19E5FDF2-25B6-48AA-BB1B-8BBA9E8323E1}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C696E39C-8A3B-4FE3-BBB1-95FE24E67DCD}
EndGlobalSection
EndGlobal

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.33530.505
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aptabase.Maui", "src\Aptabase.Maui\Aptabase.Maui.csproj", "{CDBA84BA-F326-4162-B509-31892E9CAF2E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aptabase.Core", "src\Aptabase.Core\Aptabase.Core.csproj", "{D6DE2CBA-F461-4E04-9A96-6C0EE7E32B9E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelloMaui", "test\HelloMaui\HelloMaui.csproj", "{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{8BFFEF39-1EA0-4D6D-9988-322A74A6558D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{19E5FDF2-25B6-48AA-BB1B-8BBA9E8323E1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorld", "test\HelloWorld\HelloWorld.csproj", "{E6EB4FC9-CF24-4735-B8DB-EC78674A94F1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{CDBA84BA-F326-4162-B509-31892E9CAF2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CDBA84BA-F326-4162-B509-31892E9CAF2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CDBA84BA-F326-4162-B509-31892E9CAF2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CDBA84BA-F326-4162-B509-31892E9CAF2E}.Release|Any CPU.Build.0 = Release|Any CPU
{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E}.Release|Any CPU.Build.0 = Release|Any CPU
{D6DE2CBA-F461-4E04-9A96-6C0EE7E32B9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D6DE2CBA-F461-4E04-9A96-6C0EE7E32B9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D6DE2CBA-F461-4E04-9A96-6C0EE7E32B9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D6DE2CBA-F461-4E04-9A96-6C0EE7E32B9E}.Release|Any CPU.Build.0 = Release|Any CPU
{E6EB4FC9-CF24-4735-B8DB-EC78674A94F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E6EB4FC9-CF24-4735-B8DB-EC78674A94F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E6EB4FC9-CF24-4735-B8DB-EC78674A94F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E6EB4FC9-CF24-4735-B8DB-EC78674A94F1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{CDBA84BA-F326-4162-B509-31892E9CAF2E} = {8BFFEF39-1EA0-4D6D-9988-322A74A6558D}
{E9D22AE5-0B04-4ED6-B1BC-4242BE3D321E} = {19E5FDF2-25B6-48AA-BB1B-8BBA9E8323E1}
{D6DE2CBA-F461-4E04-9A96-6C0EE7E32B9E} = {8BFFEF39-1EA0-4D6D-9988-322A74A6558D}
{E6EB4FC9-CF24-4735-B8DB-EC78674A94F1} = {19E5FDF2-25B6-48AA-BB1B-8BBA9E8323E1}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C696E39C-8A3B-4FE3-BBB1-95FE24E67DCD}
EndGlobalSection
EndGlobal
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## 0.2.0

* Add `Aptabase.Core` for generic .NET support (Does not support crash reporter)
* Use [XDG.Directories](https://www.nuget.org/packages/Xdg.Directories) Cache Directory across all .NET SDKs (This was a requirement for Aptabase.Core)

## 0.1.0

* Add `EnablePersistence` to persist events on disk before sending them to the server
Expand Down
47 changes: 44 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
![Aptabase](https://raw.githubusercontent.com/aptabase/aptabase-com/main/public/og.png)

# MAUI SDK for Aptabase
# .NET SDK for Aptabase

[![NuGet](https://img.shields.io/nuget/v/Aptabase.Maui)](https://www.nuget.org/packages/Aptabase.Maui)
[![GitHub](https://img.shields.io/github/license/aptabase/aptabase-maui)](https://github.com/aptabase/aptabase-maui/blob/main/LICENSE)
Expand All @@ -12,10 +12,51 @@ Instrument your apps with Aptabase, an Open Source, Privacy-First and, Simple An
Start by adding the Aptabase NuGet package to your .csproj:

```xml
<PackageReference Include="Aptabase.Maui" Version="0.1.0" />
<PackageReference Include="Aptabase.Core" Version="0.2.0" />
```

## Usage
Or, if you're using MAUI

```xml
<PackageReference Include="Aptabase.Maui" Version="0.2.0" />
```

## Usage (.NET)

First, you need to get your `App Key` from Aptabase, you can find it in the `Instructions` menu on the left side menu.

Change your `Program.cs` to add Aptabase:

```csharp
// Create a ServiceCollection
var services = new ServiceCollection();

services.AddLogging(); // If you haven't registered a logger yet
// Add Aptabase to the service collection
services.UseAptabase("<YOUR_APP_KEY>", new AptabaseOptions
{
#if DEBUG
IsDebugMode = true,
#else
IsDebugMode = false,
#endif
EnableCrashReporting = false, // ❌ Not supported with Aptabase.Core, only Aptabase.Maui
EnablePersistence = true,
});

// ... Register other services you need ...
// Build the service provider
var serviceProvider = services.BuildServiceProvider();

// Get an instance of the Aptabase service (if you need it directly)
var aptabaseClient = serviceProvider.GetRequiredService<IAptabaseClient>();
...
}
```

## Usage (Maui)

First, you need to get your `App Key` from Aptabase, you can find it in the `Instructions` menu on the left side menu.

Expand Down
34 changes: 34 additions & 0 deletions src/Aptabase.Core/Aptabase.Core.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<PackageId>Aptabase.Core</PackageId>
<Version>0.2.0</Version>
<AssemblyVersion>$(Version)</AssemblyVersion>
<FileVersion>$(Version)</FileVersion>
<TargetFramework>net8.0</TargetFramework>
<Description>Dotnet SDK for Aptabase: Open Source, Privacy-First and Simple Analytics for Mobile, Desktop and Web Apps</Description>
<Authors>Aptabase Team</Authors>
<Company>Aptabase</Company>
<PackageProjectUrl>https://aptabase.com</PackageProjectUrl>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageIcon>logo.png</PackageIcon>
<RepositoryUrl>https://github.com/aptabase/aptabase-dotnet</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageTags>analytics, privacy, dotnet, sdk, telemetry</PackageTags>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<None Include="..\..\README.md" Pack="true" PackagePath="\" />
<None Include="..\..\etc\logo.png" Pack="true" PackagePath="\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="DotNext.Threading" Version="5.9.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="Xdg.Directories" Version="0.1.2" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Microsoft.Extensions.Logging;
using System.Threading.Channels;

namespace Aptabase.Maui;
namespace Aptabase.Core;

public class AptabaseClient : IAptabaseClient
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
using System.Net.Http.Json;
using System.Reflection;

namespace Aptabase.Maui;
namespace Aptabase.Core;

internal class AptabaseClientBase : IAsyncDisposable
{
Expand All @@ -20,7 +20,7 @@ internal class AptabaseClientBase : IAsyncDisposable
{
{ "US", "https://us.aptabase.com" },
{ "EU", "https://eu.aptabase.com" },
{ "DEV", DeviceInfo.Platform == DevicePlatform.Android ? "https://10.0.2.2:3000" : "https://localhost:3000" },
{ "DEV", OperatingSystem.IsAndroid() ? "https://10.0.2.2:3000" : "https://localhost:3000" },
{ "SH", "" },
};

Expand Down
38 changes: 38 additions & 0 deletions src/Aptabase.Core/AptabaseExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace Aptabase.Core;


public static class AptabaseExtensions
{
public static IServiceCollection UseAptabase(this IServiceCollection services, string appKey, AptabaseOptions? options = null)
{
services.AddSingleton<IAptabaseClient>(serviceProvider =>
{
IAptabaseClient client;
var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();

if (options?.EnablePersistence != true)
{
client = new AptabaseClient(appKey, options, loggerFactory.CreateLogger<AptabaseClient>());
}
else
{
client = new AptabasePersistentClient(appKey, options, loggerFactory.CreateLogger<AptabasePersistentClient>());
}

if (options?.EnableCrashReporting == true)
{
throw new NotImplementedException("Crash reporting is only for Aptabase.Maui");
}

return client;
});

return services;
}


}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Aptabase.Maui;
namespace Aptabase.Core;

/// <summary>
/// Initialization options for the Aptabase Client
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
using System.Text;
using System.Text.Json;
using System.Threading.Channels;
using Xdg.Directories;

namespace Aptabase.Maui;
namespace Aptabase.Core;

public class AptabasePersistentClient : IAptabaseClient
{
Expand All @@ -26,7 +27,7 @@ public AptabasePersistentClient(string appKey, AptabaseOptions? options, ILogger
SingleReader = true,
ReliableEnumeration = true,
PartitionCapacity = _maxPersistedEvents,
Location = Path.Combine(FileSystem.CacheDirectory, "EventData"),
Location = Path.Combine(BaseDirectory.CacheHome, "Aptabase", "EventData"),
});
_logger = logger;
_cts = new CancellationTokenSource();
Expand Down
Loading

0 comments on commit 3955993

Please sign in to comment.