So it begins
This commit is contained in:
parent
fa237fc89c
commit
451f16b25d
22 changed files with 1774 additions and 516 deletions
596
ChessPrism/ChessPrism.xcodeproj/project.pbxproj
Normal file
596
ChessPrism/ChessPrism.xcodeproj/project.pbxproj
Normal 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 */;
|
||||
}
|
||||
7
ChessPrism/ChessPrism.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
ChessPrism/ChessPrism.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"colors" : [
|
||||
{
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
6
ChessPrism/ChessPrism/Assets.xcassets/Contents.json
Normal file
6
ChessPrism/ChessPrism/Assets.xcassets/Contents.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
10
ChessPrism/ChessPrism/ChessPrism.entitlements
Normal file
10
ChessPrism/ChessPrism/ChessPrism.entitlements
Normal 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>
|
||||
17
ChessPrism/ChessPrism/ChessPrismApp.swift
Normal file
17
ChessPrism/ChessPrism/ChessPrismApp.swift
Normal 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()
|
||||
}
|
||||
}
|
||||
}
|
||||
24
ChessPrism/ChessPrism/ContentView.swift
Normal file
24
ChessPrism/ChessPrism/ContentView.swift
Normal 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()
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
35
ChessPrism/ChessPrismTests/ChessPrismTests.swift
Normal file
35
ChessPrism/ChessPrismTests/ChessPrismTests.swift
Normal 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.
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
43
ChessPrism/ChessPrismUITests/ChessPrismUITests.swift
Normal file
43
ChessPrism/ChessPrismUITests/ChessPrismUITests.swift
Normal 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 it’s 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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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.
|
||||
|
|
@ -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
|
||||
94
Plan.txt
94
Plan.txt
|
|
@ -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
144
README.md
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
90
collect_system_info.py
Normal 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)")
|
||||
Loading…
Add table
Reference in a new issue