diff --git a/examples/NesApp/NesApp.xcodeproj/project.pbxproj b/examples/NesApp/NesApp.xcodeproj/project.pbxproj index 69d1cad..70a1963 100644 --- a/examples/NesApp/NesApp.xcodeproj/project.pbxproj +++ b/examples/NesApp/NesApp.xcodeproj/project.pbxproj @@ -3,178 +3,141 @@ archiveVersion = 1; classes = { }; - objectVersion = 60; + objectVersion = 77; objects = { /* Begin PBXBuildFile section */ - 7AF4D40F2AC4A97B00717C81 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AF4D40E2AC4A97B00717C81 /* AppDelegate.swift */; }; - 7AF4D4112AC4A97B00717C81 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AF4D4102AC4A97B00717C81 /* SceneDelegate.swift */; }; - 7AF4D4132AC4A97B00717C81 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AF4D4122AC4A97B00717C81 /* ViewController.swift */; }; - 7AF4D4162AC4A97B00717C81 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7AF4D4142AC4A97B00717C81 /* Main.storyboard */; }; - 7AF4D4182AC4A97D00717C81 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7AF4D4172AC4A97D00717C81 /* Assets.xcassets */; }; - 7AF4D41B2AC4A97D00717C81 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7AF4D4192AC4A97D00717C81 /* LaunchScreen.storyboard */; }; - 7AF4D4242AC4A9D300717C81 /* NesKit in Frameworks */ = {isa = PBXBuildFile; productRef = 7AF4D4232AC4A9D300717C81 /* NesKit */; }; + 7AE7412B2E912765009C5FD5 /* NesKit in Frameworks */ = {isa = PBXBuildFile; productRef = 7AE7412A2E912765009C5FD5 /* NesKit */; }; + 7AE7412D2E912765009C5FD5 /* NesKitSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 7AE7412C2E912765009C5FD5 /* NesKitSwift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 7AF4D40B2AC4A97B00717C81 /* NesApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NesApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 7AF4D40E2AC4A97B00717C81 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 7AF4D4102AC4A97B00717C81 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 7AF4D4122AC4A97B00717C81 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 7AF4D4152AC4A97B00717C81 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 7AF4D4172AC4A97D00717C81 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 7AF4D41A2AC4A97D00717C81 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 7AF4D41C2AC4A97D00717C81 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7AE741182E9125FE009C5FD5 /* NesApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NesApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 7AE7411A2E9125FE009C5FD5 /* NesApp */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = NesApp; + sourceTree = ""; + }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ - 7AF4D4082AC4A97B00717C81 /* Frameworks */ = { + 7AE741152E9125FE009C5FD5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7AF4D4242AC4A9D300717C81 /* NesKit in Frameworks */, + 7AE7412D2E912765009C5FD5 /* NesKitSwift in Frameworks */, + 7AE7412B2E912765009C5FD5 /* NesKit in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 7AF4D4022AC4A97B00717C81 = { + 7AE7410F2E9125FE009C5FD5 = { isa = PBXGroup; children = ( - 7AF4D40D2AC4A97B00717C81 /* NesApp */, - 7AF4D40C2AC4A97B00717C81 /* Products */, + 7AE7411A2E9125FE009C5FD5 /* NesApp */, + 7AE741192E9125FE009C5FD5 /* Products */, ); sourceTree = ""; }; - 7AF4D40C2AC4A97B00717C81 /* Products */ = { + 7AE741192E9125FE009C5FD5 /* Products */ = { isa = PBXGroup; children = ( - 7AF4D40B2AC4A97B00717C81 /* NesApp.app */, + 7AE741182E9125FE009C5FD5 /* NesApp.app */, ); name = Products; sourceTree = ""; }; - 7AF4D40D2AC4A97B00717C81 /* NesApp */ = { - isa = PBXGroup; - children = ( - 7AF4D40E2AC4A97B00717C81 /* AppDelegate.swift */, - 7AF4D4102AC4A97B00717C81 /* SceneDelegate.swift */, - 7AF4D4122AC4A97B00717C81 /* ViewController.swift */, - 7AF4D4142AC4A97B00717C81 /* Main.storyboard */, - 7AF4D4172AC4A97D00717C81 /* Assets.xcassets */, - 7AF4D4192AC4A97D00717C81 /* LaunchScreen.storyboard */, - 7AF4D41C2AC4A97D00717C81 /* Info.plist */, - ); - path = NesApp; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 7AF4D40A2AC4A97B00717C81 /* NesApp */ = { + 7AE741172E9125FE009C5FD5 /* NesApp */ = { isa = PBXNativeTarget; - buildConfigurationList = 7AF4D41F2AC4A97D00717C81 /* Build configuration list for PBXNativeTarget "NesApp" */; + buildConfigurationList = 7AE741232E9125FF009C5FD5 /* Build configuration list for PBXNativeTarget "NesApp" */; buildPhases = ( - 7AF4D4072AC4A97B00717C81 /* Sources */, - 7AF4D4082AC4A97B00717C81 /* Frameworks */, - 7AF4D4092AC4A97B00717C81 /* Resources */, + 7AE741142E9125FE009C5FD5 /* Sources */, + 7AE741152E9125FE009C5FD5 /* Frameworks */, + 7AE741162E9125FE009C5FD5 /* Resources */, ); buildRules = ( ); dependencies = ( ); + fileSystemSynchronizedGroups = ( + 7AE7411A2E9125FE009C5FD5 /* NesApp */, + ); name = NesApp; packageProductDependencies = ( - 7AF4D4232AC4A9D300717C81 /* NesKit */, + 7AE7412A2E912765009C5FD5 /* NesKit */, + 7AE7412C2E912765009C5FD5 /* NesKitSwift */, ); productName = NesApp; - productReference = 7AF4D40B2AC4A97B00717C81 /* NesApp.app */; + productReference = 7AE741182E9125FE009C5FD5 /* NesApp.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 7AF4D4032AC4A97B00717C81 /* Project object */ = { + 7AE741102E9125FE009C5FD5 /* Project object */ = { isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1500; - LastUpgradeCheck = 1500; + LastSwiftUpdateCheck = 2600; + LastUpgradeCheck = 2600; TargetAttributes = { - 7AF4D40A2AC4A97B00717C81 = { - CreatedOnToolsVersion = 15.0; + 7AE741172E9125FE009C5FD5 = { + CreatedOnToolsVersion = 26.0.1; }; }; }; - buildConfigurationList = 7AF4D4062AC4A97B00717C81 /* Build configuration list for PBXProject "NesApp" */; - compatibilityVersion = "Xcode 14.0"; + buildConfigurationList = 7AE741132E9125FE009C5FD5 /* Build configuration list for PBXProject "NesApp" */; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = 7AF4D4022AC4A97B00717C81; + mainGroup = 7AE7410F2E9125FE009C5FD5; + minimizedProjectReferenceProxies = 1; packageReferences = ( - 7AF4D4222AC4A9D300717C81 /* XCLocalSwiftPackageReference "../.." */, + 7AE741292E912765009C5FD5 /* XCLocalSwiftPackageReference "../../../nes" */, ); - productRefGroup = 7AF4D40C2AC4A97B00717C81 /* Products */; + preferredProjectObjectVersion = 77; + productRefGroup = 7AE741192E9125FE009C5FD5 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 7AF4D40A2AC4A97B00717C81 /* NesApp */, + 7AE741172E9125FE009C5FD5 /* NesApp */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 7AF4D4092AC4A97B00717C81 /* Resources */ = { + 7AE741162E9125FE009C5FD5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7AF4D41B2AC4A97D00717C81 /* LaunchScreen.storyboard in Resources */, - 7AF4D4182AC4A97D00717C81 /* Assets.xcassets in Resources */, - 7AF4D4162AC4A97B00717C81 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 7AF4D4072AC4A97B00717C81 /* Sources */ = { + 7AE741142E9125FE009C5FD5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7AF4D4132AC4A97B00717C81 /* ViewController.swift in Sources */, - 7AF4D40F2AC4A97B00717C81 /* AppDelegate.swift in Sources */, - 7AF4D4112AC4A97B00717C81 /* SceneDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXVariantGroup section */ - 7AF4D4142AC4A97B00717C81 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 7AF4D4152AC4A97B00717C81 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 7AF4D4192AC4A97D00717C81 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 7AF4D41A2AC4A97D00717C81 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - /* Begin XCBuildConfiguration section */ - 7AF4D41D2AC4A97D00717C81 /* Debug */ = { + 7AE741212E9125FF009C5FD5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -209,6 +172,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = 46DTTB8X4S; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -226,18 +190,16 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; - 7AF4D41E2AC4A97D00717C81 /* Release */ = { + 7AE741222E9125FF009C5FD5 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -272,6 +234,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = 46DTTB8X4S; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -283,17 +246,14 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; - VALIDATE_PRODUCT = YES; }; name = Release; }; - 7AF4D4202AC4A97D00717C81 /* Debug */ = { + 7AE741242E9125FF009C5FD5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -301,27 +261,43 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 46DTTB8X4S; + ENABLE_APP_SANDBOX = YES; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SELECTED_FILES = readonly; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = NesApp/Info.plist; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UIMainStoryboardFile = Main; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 26.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = pro.aliencat.NesApp; PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = YES; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = "1,2,7"; + XROS_DEPLOYMENT_TARGET = 26.0; }; name = Debug; }; - 7AF4D4212AC4A97D00717C81 /* Release */ = { + 7AE741252E9125FF009C5FD5 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -329,43 +305,59 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 46DTTB8X4S; + ENABLE_APP_SANDBOX = YES; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_PREVIEWS = YES; + ENABLE_USER_SELECTED_FILES = readonly; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = NesApp/Info.plist; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; - INFOPLIST_KEY_UIMainStoryboardFile = Main; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES; + "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; + "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 26.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = pro.aliencat.NesApp; PRODUCT_NAME = "$(TARGET_NAME)"; + REGISTER_APP_GROUPS = YES; + SDKROOT = auto; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator"; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = "1,2,7"; + XROS_DEPLOYMENT_TARGET = 26.0; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 7AF4D4062AC4A97B00717C81 /* Build configuration list for PBXProject "NesApp" */ = { + 7AE741132E9125FE009C5FD5 /* Build configuration list for PBXProject "NesApp" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7AF4D41D2AC4A97D00717C81 /* Debug */, - 7AF4D41E2AC4A97D00717C81 /* Release */, + 7AE741212E9125FF009C5FD5 /* Debug */, + 7AE741222E9125FF009C5FD5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7AF4D41F2AC4A97D00717C81 /* Build configuration list for PBXNativeTarget "NesApp" */ = { + 7AE741232E9125FF009C5FD5 /* Build configuration list for PBXNativeTarget "NesApp" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7AF4D4202AC4A97D00717C81 /* Debug */, - 7AF4D4212AC4A97D00717C81 /* Release */, + 7AE741242E9125FF009C5FD5 /* Debug */, + 7AE741252E9125FF009C5FD5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -373,18 +365,22 @@ /* End XCConfigurationList section */ /* Begin XCLocalSwiftPackageReference section */ - 7AF4D4222AC4A9D300717C81 /* XCLocalSwiftPackageReference "../.." */ = { + 7AE741292E912765009C5FD5 /* XCLocalSwiftPackageReference "../../../nes" */ = { isa = XCLocalSwiftPackageReference; - relativePath = ../..; + relativePath = ../../../nes; }; /* End XCLocalSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 7AF4D4232AC4A9D300717C81 /* NesKit */ = { + 7AE7412A2E912765009C5FD5 /* NesKit */ = { isa = XCSwiftPackageProductDependency; productName = NesKit; }; + 7AE7412C2E912765009C5FD5 /* NesKitSwift */ = { + isa = XCSwiftPackageProductDependency; + productName = NesKitSwift; + }; /* End XCSwiftPackageProductDependency section */ }; - rootObject = 7AF4D4032AC4A97B00717C81 /* Project object */; + rootObject = 7AE741102E9125FE009C5FD5 /* Project object */; } diff --git a/examples/NesApp/NesApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/NesApp/NesApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/examples/NesApp/NesApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/examples/NesApp/NesApp.xcodeproj/project.xcworkspace/xcuserdata/selim.xcuserdatad/UserInterfaceState.xcuserstate b/examples/NesApp/NesApp.xcodeproj/project.xcworkspace/xcuserdata/selim.xcuserdatad/UserInterfaceState.xcuserstate index d7ba282..59f273e 100644 Binary files a/examples/NesApp/NesApp.xcodeproj/project.xcworkspace/xcuserdata/selim.xcuserdatad/UserInterfaceState.xcuserstate and b/examples/NesApp/NesApp.xcodeproj/project.xcworkspace/xcuserdata/selim.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/examples/NesApp/NesApp/AppDelegate.swift b/examples/NesApp/NesApp/AppDelegate.swift deleted file mode 100644 index 9f995da..0000000 --- a/examples/NesApp/NesApp/AppDelegate.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// AppDelegate.swift -// NesApp -// -// Created by Selim Mustafaev on 27.09.2023. -// - -import UIKit - -@main -class AppDelegate: UIResponder, UIApplicationDelegate { - - - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. - return true - } - - // MARK: UISceneSession Lifecycle - - func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { - // Called when a new scene session is being created. - // Use this method to select a configuration to create the new scene with. - return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) - } - - func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { - // Called when the user discards a scene session. - // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. - // Use this method to release any resources that were specific to the discarded scenes, as they will not return. - } - - -} - diff --git a/examples/NesApp/NesApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/NesApp/NesApp/Assets.xcassets/AppIcon.appiconset/Contents.json index 13613e3..ffdfe15 100644 --- a/examples/NesApp/NesApp/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/examples/NesApp/NesApp/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -4,6 +4,78 @@ "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "tinted" + } + ], + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" } ], "info" : { diff --git a/examples/NesApp/NesApp/Base.lproj/LaunchScreen.storyboard b/examples/NesApp/NesApp/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index 865e932..0000000 --- a/examples/NesApp/NesApp/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/NesApp/NesApp/Base.lproj/Main.storyboard b/examples/NesApp/NesApp/Base.lproj/Main.storyboard deleted file mode 100644 index 25a7638..0000000 --- a/examples/NesApp/NesApp/Base.lproj/Main.storyboard +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/NesApp/NesApp/ContentView.swift b/examples/NesApp/NesApp/ContentView.swift new file mode 100644 index 0000000..4f01f6b --- /dev/null +++ b/examples/NesApp/NesApp/ContentView.swift @@ -0,0 +1,24 @@ +// +// ContentView.swift +// NesApp +// +// Created by Selim Mustafaev on 04.10.2025. +// + +import SwiftUI + +struct ContentView: View { + var body: some View { + VStack { + Image(systemName: "globe") + .imageScale(.large) + .foregroundStyle(.tint) + Text("Hello, world!") + } + .padding() + } +} + +#Preview { + ContentView() +} diff --git a/examples/NesApp/NesApp/Info.plist b/examples/NesApp/NesApp/Info.plist deleted file mode 100644 index dd3c9af..0000000 --- a/examples/NesApp/NesApp/Info.plist +++ /dev/null @@ -1,25 +0,0 @@ - - - - - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - UISceneConfigurations - - UIWindowSceneSessionRoleApplication - - - UISceneConfigurationName - Default Configuration - UISceneDelegateClassName - $(PRODUCT_MODULE_NAME).SceneDelegate - UISceneStoryboardFile - Main - - - - - - diff --git a/examples/NesApp/NesApp/NesAppApp.swift b/examples/NesApp/NesApp/NesAppApp.swift new file mode 100644 index 0000000..6d49af5 --- /dev/null +++ b/examples/NesApp/NesApp/NesAppApp.swift @@ -0,0 +1,17 @@ +// +// NesAppApp.swift +// NesApp +// +// Created by Selim Mustafaev on 04.10.2025. +// + +import SwiftUI + +@main +struct NesAppApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/examples/NesApp/NesApp/NesView/NesView.swift b/examples/NesApp/NesApp/NesView/NesView.swift new file mode 100644 index 0000000..0ba1a74 --- /dev/null +++ b/examples/NesApp/NesApp/NesView/NesView.swift @@ -0,0 +1,31 @@ +// +// NesView.swift +// NesApp +// +// Created by Selim Mustafaev on 04.10.2025. +// + +import UIKit +import NesKit + +class NesView: UIView { + + let nesLayer: NesLayer + + init(system: NesSystem) { + self.nesLayer = NesLayer(nesSystem: system) + super.init(frame: .zero) + + self.layer.addSublayer(self.nesLayer) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + + self.nesLayer.frame = self.layer.frame + } +} diff --git a/examples/NesApp/NesApp/SceneDelegate.swift b/examples/NesApp/NesApp/SceneDelegate.swift deleted file mode 100644 index a8b7d69..0000000 --- a/examples/NesApp/NesApp/SceneDelegate.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// SceneDelegate.swift -// NesApp -// -// Created by Selim Mustafaev on 27.09.2023. -// - -import UIKit - -class SceneDelegate: UIResponder, UIWindowSceneDelegate { - - var window: UIWindow? - - - func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { - // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. - // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. - // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). - guard let _ = (scene as? UIWindowScene) else { return } - } - - func sceneDidDisconnect(_ scene: UIScene) { - // Called as the scene is being released by the system. - // This occurs shortly after the scene enters the background, or when its session is discarded. - // Release any resources associated with this scene that can be re-created the next time the scene connects. - // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). - } - - func sceneDidBecomeActive(_ scene: UIScene) { - // Called when the scene has moved from an inactive state to an active state. - // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. - } - - func sceneWillResignActive(_ scene: UIScene) { - // Called when the scene will move from an active state to an inactive state. - // This may occur due to temporary interruptions (ex. an incoming phone call). - } - - func sceneWillEnterForeground(_ scene: UIScene) { - // Called as the scene transitions from the background to the foreground. - // Use this method to undo the changes made on entering the background. - } - - func sceneDidEnterBackground(_ scene: UIScene) { - // Called as the scene transitions from the foreground to the background. - // Use this method to save data, release shared resources, and store enough scene-specific state information - // to restore the scene back to its current state. - } - - -} - diff --git a/examples/NesApp/NesApp/ViewController.swift b/examples/NesApp/NesApp/ViewController.swift deleted file mode 100644 index 0ac3816..0000000 --- a/examples/NesApp/NesApp/ViewController.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// ViewController.swift -// NesApp -// -// Created by Selim Mustafaev on 27.09.2023. -// - -import UIKit -import NesKit - -class NesView: UIView { - - let nesLayer: NesLayer - - init(system: NesSystem) { - self.nesLayer = NesLayer(nesSystem: system) - super.init(frame: .zero) - - self.layer.addSublayer(self.nesLayer) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func layoutSubviews() { - super.layoutSubviews() - - self.nesLayer.frame = self.layer.frame - } -} - -class ViewController: UIViewController { - - let system = NesSystem() - lazy var nesView = NesView(system: system) - - override func viewDidLoad() { - super.viewDidLoad() - - view.addSubview(nesView) - - nesView.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint.activate([ - nesView.leadingAnchor.constraint(equalTo: view.leadingAnchor), - nesView.trailingAnchor.constraint(equalTo: view.trailingAnchor), - nesView.topAnchor.constraint(equalTo: view.topAnchor), - nesView.bottomAnchor.constraint(equalTo: view.bottomAnchor) - ]) - - DispatchQueue.main.asyncAfter(deadline: .now() + 1) { - self.openFilePicker() - } - } - - func openFilePicker() { - let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: [.data]) - documentPicker.delegate = self - documentPicker.modalPresentationStyle = .overFullScreen - documentPicker.allowsMultipleSelection = false - present(documentPicker, animated: true) - } -} - -extension ViewController: UIDocumentPickerDelegate { - - func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) { - print("Did pick document at: ", url) - system.runRom(url.path(percentEncoded: false)) - } -} -