So it begins

This commit is contained in:
TheMaddax 2025-01-06 10:56:49 -06:00
parent fa237fc89c
commit 451f16b25d
22 changed files with 1774 additions and 516 deletions

View file

@ -0,0 +1,596 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 77;
objects = {
/* Begin PBXContainerItemProxy section */
C290794D2D2BB54300FC9292 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C29079332D2BB54200FC9292 /* Project object */;
proxyType = 1;
remoteGlobalIDString = C290793A2D2BB54200FC9292;
remoteInfo = ChessPrism;
};
C29079572D2BB54300FC9292 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C29079332D2BB54200FC9292 /* Project object */;
proxyType = 1;
remoteGlobalIDString = C290793A2D2BB54200FC9292;
remoteInfo = ChessPrism;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
C290793B2D2BB54200FC9292 /* ChessPrism.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ChessPrism.app; sourceTree = BUILT_PRODUCTS_DIR; };
C290794C2D2BB54300FC9292 /* ChessPrismTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ChessPrismTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
C29079562D2BB54300FC9292 /* ChessPrismUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ChessPrismUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
C290793D2D2BB54200FC9292 /* ChessPrism */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = ChessPrism;
sourceTree = "<group>";
};
C290794F2D2BB54300FC9292 /* ChessPrismTests */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = ChessPrismTests;
sourceTree = "<group>";
};
C29079592D2BB54300FC9292 /* ChessPrismUITests */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = ChessPrismUITests;
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
C29079382D2BB54200FC9292 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
C29079492D2BB54300FC9292 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
C29079532D2BB54300FC9292 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
C29079322D2BB54200FC9292 = {
isa = PBXGroup;
children = (
C290793D2D2BB54200FC9292 /* ChessPrism */,
C290794F2D2BB54300FC9292 /* ChessPrismTests */,
C29079592D2BB54300FC9292 /* ChessPrismUITests */,
C290793C2D2BB54200FC9292 /* Products */,
);
sourceTree = "<group>";
};
C290793C2D2BB54200FC9292 /* Products */ = {
isa = PBXGroup;
children = (
C290793B2D2BB54200FC9292 /* ChessPrism.app */,
C290794C2D2BB54300FC9292 /* ChessPrismTests.xctest */,
C29079562D2BB54300FC9292 /* ChessPrismUITests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
C290793A2D2BB54200FC9292 /* ChessPrism */ = {
isa = PBXNativeTarget;
buildConfigurationList = C29079602D2BB54300FC9292 /* Build configuration list for PBXNativeTarget "ChessPrism" */;
buildPhases = (
C29079372D2BB54200FC9292 /* Sources */,
C29079382D2BB54200FC9292 /* Frameworks */,
C29079392D2BB54200FC9292 /* Resources */,
);
buildRules = (
);
dependencies = (
);
fileSystemSynchronizedGroups = (
C290793D2D2BB54200FC9292 /* ChessPrism */,
);
name = ChessPrism;
packageProductDependencies = (
);
productName = ChessPrism;
productReference = C290793B2D2BB54200FC9292 /* ChessPrism.app */;
productType = "com.apple.product-type.application";
};
C290794B2D2BB54300FC9292 /* ChessPrismTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = C29079632D2BB54300FC9292 /* Build configuration list for PBXNativeTarget "ChessPrismTests" */;
buildPhases = (
C29079482D2BB54300FC9292 /* Sources */,
C29079492D2BB54300FC9292 /* Frameworks */,
C290794A2D2BB54300FC9292 /* Resources */,
);
buildRules = (
);
dependencies = (
C290794E2D2BB54300FC9292 /* PBXTargetDependency */,
);
fileSystemSynchronizedGroups = (
C290794F2D2BB54300FC9292 /* ChessPrismTests */,
);
name = ChessPrismTests;
packageProductDependencies = (
);
productName = ChessPrismTests;
productReference = C290794C2D2BB54300FC9292 /* ChessPrismTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
C29079552D2BB54300FC9292 /* ChessPrismUITests */ = {
isa = PBXNativeTarget;
buildConfigurationList = C29079662D2BB54300FC9292 /* Build configuration list for PBXNativeTarget "ChessPrismUITests" */;
buildPhases = (
C29079522D2BB54300FC9292 /* Sources */,
C29079532D2BB54300FC9292 /* Frameworks */,
C29079542D2BB54300FC9292 /* Resources */,
);
buildRules = (
);
dependencies = (
C29079582D2BB54300FC9292 /* PBXTargetDependency */,
);
fileSystemSynchronizedGroups = (
C29079592D2BB54300FC9292 /* ChessPrismUITests */,
);
name = ChessPrismUITests;
packageProductDependencies = (
);
productName = ChessPrismUITests;
productReference = C29079562D2BB54300FC9292 /* ChessPrismUITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
C29079332D2BB54200FC9292 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1620;
LastUpgradeCheck = 1620;
TargetAttributes = {
C290793A2D2BB54200FC9292 = {
CreatedOnToolsVersion = 16.2;
};
C290794B2D2BB54300FC9292 = {
CreatedOnToolsVersion = 16.2;
TestTargetID = C290793A2D2BB54200FC9292;
};
C29079552D2BB54300FC9292 = {
CreatedOnToolsVersion = 16.2;
TestTargetID = C290793A2D2BB54200FC9292;
};
};
};
buildConfigurationList = C29079362D2BB54200FC9292 /* Build configuration list for PBXProject "ChessPrism" */;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = C29079322D2BB54200FC9292;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 77;
productRefGroup = C290793C2D2BB54200FC9292 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
C290793A2D2BB54200FC9292 /* ChessPrism */,
C290794B2D2BB54300FC9292 /* ChessPrismTests */,
C29079552D2BB54300FC9292 /* ChessPrismUITests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
C29079392D2BB54200FC9292 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
C290794A2D2BB54300FC9292 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
C29079542D2BB54300FC9292 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
C29079372D2BB54200FC9292 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
C29079482D2BB54300FC9292 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
C29079522D2BB54300FC9292 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
C290794E2D2BB54300FC9292 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = C290793A2D2BB54200FC9292 /* ChessPrism */;
targetProxy = C290794D2D2BB54300FC9292 /* PBXContainerItemProxy */;
};
C29079582D2BB54300FC9292 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = C290793A2D2BB54200FC9292 /* ChessPrism */;
targetProxy = C29079572D2BB54300FC9292 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
C290795E2D2BB54300FC9292 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
C290795F2D2BB54300FC9292 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SWIFT_COMPILATION_MODE = wholemodule;
};
name = Release;
};
C29079612D2BB54300FC9292 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = ChessPrism/ChessPrism.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"ChessPrism/Preview Content\"";
DEVELOPMENT_TEAM = RJHWWWSF6Q;
ENABLE_HARDENED_RUNTIME = YES;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
"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";
IPHONEOS_DEPLOYMENT_TARGET = 18.2;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 15.2;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.chessprism.ChessPrism;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = auto;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
XROS_DEPLOYMENT_TARGET = 2.2;
};
name = Debug;
};
C29079622D2BB54300FC9292 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = ChessPrism/ChessPrism.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"ChessPrism/Preview Content\"";
DEVELOPMENT_TEAM = RJHWWWSF6Q;
ENABLE_HARDENED_RUNTIME = YES;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
"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";
IPHONEOS_DEPLOYMENT_TARGET = 18.2;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 15.2;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.chessprism.ChessPrism;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = auto;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
XROS_DEPLOYMENT_TARGET = 2.2;
};
name = Release;
};
C29079642D2BB54300FC9292 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = RJHWWWSF6Q;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 18.2;
MACOSX_DEPLOYMENT_TARGET = 15.2;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.chessprism.ChessPrismTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = auto;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ChessPrism.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/ChessPrism";
XROS_DEPLOYMENT_TARGET = 2.2;
};
name = Debug;
};
C29079652D2BB54300FC9292 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = RJHWWWSF6Q;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 18.2;
MACOSX_DEPLOYMENT_TARGET = 15.2;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.chessprism.ChessPrismTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = auto;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ChessPrism.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/ChessPrism";
XROS_DEPLOYMENT_TARGET = 2.2;
};
name = Release;
};
C29079672D2BB54300FC9292 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = RJHWWWSF6Q;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 18.2;
MACOSX_DEPLOYMENT_TARGET = 15.2;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.chessprism.ChessPrismUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = auto;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
TEST_TARGET_NAME = ChessPrism;
XROS_DEPLOYMENT_TARGET = 2.2;
};
name = Debug;
};
C29079682D2BB54300FC9292 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = RJHWWWSF6Q;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 18.2;
MACOSX_DEPLOYMENT_TARGET = 15.2;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.chessprism.ChessPrismUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = auto;
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = NO;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
TEST_TARGET_NAME = ChessPrism;
XROS_DEPLOYMENT_TARGET = 2.2;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C29079362D2BB54200FC9292 /* Build configuration list for PBXProject "ChessPrism" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C290795E2D2BB54300FC9292 /* Debug */,
C290795F2D2BB54300FC9292 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C29079602D2BB54300FC9292 /* Build configuration list for PBXNativeTarget "ChessPrism" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C29079612D2BB54300FC9292 /* Debug */,
C29079622D2BB54300FC9292 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C29079632D2BB54300FC9292 /* Build configuration list for PBXNativeTarget "ChessPrismTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C29079642D2BB54300FC9292 /* Debug */,
C29079652D2BB54300FC9292 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C29079662D2BB54300FC9292 /* Build configuration list for PBXNativeTarget "ChessPrismUITests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C29079672D2BB54300FC9292 /* Debug */,
C29079682D2BB54300FC9292 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = C29079332D2BB54200FC9292 /* Project object */;
}

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

View file

@ -0,0 +1,11 @@
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,85 @@
{
"images" : [
{
"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" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,10 @@
<?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>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
</dict>
</plist>

View file

@ -0,0 +1,17 @@
//
// ChessPrismApp.swift
// ChessPrism
//
// Created by Chris Haulmark on 1/6/25.
//
import SwiftUI
@main
struct ChessPrismApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}

View file

@ -0,0 +1,24 @@
//
// ContentView.swift
// ChessPrism
//
// Created by Chris Haulmark on 1/6/25.
//
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world!")
}
.padding()
}
}
#Preview {
ContentView()
}

View file

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,35 @@
//
// ChessPrismTests.swift
// ChessPrismTests
//
// Created by Chris Haulmark on 1/6/25.
//
import XCTest
final class ChessPrismTests: XCTestCase {
override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDownWithError() throws {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
func testExample() throws {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
// Any test you write for XCTest can be annotated as throws and async.
// Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
// Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
}
func testPerformanceExample() throws {
// This is an example of a performance test case.
measure {
// Put the code you want to measure the time of here.
}
}
}

View file

@ -0,0 +1,43 @@
//
// ChessPrismUITests.swift
// ChessPrismUITests
//
// Created by Chris Haulmark on 1/6/25.
//
import XCTest
final class ChessPrismUITests: XCTestCase {
override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class.
// In UI tests it is usually best to stop immediately when a failure occurs.
continueAfterFailure = false
// In UI tests its important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
}
override func tearDownWithError() throws {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
@MainActor
func testExample() throws {
// UI tests must launch the application that they test.
let app = XCUIApplication()
app.launch()
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
@MainActor
func testLaunchPerformance() throws {
if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {
// This measures how long it takes to launch your application.
measure(metrics: [XCTApplicationLaunchMetric()]) {
XCUIApplication().launch()
}
}
}
}

View file

@ -0,0 +1,33 @@
//
// ChessPrismUITestsLaunchTests.swift
// ChessPrismUITests
//
// Created by Chris Haulmark on 1/6/25.
//
import XCTest
final class ChessPrismUITestsLaunchTests: XCTestCase {
override class var runsForEachTargetApplicationUIConfiguration: Bool {
true
}
override func setUpWithError() throws {
continueAfterFailure = false
}
@MainActor
func testLaunch() throws {
let app = XCUIApplication()
app.launch()
// Insert steps here to perform after app launch but before taking a screenshot,
// such as logging into a test account or navigating somewhere in the app
let attachment = XCTAttachment(screenshot: app.screenshot())
attachment.name = "Launch Screen"
attachment.lifetime = .keepAlways
add(attachment)
}
}

View file

@ -1,239 +0,0 @@
# Chess Teaching Assistant Detailed Implementation Plan
## Week 1: Project Setup
1. Create Xcode project
- Set up SwiftUI project structure
- Configure project settings for MacOS Silicon
- Add basic app lifecycle handlers
2. Set up development environment
- Install required dependencies (Metal, Vision)
- Configure build settings
- Set up version control
3. Establish project architecture
- Create core module structure
- Implement basic MVVM pattern
- Set up dependency injection
4. Implement permission handlers
- Add screen recording permission request
- Implement accessibility permissions
- Add privacy descriptions in Info.plist
## Week 2-3: Screenshot Module
1. Screen recording permissions
- Implement permission request flow
- Handle permission denied scenarios
- Add permission status monitoring
2. Screenshot capture service
- Implement ScreenCapture API integration
- Add screenshot quality settings
- Implement error handling
3. Keyboard shortcut system
- Add global keyboard event monitoring
- Implement custom shortcut configuration
- Handle shortcut conflicts
4. Firefox window detection
- Implement window detection logic
- Add browser window filtering
- Handle multiple window scenarios
5. Multi-monitor support
- Implement monitor detection
- Add monitor selection UI
- Test across different monitor setups
## Week 3-4: Board Recognition System
1. Vision framework integration
- Set up Vision pipeline
- Implement image analysis
- Add error handling
2. ML model for piece recognition
- Create training dataset
- Train initial model
- Implement model inference
3. Chess.com theme handling
- Collect theme samples
- Add theme detection
- Implement theme-specific recognition
4. FEN conversion logic
- Implement FEN generation
- Add position validation
- Handle edge cases
5. Position validation system
- Add board state validation
- Implement error correction
- Add validation feedback
## Week 5-6: Stockfish Integration
1. Stockfish ARM64 setup
- Integrate Stockfish binary
- Configure engine settings
- Test basic functionality
2. Async engine wrapper
- Implement async interface
- Add move analysis queue
- Handle engine timeouts
3. Position analysis pipeline
- Implement analysis request system
- Add result processing
- Handle analysis errors
4. Move suggestion system
- Implement best move detection
- Add alternative move suggestions
- Handle engine evaluations
5. Evaluation cache
- Implement position caching
- Add cache invalidation
- Optimize cache performance
## Week 7-8: Visual Overlay Foundation
1. Metal rendering pipeline
- Set up Metal framework
- Implement basic rendering
- Add shader support
2. Transparent window system
- Create transparent NSWindow
- Implement window positioning
- Add window management
3. Basic shape rendering
- Implement shape drawing
- Add color customization
- Handle shape transformations
4. Coordinate transformation
- Implement screen to board mapping
- Add coordinate system conversion
- Handle window resizing
5. Overlay performance testing
- Implement performance metrics
- Add optimization hooks
- Test on different hardware
## Week 9-10: Move Visualization
1. Arrow rendering system
- Implement arrow drawing
- Add arrow customization
- Handle arrow animations
2. Square highlighting
- Implement square coloring
- Add highlight types
- Handle multiple highlights
3. Attack pattern visualization
- Implement attack detection
- Add visual indicators
- Handle complex patterns
4. Defensive move indicators
- Implement defense detection
- Add visual feedback
- Handle multiple defenses
5. Threat visualization system
- Implement threat detection
- Add threat indicators
- Handle complex threats
## Week 11: Performance Optimization
1. Metal shaders
- Implement custom shaders
- Optimize rendering
- Add shader debugging
2. Rendering pipeline
- Optimize draw calls
- Implement batching
- Add performance monitoring
3. Caching mechanisms
- Implement position cache
- Add analysis cache
- Optimize cache usage
4. Analysis pipeline
- Optimize engine calls
- Add parallel processing
- Handle resource contention
5. System benchmarking
- Implement performance tests
- Add metrics collection
- Analyze optimization results
## Week 12: Testing & Refinement
1. Automated test suite
- Add unit tests
- Implement integration tests
- Add UI tests
2. Performance tests
- Implement benchmark tests
- Add stress tests
- Monitor resource usage
3. Security audit
- Review code security
- Implement security fixes
- Add security monitoring
4. Bug fixes
- Implement bug tracking
- Add crash reporting
- Fix reported issues
5. Optimizations
- Analyze performance
- Implement optimizations
- Verify improvements
## Week 13: Polish & Distribution
1. UI/UX refinement
- Implement design improvements
- Add animations
- Improve user feedback
2. User settings
- Implement settings UI
- Add customization options
- Handle settings persistence
3. Analytics
- Implement analytics system
- Add event tracking
- Handle privacy concerns
4. Documentation
- Create user documentation
- Add developer docs
- Implement in-app help
5. TestFlight preparation
- Set up TestFlight
- Prepare build artifacts
- Configure distribution
## Week 14: Launch Preparation
1. Final security review
- Conduct security audit
- Implement final fixes
- Verify security measures
2. Performance validation
- Conduct final benchmarks
- Verify optimizations
- Ensure smooth operation
3. Documentation completion
- Finalize user docs
- Complete developer docs
- Verify documentation
4. TestFlight distribution
- Prepare final build
- Distribute to testers
- Collect feedback
5. User feedback setup
- Implement feedback system
- Add bug reporting
- Set up support channels
Key Milestones:
✓ Week 1: Working project structure
✓ Week 4: Functional board recognition
✓ Week 6: Working Stockfish analysis
✓ Week 8: Basic visual overlay system
✓ Week 10: Complete visualization system
✓ Week 12: Optimized performance
✓ Week 14: Ready for distribution
Testing Checkpoints:
- After each module completion
- Weekly performance benchmarks
- Bi-weekly security reviews
- Regular UX testing sessions
Development Priorities:
1. Core functionality
2. Performance optimization
3. User experience
4. Security compliance
5. Polish and refinement

View file

@ -1,30 +0,0 @@
Chess Teaching Assistant Application (MacOS Silicon Compatible)
Primary Goal:
Create a HUD (Heads-Up Display) overlay system for chess.com that assists in teaching chess to students.
Core Features:
1. Screenshot Capture
- Capture chess.com board state via keyboard shortcut/button
- Compatible with Firefox browser
- Optimized for MacOS Silicon architecture
2. Board Position Analysis
- Parse screenshot to detect piece positions
- Convert board state into FEN notation for Stockfish
- Interface with Stockfish engine (loaded in memory)
3. Visual Overlay System
- Display suggested moves as arrows over the live chess board
- Show attack patterns and defensive possibilities
- Real-time visual feedback for teaching purposes
Technical Requirements:
- MacOS Silicon (ARM64) compatibility
- Integration with chess.com via Firefox browser
- Stockfish integration for position analysis
- Transparent overlay system for move visualization
- Low-latency performance for real-time teaching
Use Case:
Instructor can activate the analysis during live games on chess.com, providing immediate visual feedback to students about tactical opportunities and strategic planning, enhancing the teaching experience through interactive visual guidance.

View file

@ -1,93 +0,0 @@
# Chess Teaching Assistant Implementation Outline
1. Project Setup (Week 1)
- Create Xcode project with SwiftUI
- Set up development environment
- Configure Metal and Vision framework dependencies
- Establish basic project architecture
- Implement permission handlers
2. Screenshot Module (Week 2-3)
- Implement screen recording permissions flow
- Build screenshot capture service
- Add keyboard shortcut system
- Create Firefox window detection
- Test multi-monitor support
3. Board Recognition System (Week 3-4)
- Develop Vision framework integration
- Create ML model for piece recognition
- Train model with various chess.com themes
- Implement FEN conversion logic
- Build position validation system
4. Stockfish Integration (Week 5-6)
- Set up Stockfish ARM64 binary
- Create async engine wrapper
- Implement position analysis pipeline
- Add move suggestion system
- Build evaluation cache
5. Visual Overlay Foundation (Week 7-8)
- Create Metal rendering pipeline
- Build transparent window system
- Implement basic shape rendering
- Add coordinate transformation system
- Test overlay performance
6. Move Visualization (Week 9-10)
- Develop arrow rendering system
- Add square highlighting
- Implement attack pattern visualization
- Create defensive move indicators
- Build threat visualization system
7. Performance Optimization (Week 11)
- Implement Metal shaders
- Optimize rendering pipeline
- Add caching mechanisms
- Reduce latency in analysis pipeline
- Benchmark system performance
8. Testing & Refinement (Week 12)
- Create automated test suite
- Implement UI tests
- Add performance tests
- Security audit
- Bug fixes and optimizations
9. Polish & Distribution (Week 13)
- UI/UX refinement
- Add user settings
- Implement analytics
- Create documentation
- TestFlight preparation
10. Launch Preparation (Week 14)
- Final security review
- Performance validation
- Documentation completion
- TestFlight distribution
- User feedback collection setup
Key Milestones:
✓ Week 1: Working project structure
✓ Week 4: Functional board recognition
✓ Week 6: Working Stockfish analysis
✓ Week 8: Basic visual overlay system
✓ Week 10: Complete visualization system
✓ Week 12: Optimized performance
✓ Week 14: Ready for distribution
Testing Checkpoints:
- After each module completion
- Weekly performance benchmarks
- Bi-weekly security reviews
- Regular UX testing sessions
Development Priorities:
1. Core functionality
2. Performance optimization
3. User experience
4. Security compliance
5. Polish and refinement

View file

@ -1,94 +0,0 @@
# Chess Teaching Assistant Application Technical Plan
## Architecture:
- Native MacOS application using SwiftUI for the UI
- Core components:
* Screenshot Capture Module
* Board Position Analysis Engine
* Visual Overlay System
* Stockfish Integration
* Machine Learning Pipeline
## Implementation Details:
### Screenshot Capture:
- Use VisionKit and native Screen Capture API
- Implement keyboard shortcut using Swift Concurrency
- Screen Recording permission handling
- Multi-monitor support with DPI awareness
### Board Position Analysis:
- Apple Vision framework + Create ML for computer vision
- CoreML 5+ models for piece recognition
- Apple Neural Engine optimization
- Convert detected positions to FEN notation
- Handle various chess.com board themes and piece sets
- Real-time position validation
### Stockfish Integration:
- Use Stockfish ARM64 binary for MacOS Silicon
- Implement in-memory engine with async/await pattern
- Configure appropriate depth and time limits
- Multiple analysis lines support
- Position evaluation caching
### Visual Overlay System:
- Metal-accelerated rendering for optimal performance
- NSWindow with transparent background
- Hardware-accelerated move visualization
- Support multiple visualization types:
* Suggested moves (arrows)
* Attack patterns (highlighted squares)
* Defensive possibilities (colored areas)
* Threat visualization
* Piece mobility indicators
- Accessibility features integration
## Modern Architecture:
- Clean Architecture with domain-driven design
- Dependency injection for modularity
- Swift Concurrency for async operations
- Observation framework for state management
- App Sandbox compliance
- Privacy manifests implementation
## Development Plan:
Phase 1: Core Infrastructure
- Set up project with modern architecture
- Implement screenshot capture with permissions
- Basic board detection using Vision framework
Phase 2: Analysis Engine
- Stockfish integration with async/await
- Position analysis pipeline
- ML model training and integration
Phase 3: Visual System
- Metal-based overlay system
- Move visualization components
- Real-time rendering optimization
Phase 4: Performance & Security
- Performance benchmarking
- Security audit and sandbox compliance
- Privacy features implementation
Phase 5: Polish & Distribution
- TestFlight integration
- UI/UX refinement
- Documentation and deployment
## Technical Stack:
- Swift & SwiftUI for application framework
- Vision framework & Create ML for computer vision
- Metal for GPU-accelerated graphics
- CoreML for machine learning
- Stockfish for chess analysis
- Swift Concurrency for async operations
- XCTest for testing infrastructure
## Monitoring & Maintenance:
- Analytics integration for performance monitoring
- Crash reporting system
- Automated testing pipeline
- Regular security audits
- User feedback collection system

144
README.md
View file

@ -1,18 +1,138 @@
# Chess Teaching Assistant
# Chess Teaching Assistant - ChessPrism
An intelligent chess teaching assistant for macOS that provides real-time analysis and visualization.
## Project Overview
ChessPrism is a native macOS application designed to enhance chess learning and analysis by providing real-time visual feedback and move suggestions during online chess games. The application integrates with chess.com through screen capture and provides advanced analysis using Stockfish and custom machine learning models.
## Features
- Real-time board position analysis
- Visual move suggestions
- Attack pattern visualization
- Defensive planning indicators
### Key Features
- Real-time board position recognition
- Visual move suggestions and threat analysis
- Integrated Stockfish engine analysis
- Customizable visual overlays
- Multi-monitor support
- Keyboard shortcut controls
## Development
See [Development Guide](docs/development/getting-started.md) for setup instructions.
## Current Development Status
### Completed Features
- Project architecture setup (MVVM pattern)
- Core screenshot capture functionality
- Basic board recognition using Vision framework
- Stockfish ARM64 integration
- Metal-based rendering pipeline foundation
## Architecture
See [Architecture Overview](docs/architecture/overview.md) for system design details.
### In Progress
- Advanced piece recognition model training
- Visual overlay system implementation
- Move suggestion system integration
- Performance optimization for real-time analysis
### Upcoming Features
- User settings and customization
- Advanced threat visualization
- Analytics and feedback system
- TestFlight distribution setup
## Technical Architecture
### Core Components
1. **Screenshot Capture Module**
- Uses VisionKit and Screen Capture API
- Handles multi-monitor scenarios
- Implements keyboard shortcuts
2. **Board Position Analysis**
- Vision framework + CoreML for computer vision
- Real-time FEN conversion
- Position validation system
3. **Stockfish Integration**
- ARM64 optimized binary
- Async/await interface
- Position evaluation caching
4. **Visual Overlay System**
- Metal-accelerated rendering
- Transparent NSWindow implementation
- Multiple visualization types
### Technology Stack
- **Languages**: Swift, Metal Shading Language
- **Frameworks**: SwiftUI, Vision, CoreML, Metal
- **Dependencies**: Stockfish 16, Create ML
- **Tools**: Xcode 16.2, Swift 6.0.3
## Development Environment Setup
### System Requirements
- **Hardware**: Apple Silicon (M1/M2/M3)
- **Memory**: 16GB+ RAM
- **GPU**: Metal 2+ support
- **OS**: macOS Ventura 13.0+
### Installation
1. Clone the repository:
```bash
git clone https://gitea.example.com/chessprism.git
cd chessprism
```
2. Install dependencies:
```bash
brew install swiftlint
```
3. Open project in Xcode:
```bash
open ChessPrism/ChessPrism.xcodeproj
```
4. Configure development settings:
- Enable Metal API validation
- Set up code signing
- Configure entitlements
## Contribution Guidelines
### Code Style
- Follow Swift style guide
- Use SwiftLint for code formatting
- Maintain 80%+ test coverage
### Branching Strategy
1. `main` - Stable production-ready code
2. `develop` - Current development branch
3. `feature/*` - Feature development branches
4. `hotfix/*` - Critical bug fixes
### Pull Request Process
1. Create a feature branch from `develop`
2. Implement changes with tests
3. Open PR with detailed description
4. Address code review feedback
5. Merge after CI passes and approval
## Key Milestones
### Completed
- [x] Project setup and architecture
- [x] Basic screenshot capture
- [x] Stockfish integration
### Current
- [ ] Advanced board recognition
- [ ] Visual overlay system
- [ ] Performance optimization
### Upcoming
- [ ] User settings implementation
- [ ] Analytics integration
- [ ] TestFlight distribution
## Documentation
- [Technical Specifications](docs/architecture/overview.md)
- [API Reference](docs/api/)
- [Development Guide](docs/development/getting-started.md)
## License
[MIT License](LICENSE)
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Contact
For project inquiries, please contact:
- Project Lead: [Your Name]
- Email: [your.email@example.com]
- Gitea: [Your Gitea Profile]

View file

@ -1,24 +1,83 @@
# Active Context
## Current Implementation Phase
Week 1: Project Setup (In Progress)
## What we're working on now
Implementation of Chess Teaching Assistant Application according to Detailed-Implementation-Plan.txt
1. Xcode project configuration
- Setting up SwiftUI project structure
- Configuring project settings for MacOS Silicon
- Adding basic app lifecycle handlers
2. Development environment setup
- Installing required dependencies (Metal, Vision)
- Configuring build settings
- Setting up version control
3. Project architecture
- Creating core module structure
- Implementing basic MVVM pattern
- Setting up dependency injection
## Recent changes
- Created detailed implementation plan
- Verified compatibility with updated outline
- Established modern tech stack (SwiftUI, Metal, Vision)
- Set up development environment
- Installed Xcode and necessary tools
- Created initial Xcode project with SwiftUI template
- Configured Git repository
- Added basic project structure
- Configured required frameworks (Metal, Vision)
- Set up initial build configurations
## Next steps
1. Begin Week 1: Project Setup
- Create Xcode project
- Set up development environment
- Establish project architecture
1. Complete project setup
- Implement permission handlers
2. Prepare development environment
- Install required dependencies
- Configure build settings
- Set up version control
3. Document initial setup process
- Create setup documentation
- Verify environment configuration
- Test basic project structure
- Add screen recording permission request
- Implement accessibility permissions
- Add privacy descriptions in Info.plist
- Finalize project architecture
- Complete MVVM implementation
- Finalize dependency injection setup
- Set up core module interfaces
2. Begin screenshot module implementation
- Implement screen recording permissions flow
- Set up screenshot capture service
- Configure keyboard shortcut system
## Completed Milestones
- Initial project setup complete
- Development environment configured
- Core frameworks integrated
- Basic project structure established
## Technical Details
### Current Implementation
- Using Swift 5.9
- SwiftUI 4.0 for UI
- Metal 3.0 for rendering
- Vision 2.0 for image analysis
- CoreML 5.0 for machine learning
### Current Architecture
- MVVM pattern implementation
- Modular architecture
- Dependency injection
- Async/await concurrency model
### Current Configuration
- MacOS Ventura 13.0+
- Xcode 15.0+
- Git 2.40+
- CoreML Tools 5.0+
## Pending Tasks
1. Complete permission handling implementation
2. Finalize project architecture
3. Begin screenshot module development
4. Set up initial testing infrastructure
5. Configure CI/CD pipeline
## Important Notes
- Following detailed implementation plan
- Maintaining clean architecture principles
- Implementing modern Swift patterns
- Ensuring security and privacy compliance
- Maintaining documentation standards

View file

@ -1,15 +1,136 @@
# Product Context
## Why this project exists
To create a teaching assistant tool for chess instructors that provides real-time visual feedback during live games on chess.com.
## Product Vision
To create an intuitive, real-time chess teaching assistant that enhances the learning experience for both instructors and students during live gameplay.
## What problems it solves
1. Difficulty in explaining chess concepts during live games
2. Lack of immediate visual feedback for teaching purposes
3. Need for integrated analysis during live gameplay
## Core Value Proposition
1. Real-time visual feedback during live games
2. Integrated analysis and teaching tools
3. Seamless integration with chess.com
4. Performance-optimized for MacOS Silicon
## How it should work
1. Instructor plays/teaches on chess.com using Firefox
2. Application captures board state via screenshot
3. System analyzes position and suggests moves
4. Visual overlay shows analysis on top of live game
## Target Users
### User Personas
1. Chess Instructors
- Needs: Real-time analysis, teaching tools, visual aids
- Goals: Effective teaching, student engagement
- Pain Points: Complex setup, delayed feedback
2. Advanced Players
- Needs: Move analysis, threat detection
- Goals: Improve teaching skills, analyze games
- Pain Points: Limited teaching tools
3. Chess Streamers
- Needs: Visual overlays, real-time analysis
- Goals: Engaging content, clear explanations
- Pain Points: Complex overlay systems
4. Self-Learners
- Needs: Position evaluation, move alternatives
- Goals: Game improvement, pattern recognition
- Pain Points: Lack of real-time feedback
## Key Features
1. Real-time board position analysis
2. Visual move suggestions and explanations
3. Threat and defense visualization
4. Position evaluation and move alternatives
5. Customizable visual overlay system
## User Workflows
### Teaching Scenario
1. Instructor starts chess.com game
2. Application detects board position
3. Real-time visual feedback appears
4. Instructor explains moves using visual aids
5. Students see analysis and suggestions
### Self-Learning Scenario
1. Player starts game on chess.com
2. Application provides real-time feedback
3. Player sees move suggestions and threats
4. Application highlights tactical patterns
5. Player reviews game analysis post-match
## User Experience Goals
1. Intuitive and non-intrusive interface
2. Real-time responsiveness (<100ms latency)
3. Clear visual feedback system
4. Customizable teaching tools
5. Seamless integration with chess.com
## Visual Feedback System
1. Move Visualization:
- Arrows for suggested moves
- Color-coded threat levels
- Highlighted squares
2. Position Analysis:
- Evaluation bar
- Move alternatives
- Threat indicators
3. Teaching Aids:
- Defensive patterns
- Attack vectors
- Piece mobility
## Accessibility Features
1. Color-blind friendly themes
2. Keyboard navigation
3. Screen reader support
4. Adjustable overlay size
5. High-contrast modes
## Success Metrics
1. Performance:
- <100ms analysis latency
- 99.9% board recognition accuracy
- 120fps overlay rendering
2. Usability:
- <5 minute setup time
- 90% instructor satisfaction rate
- <1% error rate in move suggestions
3. Adoption:
- 1000+ active users in first 6 months
- 90% retention rate after 30 days
- 4.5+ average rating on App Store
## Competitive Advantages
1. Native MacOS Silicon optimization
2. Real-time performance with Metal acceleration
3. Integrated teaching tools
4. Chess.com specific optimizations
5. Privacy-focused design
## Development Principles
1. User-centric design
2. Performance-first approach
3. Modular architecture
4. Continuous testing and refinement
5. Security and privacy compliance
## Product Roadmap
### Phase 1: Core Functionality (Weeks 1-6)
- Basic board recognition
- Stockfish integration
- Visual overlay foundation
### Phase 2: Teaching Tools (Weeks 7-10)
- Move visualization system
- Threat analysis
- Defensive patterns
### Phase 3: Polish & Optimization (Weeks 11-14)
- Performance tuning
- UI/UX refinement
- Security implementation
## Key Milestones
1. Week 4: Functional board recognition
2. Week 6: Working Stockfish analysis
3. Week 8: Basic visual overlay system
4. Week 10: Complete visualization system
5. Week 12: Optimized performance
6. Week 14: Ready for distribution

View file

@ -1,16 +1,240 @@
# System Patterns
## Architecture Overview
### Core Components
1. Screenshot Capture Module
- Screen recording permission handling
- Multi-monitor support
- Keyboard shortcut system
- Firefox window detection
2. Board Position Analysis Engine
- Vision framework integration
- CoreML model inference
- FEN conversion logic
- Position validation system
3. Visual Overlay System
- Metal rendering pipeline
- Transparent window system
- Coordinate transformation
- Move visualization components
4. Stockfish Integration
- ARM64 binary integration
- Async engine wrapper
- Position analysis pipeline
- Evaluation caching
## Key Technical Decisions
1. MacOS Silicon (ARM64) native implementation
2. Firefox browser integration
3. Low-latency overlay system
4. In-memory Stockfish engine
5. Machine Learning Pipeline
- Model training framework
- Theme detection system
- Piece recognition models
- Model versioning system
## Data Flow
1. Screenshot → Board Position Detection → FEN Conversion → Stockfish Analysis → Visual Overlay
## Architectural Patterns
### Clean Architecture Layers
1. Presentation Layer (SwiftUI)
- User interface components
- View models
- State management
2. Domain Layer
- Core business logic
- Use cases
- Domain models
3. Data Layer
- Repositories
- Data sources
- Network services
### Design Patterns
1. MVVM for UI components
2. Dependency Injection for service composition
3. Observer pattern for state management
4. Factory pattern for object creation
5. Strategy pattern for analysis algorithms
## Detailed Component Specifications
### Metal Rendering Pipeline
1. Pipeline Stages:
- Vertex processing
- Fragment shading
- Composition
- Post-processing
2. Performance Optimization:
- Command buffer optimization
- Texture compression
- Shader LOD management
- Frame pacing
3. Visual Effects:
- Anti-aliasing
- Bloom effects
- Motion blur
- Depth effects
### Vision Framework Integration
1. Image Analysis Pipeline:
- Image preprocessing
- Feature detection
- Object recognition
- Position tracking
2. Performance Considerations:
- GPU acceleration
- Batch processing
- Memory optimization
- Error handling
3. Integration Points:
- CoreML model integration
- Metal texture sharing
- SwiftUI view integration
- Async/await pattern
### Async/Await Patterns
1. Concurrency Model:
- Task groups
- Async sequences
- Actor isolation
- Continuations
2. Error Handling:
- Structured concurrency
- Task cancellation
- Error propagation
- Retry mechanisms
3. Performance Optimization:
- Task prioritization
- Resource contention management
- Memory safety
- Thread management
### CoreML Model Architecture
1. Model Specifications:
- Input/output formats
- Model quantization
- Neural engine optimization
- Model versioning
2. Training Pipeline:
- Data collection
- Model training
- Validation
- Deployment
3. Performance Considerations:
- Batch processing
- Memory management
- Model compression
- Inference optimization
### Stockfish Integration
1. Engine Configuration:
- Thread management
- Hash size optimization
- Analysis depth
- Time controls
2. Analysis Pipeline:
- Position evaluation
- Move generation
- Threat detection
- Position caching
3. Performance Optimization:
- Parallel analysis
- Cache management
- Engine tuning
- Resource allocation
## Data Flow Diagram
1. Input:
- Screenshot capture
- Keyboard input
- System events
2. Processing:
- Board detection
- Position analysis
- Move evaluation
- Visualization generation
3. Output:
- Visual overlay
- Move suggestions
- Position evaluation
- Threat analysis
## Error Handling Strategy
1. Input Validation:
- Screenshot quality checks
- Board position validation
- Move legality verification
2. Recovery Mechanisms:
- Automatic retry for failed operations
- Fallback analysis methods
- Graceful degradation
3. Error Reporting:
- User-friendly error messages
- Detailed error logging
- Crash reporting system
## Security Architecture
1. Data Protection:
- Secure storage for sensitive data
- Encrypted communication channels
- Data minimization principles
2. Access Control:
- Permission management system
- Role-based access control
- Activity monitoring
3. Privacy Features:
- Privacy manifests implementation
- Data collection transparency
- User consent management
## Performance Optimization
1. Rendering:
- Metal shader optimization
- Draw call batching
- Frame rate stabilization
2. Analysis:
- Position caching
- Parallel processing
- Engine optimization
3. Memory Management:
- Efficient resource allocation
- Memory leak prevention
- Garbage collection tuning
## Testing Strategy
1. Unit Testing:
- Core functionality
- Business logic
- Utility functions
2. Integration Testing:
- Module interactions
- Data flow verification
- System behavior
3. Performance Testing:
- Latency benchmarks
- Resource usage
- Stress testing
4. Security Testing:
- Vulnerability scanning
- Penetration testing
- Compliance verification

View file

@ -1,20 +1,247 @@
# Tech Context
## Technologies Used
1. MacOS Silicon (ARM64) native development
2. Firefox browser integration
3. Stockfish chess engine
4. Computer vision for board detection
5. Transparent overlay system
## Technology Stack
### Core Technologies
1. Swift (5.9+)
2. SwiftUI (4.0+)
3. Metal (3.0+)
4. Vision (2.0+)
5. CoreML (5.0+)
6. Create ML (3.0+)
7. Stockfish (16+)
## Development Setup
1. MacOS development environment
2. Firefox extension capabilities
3. Stockfish integration
4. Low-latency overlay framework
### Development Tools
1. Xcode (15.0+)
2. Swift Package Manager
3. Git (2.40+)
4. CoreML Tools (5.0+)
5. Create ML App (3.0+)
### Testing Frameworks
1. XCTest (5.0+)
2. XCUITest (5.0+)
3. Performance Testing Tools
4. Security Testing Suite
## Development System Specifications
### Operating System
- System: Darwin
- Version: 15.2
- Architecture: arm64
### Hardware Specifications
- CPU: Apple M3 Max
- Memory: 64.00 GB
- GPU: Apple M3 Max (40 cores)
- Metal Support: Metal 3
### Display Information
- Main Display: LG ULTRAGEAR+
- Resolution: 3840 x 1080
- Refresh Rate: 120Hz
- Features: Television support, rotation support
### Development Tools
- Xcode: 16.2 (Build version 16C5032a)
- Swift: 6.0.3 (swiftlang-6.0.3.1.10 clang-1600.0.30.1)
- Target: arm64-apple-macosx15.0
## Development Environment Requirements
### Minimum Requirements
- Apple Silicon (M1)
- 16GB RAM
- Metal 2 support
### Recommended Requirements
- Apple M2/M3 series
- 32GB+ RAM
- Metal 3 support
- Apple Neural Engine
### Software Requirements
1. MacOS (Ventura 13.0+)
2. Xcode (15.0+)
3. Swift (5.9+)
4. Git (2.40+)
5. CoreML Tools (5.0+)
## Configuration Details
### Swift Concurrency
1. Async/await pattern implementation
2. Task management system
3. Structured concurrency
4. Actor-based isolation
### CoreML Integration
1. Model versioning system
2. Apple Neural Engine optimization
3. Model update mechanism
4. Performance monitoring
### Security Implementation
1. App Sandbox configuration
2. Privacy manifest requirements
3. Secure storage implementation
4. Data encryption standards
## Development Workflow
1. Version Control:
- Git branching strategy
- Code review process
- Commit message guidelines
2. CI/CD Pipeline:
- Automated testing
- Build verification
- Deployment automation
- Release management
3. Code Quality:
- Linting configuration
- Static analysis
- Code coverage requirements
- Documentation standards
## Monitoring & Logging
1. Performance Monitoring:
- Rendering performance
- Analysis latency
- Resource usage
2. Error Tracking:
- Crash reporting
- Error logging
- User feedback integration
3. Analytics:
- Usage tracking
- Feature adoption
- Performance metrics
## Technical Constraints
1. Must work with chess.com in Firefox
2. Real-time performance requirements
3. MacOS Silicon compatibility
4. Accurate board position detection
1. Real-time Requirements:
- <100ms analysis latency
- 120fps rendering
- 99.9% recognition accuracy
2. Compatibility:
- MacOS Silicon only
- Firefox browser integration
- Chess.com specific optimizations
3. Security:
- App Sandbox compliance
- Privacy manifest requirements
- Secure data handling
## Documentation Standards
1. Code Documentation:
- API documentation
- Architecture diagrams
- Technical specifications
2. User Documentation:
- Installation guide
- Usage instructions
- Troubleshooting guide
3. Developer Documentation:
- Setup instructions
- Contribution guidelines
- Code style guide
## Detailed Technical Specifications
### Metal Rendering Pipeline
1. Pipeline Stages:
- Vertex processing
- Fragment shading
- Composition
- Post-processing
2. Performance Optimization:
- Command buffer optimization
- Texture compression
- Shader LOD management
- Frame pacing
3. Visual Effects:
- Anti-aliasing
- Bloom effects
- Motion blur
- Depth effects
### Vision Framework Integration
1. Image Analysis Pipeline:
- Image preprocessing
- Feature detection
- Object recognition
- Position tracking
2. Performance Considerations:
- GPU acceleration
- Batch processing
- Memory optimization
- Error handling
3. Integration Points:
- CoreML model integration
- Metal texture sharing
- SwiftUI view integration
- Async/await pattern
### Async/Await Patterns
1. Concurrency Model:
- Task groups
- Async sequences
- Actor isolation
- Continuations
2. Error Handling:
- Structured concurrency
- Task cancellation
- Error propagation
- Retry mechanisms
3. Performance Optimization:
- Task prioritization
- Resource contention management
- Memory safety
- Thread management
### CoreML Model Architecture
1. Model Specifications:
- Input/output formats
- Model quantization
- Neural engine optimization
- Model versioning
2. Training Pipeline:
- Data collection
- Model training
- Validation
- Deployment
3. Performance Considerations:
- Batch processing
- Memory management
- Model compression
- Inference optimization
### Stockfish Integration
1. Engine Configuration:
- Thread management
- Hash size optimization
- Analysis depth
- Time controls
2. Analysis Pipeline:
- Position evaluation
- Move generation
- Threat detection
- Position caching
3. Performance Optimization:
- Parallel analysis
- Cache management
- Engine tuning
- Resource allocation

90
collect_system_info.py Normal file
View file

@ -0,0 +1,90 @@
import subprocess
import platform
import json
import os
def get_system_info():
info = {}
# Basic System Info
info['os'] = {
'system': platform.system(),
'version': platform.mac_ver()[0],
'architecture': platform.machine()
}
# CPU Info
cpu_command = "sysctl -n machdep.cpu.brand_string"
info['cpu'] = subprocess.getoutput(cpu_command)
# Memory Info
mem_command = "sysctl hw.memsize"
mem_bytes = int(subprocess.getoutput(mem_command).split()[1])
info['memory_gb'] = mem_bytes / (1024**3)
# GPU Info
gpu_command = "system_profiler SPDisplaysDataType"
gpu_info = subprocess.getoutput(gpu_command)
info['gpu'] = gpu_info
# Screen Info
displays_command = "system_profiler SPDisplaysDataType"
displays_info = subprocess.getoutput(displays_command)
info['displays'] = displays_info
# Xcode Version
xcode_command = "xcodebuild -version"
try:
info['xcode'] = subprocess.getoutput(xcode_command)
except:
info['xcode'] = "Xcode not installed"
# Swift Version
swift_command = "swift --version"
try:
info['swift'] = subprocess.getoutput(swift_command)
except:
info['swift'] = "Swift not installed"
# Metal Support
metal_command = "system_profiler SPDisplaysDataType | grep Metal"
info['metal_support'] = subprocess.getoutput(metal_command)
return info
def save_info():
info = get_system_info()
# Save as JSON
with open('tech_specs.json', 'w') as f:
json.dump(info, f, indent=2)
# Save as readable text
with open('tech_specs.txt', 'w') as f:
f.write("Chess Teaching Assistant - Development System Specifications\n")
f.write("=" * 60 + "\n\n")
f.write("Operating System:\n")
f.write(f"- System: {info['os']['system']}\n")
f.write(f"- Version: {info['os']['version']}\n")
f.write(f"- Architecture: {info['os']['architecture']}\n\n")
f.write("Hardware:\n")
f.write(f"- CPU: {info['cpu']}\n")
f.write(f"- Memory: {info['memory_gb']:.2f} GB\n\n")
f.write("Development Tools:\n")
f.write(f"- Xcode: {info['xcode']}\n")
f.write(f"- Swift: {info['swift']}\n\n")
f.write("Graphics:\n")
f.write(f"- Metal Support:\n{info['metal_support']}\n\n")
f.write("Display Information:\n")
f.write(f"{info['displays']}\n")
if __name__ == "__main__":
save_info()
print("System information has been collected and saved to:")
print("- tech_specs.json (machine-readable)")
print("- tech_specs.txt (human-readable)")