SDL_image: Added Xcode project for showanim

From ce871c7897734133c597f188401184efbc381840 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 5 Jan 2026 10:36:57 -0800
Subject: [PATCH] Added Xcode project for showanim

---
 Xcode/showanim/config.xcconfig                |   9 +
 Xcode/showanim/macOS/macOS.entitlements       |  10 +
 .../showanim.xcodeproj/project.pbxproj        | 758 ++++++++++++++++++
 3 files changed, 777 insertions(+)
 create mode 100644 Xcode/showanim/config.xcconfig
 create mode 100644 Xcode/showanim/macOS/macOS.entitlements
 create mode 100644 Xcode/showanim/showanim.xcodeproj/project.pbxproj

diff --git a/Xcode/showanim/config.xcconfig b/Xcode/showanim/config.xcconfig
new file mode 100644
index 000000000..b0eeaeee5
--- /dev/null
+++ b/Xcode/showanim/config.xcconfig
@@ -0,0 +1,9 @@
+//
+//  config.xcconfig
+//
+
+// Configuration settings file format documentation can be found at:
+// https://help.apple.com/xcode/#/dev745c5c974
+
+// Include any optional config for this build
+#include? "build.xcconfig"
diff --git a/Xcode/showanim/macOS/macOS.entitlements b/Xcode/showanim/macOS/macOS.entitlements
new file mode 100644
index 000000000..f2ef3ae02
--- /dev/null
+++ b/Xcode/showanim/macOS/macOS.entitlements
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+    <key>com.apple.security.app-sandbox</key>
+    <true/>
+    <key>com.apple.security.files.user-selected.read-only</key>
+    <true/>
+</dict>
+</plist>
diff --git a/Xcode/showanim/showanim.xcodeproj/project.pbxproj b/Xcode/showanim/showanim.xcodeproj/project.pbxproj
new file mode 100644
index 000000000..d01dfa9c1
--- /dev/null
+++ b/Xcode/showanim/showanim.xcodeproj/project.pbxproj
@@ -0,0 +1,758 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 55;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		F341283C2D4B496D00D6C2B7 /* SDL3.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F34123152D4077A600D6C2B7 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F341283D2D4B498100D6C2B7 /* SDL3.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F34123152D4077A600D6C2B7 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F341283E2D4B498700D6C2B7 /* SDL3.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F34123152D4077A600D6C2B7 /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F341283F2D4B4A4F00D6C2B7 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F34123152D4077A600D6C2B7 /* SDL3.framework */; };
+		F34128402D4B4A5600D6C2B7 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F34123152D4077A600D6C2B7 /* SDL3.framework */; };
+		F34128412D4B4A5C00D6C2B7 /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F34123152D4077A600D6C2B7 /* SDL3.framework */; };
+		F35474502828CAF5007E9EDA /* jxl.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F354744B2828CADB007E9EDA /* jxl.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F35474552828CDDB007E9EDA /* jxl.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F354744B2828CADB007E9EDA /* jxl.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F35474562828CDE0007E9EDA /* jxl.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F354744B2828CADB007E9EDA /* jxl.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F35475F92829BAC7007E9EDA /* avif.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F35475ED2829BAB1007E9EDA /* avif.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F35475FA2829BACC007E9EDA /* avif.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F35475ED2829BAB1007E9EDA /* avif.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F35475FB2829BAD0007E9EDA /* avif.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F35475ED2829BAB1007E9EDA /* avif.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F39CD44B281DC6C8006CF638 /* SDL3_image.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80D4281D9ED600C33C5B /* SDL3_image.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F39CD452281DC9CE006CF638 /* SDL3_image.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80D4281D9ED600C33C5B /* SDL3_image.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3E949DB281EAC3500B8F4EA /* webp.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3E949DA281EAC1B00B8F4EA /* webp.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3E949DC281EAC9600B8F4EA /* webp.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3E949DA281EAC1B00B8F4EA /* webp.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3E949DD281EAC9C00B8F4EA /* webp.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3E949DA281EAC1B00B8F4EA /* webp.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3ED80CB281D9ECB00C33C5B /* showanim.c in Sources */ = {isa = PBXBuildFile; fileRef = F3ED80CA281D9ECB00C33C5B /* showanim.c */; };
+		F3ED80CC281D9ECB00C33C5B /* showanim.c in Sources */ = {isa = PBXBuildFile; fileRef = F3ED80CA281D9ECB00C33C5B /* showanim.c */; };
+		F3ED80DB281D9F2100C33C5B /* showanim.c in Sources */ = {isa = PBXBuildFile; fileRef = F3ED80CA281D9ECB00C33C5B /* showanim.c */; };
+		F3ED80E3281DA16500C33C5B /* SDL3_image.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80D4281D9ED600C33C5B /* SDL3_image.framework */; };
+		F3ED80F5281DA3F600C33C5B /* SDL3_image.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80D4281D9ED600C33C5B /* SDL3_image.framework */; };
+		F3ED80FF281DA63000C33C5B /* SDL3_image.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80D4281D9ED600C33C5B /* SDL3_image.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F3ED8113281DC13D00C33C5B /* SDL3_image.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3ED80D4281D9ED600C33C5B /* SDL3_image.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		F34123142D4077A600D6C2B7 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F344001D2D401E16003F26D7 /* SDL.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = BECDF66C0761BA81005FE872;
+			remoteInfo = SDL3;
+		};
+		F344000D2D401DF2003F26D7 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F35475E52829BAB1007E9EDA /* avif.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F314F1AE2B62C8AA0006624D;
+			remoteInfo = aom;
+		};
+		F354744A2828CADB007E9EDA /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F35474462828CADB007E9EDA /* jxl.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F307EEDC28288CCF003915D7;
+			remoteInfo = jxl;
+		};
+		F35475EC2829BAB1007E9EDA /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F35475E52829BAB1007E9EDA /* avif.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F35474682829A8B3007E9EDA;
+			remoteInfo = avif;
+		};
+		F35475EE2829BAB1007E9EDA /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F35475E52829BAB1007E9EDA /* avif.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F354757D2829B82B007E9EDA;
+			remoteInfo = dav1d;
+		};
+		F35475F02829BAB1007E9EDA /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F35475E52829BAB1007E9EDA /* avif.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F354758A2829B839007E9EDA;
+			remoteInfo = "dav1d-8bit";
+		};
+		F35475F22829BAB1007E9EDA /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F35475E52829BAB1007E9EDA /* avif.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F35475972829B847007E9EDA;
+			remoteInfo = "dav1d-16bit";
+		};
+		F3E949D9281EAC1B00B8F4EA /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F3E949D5281EAC1B00B8F4EA /* webp.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F3D87D21281EA9C3005DA540;
+			remoteInfo = webp;
+		};
+		F3ED80D3281D9ED600C33C5B /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F3ED80CD281D9ED600C33C5B /* SDL_image.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = BE1FA72E07AF4C45004B6283;
+			remoteInfo = Framework;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		F39CD449281DC695006CF638 /* Copy Frameworks */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				F341283D2D4B498100D6C2B7 /* SDL3.framework in Copy Frameworks */,
+				F39CD44B281DC6C8006CF638 /* SDL3_image.framework in Copy Frameworks */,
+				F35475F92829BAC7007E9EDA /* avif.framework in Copy Frameworks */,
+				F35474562828CDE0007E9EDA /* jxl.framework in Copy Frameworks */,
+				F3E949DB281EAC3500B8F4EA /* webp.framework in Copy Frameworks */,
+			);
+			name = "Copy Frameworks";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F3ED80EC281DA29B00C33C5B /* Copy Frameworks */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				F341283C2D4B496D00D6C2B7 /* SDL3.framework in Copy Frameworks */,
+				F39CD452281DC9CE006CF638 /* SDL3_image.framework in Copy Frameworks */,
+				F35475FA2829BACC007E9EDA /* avif.framework in Copy Frameworks */,
+				F35474552828CDDB007E9EDA /* jxl.framework in Copy Frameworks */,
+				F3E949DC281EAC9600B8F4EA /* webp.framework in Copy Frameworks */,
+			);
+			name = "Copy Frameworks";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F3ED80FA281DA44400C33C5B /* Copy Frameworks */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 12;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				F341283E2D4B498700D6C2B7 /* SDL3.framework in Copy Frameworks */,
+				F3ED80FF281DA63000C33C5B /* SDL3_image.framework in Copy Frameworks */,
+				F35475FB2829BAD0007E9EDA /* avif.framework in Copy Frameworks */,
+				F35474502828CAF5007E9EDA /* jxl.framework in Copy Frameworks */,
+				F3E949DD281EAC9C00B8F4EA /* webp.framework in Copy Frameworks */,
+			);
+			name = "Copy Frameworks";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		F344001D2D401E16003F26D7 /* SDL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL.xcodeproj; path = ../../../SDL/Xcode/SDL/SDL.xcodeproj; sourceTree = SOURCE_ROOT; };
+		F35474462828CADB007E9EDA /* jxl.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = jxl.xcodeproj; path = ../jxl/jxl.xcodeproj; sourceTree = "<group>"; };
+		F35475E52829BAB1007E9EDA /* avif.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = avif.xcodeproj; path = ../avif/avif.xcodeproj; sourceTree = "<group>"; };
+		F3E1F7742A78A12600AC76D3 /* config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = "<group>"; };
+		F3E949D5281EAC1B00B8F4EA /* webp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = webp.xcodeproj; path = ../webp/webp.xcodeproj; sourceTree = "<group>"; };
+		F3ED80B3281D9E8900C33C5B /* showanim.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = showanim.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		F3ED80B9281D9E8900C33C5B /* showanim.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = showanim.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		F3ED80BB281D9E8900C33C5B /* macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = macOS.entitlements; sourceTree = "<group>"; };
+		F3ED80CA281D9ECB00C33C5B /* showanim.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = showanim.c; path = ../../examples/showanim.c; sourceTree = SOURCE_ROOT; };
+		F3ED80CD281D9ED600C33C5B /* SDL_image.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL_image.xcodeproj; path = ../SDL_image.xcodeproj; sourceTree = "<group>"; };
+		F3ED80E1281D9F2100C33C5B /* showanim.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = showanim.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		F3ED80E4281DA17800C33C5B /* SDL3.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL3.framework; path = ../macOS/SDL3.framework; sourceTree = "<group>"; };
+		F3ED80F6281DA40300C33C5B /* SDL3.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL3.framework; path = ../iOS/SDL3.framework; sourceTree = "<group>"; };
+		F3ED810E281DC09600C33C5B /* SDL3.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL3.framework; path = ../tvOS/SDL3.framework; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		F3ED80B0281D9E8900C33C5B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F34128402D4B4A5600D6C2B7 /* SDL3.framework in Frameworks */,
+				F3ED80F5281DA3F600C33C5B /* SDL3_image.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F3ED80B6281D9E8900C33C5B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F341283F2D4B4A4F00D6C2B7 /* SDL3.framework in Frameworks */,
+				F3ED80E3281DA16500C33C5B /* SDL3_image.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F3ED80DC281D9F2100C33C5B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F34128412D4B4A5C00D6C2B7 /* SDL3.framework in Frameworks */,
+				F3ED8113281DC13D00C33C5B /* SDL3_image.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		F341230F2D4077A600D6C2B7 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				F34123152D4077A600D6C2B7 /* SDL3.framework */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		F35474472828CADB007E9EDA /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				F354744B2828CADB007E9EDA /* jxl.framework */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		F35475E62829BAB1007E9EDA /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				F35475ED2829BAB1007E9EDA /* avif.framework */,
+				F344000E2D401DF2003F26D7 /* libaom.a */,
+				F35475EF2829BAB1007E9EDA /* libdav1d.a */,
+				F35475F12829BAB1007E9EDA /* libdav1d-8bit.a */,
+				F35475F32829BAB1007E9EDA /* libdav1d-16bit.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		F3E949D6281EAC1B00B8F4EA /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				F3E949DA281EAC1B00B8F4EA /* webp.framework */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		F3ED80A6281D9E8800C33C5B = {
+			isa = PBXGroup;
+			children = (
+				F3E1F7742A78A12600AC76D3 /* config.xcconfig */,
+				F344001D2D401E16003F26D7 /* SDL.xcodeproj */,
+				F3ED80CD281D9ED600C33C5B /* SDL_image.xcodeproj */,
+				F35475E52829BAB1007E9EDA /* avif.xcodeproj */,
+				F35474462828CADB007E9EDA /* jxl.xcodeproj */,
+				F3E949D5281EAC1B00B8F4EA /* webp.xcodeproj */,
+				F3ED80AB281D9E8800C33C5B /* Shared */,
+				F3ED80BA281D9E8900C33C5B /* macOS */,
+				F3ED80B4281D9E8900C33C5B /* Products */,
+				F3ED80E2281DA16500C33C5B /* Frameworks */,
+			);
+			sourceTree = "<group>";
+		};
+		F3ED80AB281D9E8800C33C5B /* Shared */ = {
+			isa = PBXGroup;
+			children = (
+				F3ED80CA281D9ECB00C33C5B /* showanim.c */,
+			);
+			name = Shared;
+			sourceTree = SOURCE_ROOT;
+		};
+		F3ED80B4281D9E8900C33C5B /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				F3ED80B3281D9E8900C33C5B /* showanim.app */,
+				F3ED80B9281D9E8900C33C5B /* showanim.app */,
+				F3ED80E1281D9F2100C33C5B /* showanim.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		F3ED80BA281D9E8900C33C5B /* macOS */ = {
+			isa = PBXGroup;
+			children = (
+				F3ED80BB281D9E8900C33C5B /* macOS.entitlements */,
+			);
+			path = macOS;
+			sourceTree = "<group>";
+		};
+		F3ED80CE281D9ED600C33C5B /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				F3ED80D4281D9ED600C33C5B /* SDL3_image.framework */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		F3ED80E2281DA16500C33C5B /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				F3ED8104281DADB900C33C5B /* macOS */,
+				F3ED8105281DADC900C33C5B /* iOS */,
+				F3ED810D281DC07200C33C5B /* tvOS */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		F3ED8104281DADB900C33C5B /* macOS */ = {
+			isa = PBXGroup;
+			children = (
+				F3ED80E4281DA17800C33C5B /* SDL3.framework */,
+			);
+			name = macOS;
+			sourceTree = "<group>";
+		};
+		F3ED8105281DADC900C33C5B /* iOS */ = {
+			isa = PBXGroup;
+			children = (
+				F3ED80F6281DA40300C33C5B /* SDL3.framework */,
+			);
+			name = iOS;
+			sourceTree = "<group>";
+		};
+		F3ED810D281DC07200C33C5B /* tvOS */ = {
+			isa = PBXGroup;
+			children = (
+				F3ED810E281DC09600C33C5B /* SDL3.framework */,
+			);
+			name = tvOS;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		F3ED80B2281D9E8900C33C5B /* showanim (iOS) */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F3ED80C4281D9E8900C33C5B /* Build configuration list for PBXNativeTarget "showanim (iOS)" */;
+			buildPhases = (
+				F3ED80AF281D9E8900C33C5B /* Sources */,
+				F3ED80B0281D9E8900C33C5B /* Frameworks */,
+				F3ED80B1281D9E8900C33C5B /* Resources */,
+				F3ED80FA281DA44400C33C5B /* Copy Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "showanim (iOS)";
+			productName = "showanim (iOS)";
+			productReference = F3ED80B3281D9E8900C33C5B /* showanim.app */;
+			productType = "com.apple.product-type.application";
+		};
+		F3ED80B8281D9E8900C33C5B /* showanim (macOS) */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F3ED80C7281D9E8900C33C5B /* Build configuration list for PBXNativeTarget "showanim (macOS)" */;
+			buildPhases = (
+				F3ED80B5281D9E8900C33C5B /* Sources */,
+				F3ED80B6281D9E8900C33C5B /* Frameworks */,
+				F3ED80B7281D9E8900C33C5B /* Resources */,
+				F3ED80EC281DA29B00C33C5B /* Copy Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "showanim (macOS)";
+			productName = "showanim (macOS)";
+			productReference = F3ED80B9281D9E8900C33C5B /* showanim.app */;
+			productType = "com.apple.product-type.application";
+		};
+		F3ED80D9281D9F2100C33C5B /* showanim (tvOS) */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F3ED80DE281D9F2100C33C5B /* Build configuration list for PBXNativeTarget "showanim (tvOS)" */;
+			buildPhases = (
+				F3ED80DA281D9F2100C33C5B /* Sources */,
+				F3ED80DC281D9F2100C33C5B /* Frameworks */,
+				F3ED80DD281D9F2100C33C5B /* Resources */,
+				F39CD449281DC695006CF638 /* Copy Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "showanim (tvOS)";
+			productName = "showanim (iOS)";
+			productReference = F3ED80E1281D9F2100C33C5B /* showanim.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		F3ED80A7281D9E8800C33C5B /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				BuildIndependentTargetsInParallel = 1;
+				LastSwiftUpdateCheck = 1330;
+				LastUpgradeCheck = 1330;
+				TargetAttributes = {
+					F3ED80B2281D9E8900C33C5B = {
+						CreatedOnToolsVersion = 13.3.1;
+					};
+					F3ED80B8281D9E8900C33C5B = {
+						CreatedOnToolsVersion = 13.3.1;
+					};
+				};
+			};
+			buildConfigurationList = F3ED80AA281D9E8800C33C5B /* Build configuration list for PBXProject "showanim" */;
+			compatibilityVersion = "Xcode 13.0";
+			developmentRegion = en;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = F3ED80A6281D9E8800C33C5B;
+			productRefGroup = F3ED80B4281D9E8900C33C5B /* Products */;
+			projectDirPath = "";
+			projectReferences = (
+				{
+					ProductGroup = F35475E62829BAB1007E9EDA /* Products */;
+					ProjectRef = F35475E52829BAB1007E9EDA /* avif.xcodeproj */;
+				},
+				{
+					ProductGroup = F35474472828CADB007E9EDA /* Products */;
+					ProjectRef = F35474462828CADB007E9EDA /* jxl.xcodeproj */;
+				},
+				{
+					ProductGroup = F341230F2D4077A600D6C2B7 /* Products */;
+					ProjectRef = F344001D2D401E16003F26D7 /* SDL.xcodeproj */;
+				},
+				{
+					ProductGroup = F3ED80CE281D9ED600C33C5B /* Products */;
+					ProjectRef = F3ED80CD281D9ED600C33C5B /* SDL_image.xcodeproj */;
+				},
+				{
+					ProductGroup = F3E949D6281EAC1B00B8F4EA /* Products */;
+					ProjectRef = F3E949D5281EAC1B00B8F4EA /* webp.xcodeproj */;
+				},
+			);
+			projectRoot = "";
+			targets = (
+				F3ED80B2281D9E8900C33C5B /* showanim (iOS) */,
+				F3ED80B8281D9E8900C33C5B /* showanim (macOS) */,
+				F3ED80D9281D9F2100C33C5B /* showanim (tvOS) */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+		F34123152D4077A600D6C2B7 /* SDL3.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = SDL3.framework;
+			remoteRef = F34123142D4077A600D6C2B7 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		F344000E2D401DF2003F26D7 /* libaom.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = libaom.a;
+			remoteRef = F344000D2D401DF2003F26D7 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		F354744B2828CADB007E9EDA /* jxl.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = jxl.framework;
+			remoteRef = F354744A2828CADB007E9EDA /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		F35475ED2829BAB1007E9EDA /* avif.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = avif.framework;
+			remoteRef = F35475EC2829BAB1007E9EDA /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		F35475EF2829BAB1007E9EDA /* libdav1d.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = libdav1d.a;
+			remoteRef = F35475EE2829BAB1007E9EDA /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		F35475F12829BAB1007E9EDA /* libdav1d-8bit.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = "libdav1d-8bit.a";
+			remoteRef = F35475F02829BAB1007E9EDA /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		F35475F32829BAB1007E9EDA /* libdav1d-16bit.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = "libdav1d-16bit.a";
+			remoteRef = F35475F22829BAB1007E9EDA /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		F3E949DA281EAC1B00B8F4EA /* webp.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = webp.framework;
+			remoteRef = F3E949D9281EAC1B00B8F4EA /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		F3ED80D4281D9ED600C33C5B /* SDL3_image.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = SDL3_image.framework;
+			remoteRef = F3ED80D3281D9ED600C33C5B /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+		F3ED80B1281D9E8900C33C5B /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F3ED80B7281D9E8900C33C5B /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F3ED80DD281D9F2100C33C5B /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		F3ED80AF281D9E8900C33C5B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F3ED80CB281D9ECB00C33C5B /* showanim.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F3ED80B5281D9E8900C33C5B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F3ED80CC281D9ECB00C33C5B /* showanim.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F3ED80DA281D9F2100C33C5B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F3ED80DB281D9F2100C33C5B /* showanim.c in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		F3ED80C2281D9E8900C33C5B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = F3E1F7742A78A12600AC76D3 /* config.xcconfig */;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_TESTABILITY = YES;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../include\"";
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+				MACOSX_DEPLOYMENT_TARGET = 10.13;
+				ONLY_ACTIVE_ARCH = YES;
+				TVOS_DEPLOYMENT_TARGET = 11.0;
+			};
+			name = Debug;
+		};
+		F3ED80C3281D9E8900C33C5B /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = F3E1F7742A78A12600AC76D3 /* config.xcconfig */;
+			buildSettings = {
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../include\"";
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+				MACOSX_DEPLOYMENT_TARGET = 10.13;
+				TVOS_DEPLOYMENT_TARGET = 11.0;
+			};
+			name = Release;
+		};
+		F3ED80C5281D9E8900C33C5B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				ENABLE_PREVIEWS = YES;
+				GENERATE_INFOPLIST_FILE = YES;
+				INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
+				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+				INFOPLIST_KEY_UILaunchScreen_Generation = YES;
+				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				MARKETING_VERSION = 1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.showanim;
+				PRODUCT_NAME = showanim;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		F3ED80C6281D9E8900C33C5B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				ENABLE_PREVIEWS = YES;
+				GENERATE_INFOPLIST_FILE = YES;
+				INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
+				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+				INFOPLIST_KEY_UILaunchScreen_Generation = YES;
+				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				MARKETING_VERSION = 1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.showanim;
+				PRODUCT_NAME = showanim;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		F3ED80C8281D9E8900C33C5B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements;
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				ENABLE_PREVIEWS = YES;
+				GENERATE_INFOPLIST_FILE = YES;
+				INFOPLIST_KEY_NSHumanReadableCopyright = "";
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/../Frameworks",
+				);
+				MARKETING_VERSION = 1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.showanim;
+				PRODUCT_NAME = showanim;
+				SDKROOT = macosx;
+			};
+			name = Debug;
+		};
+		F3ED80C9281D9E8900C33C5B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements;
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				ENABLE_PREVIEWS = YES;
+				GENERATE_INFOPLIST_FILE = YES;
+				INFOPLIST_KEY_NSHumanReadableCopyright = "";
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/../Frameworks",
+				);
+				MARKETING_VERSION = 1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.showanim;
+				PRODUCT_NAME = showanim;
+				SDKROOT = macosx;
+			};
+			name = Release;
+		};
+		F3ED80DF281D9F2100C33C5B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				ENABLE_PREVIEWS = YES;
+				GENERATE_INFOPLIST_FILE = YES;
+				INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
+				INFOPLIST_KEY_UILaunchScreen_Generation = YES;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				MARKETING_VERSION = 1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.showanim;
+				PRODUCT_NAME = showanim;
+				SDKROOT = appletvos;
+			};
+			name = Debug;
+		};
+		F3ED80E0281D9F2100C33C5B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				ENABLE_PREVIEWS = YES;
+				GENERATE_INFOPLIST_FILE = YES;
+				INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
+				INFOPLIST_KEY_UILaunchScreen_Generation = YES;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				MARKETING_V

(Patch may be truncated, please check the link at the top of this post.)