From 9eae1ab594b08ac228eeaac6ec3690ebcb669e59 Mon Sep 17 00:00:00 2001
From: Tech Guy <109800377+TechGuy541@users.noreply.github.com>
Date: Sun, 5 Jan 2025 08:02:32 +0000
Subject: [PATCH] Add open game from system(W.I.P) and Entitlements/ram view

---
 src/MeloNX/MeloNX.xcodeproj/project.pbxproj   | 131 ++++--------------
 .../UserInterfaceState.xcuserstate            | Bin 0 -> 27066 bytes
 .../xcschemes/xcschememanagement.plist        |  24 ++++
 src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift    |   8 +-
 .../MeloNX/Views/GamesList/GameListView.swift |  27 ++++
 .../SettingsView/Info View/DeviceMemory.swift |  25 ++++
 .../SettingsView/Info View/InfoView.swift     |  95 +++++++++++++
 .../Views/SettingsView/SettingsView.swift     |   8 +-
 8 files changed, 210 insertions(+), 108 deletions(-)
 create mode 100644 src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/techguy.xcuserdatad/UserInterfaceState.xcuserstate
 create mode 100644 src/MeloNX/MeloNX.xcodeproj/xcuserdata/techguy.xcuserdatad/xcschemes/xcschememanagement.plist
 create mode 100644 src/MeloNX/MeloNX/Views/SettingsView/Info View/DeviceMemory.swift
 create mode 100644 src/MeloNX/MeloNX/Views/SettingsView/Info View/InfoView.swift

diff --git a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj
index 25549a984..b32e8a35b 100644
--- a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj
+++ b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 73;
+	objectVersion = 70;
 	objects = {
 
 /* Begin PBXAggregateTarget section */
@@ -76,107 +76,8 @@
 		BD43C6302D1B8211003BBC42 /* dotnet.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = dotnet.xcconfig; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
-/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
-		4E80AA1D2CD7015100029585 /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
-			isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
-			membershipExceptions = (
-				Info.plist,
-			);
-			target = 4E80A98C2CD6F54500029585 /* MeloNX */;
-		};
-/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
-
-/* Begin PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet section */
-		4E9A82F32CF87822006D7086 /* PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet */ = {
-			isa = PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet;
-			attributesByRelativePath = {
-				"Dependencies/Dynamic Libraries/Ryujinx.Headless.SDL2.dylib" = (
-					CodeSignOnCopy,
-				);
-				"Dependencies/Dynamic Libraries/SoftwareKeyboard.framework" = (
-					CodeSignOnCopy,
-					RemoveHeadersOnCopy,
-				);
-				"Dependencies/Dynamic Libraries/libMoltenVK.dylib" = (
-					CodeSignOnCopy,
-				);
-				"Dependencies/Dynamic Libraries/libavcodec.dylib" = (
-					CodeSignOnCopy,
-				);
-				"Dependencies/Dynamic Libraries/libavutil.dylib" = (
-					CodeSignOnCopy,
-				);
-				Dependencies/XCFrameworks/MoltenVK.xcframework = (
-					CodeSignOnCopy,
-					RemoveHeadersOnCopy,
-				);
-				Dependencies/XCFrameworks/SDL2.xcframework = (
-					CodeSignOnCopy,
-					RemoveHeadersOnCopy,
-				);
-				Dependencies/XCFrameworks/libSPIRV.xcframework = (
-					CodeSignOnCopy,
-					RemoveHeadersOnCopy,
-				);
-				Dependencies/XCFrameworks/libavcodec.xcframework = (
-					CodeSignOnCopy,
-					RemoveHeadersOnCopy,
-				);
-				Dependencies/XCFrameworks/libavfilter.xcframework = (
-					CodeSignOnCopy,
-					RemoveHeadersOnCopy,
-				);
-				Dependencies/XCFrameworks/libavformat.xcframework = (
-					CodeSignOnCopy,
-					RemoveHeadersOnCopy,
-				);
-				Dependencies/XCFrameworks/libavutil.xcframework = (
-					CodeSignOnCopy,
-					RemoveHeadersOnCopy,
-				);
-				Dependencies/XCFrameworks/libswresample.xcframework = (
-					CodeSignOnCopy,
-					RemoveHeadersOnCopy,
-				);
-				Dependencies/XCFrameworks/libswscale.xcframework = (
-					CodeSignOnCopy,
-					RemoveHeadersOnCopy,
-				);
-				Dependencies/XCFrameworks/libteakra.xcframework = (
-					CodeSignOnCopy,
-					RemoveHeadersOnCopy,
-				);
-			};
-			buildPhase = 4E80AA092CD6FAA800029585 /* Embed Libraries */;
-			membershipExceptions = (
-				"Dependencies/Dynamic Libraries/libavcodec.dylib",
-				"Dependencies/Dynamic Libraries/libavutil.dylib",
-				"Dependencies/Dynamic Libraries/libMoltenVK.dylib",
-				"Dependencies/Dynamic Libraries/Ryujinx.Headless.SDL2.dylib",
-				"Dependencies/Dynamic Libraries/SoftwareKeyboard.framework",
-				Dependencies/XCFrameworks/libavcodec.xcframework,
-				Dependencies/XCFrameworks/libavfilter.xcframework,
-				Dependencies/XCFrameworks/libavformat.xcframework,
-				Dependencies/XCFrameworks/libavutil.xcframework,
-				Dependencies/XCFrameworks/libSPIRV.xcframework,
-				Dependencies/XCFrameworks/libswresample.xcframework,
-				Dependencies/XCFrameworks/libswscale.xcframework,
-				Dependencies/XCFrameworks/libteakra.xcframework,
-				Dependencies/XCFrameworks/MoltenVK.xcframework,
-				Dependencies/XCFrameworks/SDL2.xcframework,
-			);
-		};
-		BD43C6122D1B1769003BBC42 /* PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet */ = {
-			isa = PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet;
-			buildPhase = 4E80A9892CD6F54500029585 /* Sources */;
-			membershipExceptions = (
-				"Core/Headers/Ryujinx-Header.h",
-			);
-		};
-/* End PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet section */
-
 /* Begin PBXFileSystemSynchronizedRootGroup section */
-		4E80A98F2CD6F54500029585 /* MeloNX */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (4E80AA1D2CD7015100029585 /* PBXFileSystemSynchronizedBuildFileExceptionSet */, BD43C6122D1B1769003BBC42 /* PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet */, 4E9A82F32CF87822006D7086 /* PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = MeloNX; sourceTree = "<group>"; };
+		4E80A98F2CD6F54500029585 /* MeloNX */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = MeloNX; sourceTree = "<group>"; };
 		4E80A9A02CD6F54700029585 /* MeloNXTests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = MeloNXTests; sourceTree = "<group>"; };
 		4E80A9AA2CD6F54700029585 /* MeloNXUITests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = MeloNXUITests; sourceTree = "<group>"; };
 /* End PBXFileSystemSynchronizedRootGroup section */
@@ -363,6 +264,7 @@
 				};
 			};
 			buildConfigurationList = 4E80A9882CD6F54500029585 /* Build configuration list for PBXProject "MeloNX" */;
+			compatibilityVersion = "Xcode 14.0";
 			developmentRegion = en;
 			hasScannedForEncodings = 0;
 			knownRegions = (
@@ -375,7 +277,6 @@
 				4E0DED322D05695D00FEF007 /* XCRemoteSwiftPackageReference "SwiftUIJoystick" */,
 				4EA5AE802D16807500AD0B9F /* XCRemoteSwiftPackageReference "SwiftSVG" */,
 			);
-			preferredProjectObjectVersion = 56;
 			productRefGroup = 4E80A98E2CD6F54500029585 /* Products */;
 			projectDirPath = "";
 			projectRoot = "";
@@ -622,7 +523,7 @@
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_ASSET_PATHS = "";
-				DEVELOPMENT_TEAM = 95J8WZ4TN8;
+				DEVELOPMENT_TEAM = F4QL9A2T88;
 				ENABLE_PREVIEWS = YES;
 				ENABLE_TESTABILITY = NO;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -635,6 +536,8 @@
 					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
 					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
 					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
 				);
 				GCC_OPTIMIZATION_LEVEL = fast;
 				GENERATE_INFOPLIST_FILE = YES;
@@ -788,9 +691,16 @@
 					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
 					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
 					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
 				);
 				MARKETING_VERSION = 0.0.8;
-				PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX;
+				PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX1;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;
 				SWIFT_OBJC_BRIDGING_HEADER = "MeloNX/Core/Headers/Ryujinx-Header.h";
@@ -808,7 +718,7 @@
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_ASSET_PATHS = "";
-				DEVELOPMENT_TEAM = 95J8WZ4TN8;
+				DEVELOPMENT_TEAM = F4QL9A2T88;
 				ENABLE_PREVIEWS = YES;
 				ENABLE_TESTABILITY = YES;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -821,6 +731,8 @@
 					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
 					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
 					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
 				);
 				GCC_OPTIMIZATION_LEVEL = fast;
 				GENERATE_INFOPLIST_FILE = YES;
@@ -974,9 +886,16 @@
 					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
 					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
 					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
+					"$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries",
 				);
 				MARKETING_VERSION = 0.0.8;
-				PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX;
+				PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX1;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;
 				SWIFT_OBJC_BRIDGING_HEADER = "MeloNX/Core/Headers/Ryujinx-Header.h";
diff --git a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/techguy.xcuserdatad/UserInterfaceState.xcuserstate b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/techguy.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000000000000000000000000000000000000..805b0c676b3e6d8b7d75bb518b9d433b370ab855
GIT binary patch
literal 27066
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
G!T$qDZ@%yV

literal 0
HcmV?d00001

diff --git a/src/MeloNX/MeloNX.xcodeproj/xcuserdata/techguy.xcuserdatad/xcschemes/xcschememanagement.plist b/src/MeloNX/MeloNX.xcodeproj/xcuserdata/techguy.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 000000000..91a670474
--- /dev/null
+++ b/src/MeloNX/MeloNX.xcodeproj/xcuserdata/techguy.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,24 @@
+<?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>SchemeUserState</key>
+	<dict>
+		<key>MeloNX.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>0</integer>
+		</dict>
+		<key>Ryujinx.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>2</integer>
+		</dict>
+		<key>com.Stossy11.MeloNX.RyujinxAg.xcscheme_^#shared#^_</key>
+		<dict>
+			<key>orderHint</key>
+			<integer>1</integer>
+		</dict>
+	</dict>
+</dict>
+</plist>
diff --git a/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift b/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift
index ba96f35b9..bd4057056 100644
--- a/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift
+++ b/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift
@@ -97,10 +97,12 @@ class Ryujinx {
         
         isRunning = true
         
-        // Start The Emulation on the main thread
         RunLoop.current.perform {
+            let url = URL(string: config.gamepath)!
+            
             do {
                 let args = self.buildCommandLineArgs(from: config)
+                let accessing = url.startAccessingSecurityScopedResource()
                 
                 // Convert Arguments to ones that Ryujinx can Read
                 let cArgs = args.map { strdup($0) }
@@ -112,6 +114,10 @@ class Ryujinx {
                 
                 if result != 0 {
                     self.isRunning = false
+                    if accessing {
+                        url.stopAccessingSecurityScopedResource()
+                    }
+                    
                     throw RyujinxError.executionError(code: result)
                 }
             } catch {
diff --git a/src/MeloNX/MeloNX/Views/GamesList/GameListView.swift b/src/MeloNX/MeloNX/Views/GamesList/GameListView.swift
index 511a5068d..9f888cd4c 100644
--- a/src/MeloNX/MeloNX/Views/GamesList/GameListView.swift
+++ b/src/MeloNX/MeloNX/Views/GamesList/GameListView.swift
@@ -19,6 +19,9 @@ struct GameLibraryView: View {
     @Environment(\.colorScheme) var colorScheme
     @State var firmwareInstaller = false
     @State var firmwareversion = "0"
+    @State var isImporting: Bool = false
+    @State var startgame = false
+    
     
     var filteredGames: [Game] {
         if searchText.isEmpty {
@@ -141,6 +144,12 @@ struct GameLibraryView: View {
                             } label: {
                                 Text("Mii Maker")
                             }
+                            Button {
+                                
+                                isImporting.toggle()
+                            } label: {
+                                Text("Open game from system")
+                            }
                         }
                         
                         Button {
@@ -188,6 +197,24 @@ struct GameLibraryView: View {
                 print(error)
             }
         }
+        .fileImporter(isPresented: $isImporting, allowedContentTypes: [.zip, .data]) { result in
+            switch result {
+            case .success(let url):
+                guard url.startAccessingSecurityScopedResource() else {
+                    print("Failed to access security-scoped resource")
+                    return
+                }
+                defer { url.stopAccessingSecurityScopedResource() }
+                
+                
+                startemu = url
+
+            case .failure(let err):
+                print("File import failed: \(err.localizedDescription)")
+            }
+        }
+
+
     }
     
     
diff --git a/src/MeloNX/MeloNX/Views/SettingsView/Info View/DeviceMemory.swift b/src/MeloNX/MeloNX/Views/SettingsView/Info View/DeviceMemory.swift
new file mode 100644
index 000000000..70eccdd2f
--- /dev/null
+++ b/src/MeloNX/MeloNX/Views/SettingsView/Info View/DeviceMemory.swift	
@@ -0,0 +1,25 @@
+//
+//  DeviceMemory.swift
+//  MeloNX
+//
+//  Created by Tech Guy on 12/31/24.
+//
+import SwiftUI
+import Foundation
+import UIKit
+
+enum DeviceMemory {
+    /// Check if device has 8GB or more RAM
+    static var has8GBOrMore: Bool {
+        #if targetEnvironment(simulator)
+        return ProcessInfo.processInfo.physicalMemory >= 7 * 1024 * 1024 * 1024 // 8GB in bytes
+        #else
+        return ProcessInfo.processInfo.physicalMemory >= 7 * 1024 * 1024 * 1024 // 8GB in bytes
+        #endif
+    }
+    
+    /// Get total RAM in GB (rounded)
+    static var totalRAM: Int {
+        Int(ProcessInfo.processInfo.physicalMemory / 1024 / 1024 / 1024) + 1
+    }
+}
diff --git a/src/MeloNX/MeloNX/Views/SettingsView/Info View/InfoView.swift b/src/MeloNX/MeloNX/Views/SettingsView/Info View/InfoView.swift
new file mode 100644
index 000000000..aed7ab426
--- /dev/null
+++ b/src/MeloNX/MeloNX/Views/SettingsView/Info View/InfoView.swift	
@@ -0,0 +1,95 @@
+//
+//  InfoView.swift
+//  MeloNX
+//
+//  Created by Tech Guy on 12/31/24.
+//
+
+
+import SwiftUI
+
+struct InfoView: View {
+    @AppStorage("entitlementExists") private var entitlementExists: Bool = false
+    @AppStorage("increaseddebugmem") private var increaseddebugmem: Bool = false
+    @AppStorage("extended-virtual-addressing") private var extended: Bool = false
+    @State var gd = false
+    let infoDictionary = Bundle.main.infoDictionary
+    
+    var body: some View {
+        ScrollView {
+            VStack {
+                Text("Welcome to MeloNX!")
+                    .font(.largeTitle)
+                Divider()
+                Text("Entitlements:")
+                    .font(.title)
+                    .font(Font.headline.weight(.bold))
+                Spacer()
+                    .frame(height: 10)
+                Group {
+                    Text("Required:")
+                        .font(.title2)
+                        .foregroundColor(.red)
+                        .font(Font.headline.weight(.bold))
+                    Spacer()
+                        .frame(height: 10)
+                    Text("Increased Memory Limit: \(String(describing: entitlementExists))")
+                    Spacer()
+                        .frame(height: 10)
+                }
+                Group {
+                    Spacer()
+                        .frame(height: 10)
+                    Text("Reccomended (paid):")
+                        .font(.title2)
+                        .font(Font.headline.weight(.bold))
+                    Spacer()
+                        .frame(height: 10)
+                    Text("Increased Debugging Memory Limit: \(String(describing: increaseddebugmem))")
+                        .padding()
+                    Text("Extended Virtual Addressing: \(String(describing: extended))")
+                }
+                
+                Divider()
+                Text("Memory:")
+                    .font(.title)
+                    .font(Font.headline.weight(.bold))
+                Spacer()
+                    .frame(height: 10)
+                Group {
+                    Text("Current:")
+                        .font(.title2)
+                        .foregroundColor(.blue)
+                        .font(Font.headline.weight(.bold))
+                    Spacer()
+                        .frame(height: 10)
+                    Text(String(DeviceMemory.totalRAM) + "GB")
+                    Spacer()
+                        .frame(height: 10)
+                }
+                
+            }
+            .padding()
+            
+            HStack {
+                Text("Version: \(getAppVersion())")
+                    .foregroundColor(.white)
+                    .font(.system(size: 12))
+                    .onTapGesture {
+                        gd.toggle()
+                    }
+                if getAppVersion() == "2.2", gd {
+                    Text("Geometry Dash????? ;)")
+                        .foregroundStyle(.secondary)
+                        .font(.system(size: 5))
+                }
+            }
+        }
+    }
+    func getAppVersion() -> String {
+        guard let version = infoDictionary?["CFBundleShortVersionString"] as? String else {
+            return "Unknown"
+        }
+        return version
+    }
+}
diff --git a/src/MeloNX/MeloNX/Views/SettingsView/SettingsView.swift b/src/MeloNX/MeloNX/Views/SettingsView/SettingsView.swift
index ab3746528..dafa2a518 100644
--- a/src/MeloNX/MeloNX/Views/SettingsView/SettingsView.swift
+++ b/src/MeloNX/MeloNX/Views/SettingsView/SettingsView.swift
@@ -42,6 +42,8 @@ struct SettingsView: View {
     var body: some View {
         iOSNav {
             List {
+
+                    
                 // Graphics & Performance
                 Section {
                     Toggle(isOn: $config.fullscreen) {
@@ -296,7 +298,10 @@ struct SettingsView: View {
                     } label: {
                         Text("Advanced Options")
                     }
-                    
+                    NavigationLink(destination: InfoView()) {
+                        Text("About")
+                        
+                    }
                 } header: {
                     Text("Advanced")
                         .font(.title3.weight(.semibold))
@@ -305,6 +310,7 @@ struct SettingsView: View {
                 } footer: {
                     Text("For advanced users. See page size or add custom arguments for experimental features. (Please don't touch this if you don't know what you're doing)")
                 }
+                
             }
             .searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always))
             .navigationTitle("Settings")