diff --git a/Sentry.Unity.sln b/Sentry.Unity.sln index 04ddc5a14..804fc073d 100644 --- a/Sentry.Unity.sln +++ b/Sentry.Unity.sln @@ -45,6 +45,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Unity.Android.Tests" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Unity.Native", "src\Sentry.Unity.Native\Sentry.Unity.Native.csproj", "{F291F324-D17C-4732-9E54-099D326B0929}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Unity.MacOS", "src\Sentry.Unity.MacOS\Sentry.Unity.MacOS.csproj", "{B0C3BCDC-44F8-4DD0-B57A-6517F195C06F}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sentry.Analyzers", "src\sentry-dotnet\src\Sentry.Analyzers\Sentry.Analyzers.csproj", "{C1798B72-5382-4C13-96F0-EAFDA28428F0}" EndProject Global @@ -201,6 +203,18 @@ Global {F291F324-D17C-4732-9E54-099D326B0929}.Release|x64.Build.0 = Release|Any CPU {F291F324-D17C-4732-9E54-099D326B0929}.Release|x86.ActiveCfg = Release|Any CPU {F291F324-D17C-4732-9E54-099D326B0929}.Release|x86.Build.0 = Release|Any CPU + {B0C3BCDC-44F8-4DD0-B57A-6517F195C06F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0C3BCDC-44F8-4DD0-B57A-6517F195C06F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0C3BCDC-44F8-4DD0-B57A-6517F195C06F}.Debug|x64.ActiveCfg = Debug|Any CPU + {B0C3BCDC-44F8-4DD0-B57A-6517F195C06F}.Debug|x64.Build.0 = Debug|Any CPU + {B0C3BCDC-44F8-4DD0-B57A-6517F195C06F}.Debug|x86.ActiveCfg = Debug|Any CPU + {B0C3BCDC-44F8-4DD0-B57A-6517F195C06F}.Debug|x86.Build.0 = Debug|Any CPU + {B0C3BCDC-44F8-4DD0-B57A-6517F195C06F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0C3BCDC-44F8-4DD0-B57A-6517F195C06F}.Release|Any CPU.Build.0 = Release|Any CPU + {B0C3BCDC-44F8-4DD0-B57A-6517F195C06F}.Release|x64.ActiveCfg = Release|Any CPU + {B0C3BCDC-44F8-4DD0-B57A-6517F195C06F}.Release|x64.Build.0 = Release|Any CPU + {B0C3BCDC-44F8-4DD0-B57A-6517F195C06F}.Release|x86.ActiveCfg = Release|Any CPU + {B0C3BCDC-44F8-4DD0-B57A-6517F195C06F}.Release|x86.Build.0 = Release|Any CPU {C1798B72-5382-4C13-96F0-EAFDA28428F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C1798B72-5382-4C13-96F0-EAFDA28428F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {C1798B72-5382-4C13-96F0-EAFDA28428F0}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -233,6 +247,7 @@ Global {35A9BDB0-253E-4753-9D47-99CE6AAA4F07} = {36979A3D-4741-4D8A-82BF-4010474388E1} {DC954ED7-3DFA-4197-B511-202CB70AA816} = {6A85CE0A-6FE4-4190-ABEE-7E8BCFF9AF4D} {F291F324-D17C-4732-9E54-099D326B0929} = {36979A3D-4741-4D8A-82BF-4010474388E1} + {B0C3BCDC-44F8-4DD0-B57A-6517F195C06F} = {36979A3D-4741-4D8A-82BF-4010474388E1} {C1798B72-5382-4C13-96F0-EAFDA28428F0} = {36979A3D-4741-4D8A-82BF-4010474388E1} EndGlobalSection EndGlobal diff --git a/package-dev/Plugins/PS5/sentry_utils.c.meta b/package-dev/Plugins/PS5/sentry_utils.c.meta index 36d3e4a3b..d9acbccb3 100644 --- a/package-dev/Plugins/PS5/sentry_utils.c.meta +++ b/package-dev/Plugins/PS5/sentry_utils.c.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 2 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 1 isExplicitlyReferenced: 0 diff --git a/package-dev/Plugins/Switch/sentry_native_stubs.c.meta b/package-dev/Plugins/Switch/sentry_native_stubs.c.meta index 33f21e6e4..09dee13fb 100644 --- a/package-dev/Plugins/Switch/sentry_native_stubs.c.meta +++ b/package-dev/Plugins/Switch/sentry_native_stubs.c.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 3 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 1 isExplicitlyReferenced: 0 @@ -63,4 +64,4 @@ PluginImporter: FrameworkDependencies: userData: assetBundleName: - assetBundleVariant: \ No newline at end of file + assetBundleVariant: diff --git a/package-dev/Plugins/iOS/SentryCxaThrowHook.cpp.meta b/package-dev/Plugins/iOS/SentryCxaThrowHook.cpp.meta index ebe8c0888..5766db819 100644 --- a/package-dev/Plugins/iOS/SentryCxaThrowHook.cpp.meta +++ b/package-dev/Plugins/iOS/SentryCxaThrowHook.cpp.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 2 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 0 isExplicitlyReferenced: 0 diff --git a/package-dev/Plugins/iOS/SentryNativeBridge.m.meta b/package-dev/Plugins/iOS/SentryNativeBridge.m.meta index 42ac109e5..ce5ede060 100644 --- a/package-dev/Plugins/iOS/SentryNativeBridge.m.meta +++ b/package-dev/Plugins/iOS/SentryNativeBridge.m.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 2 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 1 isExplicitlyReferenced: 0 diff --git a/package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m.meta b/package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m.meta index 11c07bd14..82fe75108 100644 --- a/package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m.meta +++ b/package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 2 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 1 isExplicitlyReferenced: 0 @@ -75,4 +76,4 @@ PluginImporter: settings: {} userData: assetBundleName: - assetBundleVariant: \ No newline at end of file + assetBundleVariant: diff --git a/package-dev/Plugins/macOS/SentryNativeBridge.m.meta b/package-dev/Plugins/macOS/SentryNativeBridge.m.meta index 43069dbda..1e56811c4 100644 --- a/package-dev/Plugins/macOS/SentryNativeBridge.m.meta +++ b/package-dev/Plugins/macOS/SentryNativeBridge.m.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 2 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 1 isExplicitlyReferenced: 0 diff --git a/package-dev/Runtime/Sentry.Unity.Android.dll.meta b/package-dev/Runtime/Sentry.Unity.Android.dll.meta index 60106f4f9..97c1470b0 100644 --- a/package-dev/Runtime/Sentry.Unity.Android.dll.meta +++ b/package-dev/Runtime/Sentry.Unity.Android.dll.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 2 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 1 isExplicitlyReferenced: 0 diff --git a/package-dev/Runtime/Sentry.Unity.MacOS.dll.meta b/package-dev/Runtime/Sentry.Unity.MacOS.dll.meta new file mode 100644 index 000000000..0e9ed7711 --- /dev/null +++ b/package-dev/Runtime/Sentry.Unity.MacOS.dll.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 9e48b8cf39b1464f8ac84f4a35e220e2 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: + - !SENTRY_UNITY_DISABLED + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 0 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/package-dev/Runtime/Sentry.Unity.Native.PlayStation.dll.meta b/package-dev/Runtime/Sentry.Unity.Native.PlayStation.dll.meta index bcda1831a..232cb60da 100644 --- a/package-dev/Runtime/Sentry.Unity.Native.PlayStation.dll.meta +++ b/package-dev/Runtime/Sentry.Unity.Native.PlayStation.dll.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 2 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 1 isExplicitlyReferenced: 0 diff --git a/package-dev/Runtime/Sentry.Unity.Native.Switch.dll.meta b/package-dev/Runtime/Sentry.Unity.Native.Switch.dll.meta index 25c262827..949a590ed 100644 --- a/package-dev/Runtime/Sentry.Unity.Native.Switch.dll.meta +++ b/package-dev/Runtime/Sentry.Unity.Native.Switch.dll.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 3 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 1 isExplicitlyReferenced: 0 @@ -71,4 +72,4 @@ PluginImporter: FrameworkDependencies: userData: assetBundleName: - assetBundleVariant: \ No newline at end of file + assetBundleVariant: diff --git a/package-dev/Runtime/Sentry.Unity.Native.Xbox.dll.meta b/package-dev/Runtime/Sentry.Unity.Native.Xbox.dll.meta index a74c98e4e..d472874b3 100644 --- a/package-dev/Runtime/Sentry.Unity.Native.Xbox.dll.meta +++ b/package-dev/Runtime/Sentry.Unity.Native.Xbox.dll.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 2 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 1 isExplicitlyReferenced: 0 diff --git a/package-dev/Runtime/Sentry.Unity.Native.dll.meta b/package-dev/Runtime/Sentry.Unity.Native.dll.meta index 8f7b22dcf..8a625b5cf 100644 --- a/package-dev/Runtime/Sentry.Unity.Native.dll.meta +++ b/package-dev/Runtime/Sentry.Unity.Native.dll.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 2 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 1 isExplicitlyReferenced: 0 diff --git a/package-dev/Runtime/Sentry.Unity.dll.meta b/package-dev/Runtime/Sentry.Unity.dll.meta index 6f21625b4..65e7dc0ce 100644 --- a/package-dev/Runtime/Sentry.Unity.dll.meta +++ b/package-dev/Runtime/Sentry.Unity.dll.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 2 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 1 isExplicitlyReferenced: 0 diff --git a/package-dev/Runtime/Sentry.Unity.iOS.dll.meta b/package-dev/Runtime/Sentry.Unity.iOS.dll.meta index a279b2b75..34b4494ee 100644 --- a/package-dev/Runtime/Sentry.Unity.iOS.dll.meta +++ b/package-dev/Runtime/Sentry.Unity.iOS.dll.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 2 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 1 isExplicitlyReferenced: 0 diff --git a/package-dev/Runtime/Sentry.dll.meta b/package-dev/Runtime/Sentry.dll.meta index 90d7207e6..d98abcd0e 100644 --- a/package-dev/Runtime/Sentry.dll.meta +++ b/package-dev/Runtime/Sentry.dll.meta @@ -5,7 +5,8 @@ PluginImporter: serializedVersion: 2 iconMap: {} executionOrder: {} - defineConstraints: [] + defineConstraints: + - !SENTRY_UNITY_DISABLED isPreloaded: 0 isOverridable: 1 isExplicitlyReferenced: 0 diff --git a/package-dev/Runtime/SentryInitialization.cs b/package-dev/Runtime/SentryInitialization.cs index cf8c8cc2e..ddb20b6a0 100644 --- a/package-dev/Runtime/SentryInitialization.cs +++ b/package-dev/Runtime/SentryInitialization.cs @@ -1,6 +1,6 @@ #if !UNITY_EDITOR -#if UNITY_IOS || (UNITY_STANDALONE_OSX && ENABLE_IL2CPP) +#if UNITY_IOS #define SENTRY_NATIVE_COCOA #endif @@ -8,7 +8,11 @@ #define SENTRY_NATIVE_ANDROID #endif -#if UNITY_STANDALONE_WIN || UNITY_STANDALONE_LINUX || UNITY_STANDALONE_OSX || UNITY_GAMECORE || UNITY_PS5 +#if UNITY_STANDALONE_OSX +#define SENTRY_NATIVE_MACOS +#endif + +#if UNITY_STANDALONE_WIN || UNITY_STANDALONE_LINUX || UNITY_GAMECORE || UNITY_PS5 #define SENTRY_NATIVE #endif @@ -22,7 +26,7 @@ #endif -#if ENABLE_IL2CPP && (SENTRY_NATIVE_COCOA || SENTRY_NATIVE_ANDROID || SENTRY_NATIVE) +#if ENABLE_IL2CPP && (SENTRY_NATIVE_COCOA || SENTRY_NATIVE_ANDROID || SENTRY_NATIVE_MACOS || SENTRY_NATIVE) #define IL2CPP_LINENUMBER_SUPPORT #endif @@ -35,13 +39,8 @@ using UnityEngine; using UnityEngine.Scripting; -#if UNITY_STANDALONE_OSX -#if SENTRY_NATIVE_COCOA -using Sentry.Unity.iOS; -#endif -#if SENTRY_NATIVE -using Sentry.Unity.Native; -#endif +#if SENTRY_NATIVE_MACOS +using Sentry.Unity.MacOS; #elif SENTRY_NATIVE_COCOA using Sentry.Unity.iOS; #elif SENTRY_NATIVE_ANDROID @@ -88,8 +87,8 @@ private static void Init() { // If the SDK is not `enabled` we're closing down the native layer as well. This is especially relevant // in a `built-time-initialization` scenario where the native SDKs self-initialize. -#if UNITY_STANDALONE_OSX - CloseMacosBackend(options); +#if SENTRY_NATIVE_MACOS + SentryNativeMacos.Close(options); #elif SENTRY_NATIVE_COCOA SentryNativeCocoa.Close(options); #elif SENTRY_NATIVE_ANDROID @@ -103,8 +102,8 @@ private static void SetUpPlatformServices() SentryPlatformServices.CollectMainThreadData(); SentryPlatformServices.UnityInfo = new SentryUnityInfo(); -#if UNITY_STANDALONE_OSX - SentryPlatformServices.PlatformConfiguration = ConfigureMacosBackend; +#if SENTRY_NATIVE_MACOS + SentryPlatformServices.PlatformConfiguration = SentryNativeMacos.Configure; #elif SENTRY_NATIVE_COCOA SentryPlatformServices.PlatformConfiguration = SentryNativeCocoa.Configure; #elif SENTRY_NATIVE_ANDROID @@ -118,40 +117,6 @@ private static void SetUpPlatformServices() #endif } -#if UNITY_STANDALONE_OSX - private static void ConfigureMacosBackend(SentryUnityOptions options) - { -#if SENTRY_NATIVE - if (options.Experimental.MacosBackend == MacosBackend.Native) - { - SentryNative.Configure(options); - return; - } -#endif -#if SENTRY_NATIVE_COCOA - SentryNativeCocoa.Configure(options); -#else - options.DiagnosticLogger?.LogWarning( - "MacosBackend is set to Cocoa, but Cocoa requires IL2CPP. " + - "Native crash reporting is disabled. Set MacosBackend to Native or enable IL2CPP."); -#endif - } - - private static void CloseMacosBackend(SentryUnityOptions options) - { - if (options is null) - { - return; - } -#if SENTRY_NATIVE_COCOA - if (options.Experimental.MacosBackend == MacosBackend.Cocoa) - { - SentryNativeCocoa.Close(options); - } -#endif - // Native: nothing to do — SentryNative registers its own close callback at Configure time. - } -#endif } public class SentryUnityInfo : ISentryUnityInfo diff --git a/package/Runtime/Sentry.Microsoft.Bcl.AsyncInterfaces.dll.meta b/package/Runtime/Sentry.Microsoft.Bcl.AsyncInterfaces.dll.meta new file mode 100644 index 000000000..808a10305 --- /dev/null +++ b/package/Runtime/Sentry.Microsoft.Bcl.AsyncInterfaces.dll.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 7298fbc1c8e4145039b7726dd66efa5f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: + - !SENTRY_UNITY_DISABLED + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/package/Runtime/Sentry.System.Collections.Immutable.dll.meta b/package/Runtime/Sentry.System.Collections.Immutable.dll.meta new file mode 100644 index 000000000..eb0499be9 --- /dev/null +++ b/package/Runtime/Sentry.System.Collections.Immutable.dll.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 12a954cfa0f42433fb030fe20413ff6b +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: + - !SENTRY_UNITY_DISABLED + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/package/Runtime/Sentry.System.Reflection.Metadata.dll.meta b/package/Runtime/Sentry.System.Reflection.Metadata.dll.meta new file mode 100644 index 000000000..3e8ccd106 --- /dev/null +++ b/package/Runtime/Sentry.System.Reflection.Metadata.dll.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: d0d2e73f557044ea0800de858240afa6 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: + - !SENTRY_UNITY_DISABLED + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/package/Runtime/Sentry.System.Runtime.CompilerServices.Unsafe.dll.meta b/package/Runtime/Sentry.System.Runtime.CompilerServices.Unsafe.dll.meta new file mode 100644 index 000000000..ce1673e77 --- /dev/null +++ b/package/Runtime/Sentry.System.Runtime.CompilerServices.Unsafe.dll.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 359ef3fee235c4fbaa844df328b4fdbb +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: + - !SENTRY_UNITY_DISABLED + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/package/Runtime/Sentry.System.Text.Encodings.Web.dll.meta b/package/Runtime/Sentry.System.Text.Encodings.Web.dll.meta new file mode 100644 index 000000000..018366d23 --- /dev/null +++ b/package/Runtime/Sentry.System.Text.Encodings.Web.dll.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 9b9494ca2717540c49ff19af8c9f117f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: + - !SENTRY_UNITY_DISABLED + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/package/Runtime/Sentry.System.Text.Json.dll.meta b/package/Runtime/Sentry.System.Text.Json.dll.meta new file mode 100644 index 000000000..e8648cb56 --- /dev/null +++ b/package/Runtime/Sentry.System.Text.Json.dll.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 07527907c2c644774a123f5411155e50 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: + - !SENTRY_UNITY_DISABLED + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/package/Runtime/io.sentry.unity.runtime.asmdef b/package/Runtime/io.sentry.unity.runtime.asmdef index e9e1c7df5..bec3e7f2f 100644 --- a/package/Runtime/io.sentry.unity.runtime.asmdef +++ b/package/Runtime/io.sentry.unity.runtime.asmdef @@ -22,7 +22,9 @@ "overrideReferences": false, "precompiledReferences": [], "autoReferenced": true, - "defineConstraints": [], + "defineConstraints": [ + "!SENTRY_UNITY_DISABLED" + ], "versionDefines": [], "noEngineReferences": false -} \ No newline at end of file +} diff --git a/src/Sentry.Unity.Editor.iOS/BuildPostProcess.cs b/src/Sentry.Unity.Editor.iOS/BuildPostProcess.cs index 1285ed51d..a17bd94a1 100644 --- a/src/Sentry.Unity.Editor.iOS/BuildPostProcess.cs +++ b/src/Sentry.Unity.Editor.iOS/BuildPostProcess.cs @@ -1,6 +1,7 @@ using System; using System.IO; using Sentry.Extensibility; +using Sentry.Unity.Editor; using Sentry.Unity.Editor.ConfigurationWindow; using UnityEngine; using UnityEditor; @@ -19,6 +20,12 @@ public static void OnPostProcessBuild(BuildTarget target, string pathToProject) return; } + if (SentryBuildDefines.IsDisabled(target)) + { + RemoveSentryFromXcodeProject(pathToProject); + return; + } + var cliOptions = SentryScriptableObject.LoadCliOptions(); var options = SentryScriptableObject.LoadOptions(isBuilding: true); var logger = options?.DiagnosticLogger ?? new UnityLogger(new SentryUnityOptions()); @@ -26,6 +33,45 @@ public static void OnPostProcessBuild(BuildTarget target, string pathToProject) AddSentryToXcodeProject(options, cliOptions, logger, pathToProject); } + internal static void RemoveSentryFromXcodeProject(string pathToProject) + { + var logger = new UnityLogger(new SentryUnityOptions()); + + NativeMain.RemoveSentry(Path.Combine(pathToProject, SentryXcodeProject.MainPath), logger); + + using (var sentryXcodeProject = SentryXcodeProject.Open(pathToProject, logger)) + { + sentryXcodeProject.RemoveSentryFiles(); + } + + DeleteFile(Path.Combine(pathToProject, "MainApp", SentryXcodeProject.OptionsName)); + DeleteFile(Path.Combine(pathToProject, "sentry.properties")); + DeleteFile(Path.Combine(pathToProject, SentryCli.SentryCliMacOS)); + DeleteFile(Path.Combine(pathToProject, "Libraries", SentryPackageInfo.GetName(), SentryXcodeProject.BridgeName)); + DeleteDirectory(Path.Combine(pathToProject, "Frameworks", SentryXcodeProject.FrameworkName)); + + foreach (var path in Directory.GetFiles(pathToProject, "SentryCxaThrowHook.cpp", SearchOption.AllDirectories)) + { + DeleteFile(path); + } + } + + private static void DeleteFile(string path) + { + if (File.Exists(path)) + { + File.Delete(path); + } + } + + private static void DeleteDirectory(string path) + { + if (Directory.Exists(path)) + { + Directory.Delete(path, true); + } + } + internal static bool IsNativeSupportEnabled(SentryUnityOptions options, IDiagnosticLogger logger) { if (!options.IsValid()) diff --git a/src/Sentry.Unity.Editor.iOS/NativeMain.cs b/src/Sentry.Unity.Editor.iOS/NativeMain.cs index 30b408cd3..2e0efb279 100644 --- a/src/Sentry.Unity.Editor.iOS/NativeMain.cs +++ b/src/Sentry.Unity.Editor.iOS/NativeMain.cs @@ -41,6 +41,28 @@ public static void AddSentry(string pathToMain, IDiagnosticLogger? logger) logger?.LogDebug("Successfully added Sentry to 'main'. "); } + public static void RemoveSentry(string pathToMain, IDiagnosticLogger? logger) + { + if (!File.Exists(pathToMain)) + { + return; + } + + var main = File.ReadAllText(pathToMain); + if (!ContainsSentry(main, logger)) + { + return; + } + + if (!main.Contains(Init)) + { + throw new InvalidOperationException("Failed to remove the Sentry initialization from 'main.mm'."); + } + + File.WriteAllText(pathToMain, main.Replace(Include, string.Empty).Replace(Init, string.Empty)); + logger?.LogDebug("Removed Sentry from 'main'."); + } + internal static bool ContainsSentry(string main, IDiagnosticLogger? logger) { if (main.Contains(Include)) diff --git a/src/Sentry.Unity.Editor.iOS/SentryXcodeProject.cs b/src/Sentry.Unity.Editor.iOS/SentryXcodeProject.cs index 9ab59ab55..099e1f7bc 100644 --- a/src/Sentry.Unity.Editor.iOS/SentryXcodeProject.cs +++ b/src/Sentry.Unity.Editor.iOS/SentryXcodeProject.cs @@ -172,6 +172,37 @@ public void AddSentryNativeBridge() _logger?.LogDebug("Successfully added the Sentry Native Bridge."); } + public void RemoveSentryFiles() + { + RemoveFile(Path.Combine("Frameworks", FrameworkName)); + RemoveFile(Path.Combine("Libraries", SentryPackageInfo.GetName(), BridgeName)); + RemoveFile(_optionsPath); + + var setBuildPropertyMethod = _pbxProjectType.GetMethod("SetBuildProperty", new[] { typeof(string), typeof(string), typeof(string) }); + foreach (var property in new[] + { + SymbolUploadPropertyName, + IncludeSourcesPropertyName, + AllowFailurePropertyName, + PrintLogsPropertyName, + }) + { + setBuildPropertyMethod.Invoke(_project, new object[] { _mainTargetGuid, property, "NO" }); + } + } + + private void RemoveFile(string projectPath) + { + var findFileGuidMethod = _pbxProjectType.GetMethod("FindFileGuidByProjectPath", new[] { typeof(string) }); + var fileGuid = (string)findFileGuidMethod.Invoke(_project, new object[] { projectPath }); + if (string.IsNullOrEmpty(fileGuid)) + { + return; + } + + _pbxProjectType.GetMethod("RemoveFile", new[] { typeof(string) }).Invoke(_project, new object[] { fileGuid }); + } + // Used for testing internal void SetSearchPathBuildProperty(string path) { diff --git a/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs b/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs index 85c5052d5..68a6164b2 100644 --- a/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs +++ b/src/Sentry.Unity.Editor/Android/AndroidManifestConfiguration.cs @@ -35,6 +35,12 @@ public int callbackOrder public void OnPostGenerateGradleAndroidProject(string basePath) { var androidManifestConfiguration = new AndroidManifestConfiguration(); + if (SentryBuildDefines.IsDisabled(BuildTarget.Android)) + { + androidManifestConfiguration.RemoveSentryFromGradleProject(basePath); + return; + } + androidManifestConfiguration.OnPostGenerateGradleAndroidProject(basePath); } } @@ -111,6 +117,40 @@ public void OnPostGenerateGradleAndroidProject(string basePath) SetupProguard(gradleProjectPath); } + internal void RemoveSentryFromGradleProject(string basePath) + { + RemoveSentryFromManifest(basePath); + + var gradleProjectPath = Directory.GetParent(basePath).FullName; + var unityLibraryPath = Path.Combine(gradleProjectPath, "unityLibrary"); + foreach (var fileName in new[] + { + "sentry-android-core-release.aar", + "sentry-android-ndk-release.aar", + "sentry-native-ndk-release.aar", + "sentry.jar", + }) + { + var path = Path.Combine(unityLibraryPath, "libs", fileName); + if (File.Exists(path)) + { + File.Delete(path); + } + } + + if (File.Exists(Path.Combine(unityLibraryPath, "build.gradle"))) + { + new GradleSetup(_logger, gradleProjectPath).ClearGradleProject(); + new ProguardSetup(_logger, gradleProjectPath).RemoveFromGradleProject(); + } + + var launcherBuildFile = Path.Combine(gradleProjectPath, "launcher", "build.gradle"); + if (File.Exists(launcherBuildFile)) + { + new DebugSymbolUpload(_logger, null, string.Empty, gradleProjectPath).RemoveUploadFromGradleFile(); + } + } + internal void ModifyManifest(string basePath) { var manifestPath = GetManifestPath(basePath); @@ -143,6 +183,7 @@ internal void ModifyManifest(string basePath) if (!enableNativeSupport) { + _ = androidManifest.Save(); return; } @@ -234,6 +275,19 @@ internal void ModifyManifest(string basePath) _ = androidManifest.Save(); } + private void RemoveSentryFromManifest(string basePath) + { + var manifestPath = GetManifestPath(basePath); + if (!File.Exists(manifestPath)) + { + return; + } + + var androidManifest = new AndroidManifest(manifestPath, _logger); + androidManifest.RemovePreviousConfigurations(); + _ = androidManifest.Save(); + } + internal void CopyAndroidSdkToGradleProject(string unityProjectPath, string gradlePath) { var androidSdkPath = Path.Combine(unityProjectPath, "Packages", SentryPackageInfo.GetName(), "Plugins", "Android", "Sentry~"); diff --git a/src/Sentry.Unity.Editor/Il2CppBuildPreProcess.cs b/src/Sentry.Unity.Editor/Il2CppBuildPreProcess.cs index 5c41aa1cd..464b93815 100644 --- a/src/Sentry.Unity.Editor/Il2CppBuildPreProcess.cs +++ b/src/Sentry.Unity.Editor/Il2CppBuildPreProcess.cs @@ -15,6 +15,11 @@ internal class Il2CppBuildPreProcess : IPreprocessBuildWithReport public void OnPreprocessBuild(BuildReport report) { + if (SentryBuildDefines.IsDisabled(report.summary.platform)) + { + return; + } + var namedBuildTarget = NamedBuildTarget.FromBuildTargetGroup(report.summary.platformGroup); if (PlayerSettings.GetScriptingBackend(namedBuildTarget) != ScriptingImplementation.IL2CPP) { diff --git a/src/Sentry.Unity.Editor/Native/BuildPostProcess.cs b/src/Sentry.Unity.Editor/Native/BuildPostProcess.cs index 371e8f4ea..d1c08ac22 100644 --- a/src/Sentry.Unity.Editor/Native/BuildPostProcess.cs +++ b/src/Sentry.Unity.Editor/Native/BuildPostProcess.cs @@ -27,6 +27,13 @@ and not BuildTargetGroup.PS5 return; } + if (SentryBuildDefines.IsDisabled(target)) + { + var disabledLogger = new UnityLogger(new SentryUnityOptions()); + CleanupSentryArtifacts(target, executablePath, disabledLogger); + return; + } + var cliOptions = SentryScriptableObject.LoadCliOptions(); var options = SentryScriptableObject.LoadOptions(isBuilding: true); var logger = options?.DiagnosticLogger ?? new UnityLogger(options ?? new SentryUnityOptions()); @@ -134,6 +141,23 @@ and not BuildTargetGroup.PS5 _ => false, }; + private static void CleanupSentryArtifacts(BuildTarget target, string executablePath, IDiagnosticLogger logger) + { + switch (target) + { + case BuildTarget.StandaloneOSX: + CleanupStaleMacOSArtifacts(logger, executablePath); + break; + case BuildTarget.StandaloneWindows: + case BuildTarget.StandaloneWindows64: + CleanupStaleWindowsArtifacts(logger, Path.GetDirectoryName(executablePath)!); + break; + case BuildTarget.StandaloneLinux64: + CleanupStaleLinuxArtifacts(logger, Path.GetDirectoryName(executablePath)!); + break; + } + } + private readonly struct NativePluginArtifact(string source, string destination, bool isExecutable = false) { public readonly string Source = source; @@ -275,6 +299,7 @@ private static void CleanupStaleWindowsArtifacts(IDiagnosticLogger logger, strin { Path.Combine(buildOutputDir, "crashpad_handler.exe"), Path.Combine(buildOutputDir, "crashpad_wer.dll"), + Path.Combine(buildOutputDir, "sentry.dll"), Path.Combine(buildOutputDir, "sentry-crash.exe"), Path.Combine(buildOutputDir, "sentry-wer.dll"), }) diff --git a/src/Sentry.Unity.Editor/Native/PS5NativePluginBuildPreProcess.cs b/src/Sentry.Unity.Editor/Native/PS5NativePluginBuildPreProcess.cs index 420e5c686..bb8703c3e 100644 --- a/src/Sentry.Unity.Editor/Native/PS5NativePluginBuildPreProcess.cs +++ b/src/Sentry.Unity.Editor/Native/PS5NativePluginBuildPreProcess.cs @@ -28,6 +28,11 @@ public void OnPreprocessBuild(BuildReport report) return; } + if (SentryBuildDefines.IsDisabled(report.summary.platform)) + { + return; + } + var options = SentryScriptableObject.LoadOptions(isBuilding: true); if (options is null) { diff --git a/src/Sentry.Unity.Editor/Native/SwitchNativePluginBuildPreProcess.cs b/src/Sentry.Unity.Editor/Native/SwitchNativePluginBuildPreProcess.cs index 104ec7e92..84d001555 100644 --- a/src/Sentry.Unity.Editor/Native/SwitchNativePluginBuildPreProcess.cs +++ b/src/Sentry.Unity.Editor/Native/SwitchNativePluginBuildPreProcess.cs @@ -36,6 +36,11 @@ public void OnPreprocessBuild(BuildReport report) return; } + if (SentryBuildDefines.IsDisabled(report.summary.platform)) + { + return; + } + var options = SentryScriptableObject.LoadOptions(isBuilding: true); var logger = options?.DiagnosticLogger ?? new UnityLogger(new SentryUnityOptions()); diff --git a/src/Sentry.Unity.Editor/Native/XboxNativePluginBuildPreProcess.cs b/src/Sentry.Unity.Editor/Native/XboxNativePluginBuildPreProcess.cs index 549336914..553f3a612 100644 --- a/src/Sentry.Unity.Editor/Native/XboxNativePluginBuildPreProcess.cs +++ b/src/Sentry.Unity.Editor/Native/XboxNativePluginBuildPreProcess.cs @@ -31,6 +31,11 @@ public void OnPreprocessBuild(BuildReport report) return; } + if (SentryBuildDefines.IsDisabled(report.summary.platform)) + { + return; + } + var options = SentryScriptableObject.LoadOptions(isBuilding: true); if (options is null) { diff --git a/src/Sentry.Unity.Editor/SentryBuildDefines.cs b/src/Sentry.Unity.Editor/SentryBuildDefines.cs new file mode 100644 index 000000000..9acbeb91c --- /dev/null +++ b/src/Sentry.Unity.Editor/SentryBuildDefines.cs @@ -0,0 +1,19 @@ +using System; +using UnityEditor; +using UnityEditor.Build; + +namespace Sentry.Unity.Editor; + +internal static class SentryBuildDefines +{ + internal const string Disabled = "SENTRY_UNITY_DISABLED"; + + internal static bool IsDisabled(BuildTarget target) => + IsDisabled(BuildPipeline.GetBuildTargetGroup(target)); + + internal static bool IsDisabled(BuildTargetGroup targetGroup) => + IsDisabled(PlayerSettings.GetScriptingDefineSymbols(NamedBuildTarget.FromBuildTargetGroup(targetGroup))); + + internal static bool IsDisabled(string defines) => + Array.IndexOf(defines.Split(';'), Disabled) >= 0; +} diff --git a/src/Sentry.Unity.Editor/WebGL/BuildPreProcess.cs b/src/Sentry.Unity.Editor/WebGL/BuildPreProcess.cs index cb60c6ff8..2a5d5a5f0 100644 --- a/src/Sentry.Unity.Editor/WebGL/BuildPreProcess.cs +++ b/src/Sentry.Unity.Editor/WebGL/BuildPreProcess.cs @@ -18,6 +18,11 @@ public void OnPreprocessBuild(BuildReport report) return; } + if (SentryBuildDefines.IsDisabled(report.summary.platform)) + { + return; + } + var options = SentryScriptableObject.LoadOptions(isBuilding: true); if (options?.Enabled is not true) { diff --git a/src/Sentry.Unity.MacOS/Sentry.Unity.MacOS.csproj b/src/Sentry.Unity.MacOS/Sentry.Unity.MacOS.csproj new file mode 100644 index 000000000..1dbf30142 --- /dev/null +++ b/src/Sentry.Unity.MacOS/Sentry.Unity.MacOS.csproj @@ -0,0 +1,12 @@ + + + $(PackageRuntimePath) + + + + + + + + + diff --git a/src/Sentry.Unity.MacOS/SentryNativeMacos.cs b/src/Sentry.Unity.MacOS/SentryNativeMacos.cs new file mode 100644 index 000000000..8e8d3071a --- /dev/null +++ b/src/Sentry.Unity.MacOS/SentryNativeMacos.cs @@ -0,0 +1,42 @@ +using Sentry.Extensibility; +using Sentry.Unity.iOS; +using Sentry.Unity.Native; +using Sentry.Unity.NativeUtils; + +namespace Sentry.Unity.MacOS; + +public static class SentryNativeMacos +{ + public static void Configure(SentryUnityOptions options) + { + if (options.Experimental.MacosBackend == MacosBackend.Native) + { + SentryNative.Configure(options); + return; + } + + if (!SentryPlatformServices.UnityInfo.IL2CPP) + { + options.DiagnosticLogger?.LogWarning( + "Cocoa backend requires IL2CPP on macOS. Native crash reporting is disabled. " + + "Set macOS Backend to Native or enable IL2CPP."); + return; + } + + SentryNativeCocoa.Configure(options); + } + + public static void Close(SentryUnityOptions options) + { + if (options is null) + { + return; + } + + if (options.Experimental.MacosBackend == MacosBackend.Cocoa + && SentryPlatformServices.UnityInfo.IL2CPP) + { + SentryNativeCocoa.Close(options); + } + } +} diff --git a/test/Scripts.Tests/package-release.zip.snapshot b/test/Scripts.Tests/package-release.zip.snapshot index b0902bd3d..3847cf196 100644 --- a/test/Scripts.Tests/package-release.zip.snapshot +++ b/test/Scripts.Tests/package-release.zip.snapshot @@ -315,6 +315,10 @@ Runtime/Sentry.Unity.iOS.dll Runtime/Sentry.Unity.iOS.dll.meta Runtime/Sentry.Unity.iOS.pdb Runtime/Sentry.Unity.iOS.pdb.meta +Runtime/Sentry.Unity.MacOS.dll +Runtime/Sentry.Unity.MacOS.dll.meta +Runtime/Sentry.Unity.MacOS.pdb +Runtime/Sentry.Unity.MacOS.pdb.meta Runtime/Sentry.Unity.Native.dll Runtime/Sentry.Unity.Native.dll.meta Runtime/Sentry.Unity.Native.pdb diff --git a/test/Sentry.Unity.Editor.Tests/Android/AndroidManifestConfigurationTests.cs b/test/Sentry.Unity.Editor.Tests/Android/AndroidManifestConfigurationTests.cs index 0be4840a1..437fe8ba9 100644 --- a/test/Sentry.Unity.Editor.Tests/Android/AndroidManifestConfigurationTests.cs +++ b/test/Sentry.Unity.Editor.Tests/Android/AndroidManifestConfigurationTests.cs @@ -97,6 +97,29 @@ public void ModifyManifest_UnityOptions_EnabledFalse_LogDebugAndDoesNotAddSentry Assert.False(manifest.Contains("io.sentry.dsn")); } + [Test] + public void ModifyManifest_DisabledAfterEnabled_RemovesPreviousSentryConfiguration() + { + var sut = _fixture.GetSut(); + var basePath = GetFakeManifestFileBasePath(); + var manifestPath = AndroidManifestConfiguration.GetManifestPath(basePath); + + try + { + sut.ModifyManifest(basePath); + StringAssert.Contains("io.sentry.dsn", File.ReadAllText(manifestPath)); + + _fixture.SentryUnityOptions!.Enabled = false; + sut.ModifyManifest(basePath); + + StringAssert.DoesNotContain("io.sentry.dsn", File.ReadAllText(manifestPath)); + } + finally + { + Directory.Delete(basePath, true); + } + } + [Test] [TestCase(null)] [TestCase("")] diff --git a/test/Sentry.Unity.Editor.Tests/SentryBuildDefinesTests.cs b/test/Sentry.Unity.Editor.Tests/SentryBuildDefinesTests.cs new file mode 100644 index 000000000..a7030bce3 --- /dev/null +++ b/test/Sentry.Unity.Editor.Tests/SentryBuildDefinesTests.cs @@ -0,0 +1,17 @@ +using NUnit.Framework; +using Sentry.Unity.Editor; + +namespace Sentry.Unity.Editor.Tests; + +public class SentryBuildDefinesTests +{ + [TestCase("")] + [TestCase("FEATURE_A;FEATURE_B")] + public void IsDisabled_DefineMissing_ReturnsFalse(string defines) => + Assert.False(SentryBuildDefines.IsDisabled(defines)); + + [TestCase("SENTRY_UNITY_DISABLED")] + [TestCase("FEATURE_A;SENTRY_UNITY_DISABLED;FEATURE_B")] + public void IsDisabled_DefinePresent_ReturnsTrue(string defines) => + Assert.True(SentryBuildDefines.IsDisabled(defines)); +} diff --git a/test/Sentry.Unity.Editor.iOS.Tests/BuildPostProcessorTests.cs b/test/Sentry.Unity.Editor.iOS.Tests/BuildPostProcessorTests.cs index 445f682bd..4387ec000 100644 --- a/test/Sentry.Unity.Editor.iOS.Tests/BuildPostProcessorTests.cs +++ b/test/Sentry.Unity.Editor.iOS.Tests/BuildPostProcessorTests.cs @@ -124,6 +124,26 @@ public void AddSentryToXcodeProject_NativeSupportEnabledAndInitializationTypeBui Assert.IsTrue(NativeMain.ContainsSentry(mainFile, null)); // The main.mm must contain Sentry } + [Test] + public void RemoveSentryFromXcodeProject_EnabledThenDisabled_RemovesSentryArtifacts() + { + var options = new SentryUnityOptions + { + Dsn = "https://k@h/p", + IosNativeSupportEnabled = true, + IosNativeInitializationType = NativeInitializationType.BuildTime + }; + + BuildPostProcess.AddSentryToXcodeProject(options, null, new TestLogger(), _outputProjectPath); + BuildPostProcess.RemoveSentryFromXcodeProject(_outputProjectPath); + + var mainFile = File.ReadAllText(Path.Combine(_outputProjectPath, SentryXcodeProject.MainPath)); + Assert.False(NativeMain.ContainsSentry(mainFile, null)); + Assert.False(File.Exists(Path.Combine(_outputProjectPath, "Libraries", SentryPackageInfo.GetName(), SentryXcodeProject.BridgeName))); + Assert.False(Directory.Exists(Path.Combine(_outputProjectPath, "Frameworks", SentryXcodeProject.FrameworkName))); + Assert.False(File.Exists(Path.Combine(_outputProjectPath, "MainApp", SentryXcodeProject.OptionsName))); + } + [Test] public void IsNativeSupportEnabled_OptionsDisabled_LogsAndReturnsFalse() {