Maelstrom: Updated Maelstrom build for Apple platforms

From 46e727df097f0c2680ce6ec2dd58b7a7c62a267f Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sat, 14 Mar 2026 21:43:37 -0700
Subject: [PATCH] Updated Maelstrom build for Apple platforms

---
 Data/UI/game.xml                              |  90 ++++++++--------
 Data/UI/main.xml                              |   6 +-
 Maelstrom.rc                                  | 100 +++++++++++++++++-
 .../AppIcon.appiconset/Contents.json          |   7 ++
 .../AppIcon.appiconset/icon-1024.png          | Bin 0 -> 6484 bytes
 .../AppIcon.appiconset/icon-128.png           | Bin 0 -> 2056 bytes
 .../AppIcon.appiconset/icon-256.png           | Bin 0 -> 2388 bytes
 .../AppIcon.appiconset/icon-512.png           | Bin 0 -> 3362 bytes
 Xcode/Maelstrom.xcodeproj/project.pbxproj     |  81 +++++++++-----
 external/SDL_net                              |   2 +-
 game/Maelstrom.h                              |   2 +-
 game/MaelstromUI.cpp                          |   3 -
 game/game.cpp                                 |  12 +++
 game/game.h                                   |   3 +
 game/init.cpp                                 |   4 +-
 game/main.cpp                                 |  18 +---
 game/make.cpp                                 |   2 +-
 game/replay.cpp                               |   2 +-
 icon.ico => icons/icon.ico                    | Bin
 screenlib/SDL_FrameBuf.cpp                    |  15 +--
 screenlib/UIElement.cpp                       |   2 +-
 21 files changed, 235 insertions(+), 114 deletions(-)
 create mode 100644 Xcode/Assets.xcassets/AppIcon.appiconset/icon-1024.png
 create mode 100644 Xcode/Assets.xcassets/AppIcon.appiconset/icon-128.png
 create mode 100644 Xcode/Assets.xcassets/AppIcon.appiconset/icon-256.png
 create mode 100644 Xcode/Assets.xcassets/AppIcon.appiconset/icon-512.png
 rename icon.ico => icons/icon.ico (100%)

diff --git a/Data/UI/game.xml b/Data/UI/game.xml
index 7d89b0c5..60ba31e6 100644
--- a/Data/UI/game.xml
+++ b/Data/UI/game.xml
@@ -93,51 +93,55 @@
 			<Anchor anchorFrom="LEFT" anchorTo="RIGHT" anchor="frags_label" x="4"/>
 		</Label>
 
-		<!-- Touch controls -->
-		<Button condition="TOUCH" name="abort" action="CONTROL_ABORT" image="abort">
-			<Anchor anchorFrom="TOPRIGHT" anchorTo="TOPRIGHT" x="-6" y="4"/>
-		</Button>
-		<Button condition="TOUCH" name="pause" action="CONTROL_PAUSE" image="pause">
-			<Anchor anchorFrom="RIGHT" anchorTo="LEFT" anchor="abort" x="-12"/>
-		</Button>
+		<Area name="touch_controls" show="false">
+			<Elements>
+				<!-- Touch controls -->
+				<Button name="abort" action="CONTROL_ABORT" image="abort">
+					<Anchor anchorFrom="TOPRIGHT" anchorTo="TOPRIGHT" x="-6" y="4"/>
+				</Button>
+				<Button name="pause" action="CONTROL_PAUSE" image="pause">
+					<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" x="6" y="4"/>
+				</Button>
 
-		<!-- Touch button style controls -->
-		<Thumbstick condition="TOUCH" name="fire" image="fire">
-			<Anchor anchorFrom="BOTTOMRIGHT" anchorTo="BOTTOMRIGHT" x="-8" y="-16"/>
-			<Action action_enter="CONTROL_DOWN_FIRE" action_leave="CONTROL_UP_FIRE"/>
-		</Thumbstick>
-		<Thumbstick condition="TOUCH" name="thrust" image="thrust">
-			<Anchor anchorFrom="RIGHT" anchorTo="LEFT" anchor="fire" x="-8"/>
-			<Action action_enter="CONTROL_DOWN_THRUST" action_leave="CONTROL_UP_THRUST"/>
-		</Thumbstick>
+				<!-- Touch button style controls -->
+				<Thumbstick name="fire" image="fire">
+					<Anchor anchorFrom="BOTTOMRIGHT" anchorTo="BOTTOMRIGHT" x="-8" y="-16"/>
+					<Action action_enter="CONTROL_DOWN_FIRE" action_leave="CONTROL_UP_FIRE"/>
+				</Thumbstick>
+				<Thumbstick name="thrust" image="thrust">
+					<Anchor anchorFrom="RIGHT" anchorTo="LEFT" anchor="fire" x="-8"/>
+					<Action action_enter="CONTROL_DOWN_THRUST" action_leave="CONTROL_UP_THRUST"/>
+				</Thumbstick>
 
-		<Thumbstick condition="TOUCH" name="rotate_left" image="rotate_left">
-			<Anchor anchorFrom="BOTTOMLEFT" anchorTo="BOTTOMLEFT" x="0" x="8" y="-16"/>
-			<Action action_enter="CONTROL_DOWN_LEFT" action_leave="CONTROL_UP_LEFT"/>
-		</Thumbstick>
-		<Thumbstick condition="TOUCH" name="rotate_right" image="rotate_right">
-			<Anchor anchorFrom="LEFT" anchorTo="RIGHT" anchor="rotate_left" x="8"/>
-			<Action action_enter="CONTROL_DOWN_RIGHT" action_leave="CONTROL_UP_RIGHT"/>
-		</Thumbstick>
-		<Thumbstick condition="TOUCH" name="shield" image="shield">
-			<Anchor anchorFrom="BOTTOM" anchorTo="TOP" anchor="rotate_left" x="32" y="-4"/>
-			<Action action_enter="CONTROL_DOWN_SHIELD" action_leave="CONTROL_UP_SHIELD"/>
-		</Thumbstick>
-		<!-- End button style controls -->
+				<Thumbstick name="rotate_left" image="rotate_left">
+					<Anchor anchorFrom="BOTTOMLEFT" anchorTo="BOTTOMLEFT" x="0" x="8" y="-16"/>
+					<Action action_enter="CONTROL_DOWN_LEFT" action_leave="CONTROL_UP_LEFT"/>
+				</Thumbstick>
+				<Thumbstick name="rotate_right" image="rotate_right">
+					<Anchor anchorFrom="LEFT" anchorTo="RIGHT" anchor="rotate_left" x="8"/>
+					<Action action_enter="CONTROL_DOWN_RIGHT" action_leave="CONTROL_UP_RIGHT"/>
+				</Thumbstick>
+				<Thumbstick name="shield" image="shield">
+					<Anchor anchorFrom="BOTTOM" anchorTo="TOP" anchor="rotate_left" x="32" y="-4"/>
+					<Action action_enter="CONTROL_DOWN_SHIELD" action_leave="CONTROL_UP_SHIELD"/>
+				</Thumbstick>
+				<!-- End button style controls -->
 
-		<!-- Touch thumbstick style controls
-		<Thumbstick condition="TOUCH" image="thumbstick" followTouch="true" sensitiveRadius="128">
-			<ImageArea><Size w="64" h="64"/></ImageArea>
-			<Anchor anchorFrom="BOTTOMLEFT" anchorTo="BOTTOMLEFT" x="32" y="-40"/>
-			<Action angle="0" arc="60" active_radius="8" action_enter="CONTROL_DOWN_THRUST" action_leave="CONTROL_UP_THRUST"/>
-			<Action angle="180" arc="60" active_radius="2" action_enter="CONTROL_DOWN_SHIELD" action_leave="CONTROL_UP_SHIELD"/>
-			<Action angle="90" arc="60" active_radius="0" action_enter="CONTROL_DOWN_RIGHT" action_leave="CONTROL_UP_RIGHT"/>
-			<Action angle="270" arc="60" active_radius="0" action_enter="CONTROL_DOWN_LEFT" action_leave="CONTROL_UP_LEFT"/>
-		</Thumbstick>
-		<Thumbstick condition="TOUCH" image="fire" followTouch="true" sensitiveRadius="128">
-			<Anchor anchorFrom="BOTTOMRIGHT" anchorTo="BOTTOMRIGHT" x="-32" y="-40"/>
-			<Action action_enter="CONTROL_DOWN_FIRE" action_leave="CONTROL_UP_FIRE"/>
-		</Thumbstick>
-		<!-- End thumbstick style controls -->
+				<!-- Touch thumbstick style controls
+				<Thumbstick image="thumbstick" followTouch="true" sensitiveRadius="128">
+					<ImageArea><Size w="64" h="64"/></ImageArea>
+					<Anchor anchorFrom="BOTTOMLEFT" anchorTo="BOTTOMLEFT" x="32" y="-40"/>
+					<Action angle="0" arc="60" active_radius="8" action_enter="CONTROL_DOWN_THRUST" action_leave="CONTROL_UP_THRUST"/>
+					<Action angle="180" arc="60" active_radius="2" action_enter="CONTROL_DOWN_SHIELD" action_leave="CONTROL_UP_SHIELD"/>
+					<Action angle="90" arc="60" active_radius="0" action_enter="CONTROL_DOWN_RIGHT" action_leave="CONTROL_UP_RIGHT"/>
+					<Action angle="270" arc="60" active_radius="0" action_enter="CONTROL_DOWN_LEFT" action_leave="CONTROL_UP_LEFT"/>
+				</Thumbstick>
+				<Thumbstick image="fire" followTouch="true" sensitiveRadius="128">
+					<Anchor anchorFrom="BOTTOMRIGHT" anchorTo="BOTTOMRIGHT" x="-32" y="-40"/>
+					<Action action_enter="CONTROL_DOWN_FIRE" action_leave="CONTROL_UP_FIRE"/>
+				</Thumbstick>
+				<!-- End thumbstick style controls -->
+			</Elements>
+		</Area>
 	</Elements>
 </Panel>
diff --git a/Data/UI/main.xml b/Data/UI/main.xml
index d740961a..ccbbe31f 100644
--- a/Data/UI/main.xml
+++ b/Data/UI/main.xml
@@ -214,11 +214,11 @@
 		<Label template="SmallYellow" text=" About Maelstrom...">
 			<Anchor anchorFrom="BOTTOMLEFT" anchorTo="TOPRIGHT" anchor="AboutButton" x="3" y="21"/>
 		</Label>
-		<!-- You can't explicitly quit the iOS app -->
-		<Button condition="!IOS" name="QuitButton" template="MenuButton" hotkey="Q" text="Q" action="quit" clickSound="106">
+		<!-- You can't explicitly quit the mobile app -->
+		<Button condition="!MOBILE" name="QuitButton" template="MenuButton" hotkey="Q" text="Q" action="quit" clickSound="106">
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="AboutButton" y="34"/>
 		</Button>
-		<Label condition="!IOS" template="SmallYellow" text=" Quit Maelstrom">
+		<Label condition="!MOBILE" template="SmallYellow" text=" Quit Maelstrom">
 			<Anchor anchorFrom="BOTTOMLEFT" anchorTo="TOPRIGHT" anchor="QuitButton" x="3" y="21"/>
 		</Label>
 		<Button name="VolumeDownButton" template="MenuButton" hotkey="0" text="0" action="volume_down">
diff --git a/Maelstrom.rc b/Maelstrom.rc
index ec1c8423..8774f29d 100644
--- a/Maelstrom.rc
+++ b/Maelstrom.rc
@@ -1,11 +1,103 @@
-//Microsoft Developer Studio generated resource script.
+// Microsoft Visual C++ generated resource script.
 //
 
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "windows.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+2 TEXTINCLUDE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
 /////////////////////////////////////////////////////////////////////////////
 //
 // Icon
 //
 
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-MAELSTROM               ICON    DISCARDABLE     "icon.ico"
+IDI_ICON1 ICON DISCARDABLE "icons\icon.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 4,0,0,0
+ PRODUCTVERSION 4,0,0,0
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "CompanyName", "Sam Lantinga"
+            VALUE "FileDescription", "Maelstrom"
+            VALUE "FileVersion", "4, 0, 0, 0"
+            VALUE "InternalName", "Maelstrom"
+            VALUE "LegalCopyright", "Copyright (C) 2026 Sam Lantinga"
+            VALUE "OriginalFilename", "Maelstrom.exe"
+            VALUE "ProductName", "Maelstrom"
+            VALUE "ProductVersion", "4, 0, 0, 0"
+        end
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/Xcode/Assets.xcassets/AppIcon.appiconset/Contents.json b/Xcode/Assets.xcassets/AppIcon.appiconset/Contents.json
index ffdfe150..eedee287 100644
--- a/Xcode/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ b/Xcode/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -1,6 +1,7 @@
 {
   "images" : [
     {
+      "filename" : "icon-1024.png",
       "idiom" : "universal",
       "platform" : "ios",
       "size" : "1024x1024"
@@ -48,31 +49,37 @@
       "size" : "32x32"
     },
     {
+      "filename" : "icon-128.png",
       "idiom" : "mac",
       "scale" : "1x",
       "size" : "128x128"
     },
     {
+      "filename" : "icon-256.png",
       "idiom" : "mac",
       "scale" : "2x",
       "size" : "128x128"
     },
     {
+      "filename" : "icon-256.png",
       "idiom" : "mac",
       "scale" : "1x",
       "size" : "256x256"
     },
     {
+      "filename" : "icon-512.png",
       "idiom" : "mac",
       "scale" : "2x",
       "size" : "256x256"
     },
     {
+      "filename" : "icon-512.png",
       "idiom" : "mac",
       "scale" : "1x",
       "size" : "512x512"
     },
     {
+      "filename" : "icon-1024.png",
       "idiom" : "mac",
       "scale" : "2x",
       "size" : "512x512"
diff --git a/Xcode/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/Xcode/Assets.xcassets/AppIcon.appiconset/icon-1024.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b22eb3a0d48f64f5eec936c1939beb75c2d6a4a
GIT binary patch
literal 6484
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
NY})qDDO^tJzW`U<-e&*+

literal 0
HcmV?d00001

diff --git a/Xcode/Assets.xcassets/AppIcon.appiconset/icon-128.png b/Xcode/Assets.xcassets/AppIcon.appiconset/icon-128.png
new file mode 100644
index 0000000000000000000000000000000000000000..a1061e903d204462d30432e06ab99774e9944ff6
GIT binary patch
literal 2056
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

literal 0
HcmV?d00001

diff --git a/Xcode/Assets.xcassets/AppIcon.appiconset/icon-256.png b/Xcode/Assets.xcassets/AppIcon.appiconset/icon-256.png
new file mode 100644
index 0000000000000000000000000000000000000000..385dbcc70cd470c5ed8c4a3c927fde6041f6557e
GIT binary patch
literal 2388
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

literal 0
HcmV?d00001

diff --git a/Xcode/Assets.xcassets/AppIcon.appiconset/icon-512.png b/Xcode/Assets.xcassets/AppIcon.appiconset/icon-512.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d83bbae21b08ee4e22a522aeba62fff11622a69
GIT binary patch
literal 3362
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
FKLCPQ)t>+W

literal 0
HcmV?d00001

diff --git a/Xcode/Maelstrom.xcodeproj/project.pbxproj b/Xcode/Maelstrom.xcodeproj/project.pbxproj
index d931c6a9..9c12502b 100644
--- a/Xcode/Maelstrom.xcodeproj/project.pbxproj
+++ b/Xcode/Maelstrom.xcodeproj/project.pbxproj
@@ -60,6 +60,7 @@
 		AA928E512EDB9D830005200A /* Mac_Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E4F2EDB9D830005200A /* Mac_Sound.cpp */; };
 		AA929E852EDBA1900005200A /* Docs in Resources */ = {isa = PBXBuildFile; fileRef = AA929E842EDBA1900005200A /* Docs */; };
 		AA929E872EDBA3B80005200A /* Data in Resources */ = {isa = PBXBuildFile; fileRef = AA929E862EDBA3B80005200A /* Data */; };
+		F3281F432F66693200107D76 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F3281F422F66693200107D76 /* Assets.xcassets */; };
 		F3CC41422F60E6A10033BDFA /* steam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3CC41412F60E6A10033BDFA /* steam.cpp */; };
 /* End PBXBuildFile section */
 
@@ -80,7 +81,6 @@
 
 /* Begin PBXFileReference section */
 		AA9284B32EDB8BB30005200A /* Maelstrom.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Maelstrom.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		AA9284C12EDB8BE00005200A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
 		AA9284C72EDB8CEE0005200A /* SDL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL.xcodeproj; path = ../external/SDL/Xcode/SDL/SDL.xcodeproj; sourceTree = SOURCE_ROOT; };
 		AA9285752EDB8E8A0005200A /* SDL3.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SDL3.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		AA9285772EDB8EA00005200A /* SDL3.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SDL3.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -197,6 +197,7 @@
 		AA928E4F2EDB9D830005200A /* Mac_Sound.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Mac_Sound.cpp; sourceTree = "<group>"; };
 		AA929E842EDBA1900005200A /* Docs */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Docs; path = ../Docs; sourceTree = "<group>"; };
 		AA929E862EDBA3B80005200A /* Data */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Data; path = ../Data; sourceTree = "<group>"; };
+		F3281F422F66693200107D76 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
 		F3CC41402F60E6A10033BDFA /* steam.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = steam.h; sourceTree = "<group>"; };
 		F3CC41412F60E6A10033BDFA /* steam.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = steam.cpp; sourceTree = "<group>"; };
 /* End PBXFileReference section */
@@ -226,7 +227,7 @@
 				AA928E462EDB9D260005200A /* miniz */,
 				AA928E0C2EDB9CF90005200A /* screenlib */,
 				AA928DFB2EDB9CB40005200A /* utils */,
-				AA9284C12EDB8BE00005200A /* Assets.xcassets */,
+				F3281F422F66693200107D76 /* Assets.xcassets */,
 				AA9285742EDB8E8A0005200A /* Frameworks */,
 				AA9284B42EDB8BB30005200A /* Products */,
 			);
@@ -426,6 +427,7 @@
 				AA9284B02EDB8BB30005200A /* Frameworks */,
 				AA92857A2EDB8EA00005200A /* Embed Frameworks */,
 				AA929E702EDBA0880005200A /* Resources */,
+				F3703E532F66A94F005F0779 /* Run Script */,
 			);
 			buildRules = (
 			);
@@ -488,12 +490,35 @@
 			buildActionMask = 2147483647;
 			files = (
 				AA929E872EDBA3B80005200A /* Data in Resources */,
+				F3281F432F66693200107D76 /* Assets.xcassets in Resources */,
 				AA929E852EDBA1900005200A /* Docs in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXResourcesBuildPhase section */
 
+/* Begin PBXShellScriptBuildPhase section */
+		F3703E532F66A94F005F0779 /* Run Script */ = {
+			isa = PBXShellScriptBuildPhase;
+			alwaysOutOfDate = 1;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputFileListPaths = (
+			);
+			inputPaths = (
+			);
+			name = "Run Script";
+			outputFileListPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nif [ -d \"$INSTALL_ROOT/Library\" ]; then\n    echo \"Removing frameworks from INSTALL_ROOT for archiving\"\n    rm -rf \"$INSTALL_ROOT/Library\"\nfi\n";
+		};
+/* End PBXShellScriptBuildPhase section */
+
 /* Begin PBXSourcesBuildPhase section */
 		AA9284AF2EDB8BB30005200A /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
@@ -673,40 +698,42 @@
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+				ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
+				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = 1;
-				DEVELOPMENT_ASSET_PATHS = ../Data/Fonts;
+				DEVELOPMENT_TEAM = EH385AYQ6F;
 				ENABLE_APP_SANDBOX = YES;
 				ENABLE_PREVIEWS = YES;
+				ENABLE_USER_SCRIPT_SANDBO

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