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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
### Fixes

- The SDK now preserves the types Mono's HTTP stack needs, even with high stripping level. ([#2858](https://github.com/getsentry/sentry-unity/pull/2858))
- When targeting a dedicated server, the SDK now relies on the actual scripting backend to set up IL2CPP line number and native support and to set up the automatic debug symbol upload ([#2882](https://github.com/getsentry/sentry-unity/pull/2882))

### Dependencies

Expand Down
3 changes: 1 addition & 2 deletions src/Sentry.Unity.Editor/Il2CppBuildPreProcess.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@ internal class Il2CppBuildPreProcess : IPreprocessBuildWithReport

public void OnPreprocessBuild(BuildReport report)
{
var namedBuildTarget = NamedBuildTarget.FromBuildTargetGroup(report.summary.platformGroup);
if (PlayerSettings.GetScriptingBackend(namedBuildTarget) != ScriptingImplementation.IL2CPP)
if (PlayerSettings.GetScriptingBackend(NamedBuildTargets.FromBuildReport(report)) != ScriptingImplementation.IL2CPP)
{
return;
}
Expand Down
7 changes: 1 addition & 6 deletions src/Sentry.Unity.Editor/MonoLinkerProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,7 @@ internal class MonoLinkerProcessor : IUnityLinkerProcessor

public string? GenerateAdditionalLinkXmlFile(BuildReport report, UnityLinkerBuildPipelineData data)
{
var summary = report.summary;
var namedBuildTarget = summary.platformGroup == BuildTargetGroup.Standalone
&& summary.GetSubtarget<StandaloneBuildSubtarget>() == StandaloneBuildSubtarget.Server
? NamedBuildTarget.Server
: NamedBuildTarget.FromBuildTargetGroup(summary.platformGroup);
if (PlayerSettings.GetScriptingBackend(namedBuildTarget) != ScriptingImplementation.Mono2x)
if (PlayerSettings.GetScriptingBackend(NamedBuildTargets.FromBuildReport(report)) != ScriptingImplementation.Mono2x)
{
return null;
}
Expand Down
23 changes: 23 additions & 0 deletions src/Sentry.Unity.Editor/NamedBuildTargets.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;

namespace Sentry.Unity.Editor;

/// <summary>
/// Dedicated Server builds report <c>BuildTargetGroup.Standalone</c> but have their own player settings,
/// i.e. scripting backend, under <c>NamedBuildTarget.Server</c>.
/// </summary>
internal static class NamedBuildTargets
{
// `GetSubtarget` throws on platforms without a subtarget, e.g. Android.
internal static NamedBuildTarget FromBuildReport(BuildReport report) =>
report.summary.platformGroup == BuildTargetGroup.Standalone
? From(BuildTargetGroup.Standalone, report.summary.GetSubtarget<StandaloneBuildSubtarget>())
: NamedBuildTarget.FromBuildTargetGroup(report.summary.platformGroup);

internal static NamedBuildTarget From(BuildTargetGroup group, StandaloneBuildSubtarget subtarget) =>
group == BuildTargetGroup.Standalone && subtarget == StandaloneBuildSubtarget.Server
? NamedBuildTarget.Server
: NamedBuildTarget.FromBuildTargetGroup(group);
}
14 changes: 9 additions & 5 deletions src/Sentry.Unity.Editor/Native/BuildPostProcess.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,21 @@
using UnityEngine;
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Callbacks;
using UnityEditor.Build.Reporting;
using System.Diagnostics;
using System.Linq;

namespace Sentry.Unity.Editor.Native;

public static class BuildPostProcess
internal class BuildPostProcess : IPostprocessBuildWithReport
{
[PostProcessBuild(1)]
public static void OnPostProcessBuild(BuildTarget target, string executablePath)
public int callbackOrder => 1;

public void OnPostprocessBuild(BuildReport report) =>
OnPostProcessBuild(report.summary.platform, report.summary.outputPath,
NamedBuildTargets.FromBuildReport(report));

private static void OnPostProcessBuild(BuildTarget target, string executablePath, NamedBuildTarget namedBuildTarget)
{
var targetGroup = BuildPipeline.GetBuildTargetGroup(target);
var isSupportedGroup = targetGroup is BuildTargetGroup.Standalone
Expand Down Expand Up @@ -46,7 +51,6 @@ or BuildTargetGroup.Switch
return;
}

var namedBuildTarget = NamedBuildTarget.FromBuildTargetGroup(targetGroup);
var isMono = PlayerSettings.GetScriptingBackend(namedBuildTarget) == ScriptingImplementation.Mono2x;

// The executable path resolves to the following when pointing Unity into a `build/platform/` directory:
Expand Down
18 changes: 18 additions & 0 deletions test/Sentry.Unity.Editor.Tests/NamedBuildTargetsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using NUnit.Framework;
using UnityEditor;
using UnityEditor.Build;

namespace Sentry.Unity.Editor.Tests;

public class NamedBuildTargetsTests
{
[Test]
[TestCase(StandaloneBuildSubtarget.Player, "Standalone")]
[TestCase(StandaloneBuildSubtarget.Server, "Server")]
public void From_Standalone_RespectsSubtarget(StandaloneBuildSubtarget subtarget, string expected)
{
var actual = NamedBuildTargets.From(BuildTargetGroup.Standalone, subtarget);

Assert.AreEqual(expected, actual.TargetName);
}
}
Loading