diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..7f8715d
--- /dev/null
+++ b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,252 @@
+{
+ "images": [
+ {
+ "filename": "Icon40.png",
+ "idiom": "iphone",
+ "scale": "2x",
+ "size": "20x20"
+ },
+ {
+ "filename": "Icon60.png",
+ "idiom": "iphone",
+ "scale": "3x",
+ "size": "20x20"
+ },
+ {
+ "filename": "Icon58.png",
+ "idiom": "iphone",
+ "scale": "2x",
+ "size": "29x29"
+ },
+ {
+ "filename": "Icon87.png",
+ "idiom": "iphone",
+ "scale": "3x",
+ "size": "29x29"
+ },
+ {
+ "filename": "Icon80.png",
+ "idiom": "iphone",
+ "scale": "2x",
+ "size": "40x40"
+ },
+ {
+ "filename": "Icon120.png",
+ "idiom": "iphone",
+ "scale": "3x",
+ "size": "40x40"
+ },
+ {
+ "filename": "Icon120.png",
+ "idiom": "iphone",
+ "scale": "2x",
+ "size": "60x60"
+ },
+ {
+ "filename": "Icon180.png",
+ "idiom": "iphone",
+ "scale": "3x",
+ "size": "60x60"
+ },
+ {
+ "filename": "Icon20.png",
+ "idiom": "ipad",
+ "scale": "1x",
+ "size": "20x20"
+ },
+ {
+ "filename": "Icon40.png",
+ "idiom": "ipad",
+ "scale": "2x",
+ "size": "20x20"
+ },
+ {
+ "filename": "Icon29.png",
+ "idiom": "ipad",
+ "scale": "1x",
+ "size": "29x29"
+ },
+ {
+ "filename": "Icon58.png",
+ "idiom": "ipad",
+ "scale": "2x",
+ "size": "29x29"
+ },
+ {
+ "filename": "Icon40.png",
+ "idiom": "ipad",
+ "scale": "1x",
+ "size": "40x40"
+ },
+ {
+ "filename": "Icon80.png",
+ "idiom": "ipad",
+ "scale": "2x",
+ "size": "40x40"
+ },
+ {
+ "filename": "Icon76.png",
+ "idiom": "ipad",
+ "scale": "1x",
+ "size": "76x76"
+ },
+ {
+ "filename": "Icon152.png",
+ "idiom": "ipad",
+ "scale": "2x",
+ "size": "76x76"
+ },
+ {
+ "filename": "Icon167.png",
+ "idiom": "ipad",
+ "scale": "2x",
+ "size": "83.5x83.5"
+ },
+ {
+ "filename": "Icon1024.png",
+ "idiom": "ios-marketing",
+ "scale": "1x",
+ "size": "1024x1024"
+ },
+ {
+ "idiom": "car",
+ "scale": "2x",
+ "size": "60x60"
+ },
+ {
+ "idiom": "car",
+ "scale": "3x",
+ "size": "60x60"
+ },
+ {
+ "idiom": "watch",
+ "role": "notificationCenter",
+ "scale": "2x",
+ "size": "24x24",
+ "subtype": "38mm"
+ },
+ {
+ "idiom": "watch",
+ "role": "notificationCenter",
+ "scale": "2x",
+ "size": "27.5x27.5",
+ "subtype": "42mm"
+ },
+ {
+ "idiom": "watch",
+ "role": "companionSettings",
+ "scale": "2x",
+ "size": "29x29"
+ },
+ {
+ "idiom": "watch",
+ "role": "companionSettings",
+ "scale": "3x",
+ "size": "29x29"
+ },
+ {
+ "idiom": "watch",
+ "role": "appLauncher",
+ "scale": "2x",
+ "size": "40x40",
+ "subtype": "38mm"
+ },
+ {
+ "idiom": "watch",
+ "role": "appLauncher",
+ "scale": "2x",
+ "size": "44x44",
+ "subtype": "40mm"
+ },
+ {
+ "idiom": "watch",
+ "role": "appLauncher",
+ "scale": "2x",
+ "size": "50x50",
+ "subtype": "44mm"
+ },
+ {
+ "idiom": "watch",
+ "role": "quickLook",
+ "scale": "2x",
+ "size": "86x86",
+ "subtype": "38mm"
+ },
+ {
+ "idiom": "watch",
+ "role": "quickLook",
+ "scale": "2x",
+ "size": "98x98",
+ "subtype": "42mm"
+ },
+ {
+ "idiom": "watch",
+ "role": "quickLook",
+ "scale": "2x",
+ "size": "108x108",
+ "subtype": "44mm"
+ },
+ {
+ "idiom": "watch-marketing",
+ "scale": "1x",
+ "size": "1024x1024"
+ },
+ {
+ "idiom": "mac",
+ "scale": "1x",
+ "size": "16x16"
+ },
+ {
+ "idiom": "mac",
+ "scale": "2x",
+ "size": "16x16"
+ },
+ {
+ "idiom": "mac",
+ "scale": "1x",
+ "size": "32x32"
+ },
+ {
+ "idiom": "mac",
+ "scale": "2x",
+ "size": "32x32"
+ },
+ {
+ "idiom": "mac",
+ "scale": "1x",
+ "size": "128x128"
+ },
+ {
+ "idiom": "mac",
+ "scale": "2x",
+ "size": "128x128"
+ },
+ {
+ "idiom": "mac",
+ "scale": "1x",
+ "size": "256x256"
+ },
+ {
+ "idiom": "mac",
+ "scale": "2x",
+ "size": "256x256"
+ },
+ {
+ "idiom": "mac",
+ "scale": "1x",
+ "size": "512x512"
+ },
+ {
+ "idiom": "mac",
+ "scale": "2x",
+ "size": "512x512"
+ }
+ ],
+ "info": {
+ "author": "xcode",
+ "version": 1
+ },
+ "properties": {
+ "pre-rendered": false
+ }
+}
\ No newline at end of file
diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png
new file mode 100644
index 0000000..b573205
Binary files /dev/null and b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png differ
diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png
new file mode 100644
index 0000000..0b74155
Binary files /dev/null and b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png differ
diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png
new file mode 100644
index 0000000..1c19313
Binary files /dev/null and b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png differ
diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png
new file mode 100644
index 0000000..4e3e8bd
Binary files /dev/null and b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png differ
diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png
new file mode 100644
index 0000000..40a7371
Binary files /dev/null and b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png differ
diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png
new file mode 100644
index 0000000..8bb1383
Binary files /dev/null and b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png differ
diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png
new file mode 100644
index 0000000..bdd130c
Binary files /dev/null and b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png differ
diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png
new file mode 100644
index 0000000..75d2789
Binary files /dev/null and b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png differ
diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png
new file mode 100644
index 0000000..06afa60
Binary files /dev/null and b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png differ
diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png
new file mode 100644
index 0000000..2e0db2a
Binary files /dev/null and b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png differ
diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png
new file mode 100644
index 0000000..755bc88
Binary files /dev/null and b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png differ
diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png
new file mode 100644
index 0000000..6559bb4
Binary files /dev/null and b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png differ
diff --git a/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png
new file mode 100644
index 0000000..ca28c8d
Binary files /dev/null and b/SDL3-CS.Tests.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png differ
diff --git a/SDL3-CS.Tests.iOS/Entitlements.plist b/SDL3-CS.Tests.iOS/Entitlements.plist
new file mode 100644
index 0000000..36a8706
--- /dev/null
+++ b/SDL3-CS.Tests.iOS/Entitlements.plist
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/SDL3-CS.Tests.iOS/Info.plist b/SDL3-CS.Tests.iOS/Info.plist
new file mode 100644
index 0000000..22aeee1
--- /dev/null
+++ b/SDL3-CS.Tests.iOS/Info.plist
@@ -0,0 +1,42 @@
+
+
+
+
+ CFBundleDisplayName
+ SDL.Tests.iOS
+ CFBundleIdentifier
+ SDL.Tests.iOS
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1.0
+ LSRequiresIPhoneOS
+
+ UIDeviceFamily
+
+ 1
+ 2
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ XSAppIconAssets
+ Assets.xcassets/AppIcon.appiconset
+
+
diff --git a/SDL3-CS.Tests.iOS/Main.cs b/SDL3-CS.Tests.iOS/Main.cs
new file mode 100644
index 0000000..a1a8eb1
--- /dev/null
+++ b/SDL3-CS.Tests.iOS/Main.cs
@@ -0,0 +1,20 @@
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using SDL;
+
+public class Program
+{
+ public static unsafe void Main(string[] args)
+ {
+ NativeLibrary.SetDllImportResolver(typeof(SDL3).Assembly, (_, assembly, path) => NativeLibrary.Load("@rpath/SDL3.framework/SDL3", assembly, path));
+
+ SDL3.SDL_RunApp(0, null, &main, IntPtr.Zero);
+ }
+
+ [UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvCdecl) })]
+ private static unsafe int main(int argc, byte** argv)
+ {
+ SDL.Tests.Program.Main();
+ return 0;
+ }
+}
diff --git a/SDL3-CS.Tests.iOS/SDL3-CS.Tests.iOS.csproj b/SDL3-CS.Tests.iOS/SDL3-CS.Tests.iOS.csproj
new file mode 100644
index 0000000..0c37ee9
--- /dev/null
+++ b/SDL3-CS.Tests.iOS/SDL3-CS.Tests.iOS.csproj
@@ -0,0 +1,21 @@
+
+
+
+ net8.0-ios
+ SDL3.Tests.iOS
+ Exe
+ enable
+ true
+ 13.0
+ true
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SDL3-CS.sln b/SDL3-CS.sln
index c686aa6..a7f2209 100644
--- a/SDL3-CS.sln
+++ b/SDL3-CS.sln
@@ -23,6 +23,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDL3-CS.Android", "SDL3-CS.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDL3-CS.Tests.Android", "SDL3-CS.Tests.Android\SDL3-CS.Tests.Android.csproj", "{E8469DA5-E437-4287-9E2A-8B8F4DC21C1A}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDL3-CS.Tests.iOS", "SDL3-CS.Tests.iOS\SDL3-CS.Tests.iOS.csproj", "{CCDD11EE-D552-4925-8B68-351AC9317589}"
+EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDL3-CS.Tests.Desktop", "SDL3-CS.Tests.Desktop\SDL3-CS.Tests.Desktop.csproj", "{7E8D719A-5B69-43B7-A9D5-385B6FE7F411}"
EndProject
Global
@@ -51,6 +53,10 @@ Global
{E8469DA5-E437-4287-9E2A-8B8F4DC21C1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E8469DA5-E437-4287-9E2A-8B8F4DC21C1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E8469DA5-E437-4287-9E2A-8B8F4DC21C1A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CCDD11EE-D552-4925-8B68-351AC9317589}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CCDD11EE-D552-4925-8B68-351AC9317589}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CCDD11EE-D552-4925-8B68-351AC9317589}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CCDD11EE-D552-4925-8B68-351AC9317589}.Release|Any CPU.Build.0 = Release|Any CPU
{7E8D719A-5B69-43B7-A9D5-385B6FE7F411}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7E8D719A-5B69-43B7-A9D5-385B6FE7F411}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7E8D719A-5B69-43B7-A9D5-385B6FE7F411}.Release|Any CPU.ActiveCfg = Release|Any CPU