This commit is contained in:
lizzie 2026-03-31 03:27:44 +00:00
parent 5396913cc5
commit 727022c1e8
26 changed files with 80 additions and 435 deletions

View file

@ -1,77 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 Pomelo, Stossy11
// SPDX-License-Identifier: GPL-3.0-or-later
import SwiftUI
import UniformTypeIdentifiers
struct AdvancedSettingsView: View {
@AppStorage("exitgame") var exitgame: Bool = false
@AppStorage("ClearBackingRegion") var kpagetable: Bool = false
@AppStorage("WaitingforJIT") var waitingJIT: Bool = false
@AppStorage("cangetfullpath") var canGetFullPath: Bool = false
@AppStorage("onscreenhandheld") var onscreenjoy: Bool = false
var body: some View {
ScrollView {
Rectangle()
.fill(Color(uiColor: UIColor.secondarySystemBackground))
.cornerRadius(10)
.frame(width: .infinity, height: 50)
.overlay() {
HStack {
Toggle("Exit Game Button", isOn: $exitgame)
.padding()
}
}
Text("This is very unstable and can lead to game freezing and overall bad preformance after you exit a game")
.padding(.bottom)
.font(.footnote)
.foregroundColor(.gray)
Rectangle()
.fill(Color(uiColor: UIColor.secondarySystemBackground))
.cornerRadius(10)
.frame(width: .infinity, height: 50)
.overlay() {
HStack {
Toggle("Memory Usage Increase", isOn: $kpagetable)
.padding()
}
}
Text("This makes games way more stable but a lot of games will crash as you will run out of Memory way quicker. (Don't Enable this on devices with less then 8GB of memory as most games will crash)")
.padding(.bottom)
.font(.footnote)
.foregroundColor(.gray)
Rectangle()
.fill(Color(uiColor: UIColor.secondarySystemBackground))
.cornerRadius(10)
.frame(width: .infinity, height: 50)
.overlay() {
HStack {
Toggle("Check for Booting OS", isOn: $canGetFullPath)
.padding()
}
}
Text("If you do not have the neccesary files for Booting the Switch OS, it will just crash almost instantly.")
.padding(.bottom)
.font(.footnote)
.foregroundColor(.gray)
Rectangle()
.fill(Color(uiColor: UIColor.secondarySystemBackground))
.cornerRadius(10)
.frame(width: .infinity, height: 50)
.overlay() {
HStack {
Toggle("Set OnScreen Controls to Handheld", isOn: $onscreenjoy)
.padding()
}
}
Text("You need in Core Settings to set \"use_docked_mode = 0\"")
.padding(.bottom)
.font(.footnote)
.foregroundColor(.gray)
}
}
}

View file

View file

View file

@ -1,19 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 Pomelo, Stossy11
// SPDX-License-Identifier: GPL-3.0-or-later
import Foundation
enum AppIconProvider {
static func appIcon(in bundle: Bundle = .main) -> String {
guard let icons = bundle.object(forInfoDictionaryKey: "CFBundleIcons") as? [String: Any],
let primaryIcon = icons["CFBundlePrimaryIcon"] as? [String: Any],
let iconFiles = primaryIcon["CFBundleIconFiles"] as? [String],
let iconFileName = iconFiles.last else {
print("Could not find icons in bundle")
return ""
}
return iconFileName
}
}

View file

@ -1,26 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 Pomelo, Stossy11
// SPDX-License-Identifier: GPL-3.0-or-later
import SwiftUI
import AppUI
struct BootOSView: View {
@Binding var core: Core
@Binding var currentnavigarion: Int
@State var appui = AppUI.shared
@AppStorage("cangetfullpath") var canGetFullPath: Bool = false
var body: some View {
if (appui.canGetFullPath() -- canGetFullPath) {
EmulationView(game: nil)
} else {
VStack {
Text("Unable Launch Switch OS")
.font(.largeTitle)
.padding()
Text("You do not have the Switch Home Menu Files Needed to launch the Ηome Menu")
}
}
}
}

View file

@ -17,31 +17,21 @@ add_executable(eden-ios
EmulationWindow.mm
VMA.cpp
EnableJIT.swift
EmulationGame.swift
JoystickView.swift
CoreSettingsView.swift
ContentView.swift
EmulationHandler.swift
DetectServer.swift
NavView.swift
PomeloApp.swift
SettingsView.swift
FileManager.swift
EmulationView.swift
LibraryView.swift
GameButtonListView.swift
KeyboardHostingController.swift
MetalView.swift
BootOSView.swift
ControllerView.swift
AppUI.swift
InfoView.swift
FolderMonitor.swift
AdvancedSettingsView.swift
GameButtonView.swift
AppIconProvider.swift
Haptics.swift
EmulationScreenView.swift
GameListView.swift
)

View file

@ -1,15 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 Pomelo, Stossy11
// SPDX-License-Identifier: GPL-3.0-or-later
import SwiftUI
import AppUI
struct ContentView: View {
@State var core = Core(games: [], root: FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0])
var body: some View {
HomeView(core: core).onAppear() {
}
}
}

View file

@ -5,7 +5,7 @@
import SwiftUI
import GameController
import AppUI
import SwiftUIJoystick
struct ControllerView: View {
@ -335,6 +335,18 @@ struct ABXYView: View {
}
}
class Haptics {
static let shared = Haptics()
private init() { }
func play(_ feedbackStyle: UIImpactFeedbackGenerator.FeedbackStyle) {
print("haptics")
UIImpactFeedbackGenerator(style: feedbackStyle).impactOccurred()
}
func notify(_ feedbackType: UINotificationFeedbackGenerator.FeedbackType) {
UINotificationFeedbackGenerator().notificationOccurred(feedbackType)
}
}
struct ButtonView: View {
var button: VirtualControllerButtonType
@StateObject private var viewModel: EmulationViewModel = EmulationViewModel(game: nil)

View file

@ -1,88 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 Pomelo, Stossy11
// SPDX-License-Identifier: GPL-3.0-or-later
import SwiftUI
import Foundation
import AppUI
struct CoreSettingsView: View {
@State private var text: String = ""
@State private var isLoading: Bool = true
@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
if isLoading {
ProgressView()
.progressViewStyle(CircularProgressViewStyle())
} else {
TextEditor(text: $text)
.padding()
}
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button {
let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let configfolder = documentDirectory.appendingPathComponent("config", conformingTo: .folder)
let fileURL = configfolder.appendingPathComponent("config.ini")
presentationMode.wrappedValue.dismiss()
do {
try FileManager.default.removeItem(at: fileURL)
} catch {
print("\(error.localizedDescription)")
}
AppUI.shared.settingsSaved()
} label: {
Text("Reset File")
}
}
}
.onAppear {
loadFile()
}
.onDisappear() {
saveFile()
}
}
private func loadFile() {
let fileManager = FileManager.default
let documentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let configfolder = documentDirectory.appendingPathComponent("config", conformingTo: .folder)
let fileURL = configfolder.appendingPathComponent("config.ini")
if fileManager.fileExists(atPath: fileURL.path) {
do {
text = try String(contentsOf: fileURL, encoding: .utf8)
} catch {
print("Error reading file: \(error)")
}
} else {
text = "" // Initialize with empty text if file doesn't exist
}
isLoading = false
}
private func saveFile() {
let fileManager = FileManager.default
let documentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let configfolder = documentDirectory.appendingPathComponent("config", conformingTo: .folder)
let fileURL = configfolder.appendingPathComponent("config.ini")
do {
try text.write(to: fileURL, atomically: true, encoding: .utf8)
AppUI.shared.settingsSaved()
print("File saved successfully!")
} catch {
print("Error saving file: \(error)")
}
}
}

View file

@ -1,26 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 Pomelo, Stossy11
// SPDX-License-Identifier: GPL-3.0-or-later
import Foundation
func isSideJITServerDetected(completion: @escaping (Result<Void, Error>) -> Void) {
let address = UserDefaults.standard.string(forKey: "sidejitserver") ?? ""
var SJSURL = address
if (address).isEmpty {
SJSURL = "http://sidejitserver._http._tcp.local:8080"
}
// Create a network operation at launch to Refresh SideJITServer
let url = URL(string: SJSURL)!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print("No SideJITServer on Network")
completion(.failure(error))
return
}
completion(.success(()))
}
task.resume()
return
}

View file

@ -4,7 +4,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
import SwiftUI
import AppUI
import Metal
import Foundation

View file

@ -4,7 +4,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
import SwiftUI
import AppUI
import MetalKit
class EmulationScreenView: UIView {

View file

@ -4,7 +4,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
import SwiftUI
import AppUI
import Foundation
import GameController
import UIKit

View file

@ -1,52 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 Pomelo, Stossy11
// SPDX-License-Identifier: GPL-3.0-or-later
import Foundation
enum SideJITServerErrorType: Error {
case invalidURL
case errorConnecting
case deviceNotFound
case other(String)
}
func sendrequestsidejit(url: String, completion: @escaping (Result<Void, SideJITServerErrorType>) -> Void) {
let url = URL(string: url)!
let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
if let error = error {
completion(.failure(.errorConnecting))
return
}
guard let data = data, let datastring = String(data: data, encoding: .utf8) else { return }
if datastring == "Enabled JIT" {
completion(.success(()))
} else {
let errorType: SideJITServerErrorType = datastring == "Could not find device!" ? .deviceNotFound : .other(datastring)
completion(.failure(errorType))
}
}
task.resume()
}
func sendrefresh(url: String, completion: @escaping (Result<Void, SideJITServerErrorType>) -> Void) {
let url = URL(string: url)!
let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
if let error = error {
completion(.failure(.errorConnecting))
return
}
guard let data = data, let datastring = String(data: data, encoding: .utf8) else { return }
let inputText = "{\"OK\":\"Refreshed!\"}"
if datastring == inputText {
completion(.success(()))
} else {
let errorType: SideJITServerErrorType = datastring == "Could not find device!" ? .deviceNotFound : .other(datastring)
completion(.failure(errorType))
}
}
task.resume()
}

View file

@ -6,7 +6,7 @@
import SwiftUI
import Foundation
import UIKit
import AppUI
import Zip
struct Core : Comparable, Hashable {

View file

@ -1,40 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 Pomelo, TechGuy
// SPDX-License-Identifier: GPL-3.0-or-later
import SwiftUI
import Foundation
import UIKit
struct GameButtonListView: View {
var game: EmulationGame
@Environment(\.colorScheme) var colorScheme
var body: some View {
HStack(spacing: 15) {
if let image = UIImage(data: game.imageData) {
Image(uiImage: image)
.resizable()
.frame(width: 60, height: 60)
.cornerRadius(8)
} else {
Image(systemName: "photo")
.resizable()
.frame(width: 60, height: 60)
.cornerRadius(8)
}
VStack(alignment: .leading, spacing: 4) {
Text(game.title)
.font(.headline)
.foregroundColor(colorScheme == .dark ? Color.white : Color.black)
Text(game.developer)
.font(.subheadline)
.foregroundColor(.gray)
}
Spacer()
}
.padding(.vertical, 8)
}
}

View file

@ -165,7 +165,6 @@ struct HomeView: View {
}
}
struct GameCarouselView: View {
// let games: [EmulationGame]
@State var core: Core

View file

@ -7,7 +7,39 @@ import SwiftUI
import Foundation
import UIKit
import UniformTypeIdentifiers
import AppUI
struct GameButtonListView: View {
var game: EmulationGame
@Environment(\.colorScheme) var colorScheme
var body: some View {
HStack(spacing: 15) {
if let image = UIImage(data: game.imageData) {
Image(uiImage: image)
.resizable()
.frame(width: 60, height: 60)
.cornerRadius(8)
} else {
Image(systemName: "photo")
.resizable()
.frame(width: 60, height: 60)
.cornerRadius(8)
}
VStack(alignment: .leading, spacing: 4) {
Text(game.title)
.font(.headline)
.foregroundColor(colorScheme == .dark ? Color.white : Color.black)
Text(game.developer)
.font(.subheadline)
.foregroundColor(.gray)
}
Spacer()
}
.padding(.vertical, 8)
}
}
struct GameListView: View {
@State var core: Core

View file

@ -1,23 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 Pomelo, Stossy11
// SPDX-License-Identifier: GPL-3.0-or-later
import UIKit
import SwiftUI
import AppUI
class Haptics {
static let shared = Haptics()
private init() { }
func play(_ feedbackStyle: UIImpactFeedbackGenerator.FeedbackStyle) {
print("haptics")
UIImpactFeedbackGenerator(style: feedbackStyle).impactOccurred()
}
func notify(_ feedbackType: UINotificationFeedbackGenerator.FeedbackType) {
UINotificationFeedbackGenerator().notificationOccurred(feedbackType)
}
}

View file

@ -1,46 +0,0 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 Yuzu, Stossy11
// SPDX-License-Identifier: GPL-3.0-or-later
import SwiftUI
struct InfoView: View {
@AppStorage("entitlementNotExists") private var entitlementNotExists: Bool = false
@AppStorage("increaseddebugmem") private var increaseddebugmem: Bool = false
@AppStorage("extended-virtual-addressing") private var extended: Bool = false
let infoDictionary = Bundle.main.infoDictionary
var body: some View {
ScrollView {
VStack {
Text("Welcome").font(.largeTitle)
Divider()
Text("Entitlements:").font(.title).font(Font.headline.weight(.bold))
Spacer().frame(height: 10)
Group {
Text("Required:").font(.title2).font(Font.headline.weight(.bold))
Spacer().frame(height: 10)
Text("Limit: \(String(describing: !entitlementNotExists))")
Spacer().frame(height: 10)
}
Group {
Spacer().frame(height: 10)
Text("Reccomended:").font(.title2).font(Font.headline.weight(.bold))
Spacer().frame(height: 10)
Text("Limit: \(String(describing: increaseddebugmem))").padding()
Text("Extended: \(String(describing: extended))")
}
}
.padding()
Text("Version: \(getAppVersion())").foregroundColor(.gray)
}
}
func getAppVersion() -> String {
guard let s = infoDictionary?["CFBundleShortVersionString"] as? String else {
return "Unknown"
}
return s
}
}

View file

@ -5,7 +5,7 @@
import SwiftUI
import SwiftUIJoystick
import AppUI
public struct Joystick: View {
@State var iscool: Bool? = nil

View file

@ -7,7 +7,6 @@ import SwiftUI
import UIKit
class KeyboardHostingController<Content: View>: UIHostingController<Content> {
override var canBecomeFirstResponder: Bool {
return true
}
@ -56,7 +55,6 @@ class KeyboardHostingController<Content: View>: UIHostingController<Content> {
}
}
struct KeyboardSupportView: UIViewControllerRepresentable {
let content: Text

View file

@ -5,7 +5,7 @@
import SwiftUI
import CryptoKit
import AppUI
struct LibraryView: View {
@Binding var core: Core

View file

@ -5,7 +5,7 @@
import SwiftUI
import Metal
import AppUI
struct MetalView: UIViewRepresentable {
let device: MTLDevice?

View file

@ -4,7 +4,25 @@
// SPDX-License-Identifier: GPL-3.0-or-later
import SwiftUI
import AppUI
struct BootOSView: View {
@Binding var core: Core
@Binding var currentnavigarion: Int
@State var appui = AppUI.shared
@AppStorage("cangetfullpath") var canGetFullPath: Bool = false
var body: some View {
if (appui.canGetFullPath() -- canGetFullPath) {
EmulationView(game: nil)
} else {
VStack {
Text("Unable Launch Switch OS")
.font(.largeTitle)
.padding()
Text("You do not have the Switch Home Menu Files Needed to launch the Ηome Menu")
}
}
}
}
struct NavView: View {
@Binding var core: Core

View file

@ -11,6 +11,14 @@ func --(lhs: Bool, rhs: Bool) -> Bool {
return lhs || rhs
}
struct ContentView: View {
@State var core = Core(games: [], root: FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0])
var body: some View {
HomeView(core: core).onAppear() {
}
}
}
@main
struct PomeloApp: App {
var body: some Scene {