From a0b834a505e7e38792614565fcef2b15e14dc638 Mon Sep 17 00:00:00 2001 From: Isaac Greene Date: Thu, 7 Jul 2022 00:10:47 -0400 Subject: [PATCH] Changed username and password to secure hashes so that the plaintext is no longer hard-coded in --- .../project.pbxproj | 306 ++++++++++++++++-- .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../xcshareddata/swiftpm/Package.resolved | 0 .../xcdebugger/Breakpoints_v2.xcbkptlist | 6 + .../xcschemes/xcschememanagement.plist | 0 .../xcschemes/xcschememanagement.plist | 61 ++++ PacesTests/PacesTests.swift | 35 ++ PacesUITests/PacesUITests.swift | 41 +++ PacesUITests/PacesUITestsLaunchTests.swift | 32 ++ Splits/ChangeLogData.swift | 22 +- Splits/ChangeLogView.swift | 1 + Splits/ContentView.swift | 4 +- Splits/DocsView.swift | 31 +- Splits/SecretView.swift | 6 - Splits/Splits.entitlements | 10 + 16 files changed, 511 insertions(+), 44 deletions(-) rename {Splits.xcodeproj => Paces.xcodeproj}/project.pbxproj (64%) rename {Splits.xcodeproj => Paces.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (100%) rename {Splits.xcodeproj => Paces.xcodeproj}/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename {Splits.xcodeproj => Paces.xcodeproj}/project.xcworkspace/xcshareddata/swiftpm/Package.resolved (100%) create mode 100644 Paces.xcodeproj/xcuserdata/ericgreene1.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist rename {Splits.xcodeproj => Paces.xcodeproj}/xcuserdata/ericgreene1.xcuserdatad/xcschemes/xcschememanagement.plist (100%) create mode 100644 Paces.xcodeproj/xcuserdata/isaac.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 PacesTests/PacesTests.swift create mode 100644 PacesUITests/PacesUITests.swift create mode 100644 PacesUITests/PacesUITestsLaunchTests.swift create mode 100644 Splits/Splits.entitlements diff --git a/Splits.xcodeproj/project.pbxproj b/Paces.xcodeproj/project.pbxproj similarity index 64% rename from Splits.xcodeproj/project.pbxproj rename to Paces.xcodeproj/project.pbxproj index 91bcfeb..26e393c 100644 --- a/Splits.xcodeproj/project.pbxproj +++ b/Paces.xcodeproj/project.pbxproj @@ -7,6 +7,10 @@ objects = { /* Begin PBXBuildFile section */ + 6A0FD2502875F944006DF79D /* PacesUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A0FD24F2875F944006DF79D /* PacesUITests.swift */; }; + 6A0FD2522875F944006DF79D /* PacesUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A0FD2512875F944006DF79D /* PacesUITestsLaunchTests.swift */; }; + 6A0FD25F2875FA14006DF79D /* PacesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A0FD25E2875FA14006DF79D /* PacesTests.swift */; }; + 6A5CEC52287691BE003D876C /* ChangeLogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A5CEC51287691BE003D876C /* ChangeLogView.swift */; }; 850062C92802328F0095F121 /* TabViewData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850062C82802328F0095F121 /* TabViewData.swift */; }; 8502250E27FA5D0800FE8E95 /* ChangeLogData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8502250D27FA5D0800FE8E95 /* ChangeLogData.swift */; }; 850F8014284A7F6A0094580D /* DocsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850F8013284A7F6A0094580D /* DocsView.swift */; }; @@ -24,11 +28,34 @@ 85AAA0DA27FA2DDA00F4B9A1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 85AAA0D927FA2DDA00F4B9A1 /* Assets.xcassets */; }; 85AAA0DD27FA2DDA00F4B9A1 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 85AAA0DC27FA2DDA00F4B9A1 /* Preview Assets.xcassets */; }; 85AAA0E627FA2EB100F4B9A1 /* HelpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AAA0E527FA2EB100F4B9A1 /* HelpView.swift */; }; - 85AAA0E827FA2F1600F4B9A1 /* ChangeLogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AAA0E727FA2F1600F4B9A1 /* ChangeLogView.swift */; }; 85AAA0EB27FA2F7000F4B9A1 /* RichTextView in Frameworks */ = {isa = PBXBuildFile; productRef = 85AAA0EA27FA2F7000F4B9A1 /* RichTextView */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 6A0FD2532875F944006DF79D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 85AAA0CA27FA2DD600F4B9A1 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 85AAA0D127FA2DD600F4B9A1; + remoteInfo = Paces; + }; + 6A0FD2602875FA14006DF79D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 85AAA0CA27FA2DD600F4B9A1 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 85AAA0D127FA2DD600F4B9A1; + remoteInfo = Paces; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXFileReference section */ + 6A0FD24D2875F944006DF79D /* PacesUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PacesUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 6A0FD24F2875F944006DF79D /* PacesUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PacesUITests.swift; sourceTree = ""; }; + 6A0FD2512875F944006DF79D /* PacesUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PacesUITestsLaunchTests.swift; sourceTree = ""; }; + 6A0FD25C2875FA14006DF79D /* PacesTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PacesTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 6A0FD25E2875FA14006DF79D /* PacesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PacesTests.swift; sourceTree = ""; }; + 6A5CEC51287691BE003D876C /* ChangeLogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeLogView.swift; sourceTree = ""; }; + 6AB17201286EB414005DED42 /* Splits.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Splits.entitlements; sourceTree = ""; }; 850062C82802328F0095F121 /* TabViewData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabViewData.swift; sourceTree = ""; }; 8502250D27FA5D0800FE8E95 /* ChangeLogData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeLogData.swift; sourceTree = ""; }; 850F8013284A7F6A0094580D /* DocsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocsView.swift; sourceTree = ""; }; @@ -41,16 +68,29 @@ 850F8025285437500094580D /* isaac.greene.clouds.heic */ = {isa = PBXFileReference; lastKnownFileType = file; name = isaac.greene.clouds.heic; path = Assets.xcassets/isaac.greene.clouds.heic; sourceTree = ""; }; 850F8026285437500094580D /* jake.zimmerman.group.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = jake.zimmerman.group.jpg; path = Assets.xcassets/jake.zimmerman.group.jpg; sourceTree = ""; }; 859298C828592F1F00D9D6CB /* Documentation.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = Documentation.docc; sourceTree = ""; }; - 85AAA0D227FA2DD600F4B9A1 /* Splits.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Splits.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 85AAA0D227FA2DD600F4B9A1 /* Paces.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Paces.app; sourceTree = BUILT_PRODUCTS_DIR; }; 85AAA0D527FA2DD600F4B9A1 /* SplitsApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitsApp.swift; sourceTree = ""; }; 85AAA0D727FA2DD600F4B9A1 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 85AAA0D927FA2DDA00F4B9A1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 85AAA0DC27FA2DDA00F4B9A1 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 85AAA0E527FA2EB100F4B9A1 /* HelpView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpView.swift; sourceTree = ""; }; - 85AAA0E727FA2F1600F4B9A1 /* ChangeLogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeLogView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 6A0FD24A2875F944006DF79D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6A0FD2592875FA14006DF79D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 85AAA0CF27FA2DD600F4B9A1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -62,10 +102,29 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 6A0FD24E2875F944006DF79D /* PacesUITests */ = { + isa = PBXGroup; + children = ( + 6A0FD24F2875F944006DF79D /* PacesUITests.swift */, + 6A0FD2512875F944006DF79D /* PacesUITestsLaunchTests.swift */, + ); + path = PacesUITests; + sourceTree = ""; + }; + 6A0FD25D2875FA14006DF79D /* PacesTests */ = { + isa = PBXGroup; + children = ( + 6A0FD25E2875FA14006DF79D /* PacesTests.swift */, + ); + path = PacesTests; + sourceTree = ""; + }; 85AAA0C927FA2DD600F4B9A1 = { isa = PBXGroup; children = ( 85AAA0D427FA2DD600F4B9A1 /* Splits */, + 6A0FD24E2875F944006DF79D /* PacesUITests */, + 6A0FD25D2875FA14006DF79D /* PacesTests */, 85AAA0D327FA2DD600F4B9A1 /* Products */, ); sourceTree = ""; @@ -73,7 +132,9 @@ 85AAA0D327FA2DD600F4B9A1 /* Products */ = { isa = PBXGroup; children = ( - 85AAA0D227FA2DD600F4B9A1 /* Splits.app */, + 85AAA0D227FA2DD600F4B9A1 /* Paces.app */, + 6A0FD24D2875F944006DF79D /* PacesUITests.xctest */, + 6A0FD25C2875FA14006DF79D /* PacesTests.xctest */, ); name = Products; sourceTree = ""; @@ -81,8 +142,10 @@ 85AAA0D427FA2DD600F4B9A1 /* Splits */ = { isa = PBXGroup; children = ( + 6AB17201286EB414005DED42 /* Splits.entitlements */, 85AAA0D527FA2DD600F4B9A1 /* SplitsApp.swift */, 859298C828592F1F00D9D6CB /* Documentation.docc */, + 6A5CEC51287691BE003D876C /* ChangeLogView.swift */, 8502250D27FA5D0800FE8E95 /* ChangeLogData.swift */, 85AAA0D727FA2DD600F4B9A1 /* ContentView.swift */, 850062C82802328F0095F121 /* TabViewData.swift */, @@ -90,7 +153,6 @@ 850F8013284A7F6A0094580D /* DocsView.swift */, 850F80212853F7E30094580D /* SecretView.swift */, 850F8015284A815C0094580D /* KnownIssues.swift */, - 85AAA0E727FA2F1600F4B9A1 /* ChangeLogView.swift */, 85AAA0E527FA2EB100F4B9A1 /* HelpView.swift */, 850F801F2853F7790094580D /* LicenseView.swift */, 85AAA0D927FA2DDA00F4B9A1 /* Assets.xcassets */, @@ -114,9 +176,45 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 85AAA0D127FA2DD600F4B9A1 /* Splits */ = { + 6A0FD24C2875F944006DF79D /* PacesUITests */ = { isa = PBXNativeTarget; - buildConfigurationList = 85AAA0E027FA2DDA00F4B9A1 /* Build configuration list for PBXNativeTarget "Splits" */; + buildConfigurationList = 6A0FD2572875F944006DF79D /* Build configuration list for PBXNativeTarget "PacesUITests" */; + buildPhases = ( + 6A0FD2492875F944006DF79D /* Sources */, + 6A0FD24A2875F944006DF79D /* Frameworks */, + 6A0FD24B2875F944006DF79D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 6A0FD2542875F944006DF79D /* PBXTargetDependency */, + ); + name = PacesUITests; + productName = PacesUITests; + productReference = 6A0FD24D2875F944006DF79D /* PacesUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; + 6A0FD25B2875FA14006DF79D /* PacesTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6A0FD2622875FA14006DF79D /* Build configuration list for PBXNativeTarget "PacesTests" */; + buildPhases = ( + 6A0FD2582875FA14006DF79D /* Sources */, + 6A0FD2592875FA14006DF79D /* Frameworks */, + 6A0FD25A2875FA14006DF79D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 6A0FD2612875FA14006DF79D /* PBXTargetDependency */, + ); + name = PacesTests; + productName = PacesTests; + productReference = 6A0FD25C2875FA14006DF79D /* PacesTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 85AAA0D127FA2DD600F4B9A1 /* Paces */ = { + isa = PBXNativeTarget; + buildConfigurationList = 85AAA0E027FA2DDA00F4B9A1 /* Build configuration list for PBXNativeTarget "Paces" */; buildPhases = ( 85AAA0CE27FA2DD600F4B9A1 /* Sources */, 85AAA0CF27FA2DD600F4B9A1 /* Frameworks */, @@ -126,12 +224,12 @@ ); dependencies = ( ); - name = Splits; + name = Paces; packageProductDependencies = ( 85AAA0EA27FA2F7000F4B9A1 /* RichTextView */, ); productName = Splits; - productReference = 85AAA0D227FA2DD600F4B9A1 /* Splits.app */; + productReference = 85AAA0D227FA2DD600F4B9A1 /* Paces.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -141,15 +239,23 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1330; + LastSwiftUpdateCheck = 1340; LastUpgradeCheck = 1330; TargetAttributes = { + 6A0FD24C2875F944006DF79D = { + CreatedOnToolsVersion = 13.4.1; + TestTargetID = 85AAA0D127FA2DD600F4B9A1; + }; + 6A0FD25B2875FA14006DF79D = { + CreatedOnToolsVersion = 13.4.1; + TestTargetID = 85AAA0D127FA2DD600F4B9A1; + }; 85AAA0D127FA2DD600F4B9A1 = { CreatedOnToolsVersion = 13.3; }; }; }; - buildConfigurationList = 85AAA0CD27FA2DD600F4B9A1 /* Build configuration list for PBXProject "Splits" */; + buildConfigurationList = 85AAA0CD27FA2DD600F4B9A1 /* Build configuration list for PBXProject "Paces" */; compatibilityVersion = "Xcode 13.0"; developmentRegion = en; hasScannedForEncodings = 0; @@ -160,17 +266,35 @@ mainGroup = 85AAA0C927FA2DD600F4B9A1; packageReferences = ( 85AAA0E927FA2F7000F4B9A1 /* XCRemoteSwiftPackageReference "RichTextView" */, + 6AB17202286EB5A5005DED42 /* XCRemoteSwiftPackageReference "RichTextView" */, + 6AB17203286EB5DD005DED42 /* XCRemoteSwiftPackageReference "RichTextView" */, ); productRefGroup = 85AAA0D327FA2DD600F4B9A1 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 85AAA0D127FA2DD600F4B9A1 /* Splits */, + 85AAA0D127FA2DD600F4B9A1 /* Paces */, + 6A0FD24C2875F944006DF79D /* PacesUITests */, + 6A0FD25B2875FA14006DF79D /* PacesTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 6A0FD24B2875F944006DF79D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6A0FD25A2875FA14006DF79D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 85AAA0D027FA2DD600F4B9A1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -187,11 +311,29 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 6A0FD2492875F944006DF79D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6A0FD2502875F944006DF79D /* PacesUITests.swift in Sources */, + 6A0FD2522875F944006DF79D /* PacesUITestsLaunchTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6A0FD2582875FA14006DF79D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6A0FD25F2875FA14006DF79D /* PacesTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 85AAA0CE27FA2DD600F4B9A1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 850F80222853F7E30094580D /* SecretView.swift in Sources */, + 6A5CEC52287691BE003D876C /* ChangeLogView.swift in Sources */, 85AAA0D827FA2DD600F4B9A1 /* ContentView.swift in Sources */, 85AAA0D627FA2DD600F4B9A1 /* SplitsApp.swift in Sources */, 850062C92802328F0095F121 /* TabViewData.swift in Sources */, @@ -199,7 +341,6 @@ 850F8014284A7F6A0094580D /* DocsView.swift in Sources */, 850F8016284A815C0094580D /* KnownIssues.swift in Sources */, 859298C928592F1F00D9D6CB /* Documentation.docc in Sources */, - 85AAA0E827FA2F1600F4B9A1 /* ChangeLogView.swift in Sources */, 85AAA0E627FA2EB100F4B9A1 /* HelpView.swift in Sources */, 850F80202853F7790094580D /* LicenseView.swift in Sources */, 850F8018284A83400094580D /* FeaturesView.swift in Sources */, @@ -208,7 +349,90 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 6A0FD2542875F944006DF79D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 85AAA0D127FA2DD600F4B9A1 /* Paces */; + targetProxy = 6A0FD2532875F944006DF79D /* PBXContainerItemProxy */; + }; + 6A0FD2612875FA14006DF79D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 85AAA0D127FA2DD600F4B9A1 /* Paces */; + targetProxy = 6A0FD2602875FA14006DF79D /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ + 6A0FD2552875F944006DF79D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = D6M5W5BC5A; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = Brandlar.PacesUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = Paces; + }; + name = Debug; + }; + 6A0FD2562875F944006DF79D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = D6M5W5BC5A; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = Brandlar.PacesUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = Paces; + }; + name = Release; + }; + 6A0FD2632875FA14006DF79D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = D6M5W5BC5A; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = Brandlar.PacesTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Paces.app/Paces"; + }; + name = Debug; + }; + 6A0FD2642875FA14006DF79D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = D6M5W5BC5A; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = Brandlar.PacesTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Paces.app/Paces"; + }; + name = Release; + }; 85AAA0DE27FA2DDA00F4B9A1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -332,11 +556,12 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = Splits/Splits.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"Splits/Preview Content\""; - DEVELOPMENT_TEAM = UQJ7U8R2CV; + DEVELOPMENT_TEAM = D6M5W5BC5A; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Splits/Info.plist; @@ -346,10 +571,10 @@ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UIRequiresFullScreen = NO; - INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeRight UIInterfaceOrientationLandscapeLeft"; + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 15.5; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -359,6 +584,8 @@ PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; RUN_DOCUMENTATION_COMPILER = YES; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -370,11 +597,12 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = Splits/Splits.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"Splits/Preview Content\""; - DEVELOPMENT_TEAM = UQJ7U8R2CV; + DEVELOPMENT_TEAM = D6M5W5BC5A; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Splits/Info.plist; @@ -384,10 +612,10 @@ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UIRequiresFullScreen = NO; - INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeRight UIInterfaceOrientationLandscapeLeft"; + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; - IPHONEOS_DEPLOYMENT_TARGET = 15.5; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -397,6 +625,8 @@ PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; RUN_DOCUMENTATION_COMPILER = YES; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -406,7 +636,25 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 85AAA0CD27FA2DD600F4B9A1 /* Build configuration list for PBXProject "Splits" */ = { + 6A0FD2572875F944006DF79D /* Build configuration list for PBXNativeTarget "PacesUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6A0FD2552875F944006DF79D /* Debug */, + 6A0FD2562875F944006DF79D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6A0FD2622875FA14006DF79D /* Build configuration list for PBXNativeTarget "PacesTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6A0FD2632875FA14006DF79D /* Debug */, + 6A0FD2642875FA14006DF79D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 85AAA0CD27FA2DD600F4B9A1 /* Build configuration list for PBXProject "Paces" */ = { isa = XCConfigurationList; buildConfigurations = ( 85AAA0DE27FA2DDA00F4B9A1 /* Debug */, @@ -415,7 +663,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 85AAA0E027FA2DDA00F4B9A1 /* Build configuration list for PBXNativeTarget "Splits" */ = { + 85AAA0E027FA2DDA00F4B9A1 /* Build configuration list for PBXNativeTarget "Paces" */ = { isa = XCConfigurationList; buildConfigurations = ( 85AAA0E127FA2DDA00F4B9A1 /* Debug */, @@ -427,6 +675,22 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ + 6AB17202286EB5A5005DED42 /* XCRemoteSwiftPackageReference "RichTextView" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/tophat/RichTextView"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 3.0.0; + }; + }; + 6AB17203286EB5DD005DED42 /* XCRemoteSwiftPackageReference "RichTextView" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/tophat/RichTextView"; + requirement = { + branch = master; + kind = branch; + }; + }; 85AAA0E927FA2F7000F4B9A1 /* XCRemoteSwiftPackageReference "RichTextView" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/tophat/RichTextView.git"; diff --git a/Splits.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Paces.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from Splits.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Paces.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/Splits.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Paces.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from Splits.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to Paces.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/Splits.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Paces.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved similarity index 100% rename from Splits.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved rename to Paces.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/Paces.xcodeproj/xcuserdata/ericgreene1.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Paces.xcodeproj/xcuserdata/ericgreene1.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..c501aef --- /dev/null +++ b/Paces.xcodeproj/xcuserdata/ericgreene1.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,6 @@ + + + diff --git a/Splits.xcodeproj/xcuserdata/ericgreene1.xcuserdatad/xcschemes/xcschememanagement.plist b/Paces.xcodeproj/xcuserdata/ericgreene1.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 100% rename from Splits.xcodeproj/xcuserdata/ericgreene1.xcuserdatad/xcschemes/xcschememanagement.plist rename to Paces.xcodeproj/xcuserdata/ericgreene1.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/Paces.xcodeproj/xcuserdata/isaac.xcuserdatad/xcschemes/xcschememanagement.plist b/Paces.xcodeproj/xcuserdata/isaac.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..56ac61a --- /dev/null +++ b/Paces.xcodeproj/xcuserdata/isaac.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,61 @@ + + + + + SchemeUserState + + Paces.xcscheme_^#shared#^_ + + orderHint + 0 + + SnapKitPlayground (Playground) 1.xcscheme + + isShown + + orderHint + 5 + + SnapKitPlayground (Playground) 2.xcscheme + + isShown + + orderHint + 6 + + SnapKitPlayground (Playground).xcscheme + + isShown + + orderHint + 4 + + Splits.xcscheme_^#shared#^_ + + orderHint + 0 + + SwiftRichString (Playground) 1.xcscheme + + isShown + + orderHint + 2 + + SwiftRichString (Playground) 2.xcscheme + + isShown + + orderHint + 3 + + SwiftRichString (Playground).xcscheme + + isShown + + orderHint + 1 + + + + diff --git a/PacesTests/PacesTests.swift b/PacesTests/PacesTests.swift new file mode 100644 index 0000000..e96a893 --- /dev/null +++ b/PacesTests/PacesTests.swift @@ -0,0 +1,35 @@ +// +// PacesTests.swift +// PacesTests +// +// Created by Isaac Greene on 7/6/22. +// + +import XCTest + +class PacesTests: 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. + } + } + +} diff --git a/PacesUITests/PacesUITests.swift b/PacesUITests/PacesUITests.swift new file mode 100644 index 0000000..a7d9dbd --- /dev/null +++ b/PacesUITests/PacesUITests.swift @@ -0,0 +1,41 @@ +// +// PacesUITests.swift +// PacesUITests +// +// Created by Isaac Greene on 7/6/22. +// + +import XCTest + +class PacesUITests: 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. + } + + 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. + } + + 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() + } + } + } +} diff --git a/PacesUITests/PacesUITestsLaunchTests.swift b/PacesUITests/PacesUITestsLaunchTests.swift new file mode 100644 index 0000000..6f64799 --- /dev/null +++ b/PacesUITests/PacesUITestsLaunchTests.swift @@ -0,0 +1,32 @@ +// +// PacesUITestsLaunchTests.swift +// PacesUITests +// +// Created by Isaac Greene on 7/6/22. +// + +import XCTest + +class PacesUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + 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) + } +} diff --git a/Splits/ChangeLogData.swift b/Splits/ChangeLogData.swift index 1c06ce9..92954f3 100644 --- a/Splits/ChangeLogData.swift +++ b/Splits/ChangeLogData.swift @@ -7,10 +7,29 @@ import SwiftUI +struct July2022: View { + var body: some View { + ScrollView { + //2022-07-06 + HStack { + VStack (alignment: .leading) { + Text("2022-07-06") + .font(.title2) + Text("Version Prerelease Build LVSXT10a.4\n") + .font(.footnote) + Text("\u{2022} Stored the logins as cryptographically-secure hashes\n\u{2022} Fixed a few small formatting issues") + } + Spacer() + } + .padding(30) + } + } +} + struct June2022: View { var body: some View { ScrollView { - //2022-06-16 + //2022-06-17 HStack { VStack (alignment: .leading) { Text("2022-06-17") @@ -127,6 +146,7 @@ struct June2022: View { .font(.footnote) Text("\u{2022} Started work on converting the pace to a more understandable format") } + Spacer() } .padding(30) diff --git a/Splits/ChangeLogView.swift b/Splits/ChangeLogView.swift index dbb5774..b83d0f2 100644 --- a/Splits/ChangeLogView.swift +++ b/Splits/ChangeLogView.swift @@ -16,6 +16,7 @@ struct ChangeLog: View { var body: some View { List { Section(header: Text("2022")) { + NavigationLink("July", destination: July2022()) NavigationLink("June", destination: June2022()) NavigationLink("May", destination: May2022()) NavigationLink("April", destination: April2022()) diff --git a/Splits/ContentView.swift b/Splits/ContentView.swift index c9a0fb5..8fd9a0d 100644 --- a/Splits/ContentView.swift +++ b/Splits/ContentView.swift @@ -243,7 +243,7 @@ struct PaceResults: View { Text("\(hoursFormatted):\(leadingZeros)") .padding() .frame(minWidth: 100) - VStack (alignment: .leading) { + VStack (alignment: .trailing) { Text("\(roundString(Double(removeLeadingZeros(distance: &distance)) ?? 0))\(selectedSystem)") Text("\(convertedDistanceString)\(notSelectedSystem)") } @@ -255,7 +255,7 @@ struct PaceResults: View { Text("\(paceFormattedOpposite)/\(notSelectedSystem)") } .frame(minWidth: 100) - VStack(alignment: .leading) { + VStack(alignment: .trailing) { Text("\(pacePerHour) \(selectedSystem)/hr") Text("\(pacePerHourOpposite) \(notSelectedSystem)/hr") } diff --git a/Splits/DocsView.swift b/Splits/DocsView.swift index a9d3445..1c1b79a 100644 --- a/Splits/DocsView.swift +++ b/Splits/DocsView.swift @@ -7,17 +7,13 @@ import SwiftUI import LocalAuthentication -// this file will have some comments. -// Most of this code is considered simple enough -// to be human-readable without aid, as long as -// the reader has a basic understanding of -// Swift and/or SwiftUI. +import CryptoKit -/// The system username for the app +/// The system username SHA256 hash for the app /// - Note: This is not a secure way to do it /// or in any way good practice /// but this is mainly to test out `SecureField` -let username = "admin" +let username = "c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec".utf8 /// The system password associated with ``username`` /// @@ -26,7 +22,7 @@ let username = "admin" /// It would be more secure though. /// - Note: Just as with `username` you should not define /// these unencrypted like they are right now. -let password = "123" +let password = "3c9909afec25354d551dae21590bb26e38d53f2173b8d3dc3eee4c047e7ab1c1eb8b85103e3be7ba613b31bb5c9c36214dc9f14a42fd7a2fdb84856bca5c44c2".utf8 /// Holds the views and login for the Docs tab in-app /// @@ -37,9 +33,16 @@ struct DocsView: View { case username case password } - - @State private var pass: String = "" - @State private var user: String = "" + + func hashSHA512(login: String) -> String { + let loginAsData = Data(login.utf8) + let loginHashHex = SHA512.hash(data: loginAsData) + let loginHash = loginHashHex.compactMap { String(format: "%02x", $0) }.joined() + return String(loginHash) + } + + @State private var pass: String = "" + @State private var user: String = "" @State private var isUnlocked = false @FocusState private var focusedField: Field? @@ -62,8 +65,8 @@ struct DocsView: View { } Section(header: Text("App Information")) { NavigationLink("Software License", destination: LicenseView()) - Text("Version: Release Candidate 4") - Text("Release date: 2022-06-17") + Text("Version: Prerelease Build LVSXT10a.4") + Text("Release date: 2022-07-06") Text("Start date: 2022-03-25") Link("Built with SwiftUI \(Image(systemName: "swift"))", destination: URL(string: "https://developer.apple.com/xcode/swiftui")!) } @@ -120,7 +123,7 @@ struct DocsView: View { /// /// - Returns: `true` if `user` equals `username` *and* `pass` equals `password`, `false` if one or both checks return false. func checkPassword() -> Bool { - if (pass == password && user == username) { + if (hashSHA512(login: pass) == String(password) && hashSHA512(login: user) == String(username)) { return true } else { return false diff --git a/Splits/SecretView.swift b/Splits/SecretView.swift index aa648d3..2f7ad42 100644 --- a/Splits/SecretView.swift +++ b/Splits/SecretView.swift @@ -6,11 +6,6 @@ // import SwiftUI -// this file will not have comments. -// this code is considered simple enough to be -// human-readable without aid, as long as -// the reader has a basic understanding of -// Swift and/or SwiftUI. struct SecretView: View { var body: some View { @@ -37,7 +32,6 @@ Email: jzimmerman@lakeviewspartans.org } .frame(minWidth: 350, minHeight: 175) .border(.primary) - VStack { Image("caleb.bost.duo") .resizable() diff --git a/Splits/Splits.entitlements b/Splits/Splits.entitlements new file mode 100644 index 0000000..ee95ab7 --- /dev/null +++ b/Splits/Splits.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.network.client + + +