forked from MeloNX/MeloNX
Enhance UI and configuration for game selection and background processing
This commit is contained in:
parent
4f3e49a90c
commit
a372911f82
@ -618,7 +618,7 @@
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
DEVELOPMENT_TEAM = 95J8WZ4TN8;
|
||||
DEVELOPMENT_TEAM = 4TD3JXVDW7;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
ENABLE_TESTABILITY = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
@ -634,6 +634,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;
|
||||
@ -677,9 +679,13 @@
|
||||
"$(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 = xyz.belladev.MeloNX;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "MeloNX/App/Core/Headers/Ryujinx-Header.h";
|
||||
@ -697,7 +703,7 @@
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
DEVELOPMENT_TEAM = 95J8WZ4TN8;
|
||||
DEVELOPMENT_TEAM = 4TD3JXVDW7;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
@ -713,6 +719,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;
|
||||
@ -756,9 +764,13 @@
|
||||
"$(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 = xyz.belladev.MeloNX;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "MeloNX/App/Core/Headers/Ryujinx-Header.h";
|
||||
|
Binary file not shown.
@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1620"
|
||||
version = "1.7">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES"
|
||||
buildArchitectures = "Automatic">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "4E80A98C2CD6F54500029585"
|
||||
BuildableName = "MeloNX.app"
|
||||
BlueprintName = "MeloNX"
|
||||
ReferencedContainer = "container:MeloNX.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
shouldAutocreateTestPlan = "YES">
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Release"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "4E80A98C2CD6F54500029585"
|
||||
BuildableName = "MeloNX.app"
|
||||
BlueprintName = "MeloNX"
|
||||
ReferencedContainer = "container:MeloNX.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "4E80A98C2CD6F54500029585"
|
||||
BuildableName = "MeloNX.app"
|
||||
BlueprintName = "MeloNX"
|
||||
ReferencedContainer = "container:MeloNX.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Release">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
@ -4,6 +4,11 @@
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>MeloNX - Release.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>MeloNX.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
@ -12,7 +17,7 @@
|
||||
<key>Ryujinx.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
<integer>3</integer>
|
||||
</dict>
|
||||
<key>com.Stossy11.MeloNX.RyujinxAg.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
|
@ -232,9 +232,16 @@ struct ContentView: View {
|
||||
}
|
||||
|
||||
Air.play(AnyView(
|
||||
Text("Select Game")
|
||||
.font(.system(size: 100))
|
||||
|
||||
VStack {
|
||||
Image(systemName: "gamecontroller")
|
||||
.font(.system(size: 300))
|
||||
.foregroundColor(.gray)
|
||||
.padding(.bottom, 10)
|
||||
|
||||
Text("Select Game")
|
||||
.font(.system(size: 150))
|
||||
.bold()
|
||||
}
|
||||
))
|
||||
|
||||
let isJIT = UserDefaults.standard.bool(forKey: "JIT-ENABLED")
|
||||
|
@ -48,8 +48,6 @@ struct SettingsView: View {
|
||||
var body: some View {
|
||||
iOSNav {
|
||||
List {
|
||||
|
||||
|
||||
// Graphics & Performance
|
||||
Section {
|
||||
Picker(selection: $config.aspectRatio) {
|
||||
@ -80,8 +78,6 @@ struct SettingsView: View {
|
||||
labelWithIcon("Macro HLE", iconName: "gearshape")
|
||||
}.tint(.blue)
|
||||
|
||||
|
||||
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
HStack {
|
||||
labelWithIcon("Resolution Scale", iconName: "magnifyingglass")
|
||||
@ -205,7 +201,6 @@ struct SettingsView: View {
|
||||
|
||||
|
||||
ForEach(currentControllers) { controller in
|
||||
|
||||
var customBinding: Binding<Bool> {
|
||||
Binding(
|
||||
get: { currentControllers.contains(controller) },
|
||||
@ -327,35 +322,32 @@ struct SettingsView: View {
|
||||
}
|
||||
|
||||
|
||||
Section {
|
||||
|
||||
|
||||
Toggle(isOn: $config.expandRam) {
|
||||
labelWithIcon("Expand Guest Ram (6GB)", iconName: "exclamationmark.bubble")
|
||||
}
|
||||
.tint(.red)
|
||||
Section {
|
||||
Toggle(isOn: $config.expandRam) {
|
||||
labelWithIcon("Expand Guest Ram (6GB)", iconName: "exclamationmark.bubble")
|
||||
}
|
||||
.tint(.red)
|
||||
|
||||
Toggle(isOn: $config.ignoreMissingServices) {
|
||||
labelWithIcon("Ignore Missing Services", iconName: "waveform.path")
|
||||
Toggle(isOn: $config.ignoreMissingServices) {
|
||||
labelWithIcon("Ignore Missing Services", iconName: "waveform.path")
|
||||
}
|
||||
.tint(.red)
|
||||
} header: {
|
||||
Text("Hacks")
|
||||
.font(.title3.weight(.semibold))
|
||||
.textCase(nil)
|
||||
.headerProminence(.increased)
|
||||
}
|
||||
.tint(.red)
|
||||
} header: {
|
||||
Text("Hacks")
|
||||
.font(.title3.weight(.semibold))
|
||||
.textCase(nil)
|
||||
.headerProminence(.increased)
|
||||
}
|
||||
|
||||
// Other Settings
|
||||
Section {
|
||||
|
||||
Toggle(isOn: $ssb) {
|
||||
labelWithIcon("Screenshot Button", iconName: "square.and.arrow.up")
|
||||
}
|
||||
.tint(.blue)
|
||||
|
||||
Toggle(isOn: $useTrollStore) {
|
||||
labelWithIcon("TrollStore", iconName: "troll.svg")
|
||||
labelWithIcon("TrollStore JIT", iconName: "troll.svg")
|
||||
}
|
||||
.tint(.blue)
|
||||
|
||||
@ -368,21 +360,18 @@ struct SettingsView: View {
|
||||
labelWithIcon("Trace Logs", iconName: "waveform.path")
|
||||
}
|
||||
.tint(.blue)
|
||||
|
||||
|
||||
} header: {
|
||||
Text("Miscellaneous Options")
|
||||
.font(.title3.weight(.semibold))
|
||||
.textCase(nil)
|
||||
.headerProminence(.increased)
|
||||
} footer: {
|
||||
Text("Enable trace and debug logs for troubleshooting, enable Screenshotting without distractions and Enable automatic TrollStore JIT.")
|
||||
Text("Enable trace and debug logs for advanced troubleshooting (Note: This degrades performance),\nEnable Screenshot Button for better screenshots\nand Enable TrollStore for automatic TrollStore JIT.")
|
||||
}
|
||||
|
||||
// Advanced
|
||||
Section {
|
||||
DisclosureGroup {
|
||||
|
||||
Toggle(isOn: $mVKPreFillBuffer) {
|
||||
labelWithIcon("MVK: Pre-Fill Metal Command Buffers", iconName: "gearshape")
|
||||
}.tint(.blue)
|
||||
@ -392,9 +381,12 @@ struct SettingsView: View {
|
||||
Spacer()
|
||||
Text("\(String(Int(getpagesize())))")
|
||||
.foregroundColor(.secondary)
|
||||
|
||||
}
|
||||
|
||||
Toggle(isOn: $config.dfsIntegrityChecks) {
|
||||
labelWithIcon("Disable FS Integrity Checks", iconName: "checkmark.shield")
|
||||
}.tint(.blue)
|
||||
|
||||
TextField("Additional Arguments", text: Binding(
|
||||
get: {
|
||||
config.additionalArgs.joined(separator: " ")
|
||||
@ -417,7 +409,6 @@ struct SettingsView: View {
|
||||
.font(.body)
|
||||
}
|
||||
|
||||
|
||||
} label: {
|
||||
Text("Advanced Options")
|
||||
}
|
||||
@ -429,7 +420,6 @@ 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")
|
||||
@ -542,8 +532,6 @@ struct SVGView: UIViewRepresentable {
|
||||
svgName.removeLast(4)
|
||||
}
|
||||
|
||||
|
||||
|
||||
let svgLayer = UIView(SVGNamed: svgName) { svgLayer in
|
||||
svgLayer.fillColor = UIColor(color).cgColor // Apply the provided color
|
||||
svgLayer.resizeToFit(hammock.frame)
|
||||
|
@ -4,6 +4,11 @@
|
||||
<dict>
|
||||
<key>MeloID</key>
|
||||
<string>83f67a0a96bd8628a150d7853e360db5bae64e7769524fae399c4b8e7e6aff17</string>
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>processing</string>
|
||||
<string>fetch</string>
|
||||
</array>
|
||||
<key>UIFileSharingEnabled</key>
|
||||
<true/>
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
|
@ -9,14 +9,10 @@ import SwiftUI
|
||||
import UIKit
|
||||
import CryptoKit
|
||||
|
||||
|
||||
|
||||
@main
|
||||
struct MeloNXApp: App {
|
||||
|
||||
@State var showed = false
|
||||
|
||||
|
||||
var body: some Scene {
|
||||
WindowGroup {
|
||||
ZStack {
|
||||
@ -37,7 +33,11 @@ struct MeloNXApp: App {
|
||||
}
|
||||
}
|
||||
.onAppear {
|
||||
#if RELEASE
|
||||
initR()
|
||||
#else
|
||||
showed = true
|
||||
#endif
|
||||
}
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||
.background(Color.black.opacity(1))
|
||||
@ -69,19 +69,13 @@ struct MeloNXApp: App {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
showDMCAAlert()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -175,7 +169,6 @@ func drmcheck(completion: @escaping (Bool) -> Void) {
|
||||
} else {
|
||||
completion(false)
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
@ -187,8 +180,6 @@ func InitializeRyujinx(completion: @escaping (Bool) -> Void) {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (detectRoms(path: path) != value) {
|
||||
completion(false)
|
||||
}
|
||||
@ -209,7 +200,6 @@ func InitializeRyujinx(completion: @escaping (Bool) -> Void) {
|
||||
completion(false)
|
||||
}
|
||||
|
||||
|
||||
guard let httpResponse = response as? HTTPURLResponse else {
|
||||
completion(false)
|
||||
return
|
||||
@ -231,8 +221,6 @@ func detectRoms(path string: String) -> String {
|
||||
return romHash.compactMap { String(format: "%02x", $0) }.joined()
|
||||
}
|
||||
|
||||
|
||||
|
||||
func addFolders(_ folderPath: String) -> String? {
|
||||
let fileManager = FileManager.default
|
||||
if let data = Data(base64Encoded: folderPath),
|
||||
@ -243,7 +231,6 @@ func addFolders(_ folderPath: String) -> String? {
|
||||
}
|
||||
|
||||
extension String {
|
||||
|
||||
func print() {
|
||||
Swift.print(self)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user