Changed username and password to secure hashes so that the plaintext is no longer hard-coded in

This commit is contained in:
Isaac Greene 2022-07-07 00:10:47 -04:00
parent acc9f86315
commit a0b834a505
16 changed files with 511 additions and 44 deletions

View file

@ -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 = "<group>"; };
6A0FD2512875F944006DF79D /* PacesUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PacesUITestsLaunchTests.swift; sourceTree = "<group>"; };
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 = "<group>"; };
6A5CEC51287691BE003D876C /* ChangeLogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeLogView.swift; sourceTree = "<group>"; };
6AB17201286EB414005DED42 /* Splits.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Splits.entitlements; sourceTree = "<group>"; };
850062C82802328F0095F121 /* TabViewData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabViewData.swift; sourceTree = "<group>"; };
8502250D27FA5D0800FE8E95 /* ChangeLogData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeLogData.swift; sourceTree = "<group>"; };
850F8013284A7F6A0094580D /* DocsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocsView.swift; sourceTree = "<group>"; };
@ -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 = "<group>"; };
850F8026285437500094580D /* jake.zimmerman.group.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = jake.zimmerman.group.jpg; path = Assets.xcassets/jake.zimmerman.group.jpg; sourceTree = "<group>"; };
859298C828592F1F00D9D6CB /* Documentation.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = Documentation.docc; sourceTree = "<group>"; };
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 = "<group>"; };
85AAA0D727FA2DD600F4B9A1 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
85AAA0D927FA2DDA00F4B9A1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
85AAA0DC27FA2DDA00F4B9A1 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
85AAA0E527FA2EB100F4B9A1 /* HelpView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpView.swift; sourceTree = "<group>"; };
85AAA0E727FA2F1600F4B9A1 /* ChangeLogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeLogView.swift; sourceTree = "<group>"; };
/* 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 = "<group>";
};
6A0FD25D2875FA14006DF79D /* PacesTests */ = {
isa = PBXGroup;
children = (
6A0FD25E2875FA14006DF79D /* PacesTests.swift */,
);
path = PacesTests;
sourceTree = "<group>";
};
85AAA0C927FA2DD600F4B9A1 = {
isa = PBXGroup;
children = (
85AAA0D427FA2DD600F4B9A1 /* Splits */,
6A0FD24E2875F944006DF79D /* PacesUITests */,
6A0FD25D2875FA14006DF79D /* PacesTests */,
85AAA0D327FA2DD600F4B9A1 /* Products */,
);
sourceTree = "<group>";
@ -73,7 +132,9 @@
85AAA0D327FA2DD600F4B9A1 /* Products */ = {
isa = PBXGroup;
children = (
85AAA0D227FA2DD600F4B9A1 /* Splits.app */,
85AAA0D227FA2DD600F4B9A1 /* Paces.app */,
6A0FD24D2875F944006DF79D /* PacesUITests.xctest */,
6A0FD25C2875FA14006DF79D /* PacesTests.xctest */,
);
name = Products;
sourceTree = "<group>";
@ -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";

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
uuid = "F6072BD7-2ADA-480D-8857-F3DEF54EA1A4"
type = "1"
version = "2.0">
</Bucket>

View file

@ -0,0 +1,61 @@
<?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>SchemeUserState</key>
<dict>
<key>Paces.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
<key>SnapKitPlayground (Playground) 1.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>5</integer>
</dict>
<key>SnapKitPlayground (Playground) 2.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>6</integer>
</dict>
<key>SnapKitPlayground (Playground).xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>4</integer>
</dict>
<key>Splits.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
<key>SwiftRichString (Playground) 1.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>2</integer>
</dict>
<key>SwiftRichString (Playground) 2.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>3</integer>
</dict>
<key>SwiftRichString (Playground).xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>1</integer>
</dict>
</dict>
</dict>
</plist>

View file

@ -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.
}
}
}

View file

@ -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 its important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
}
override func tearDownWithError() throws {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
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()
}
}
}
}

View file

@ -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)
}
}

View file

@ -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)

View file

@ -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())

View file

@ -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")
}

View file

@ -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
///
@ -38,6 +34,13 @@ struct DocsView: View {
case password
}
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
@ -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

View file

@ -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()

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
</plist>