test(MiniProject): extract RunnerCore library with Swift Testing suite
Split UI-free logic into a RunnerCore swift_library and cover it with a swift_test suite using the Swift Testing library (import Testing / @Test / #expect), matching Tests/m323Tests. Runs via `bazel test`. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
b1968074b6
commit
13876d51c2
10 changed files with 1023 additions and 319 deletions
|
|
@ -1,11 +1,30 @@
|
||||||
load("@rules_swift//swift:swift.bzl", "swift_binary")
|
load("@rules_swift//swift:swift.bzl", "swift_binary", "swift_library", "swift_test")
|
||||||
|
|
||||||
|
# Pure, UI-free logic (models, parsing, transforms, formatting). Kept out of the
|
||||||
|
# binary so it can be exercised by //m323/Sources/MiniProject:RunnerCoreTests.
|
||||||
|
swift_library(
|
||||||
|
name = "RunnerCore",
|
||||||
|
srcs = ["RunnerCore.swift"],
|
||||||
|
module_name = "RunnerCore",
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
||||||
|
|
||||||
swift_binary(
|
swift_binary(
|
||||||
name = "StadtRundlauf",
|
name = "StadtRundlauf",
|
||||||
srcs = ["main.swift"],
|
srcs = ["main.swift"],
|
||||||
data = glob(["data/*.txt"]),
|
data = glob(["data/*.txt"]),
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = ["@swifttui//:SwiftTUI"],
|
deps = [
|
||||||
|
":RunnerCore",
|
||||||
|
"@swifttui//:SwiftTUI",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
swift_test(
|
||||||
|
name = "RunnerCoreTests",
|
||||||
|
srcs = ["RunnerCoreTests.swift"],
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
deps = [":RunnerCore"],
|
||||||
)
|
)
|
||||||
|
|
||||||
# BEGIN GENERATED XCODEPROJ
|
# BEGIN GENERATED XCODEPROJ
|
||||||
|
|
@ -33,6 +52,7 @@ xcodeproj(
|
||||||
tags = ["manual"],
|
tags = ["manual"],
|
||||||
extra_files = [":xcodeproj_extra_files"],
|
extra_files = [":xcodeproj_extra_files"],
|
||||||
top_level_targets = [
|
top_level_targets = [
|
||||||
|
"//m323/Sources/MiniProject:RunnerCoreTests",
|
||||||
"//m323/Sources/MiniProject:StadtRundlauf",
|
"//m323/Sources/MiniProject:StadtRundlauf",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -176,11 +176,19 @@
|
||||||
CreatedOnToolsVersion = 26.6.0;
|
CreatedOnToolsVersion = 26.6.0;
|
||||||
LastSwiftMigration = 9999;
|
LastSwiftMigration = 9999;
|
||||||
};
|
};
|
||||||
0100FAB81B6F000000000001 = {
|
00001E1FC9CF000000000001 = {
|
||||||
CreatedOnToolsVersion = 26.6.0;
|
CreatedOnToolsVersion = 26.6.0;
|
||||||
LastSwiftMigration = 9999;
|
LastSwiftMigration = 9999;
|
||||||
};
|
};
|
||||||
00004EB553A7000000000001 = {
|
010021D7AEE9000000000001 = {
|
||||||
|
CreatedOnToolsVersion = 26.6.0;
|
||||||
|
LastSwiftMigration = 9999;
|
||||||
|
};
|
||||||
|
0300FAB81B6F000000000001 = {
|
||||||
|
CreatedOnToolsVersion = 26.6.0;
|
||||||
|
LastSwiftMigration = 9999;
|
||||||
|
};
|
||||||
|
02004EB553A7000000000001 = {
|
||||||
CreatedOnToolsVersion = 26.6.0;
|
CreatedOnToolsVersion = 26.6.0;
|
||||||
LastSwiftMigration = 9999;
|
LastSwiftMigration = 9999;
|
||||||
};
|
};
|
||||||
|
|
@ -192,11 +200,13 @@
|
||||||
);
|
);
|
||||||
targets = (
|
targets = (
|
||||||
FF0100000000000000000001 /* BazelDependencies */,
|
FF0100000000000000000001 /* BazelDependencies */,
|
||||||
0100FAB81B6F000000000001 /* StadtRundlauf */,
|
00001E1FC9CF000000000001 /* RunnerCore */,
|
||||||
00004EB553A7000000000001 /* SwiftTUI */,
|
010021D7AEE9000000000001 /* RunnerCoreTests */,
|
||||||
|
0300FAB81B6F000000000001 /* StadtRundlauf */,
|
||||||
|
02004EB553A7000000000001 /* SwiftTUI */,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
00004EB553A7000000000003 /* Copy Bazel Outputs / Generate Bazel Dependencies (Index Build) */ = {
|
00001E1FC9CF000000000003 /* Copy Bazel Outputs / Generate Bazel Dependencies (Index Build) */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
alwaysOutOfDate = 1;
|
alwaysOutOfDate = 1;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
|
|
@ -212,84 +222,246 @@
|
||||||
shellScript = "set -euo pipefail\n\nif [[ \"$ACTION\" == \"indexbuild\" ]]; then\n cd \"$SRCROOT\"\n\n \"$BAZEL_INTEGRATION_DIR/generate_index_build_bazel_dependencies.sh\"\nelse\n \"$BAZEL_INTEGRATION_DIR/copy_outputs.sh\" \\\n \"_BazelForcedCompile_.swift\" \\\n \"\"\nfi\n";
|
shellScript = "set -euo pipefail\n\nif [[ \"$ACTION\" == \"indexbuild\" ]]; then\n cd \"$SRCROOT\"\n\n \"$BAZEL_INTEGRATION_DIR/generate_index_build_bazel_dependencies.sh\"\nelse\n \"$BAZEL_INTEGRATION_DIR/copy_outputs.sh\" \\\n \"_BazelForcedCompile_.swift\" \\\n \"\"\nfi\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
00004EB553A7000000000006 /* Sources */ = {
|
00001E1FC9CF000000000006 /* Sources */ = {
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
00FFC950564A0A8E85DE76AA /* Control.swift in Sources */,
|
00FF1E5231001920CAE02B34 /* RunnerCore.swift in Sources */,
|
||||||
00FFC927145F56EA91D8C9F9 /* Window.swift in Sources */,
|
|
||||||
00FF769EE4F24E03387EE327 /* Control+logTree.swift in Sources */,
|
|
||||||
00FF15120A8D075045D0C31A /* Node+logTree.swift in Sources */,
|
|
||||||
00FF02DFBDB02EF7CA6730AD /* log.swift in Sources */,
|
|
||||||
00FF5E51E93E85114A81C2ED /* AttributeScopes+SwiftTUIAttributes.swift in Sources */,
|
|
||||||
00FF9443A13020538EDF8602 /* Cell.swift in Sources */,
|
|
||||||
00FF29699AA621079339AEA2 /* CellAttributes.swift in Sources */,
|
|
||||||
00FF28471707BD8316B43410 /* Color.swift in Sources */,
|
|
||||||
00FFC77584E23F3984779346 /* Edges.swift in Sources */,
|
|
||||||
00FF38B4059491987FAEE965 /* Extended.swift in Sources */,
|
|
||||||
00FFDC2481C8A9ED7403DE2C /* Position.swift in Sources */,
|
|
||||||
00FF69CEE00F16C55B995EA3 /* Rect.swift in Sources */,
|
|
||||||
00FF40BBB288C62260CA76C3 /* EscapeSequence.swift in Sources */,
|
|
||||||
00FF79AAF9921EE12F892356 /* Layer.swift in Sources */,
|
|
||||||
00FF3A4B43C80D488C7CE32B /* LayerDrawing.swift in Sources */,
|
|
||||||
00FFF2E0DDE16A7D1010746B /* Renderer.swift in Sources */,
|
|
||||||
00FFDFD37AE54401B53A5ABB /* Size.swift in Sources */,
|
|
||||||
00FFB7DC9A3293ECE8393A58 /* Binding.swift in Sources */,
|
|
||||||
00FF4A4ABC004B5FF5637D01 /* Environment.swift in Sources */,
|
|
||||||
00FF3B45C9889ED370565846 /* ObservedObject.swift in Sources */,
|
|
||||||
00FF2C946200B58812B667DF /* State.swift in Sources */,
|
|
||||||
00FFEE3805EB06CFC8FC03C7 /* View+Environment.swift in Sources */,
|
|
||||||
00FF76C198B892A242BACBA0 /* View+ObservableObject.swift in Sources */,
|
|
||||||
00FF33C3B2D6D0317F653F20 /* View+State.swift in Sources */,
|
|
||||||
00FF49436AF208504407BD30 /* ASCII.swift in Sources */,
|
|
||||||
00FFF11402FCE9EA7A96512F /* Application.swift in Sources */,
|
|
||||||
00FF1F9002855C61CF31D72C /* ArrowKeyParser.swift in Sources */,
|
|
||||||
00FF1BC72723E836422B53B6 /* SwiftTUI.swift in Sources */,
|
|
||||||
00FF6E0FF588278BC1C0E96E /* ComposedView.swift in Sources */,
|
|
||||||
00FFC7BA845C5AB46EEDD9EC /* GenericView.swift in Sources */,
|
|
||||||
00FF24113C0B99C3349F0761 /* LayoutRootView.swift in Sources */,
|
|
||||||
00FF8259DABBDE007D9CA96C /* ModifierView.swift in Sources */,
|
|
||||||
00FFA88328D15EA01534CBB6 /* Node.swift in Sources */,
|
|
||||||
00FFB9C9BAB730C1E9019D6D /* PrimitiveView.swift in Sources */,
|
|
||||||
00FF0DE18E6C3150EE967582 /* View.swift in Sources */,
|
|
||||||
00FF0428EFF8BC4844DFEEF5 /* Weak.swift in Sources */,
|
|
||||||
00FFEE5BFF62FA2C9CE8512D /* WeakSet.swift in Sources */,
|
|
||||||
00FF7FEDD08A068D8D066266 /* Button.swift in Sources */,
|
|
||||||
00FF89E95841426E895D81E5 /* Color+View.swift in Sources */,
|
|
||||||
00FF65FFCD86BF306BEC3471 /* Divider.swift in Sources */,
|
|
||||||
00FFAC2EE02A2748301EB053 /* GeometryReader.swift in Sources */,
|
|
||||||
00FFF57F463FD5B6941F2333 /* ScrollView.swift in Sources */,
|
|
||||||
00FFCEF1BD7F380C94FAADB0 /* Spacer.swift in Sources */,
|
|
||||||
00FF23D86E413506C6F7DB25 /* Text.swift in Sources */,
|
|
||||||
00FF45B8E101B2B215011288 /* TextField.swift in Sources */,
|
|
||||||
00FFE75BB68A3EF17D60E39C /* EmptyView.swift in Sources */,
|
|
||||||
00FFAE6A70F1E1714BD84C61 /* ForEach.swift in Sources */,
|
|
||||||
00FFC6099114A3970F594B5A /* Group.swift in Sources */,
|
|
||||||
00FF86BDBAB1FB01FC69713C /* Background.swift in Sources */,
|
|
||||||
00FF0E0C217BCA513AA25E42 /* Bold.swift in Sources */,
|
|
||||||
00FF1F7CE9DEE5E71B7FD162 /* Border.swift in Sources */,
|
|
||||||
00FF17E30E5E434F1A61B03E /* FixedFrame.swift in Sources */,
|
|
||||||
00FF2570965BBE7BAABB7C8F /* FlexibleFrame.swift in Sources */,
|
|
||||||
00FF2E046DCFA53B787E8B14 /* ForegroundColor.swift in Sources */,
|
|
||||||
00FF159F585DA1FE891AC212 /* Italic.swift in Sources */,
|
|
||||||
00FFFD7F86C6332ACFE8E09A /* OnAppear.swift in Sources */,
|
|
||||||
00FF4600097791854D5254C8 /* Padding.swift in Sources */,
|
|
||||||
00FF7EBE80C2D2F703193AE2 /* SetEnvironment.swift in Sources */,
|
|
||||||
00FF187F7C193AE2DC5C0569 /* Strikethrough.swift in Sources */,
|
|
||||||
00FF377E17D813E1DF17B011 /* Underline.swift in Sources */,
|
|
||||||
00FFD84E8471C8E5126FC9E0 /* Optional+View.swift in Sources */,
|
|
||||||
00FF8C1E18A733FD0EE6B012 /* Alignment.swift in Sources */,
|
|
||||||
00FF0AA743B1E02D724F5F8C /* Axis.swift in Sources */,
|
|
||||||
00FF3907B1397417683BA7FC /* HStack.swift in Sources */,
|
|
||||||
00FF814531DF6F008282E112 /* VStack.swift in Sources */,
|
|
||||||
00FF5528E4594080E339FE5E /* ZStack.swift in Sources */,
|
|
||||||
00FFB8584ED0017DB11DE731 /* TupleView.swift in Sources */,
|
|
||||||
00FFB51099CAC91D5F78F022 /* ViewBuilder.swift in Sources */,
|
|
||||||
00FF8FA09DB2BD499064AC64 /* _ConditionalView.swift in Sources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
00004EB553A7000000000100 /* Debug */ = {
|
00001E1FC9CF000000000100 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = arm64;
|
||||||
|
BAZEL_LABEL = "@@//m323/Sources/MiniProject:RunnerCore";
|
||||||
|
BAZEL_OUTPUTS_PRODUCT = "bazel-out/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject/libRunnerCore.a";
|
||||||
|
BAZEL_OUTPUTS_PRODUCT_BASENAME = libRunnerCore.a;
|
||||||
|
BAZEL_PACKAGE_BIN_DIR = "bazel-out/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject";
|
||||||
|
BAZEL_TARGET_ID = "@@//m323/Sources/MiniProject:RunnerCore darwin_arm64-dbg-ST-9a5aec5712f9";
|
||||||
|
COMPILE_TARGET_NAME = RunnerCore;
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 26.5;
|
||||||
|
OTHER_SWIFT_FLAGS = "-Xcc -working-directory -Xcc $(PROJECT_DIR) -working-directory $(PROJECT_DIR) -enforce-exclusivity=checked -emit-const-values-path bazel-out/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject/RunnerCore_objs/RunnerCore.swift.swiftconstvalues -DDEBUG -Onone -Xfrontend -internalize-at-link -enable-testing -disable-sandbox -file-compilation-dir . -Xcc -iquote -Xcc $(PROJECT_DIR) -Xcc -iquote -Xcc $(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin -Xfrontend -disable-clang-spi -enable-experimental-feature AccessLevelOnImport -static -Xcc -O0 -Xcc -DDEBUG=1 -Xcc -fstack-protector -Xcc -fstack-protector-all -Xfrontend -checked-async-objc-bridging=on";
|
||||||
|
PRODUCT_MODULE_NAME = RunnerCore;
|
||||||
|
PRODUCT_NAME = RunnerCore;
|
||||||
|
SDKROOT = macosx;
|
||||||
|
SUPPORTED_PLATFORMS = macosx;
|
||||||
|
SWIFT_ENABLE_EMIT_CONST_VALUES = NO;
|
||||||
|
TARGET_NAME = RunnerCore;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
00001E1FC9CF000000000002 /* Build configuration list for PBXNativeTarget "RunnerCore" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
00001E1FC9CF000000000100 /* Debug */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Debug;
|
||||||
|
};
|
||||||
|
00001E1FC9CF0000000000FF /* libRunnerCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRunnerCore.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
00001E1FC9CF000000000001 /* RunnerCore */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 00001E1FC9CF000000000002 /* Build configuration list for PBXNativeTarget "RunnerCore" */;
|
||||||
|
buildPhases = (
|
||||||
|
00001E1FC9CF000000000003 /* Copy Bazel Outputs / Generate Bazel Dependencies (Index Build) */,
|
||||||
|
00001E1FC9CF000000000006 /* Sources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
00021E1FC9CFFF0001000000 /* PBXTargetDependency */,
|
||||||
|
);
|
||||||
|
name = RunnerCore;
|
||||||
|
productName = RunnerCore;
|
||||||
|
productType = "com.apple.product-type.library.static";
|
||||||
|
};
|
||||||
|
010021D7AEE9000000000003 /* Copy Bazel Outputs / Generate Bazel Dependencies (Index Build) */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
alwaysOutOfDate = 1;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"$(TARGET_BUILD_DIR)/$(INFOPLIST_PATH)",
|
||||||
|
);
|
||||||
|
name = "Copy Bazel Outputs / Generate Bazel Dependencies (Index Build)";
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "set -euo pipefail\n\nif [[ \"$ACTION\" == \"indexbuild\" ]]; then\n cd \"$SRCROOT\"\n\n \"$BAZEL_INTEGRATION_DIR/generate_index_build_bazel_dependencies.sh\"\nelse\n \"$BAZEL_INTEGRATION_DIR/copy_outputs.sh\" \\\n \"_BazelForcedCompile_.swift\" \\\n \"$BAZEL_INTEGRATION_DIR/xctest.exclude.rsynclist\"\nfi\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
010021D7AEE9000000000005 /* Create Link Dependencies */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"$(LINK_PARAMS_FILE)",
|
||||||
|
);
|
||||||
|
name = "Create Link Dependencies";
|
||||||
|
outputPaths = (
|
||||||
|
"$(DERIVED_FILE_DIR)/link.params",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "set -euo pipefail\n\nif [[ \"${ENABLE_PREVIEWS:-}\" == \"YES\" ]]; then\nperl -pe 's/\\$(\\()?([a-zA-Z_]\\w*)(?(1)\\))/$ENV{$2}/g' \\\n \"$SCRIPT_INPUT_FILE_0\" > \"$SCRIPT_OUTPUT_FILE_0\"\nelse\n touch \"$SCRIPT_OUTPUT_FILE_0\"\nfi\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
010021D7AEE9000000000006 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
01FF0A9B8F2DD54D7DC622F9 /* RunnerCoreTests.swift in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
010021D7AEE9000000000100 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = arm64;
|
||||||
|
BAZEL_LABEL = "@@//m323/Sources/MiniProject:RunnerCoreTests";
|
||||||
|
BAZEL_OUTPUTS_PRODUCT = "bazel-out/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject/RunnerCoreTests.xctest";
|
||||||
|
BAZEL_OUTPUTS_PRODUCT_BASENAME = RunnerCoreTests.xctest;
|
||||||
|
BAZEL_PACKAGE_BIN_DIR = "bazel-out/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject";
|
||||||
|
BAZEL_TARGET_ID = "@@//m323/Sources/MiniProject:RunnerCoreTests darwin_arm64-dbg-ST-9a5aec5712f9";
|
||||||
|
COMPILE_TARGET_NAME = RunnerCoreTests;
|
||||||
|
LINK_PARAMS_FILE = "$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject/RunnerCoreTests.rules_xcodeproj.link.params";
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 26.5;
|
||||||
|
OTHER_LDFLAGS = "@$(DERIVED_FILE_DIR)/link.params";
|
||||||
|
OTHER_SWIFT_FLAGS = "-Xcc -working-directory -Xcc $(PROJECT_DIR) -working-directory $(PROJECT_DIR) -enforce-exclusivity=checked -emit-const-values-path bazel-out/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject/RunnerCoreTests_objs/RunnerCoreTests.swift.swiftconstvalues -DDEBUG -Onone -Xfrontend -internalize-at-link -enable-testing -disable-sandbox -F$(DEVELOPER_DIR)/Platforms/MacOSX.platform/Developer/Library/Frameworks -I$(DEVELOPER_DIR)/Platforms/MacOSX.platform/Developer/usr/lib -file-compilation-dir . -I$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject -plugin-path __BAZEL_SWIFT_TOOLCHAIN_PATH__/usr/lib/swift/host/plugins/testing -Xcc -iquote -Xcc $(PROJECT_DIR) -Xcc -iquote -Xcc $(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin -Xfrontend -disable-clang-spi -enable-experimental-feature AccessLevelOnImport -enable-testing -Xcc -O0 -Xcc -DDEBUG=1 -Xcc -fstack-protector -Xcc -fstack-protector-all -Xfrontend -checked-async-objc-bridging=on";
|
||||||
|
PRODUCT_MODULE_NAME = m323_Sources_MiniProject_RunnerCoreTests;
|
||||||
|
PRODUCT_NAME = RunnerCoreTests;
|
||||||
|
SDKROOT = macosx;
|
||||||
|
SUPPORTED_PLATFORMS = macosx;
|
||||||
|
SWIFT_ENABLE_EMIT_CONST_VALUES = NO;
|
||||||
|
TARGET_NAME = RunnerCoreTests;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
010021D7AEE9000000000002 /* Build configuration list for PBXNativeTarget "RunnerCoreTests" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
010021D7AEE9000000000100 /* Debug */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Debug;
|
||||||
|
};
|
||||||
|
010021D7AEE90000000000FF /* RunnerCoreTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerCoreTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
010021D7AEE9000000000001 /* RunnerCoreTests */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 010021D7AEE9000000000002 /* Build configuration list for PBXNativeTarget "RunnerCoreTests" */;
|
||||||
|
buildPhases = (
|
||||||
|
010021D7AEE9000000000003 /* Copy Bazel Outputs / Generate Bazel Dependencies (Index Build) */,
|
||||||
|
010021D7AEE9000000000005 /* Create Link Dependencies */,
|
||||||
|
010021D7AEE9000000000006 /* Sources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
010221D7AEE9FF0001000000 /* PBXTargetDependency */,
|
||||||
|
);
|
||||||
|
name = RunnerCoreTests;
|
||||||
|
productName = RunnerCoreTests;
|
||||||
|
productReference = 010021D7AEE90000000000FF /* RunnerCoreTests.xctest */;
|
||||||
|
productType = "com.apple.product-type.bundle.unit-test";
|
||||||
|
};
|
||||||
|
02004EB553A7000000000003 /* Copy Bazel Outputs / Generate Bazel Dependencies (Index Build) */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
alwaysOutOfDate = 1;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
name = "Copy Bazel Outputs / Generate Bazel Dependencies (Index Build)";
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "set -euo pipefail\n\nif [[ \"$ACTION\" == \"indexbuild\" ]]; then\n cd \"$SRCROOT\"\n\n \"$BAZEL_INTEGRATION_DIR/generate_index_build_bazel_dependencies.sh\"\nelse\n \"$BAZEL_INTEGRATION_DIR/copy_outputs.sh\" \\\n \"_BazelForcedCompile_.swift\" \\\n \"\"\nfi\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
02004EB553A7000000000006 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
02FFC950564A0A8E85DE76AA /* Control.swift in Sources */,
|
||||||
|
02FFC927145F56EA91D8C9F9 /* Window.swift in Sources */,
|
||||||
|
02FF769EE4F24E03387EE327 /* Control+logTree.swift in Sources */,
|
||||||
|
02FF15120A8D075045D0C31A /* Node+logTree.swift in Sources */,
|
||||||
|
02FF02DFBDB02EF7CA6730AD /* log.swift in Sources */,
|
||||||
|
02FF5E51E93E85114A81C2ED /* AttributeScopes+SwiftTUIAttributes.swift in Sources */,
|
||||||
|
02FF9443A13020538EDF8602 /* Cell.swift in Sources */,
|
||||||
|
02FF29699AA621079339AEA2 /* CellAttributes.swift in Sources */,
|
||||||
|
02FF28471707BD8316B43410 /* Color.swift in Sources */,
|
||||||
|
02FFC77584E23F3984779346 /* Edges.swift in Sources */,
|
||||||
|
02FF38B4059491987FAEE965 /* Extended.swift in Sources */,
|
||||||
|
02FFDC2481C8A9ED7403DE2C /* Position.swift in Sources */,
|
||||||
|
02FF69CEE00F16C55B995EA3 /* Rect.swift in Sources */,
|
||||||
|
02FF40BBB288C62260CA76C3 /* EscapeSequence.swift in Sources */,
|
||||||
|
02FF79AAF9921EE12F892356 /* Layer.swift in Sources */,
|
||||||
|
02FF3A4B43C80D488C7CE32B /* LayerDrawing.swift in Sources */,
|
||||||
|
02FFF2E0DDE16A7D1010746B /* Renderer.swift in Sources */,
|
||||||
|
02FFDFD37AE54401B53A5ABB /* Size.swift in Sources */,
|
||||||
|
02FFB7DC9A3293ECE8393A58 /* Binding.swift in Sources */,
|
||||||
|
02FF4A4ABC004B5FF5637D01 /* Environment.swift in Sources */,
|
||||||
|
02FF3B45C9889ED370565846 /* ObservedObject.swift in Sources */,
|
||||||
|
02FF2C946200B58812B667DF /* State.swift in Sources */,
|
||||||
|
02FFEE3805EB06CFC8FC03C7 /* View+Environment.swift in Sources */,
|
||||||
|
02FF76C198B892A242BACBA0 /* View+ObservableObject.swift in Sources */,
|
||||||
|
02FF33C3B2D6D0317F653F20 /* View+State.swift in Sources */,
|
||||||
|
02FF49436AF208504407BD30 /* ASCII.swift in Sources */,
|
||||||
|
02FFF11402FCE9EA7A96512F /* Application.swift in Sources */,
|
||||||
|
02FF1F9002855C61CF31D72C /* ArrowKeyParser.swift in Sources */,
|
||||||
|
02FF1BC72723E836422B53B6 /* SwiftTUI.swift in Sources */,
|
||||||
|
02FF6E0FF588278BC1C0E96E /* ComposedView.swift in Sources */,
|
||||||
|
02FFC7BA845C5AB46EEDD9EC /* GenericView.swift in Sources */,
|
||||||
|
02FF24113C0B99C3349F0761 /* LayoutRootView.swift in Sources */,
|
||||||
|
02FF8259DABBDE007D9CA96C /* ModifierView.swift in Sources */,
|
||||||
|
02FFA88328D15EA01534CBB6 /* Node.swift in Sources */,
|
||||||
|
02FFB9C9BAB730C1E9019D6D /* PrimitiveView.swift in Sources */,
|
||||||
|
02FF0DE18E6C3150EE967582 /* View.swift in Sources */,
|
||||||
|
02FF0428EFF8BC4844DFEEF5 /* Weak.swift in Sources */,
|
||||||
|
02FFEE5BFF62FA2C9CE8512D /* WeakSet.swift in Sources */,
|
||||||
|
02FF7FEDD08A068D8D066266 /* Button.swift in Sources */,
|
||||||
|
02FF89E95841426E895D81E5 /* Color+View.swift in Sources */,
|
||||||
|
02FF65FFCD86BF306BEC3471 /* Divider.swift in Sources */,
|
||||||
|
02FFAC2EE02A2748301EB053 /* GeometryReader.swift in Sources */,
|
||||||
|
02FFF57F463FD5B6941F2333 /* ScrollView.swift in Sources */,
|
||||||
|
02FFCEF1BD7F380C94FAADB0 /* Spacer.swift in Sources */,
|
||||||
|
02FF23D86E413506C6F7DB25 /* Text.swift in Sources */,
|
||||||
|
02FF45B8E101B2B215011288 /* TextField.swift in Sources */,
|
||||||
|
02FFE75BB68A3EF17D60E39C /* EmptyView.swift in Sources */,
|
||||||
|
02FFAE6A70F1E1714BD84C61 /* ForEach.swift in Sources */,
|
||||||
|
02FFC6099114A3970F594B5A /* Group.swift in Sources */,
|
||||||
|
02FF86BDBAB1FB01FC69713C /* Background.swift in Sources */,
|
||||||
|
02FF0E0C217BCA513AA25E42 /* Bold.swift in Sources */,
|
||||||
|
02FF1F7CE9DEE5E71B7FD162 /* Border.swift in Sources */,
|
||||||
|
02FF17E30E5E434F1A61B03E /* FixedFrame.swift in Sources */,
|
||||||
|
02FF2570965BBE7BAABB7C8F /* FlexibleFrame.swift in Sources */,
|
||||||
|
02FF2E046DCFA53B787E8B14 /* ForegroundColor.swift in Sources */,
|
||||||
|
02FF159F585DA1FE891AC212 /* Italic.swift in Sources */,
|
||||||
|
02FFFD7F86C6332ACFE8E09A /* OnAppear.swift in Sources */,
|
||||||
|
02FF4600097791854D5254C8 /* Padding.swift in Sources */,
|
||||||
|
02FF7EBE80C2D2F703193AE2 /* SetEnvironment.swift in Sources */,
|
||||||
|
02FF187F7C193AE2DC5C0569 /* Strikethrough.swift in Sources */,
|
||||||
|
02FF377E17D813E1DF17B011 /* Underline.swift in Sources */,
|
||||||
|
02FFD84E8471C8E5126FC9E0 /* Optional+View.swift in Sources */,
|
||||||
|
02FF8C1E18A733FD0EE6B012 /* Alignment.swift in Sources */,
|
||||||
|
02FF0AA743B1E02D724F5F8C /* Axis.swift in Sources */,
|
||||||
|
02FF3907B1397417683BA7FC /* HStack.swift in Sources */,
|
||||||
|
02FF814531DF6F008282E112 /* VStack.swift in Sources */,
|
||||||
|
02FF5528E4594080E339FE5E /* ZStack.swift in Sources */,
|
||||||
|
02FFB8584ED0017DB11DE731 /* TupleView.swift in Sources */,
|
||||||
|
02FFB51099CAC91D5F78F022 /* ViewBuilder.swift in Sources */,
|
||||||
|
02FF8FA09DB2BD499064AC64 /* _ConditionalView.swift in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
02004EB553A7000000000100 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = arm64;
|
ARCHS = arm64;
|
||||||
|
|
@ -310,32 +482,32 @@
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
00004EB553A7000000000002 /* Build configuration list for PBXNativeTarget "SwiftTUI" */ = {
|
02004EB553A7000000000002 /* Build configuration list for PBXNativeTarget "SwiftTUI" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
00004EB553A7000000000100 /* Debug */,
|
02004EB553A7000000000100 /* Debug */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Debug;
|
defaultConfigurationName = Debug;
|
||||||
};
|
};
|
||||||
00004EB553A70000000000FF /* libSwiftTUI.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSwiftTUI.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
02004EB553A70000000000FF /* libSwiftTUI.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSwiftTUI.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
00004EB553A7000000000001 /* SwiftTUI */ = {
|
02004EB553A7000000000001 /* SwiftTUI */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 00004EB553A7000000000002 /* Build configuration list for PBXNativeTarget "SwiftTUI" */;
|
buildConfigurationList = 02004EB553A7000000000002 /* Build configuration list for PBXNativeTarget "SwiftTUI" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
00004EB553A7000000000003 /* Copy Bazel Outputs / Generate Bazel Dependencies (Index Build) */,
|
02004EB553A7000000000003 /* Copy Bazel Outputs / Generate Bazel Dependencies (Index Build) */,
|
||||||
00004EB553A7000000000006 /* Sources */,
|
02004EB553A7000000000006 /* Sources */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
dependencies = (
|
dependencies = (
|
||||||
00024EB553A7FF0001000000 /* PBXTargetDependency */,
|
02024EB553A7FF0001000000 /* PBXTargetDependency */,
|
||||||
);
|
);
|
||||||
name = SwiftTUI;
|
name = SwiftTUI;
|
||||||
productName = SwiftTUI;
|
productName = SwiftTUI;
|
||||||
productType = "com.apple.product-type.library.static";
|
productType = "com.apple.product-type.library.static";
|
||||||
};
|
};
|
||||||
0100FAB81B6F000000000003 /* Copy Bazel Outputs / Generate Bazel Dependencies (Index Build) */ = {
|
0300FAB81B6F000000000003 /* Copy Bazel Outputs / Generate Bazel Dependencies (Index Build) */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
alwaysOutOfDate = 1;
|
alwaysOutOfDate = 1;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
|
|
@ -351,7 +523,7 @@
|
||||||
shellScript = "set -euo pipefail\n\nif [[ \"$ACTION\" == \"indexbuild\" ]]; then\n cd \"$SRCROOT\"\n\n \"$BAZEL_INTEGRATION_DIR/generate_index_build_bazel_dependencies.sh\"\nelse\n \"$BAZEL_INTEGRATION_DIR/copy_outputs.sh\" \\\n \"_BazelForcedCompile_.swift\" \\\n \"\"\nfi\n";
|
shellScript = "set -euo pipefail\n\nif [[ \"$ACTION\" == \"indexbuild\" ]]; then\n cd \"$SRCROOT\"\n\n \"$BAZEL_INTEGRATION_DIR/generate_index_build_bazel_dependencies.sh\"\nelse\n \"$BAZEL_INTEGRATION_DIR/copy_outputs.sh\" \\\n \"_BazelForcedCompile_.swift\" \\\n \"\"\nfi\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
0100FAB81B6F000000000005 /* Create Link Dependencies */ = {
|
0300FAB81B6F000000000005 /* Create Link Dependencies */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
|
@ -368,15 +540,15 @@
|
||||||
shellScript = "set -euo pipefail\n\nif [[ \"${ENABLE_PREVIEWS:-}\" == \"YES\" ]]; then\nperl -pe 's/\\$(\\()?([a-zA-Z_]\\w*)(?(1)\\))/$ENV{$2}/g' \\\n \"$SCRIPT_INPUT_FILE_0\" > \"$SCRIPT_OUTPUT_FILE_0\"\nelse\n touch \"$SCRIPT_OUTPUT_FILE_0\"\nfi\n";
|
shellScript = "set -euo pipefail\n\nif [[ \"${ENABLE_PREVIEWS:-}\" == \"YES\" ]]; then\nperl -pe 's/\\$(\\()?([a-zA-Z_]\\w*)(?(1)\\))/$ENV{$2}/g' \\\n \"$SCRIPT_INPUT_FILE_0\" > \"$SCRIPT_OUTPUT_FILE_0\"\nelse\n touch \"$SCRIPT_OUTPUT_FILE_0\"\nfi\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
0100FAB81B6F000000000006 /* Sources */ = {
|
0300FAB81B6F000000000006 /* Sources */ = {
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
01FF556AC73989CC680307A3 /* main.swift in Sources */,
|
03FF556AC73989CC680307A3 /* main.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
0100FAB81B6F000000000100 /* Debug */ = {
|
0300FAB81B6F000000000100 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = arm64;
|
ARCHS = arm64;
|
||||||
|
|
@ -390,7 +562,7 @@
|
||||||
LINK_PARAMS_FILE = "$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject/StadtRundlauf.rules_xcodeproj.link.params";
|
LINK_PARAMS_FILE = "$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject/StadtRundlauf.rules_xcodeproj.link.params";
|
||||||
MACOSX_DEPLOYMENT_TARGET = 26.5;
|
MACOSX_DEPLOYMENT_TARGET = 26.5;
|
||||||
OTHER_LDFLAGS = "@$(DERIVED_FILE_DIR)/link.params";
|
OTHER_LDFLAGS = "@$(DERIVED_FILE_DIR)/link.params";
|
||||||
OTHER_SWIFT_FLAGS = "-Xcc -working-directory -Xcc $(PROJECT_DIR) -working-directory $(PROJECT_DIR) -enforce-exclusivity=checked -emit-const-values-path bazel-out/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject/StadtRundlauf_objs/main.swift.swiftconstvalues -DDEBUG -Onone -Xfrontend -internalize-at-link -enable-testing -disable-sandbox -file-compilation-dir . -I$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin/external/+http_archive+swifttui -Xcc -iquote -Xcc $(PROJECT_DIR) -Xcc -iquote -Xcc $(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin -Xfrontend -disable-clang-spi -enable-experimental-feature AccessLevelOnImport -Xfrontend -entry-point-function-name -Xfrontend m323_Sources_MiniProject_StadtRundlauf_main -Xcc -O0 -Xcc -DDEBUG=1 -Xcc -fstack-protector -Xcc -fstack-protector-all -Xfrontend -checked-async-objc-bridging=on";
|
OTHER_SWIFT_FLAGS = "-Xcc -working-directory -Xcc $(PROJECT_DIR) -working-directory $(PROJECT_DIR) -enforce-exclusivity=checked -emit-const-values-path bazel-out/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject/StadtRundlauf_objs/main.swift.swiftconstvalues -DDEBUG -Onone -Xfrontend -internalize-at-link -enable-testing -disable-sandbox -file-compilation-dir . -I$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject -I$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin/external/+http_archive+swifttui -Xcc -iquote -Xcc $(PROJECT_DIR) -Xcc -iquote -Xcc $(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin -Xfrontend -disable-clang-spi -enable-experimental-feature AccessLevelOnImport -Xfrontend -entry-point-function-name -Xfrontend m323_Sources_MiniProject_StadtRundlauf_main -Xcc -O0 -Xcc -DDEBUG=1 -Xcc -fstack-protector -Xcc -fstack-protector-all -Xfrontend -checked-async-objc-bridging=on";
|
||||||
PRODUCT_MODULE_NAME = m323_Sources_MiniProject_StadtRundlauf;
|
PRODUCT_MODULE_NAME = m323_Sources_MiniProject_StadtRundlauf;
|
||||||
PRODUCT_NAME = StadtRundlauf;
|
PRODUCT_NAME = StadtRundlauf;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
|
@ -400,58 +572,84 @@
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
0100FAB81B6F000000000002 /* Build configuration list for PBXNativeTarget "StadtRundlauf" */ = {
|
0300FAB81B6F000000000002 /* Build configuration list for PBXNativeTarget "StadtRundlauf" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
0100FAB81B6F000000000100 /* Debug */,
|
0300FAB81B6F000000000100 /* Debug */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Debug;
|
defaultConfigurationName = Debug;
|
||||||
};
|
};
|
||||||
0100FAB81B6F0000000000FF /* StadtRundlauf */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = StadtRundlauf; sourceTree = BUILT_PRODUCTS_DIR; };
|
0300FAB81B6F0000000000FF /* StadtRundlauf */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = StadtRundlauf; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
0100FAB81B6F000000000001 /* StadtRundlauf */ = {
|
0300FAB81B6F000000000001 /* StadtRundlauf */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 0100FAB81B6F000000000002 /* Build configuration list for PBXNativeTarget "StadtRundlauf" */;
|
buildConfigurationList = 0300FAB81B6F000000000002 /* Build configuration list for PBXNativeTarget "StadtRundlauf" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
0100FAB81B6F000000000003 /* Copy Bazel Outputs / Generate Bazel Dependencies (Index Build) */,
|
0300FAB81B6F000000000003 /* Copy Bazel Outputs / Generate Bazel Dependencies (Index Build) */,
|
||||||
0100FAB81B6F000000000005 /* Create Link Dependencies */,
|
0300FAB81B6F000000000005 /* Create Link Dependencies */,
|
||||||
0100FAB81B6F000000000006 /* Sources */,
|
0300FAB81B6F000000000006 /* Sources */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
dependencies = (
|
dependencies = (
|
||||||
0102FAB81B6FFF0001000000 /* PBXTargetDependency */,
|
0302FAB81B6FFF0001000000 /* PBXTargetDependency */,
|
||||||
);
|
);
|
||||||
name = StadtRundlauf;
|
name = StadtRundlauf;
|
||||||
productName = StadtRundlauf;
|
productName = StadtRundlauf;
|
||||||
productReference = 0100FAB81B6F0000000000FF /* StadtRundlauf */;
|
productReference = 0300FAB81B6F0000000000FF /* StadtRundlauf */;
|
||||||
productType = "com.apple.product-type.tool";
|
productType = "com.apple.product-type.tool";
|
||||||
};
|
};
|
||||||
0101FAB81B6FFF0001000000 /* PBXContainerItemProxy */ = {
|
00011E1FC9CFFF0001000000 /* PBXContainerItemProxy */ = {
|
||||||
isa = PBXContainerItemProxy;
|
isa = PBXContainerItemProxy;
|
||||||
containerPortal = FF0000000000000000000001 /* Project object */;
|
containerPortal = FF0000000000000000000001 /* Project object */;
|
||||||
proxyType = 1;
|
proxyType = 1;
|
||||||
remoteGlobalIDString = FF0100000000000000000001;
|
remoteGlobalIDString = FF0100000000000000000001;
|
||||||
remoteInfo = BazelDependencies;
|
remoteInfo = BazelDependencies;
|
||||||
};
|
};
|
||||||
0102FAB81B6FFF0001000000 /* PBXTargetDependency */ = {
|
00021E1FC9CFFF0001000000 /* PBXTargetDependency */ = {
|
||||||
isa = PBXTargetDependency;
|
isa = PBXTargetDependency;
|
||||||
name = BazelDependencies;
|
name = BazelDependencies;
|
||||||
target = FF0100000000000000000001 /* BazelDependencies */;
|
target = FF0100000000000000000001 /* BazelDependencies */;
|
||||||
targetProxy = 0101FAB81B6FFF0001000000 /* PBXContainerItemProxy */;
|
targetProxy = 00011E1FC9CFFF0001000000 /* PBXContainerItemProxy */;
|
||||||
};
|
};
|
||||||
00014EB553A7FF0001000000 /* PBXContainerItemProxy */ = {
|
010121D7AEE9FF0001000000 /* PBXContainerItemProxy */ = {
|
||||||
isa = PBXContainerItemProxy;
|
isa = PBXContainerItemProxy;
|
||||||
containerPortal = FF0000000000000000000001 /* Project object */;
|
containerPortal = FF0000000000000000000001 /* Project object */;
|
||||||
proxyType = 1;
|
proxyType = 1;
|
||||||
remoteGlobalIDString = FF0100000000000000000001;
|
remoteGlobalIDString = FF0100000000000000000001;
|
||||||
remoteInfo = BazelDependencies;
|
remoteInfo = BazelDependencies;
|
||||||
};
|
};
|
||||||
00024EB553A7FF0001000000 /* PBXTargetDependency */ = {
|
010221D7AEE9FF0001000000 /* PBXTargetDependency */ = {
|
||||||
isa = PBXTargetDependency;
|
isa = PBXTargetDependency;
|
||||||
name = BazelDependencies;
|
name = BazelDependencies;
|
||||||
target = FF0100000000000000000001 /* BazelDependencies */;
|
target = FF0100000000000000000001 /* BazelDependencies */;
|
||||||
targetProxy = 00014EB553A7FF0001000000 /* PBXContainerItemProxy */;
|
targetProxy = 010121D7AEE9FF0001000000 /* PBXContainerItemProxy */;
|
||||||
|
};
|
||||||
|
0301FAB81B6FFF0001000000 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = FF0000000000000000000001 /* Project object */;
|
||||||
|
proxyType = 1;
|
||||||
|
remoteGlobalIDString = FF0100000000000000000001;
|
||||||
|
remoteInfo = BazelDependencies;
|
||||||
|
};
|
||||||
|
0302FAB81B6FFF0001000000 /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
name = BazelDependencies;
|
||||||
|
target = FF0100000000000000000001 /* BazelDependencies */;
|
||||||
|
targetProxy = 0301FAB81B6FFF0001000000 /* PBXContainerItemProxy */;
|
||||||
|
};
|
||||||
|
02014EB553A7FF0001000000 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = FF0000000000000000000001 /* Project object */;
|
||||||
|
proxyType = 1;
|
||||||
|
remoteGlobalIDString = FF0100000000000000000001;
|
||||||
|
remoteInfo = BazelDependencies;
|
||||||
|
};
|
||||||
|
02024EB553A7FF0001000000 /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
name = BazelDependencies;
|
||||||
|
target = FF0100000000000000000001 /* BazelDependencies */;
|
||||||
|
targetProxy = 02014EB553A7FF0001000000 /* PBXContainerItemProxy */;
|
||||||
};
|
};
|
||||||
FF0000000000000000000003 /* /Users/cediackermann/Projects */ = {
|
FF0000000000000000000003 /* /Users/cediackermann/Projects */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
|
|
@ -477,6 +675,7 @@
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
FE0FE8D7E60C3D79B2E83B9C /* ViewBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewBuilder.swift; sourceTree = "<group>"; };
|
FE0FE8D7E60C3D79B2E83B9C /* ViewBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewBuilder.swift; sourceTree = "<group>"; };
|
||||||
|
FE11C25A4188C21B80521AF7 /* RunnerCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerCore.swift; sourceTree = "<group>"; };
|
||||||
FE1459FA19AD7E743575B55F /* Sources */ = {
|
FE1459FA19AD7E743575B55F /* Sources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
|
@ -633,6 +832,8 @@
|
||||||
FE4EC1526AFF23247D74D7E5 /* data */,
|
FE4EC1526AFF23247D74D7E5 /* data */,
|
||||||
FE91213EB706159A32807EEC /* BUILD.bazel */,
|
FE91213EB706159A32807EEC /* BUILD.bazel */,
|
||||||
FE359F43A055950CD2C4031A /* main.swift */,
|
FE359F43A055950CD2C4031A /* main.swift */,
|
||||||
|
FE11C25A4188C21B80521AF7 /* RunnerCore.swift */,
|
||||||
|
FEE8E2B18F627E26CA07D99A /* RunnerCoreTests.swift */,
|
||||||
);
|
);
|
||||||
path = MiniProject;
|
path = MiniProject;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
|
@ -734,6 +935,7 @@
|
||||||
FED14FCCEFFF6DEE187B47AF /* WeakSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeakSet.swift; sourceTree = "<group>"; };
|
FED14FCCEFFF6DEE187B47AF /* WeakSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeakSet.swift; sourceTree = "<group>"; };
|
||||||
FED4C93198EC989AFB18C04D /* Edges.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Edges.swift; sourceTree = "<group>"; };
|
FED4C93198EC989AFB18C04D /* Edges.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Edges.swift; sourceTree = "<group>"; };
|
||||||
FEDEA3D2E3B24689EE2C2D07 /* View+Environment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+Environment.swift"; sourceTree = "<group>"; };
|
FEDEA3D2E3B24689EE2C2D07 /* View+Environment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+Environment.swift"; sourceTree = "<group>"; };
|
||||||
|
FEE8E2B18F627E26CA07D99A /* RunnerCoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerCoreTests.swift; sourceTree = "<group>"; };
|
||||||
FEEB3ECD861EEC2801B03652 /* State.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = State.swift; sourceTree = "<group>"; };
|
FEEB3ECD861EEC2801B03652 /* State.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = State.swift; sourceTree = "<group>"; };
|
||||||
FEEC8BA2E9A611FB242868D5 /* LayoutRootView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LayoutRootView.swift; sourceTree = "<group>"; };
|
FEEC8BA2E9A611FB242868D5 /* LayoutRootView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LayoutRootView.swift; sourceTree = "<group>"; };
|
||||||
FEF05B9E4558F03213B7E607 /* SwiftTUI */ = {
|
FEF05B9E4558F03213B7E607 /* SwiftTUI */ = {
|
||||||
|
|
@ -764,82 +966,86 @@
|
||||||
path = ../../external;
|
path = ../../external;
|
||||||
sourceTree = SOURCE_ROOT;
|
sourceTree = SOURCE_ROOT;
|
||||||
};
|
};
|
||||||
00FF02DFBDB02EF7CA6730AD /* log.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE06B75F1D71891F3D634B95 /* log.swift */; };
|
00FF1E5231001920CAE02B34 /* RunnerCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE11C25A4188C21B80521AF7 /* RunnerCore.swift */; };
|
||||||
00FF0428EFF8BC4844DFEEF5 /* Weak.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE9FB11AE896BAE161926281 /* Weak.swift */; };
|
01FF0A9B8F2DD54D7DC622F9 /* RunnerCoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEE8E2B18F627E26CA07D99A /* RunnerCoreTests.swift */; };
|
||||||
00FF0AA743B1E02D724F5F8C /* Axis.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED12C36473686FE93CB971C /* Axis.swift */; };
|
02FF02DFBDB02EF7CA6730AD /* log.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE06B75F1D71891F3D634B95 /* log.swift */; };
|
||||||
00FF0DE18E6C3150EE967582 /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE97FC495C03EB6918A8AA5B /* View.swift */; };
|
02FF0428EFF8BC4844DFEEF5 /* Weak.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE9FB11AE896BAE161926281 /* Weak.swift */; };
|
||||||
00FF0E0C217BCA513AA25E42 /* Bold.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE565F9C1E240AF078068CC4 /* Bold.swift */; };
|
02FF0AA743B1E02D724F5F8C /* Axis.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED12C36473686FE93CB971C /* Axis.swift */; };
|
||||||
00FF15120A8D075045D0C31A /* Node+logTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE5C2DBA399E0612A054BE2E /* Node+logTree.swift */; };
|
02FF0DE18E6C3150EE967582 /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE97FC495C03EB6918A8AA5B /* View.swift */; };
|
||||||
00FF159F585DA1FE891AC212 /* Italic.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE579D8399C4C1DCC8EED430 /* Italic.swift */; };
|
02FF0E0C217BCA513AA25E42 /* Bold.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE565F9C1E240AF078068CC4 /* Bold.swift */; };
|
||||||
00FF17E30E5E434F1A61B03E /* FixedFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE3DF55F9C9C4BC3D6031FE4 /* FixedFrame.swift */; };
|
02FF15120A8D075045D0C31A /* Node+logTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE5C2DBA399E0612A054BE2E /* Node+logTree.swift */; };
|
||||||
00FF187F7C193AE2DC5C0569 /* Strikethrough.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE0833F786CD2A2EF231EBE5 /* Strikethrough.swift */; };
|
02FF159F585DA1FE891AC212 /* Italic.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE579D8399C4C1DCC8EED430 /* Italic.swift */; };
|
||||||
00FF1BC72723E836422B53B6 /* SwiftTUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE25780E4212F6D462FB9149 /* SwiftTUI.swift */; };
|
02FF17E30E5E434F1A61B03E /* FixedFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE3DF55F9C9C4BC3D6031FE4 /* FixedFrame.swift */; };
|
||||||
00FF1F7CE9DEE5E71B7FD162 /* Border.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEB681E54A115EA32E615BFB /* Border.swift */; };
|
02FF187F7C193AE2DC5C0569 /* Strikethrough.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE0833F786CD2A2EF231EBE5 /* Strikethrough.swift */; };
|
||||||
00FF1F9002855C61CF31D72C /* ArrowKeyParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEA362915EE372841E810442 /* ArrowKeyParser.swift */; };
|
02FF1BC72723E836422B53B6 /* SwiftTUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE25780E4212F6D462FB9149 /* SwiftTUI.swift */; };
|
||||||
00FF23D86E413506C6F7DB25 /* Text.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE669B47061526964E8012FF /* Text.swift */; };
|
02FF1F7CE9DEE5E71B7FD162 /* Border.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEB681E54A115EA32E615BFB /* Border.swift */; };
|
||||||
00FF24113C0B99C3349F0761 /* LayoutRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEEC8BA2E9A611FB242868D5 /* LayoutRootView.swift */; };
|
02FF1F9002855C61CF31D72C /* ArrowKeyParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEA362915EE372841E810442 /* ArrowKeyParser.swift */; };
|
||||||
00FF2570965BBE7BAABB7C8F /* FlexibleFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6CB92FA70E5A7EE190EB1E /* FlexibleFrame.swift */; };
|
02FF23D86E413506C6F7DB25 /* Text.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE669B47061526964E8012FF /* Text.swift */; };
|
||||||
00FF28471707BD8316B43410 /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE9B6E8AD18CF510CC2C3174 /* Color.swift */; };
|
02FF24113C0B99C3349F0761 /* LayoutRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEEC8BA2E9A611FB242868D5 /* LayoutRootView.swift */; };
|
||||||
00FF29699AA621079339AEA2 /* CellAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEB71BE6A8588DC0A820ED8E /* CellAttributes.swift */; };
|
02FF2570965BBE7BAABB7C8F /* FlexibleFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6CB92FA70E5A7EE190EB1E /* FlexibleFrame.swift */; };
|
||||||
00FF2C946200B58812B667DF /* State.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEEB3ECD861EEC2801B03652 /* State.swift */; };
|
02FF28471707BD8316B43410 /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE9B6E8AD18CF510CC2C3174 /* Color.swift */; };
|
||||||
00FF2E046DCFA53B787E8B14 /* ForegroundColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE94FB30E7CAB9941E04149F /* ForegroundColor.swift */; };
|
02FF29699AA621079339AEA2 /* CellAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEB71BE6A8588DC0A820ED8E /* CellAttributes.swift */; };
|
||||||
00FF33C3B2D6D0317F653F20 /* View+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE28ED61A3E441791C892614 /* View+State.swift */; };
|
02FF2C946200B58812B667DF /* State.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEEB3ECD861EEC2801B03652 /* State.swift */; };
|
||||||
00FF377E17D813E1DF17B011 /* Underline.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE3348E7805B88D20C67D624 /* Underline.swift */; };
|
02FF2E046DCFA53B787E8B14 /* ForegroundColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE94FB30E7CAB9941E04149F /* ForegroundColor.swift */; };
|
||||||
00FF38B4059491987FAEE965 /* Extended.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE981D88F74E1B0E237FF17A /* Extended.swift */; };
|
02FF33C3B2D6D0317F653F20 /* View+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE28ED61A3E441791C892614 /* View+State.swift */; };
|
||||||
00FF3907B1397417683BA7FC /* HStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE1D5FAB1C88913D40911281 /* HStack.swift */; };
|
02FF377E17D813E1DF17B011 /* Underline.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE3348E7805B88D20C67D624 /* Underline.swift */; };
|
||||||
00FF3A4B43C80D488C7CE32B /* LayerDrawing.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6C1FBF148386BCCB815946 /* LayerDrawing.swift */; };
|
02FF38B4059491987FAEE965 /* Extended.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE981D88F74E1B0E237FF17A /* Extended.swift */; };
|
||||||
00FF3B45C9889ED370565846 /* ObservedObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE0256EB086C79D047D00FE0 /* ObservedObject.swift */; };
|
02FF3907B1397417683BA7FC /* HStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE1D5FAB1C88913D40911281 /* HStack.swift */; };
|
||||||
00FF40BBB288C62260CA76C3 /* EscapeSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE9FA50882B24965E3924A03 /* EscapeSequence.swift */; };
|
02FF3A4B43C80D488C7CE32B /* LayerDrawing.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6C1FBF148386BCCB815946 /* LayerDrawing.swift */; };
|
||||||
00FF45B8E101B2B215011288 /* TextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEFEB64A0F9ECD99B9D903B6 /* TextField.swift */; };
|
02FF3B45C9889ED370565846 /* ObservedObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE0256EB086C79D047D00FE0 /* ObservedObject.swift */; };
|
||||||
00FF4600097791854D5254C8 /* Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE406681BF50D14C2B003EFA /* Padding.swift */; };
|
02FF40BBB288C62260CA76C3 /* EscapeSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE9FA50882B24965E3924A03 /* EscapeSequence.swift */; };
|
||||||
00FF49436AF208504407BD30 /* ASCII.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE97AC026E7A91BD7F6FADDF /* ASCII.swift */; };
|
02FF45B8E101B2B215011288 /* TextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEFEB64A0F9ECD99B9D903B6 /* TextField.swift */; };
|
||||||
00FF4A4ABC004B5FF5637D01 /* Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC35B1294C0C3A5487073C1 /* Environment.swift */; };
|
02FF4600097791854D5254C8 /* Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE406681BF50D14C2B003EFA /* Padding.swift */; };
|
||||||
00FF5528E4594080E339FE5E /* ZStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECF34CCEB582E63F618344C /* ZStack.swift */; };
|
02FF49436AF208504407BD30 /* ASCII.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE97AC026E7A91BD7F6FADDF /* ASCII.swift */; };
|
||||||
00FF5E51E93E85114A81C2ED /* AttributeScopes+SwiftTUIAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7E6DAF3716429D85DF1CB4 /* AttributeScopes+SwiftTUIAttributes.swift */; };
|
02FF4A4ABC004B5FF5637D01 /* Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC35B1294C0C3A5487073C1 /* Environment.swift */; };
|
||||||
00FF65FFCD86BF306BEC3471 /* Divider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE8F75BC675A850D30B1DFF7 /* Divider.swift */; };
|
02FF5528E4594080E339FE5E /* ZStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECF34CCEB582E63F618344C /* ZStack.swift */; };
|
||||||
00FF69CEE00F16C55B995EA3 /* Rect.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7ADB44C83312F759326BC8 /* Rect.swift */; };
|
02FF5E51E93E85114A81C2ED /* AttributeScopes+SwiftTUIAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7E6DAF3716429D85DF1CB4 /* AttributeScopes+SwiftTUIAttributes.swift */; };
|
||||||
00FF6E0FF588278BC1C0E96E /* ComposedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE36B7FB4825960CFD1EE9A0 /* ComposedView.swift */; };
|
02FF65FFCD86BF306BEC3471 /* Divider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE8F75BC675A850D30B1DFF7 /* Divider.swift */; };
|
||||||
00FF769EE4F24E03387EE327 /* Control+logTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE9EBAED75B41BFE5B66EF7B /* Control+logTree.swift */; };
|
02FF69CEE00F16C55B995EA3 /* Rect.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7ADB44C83312F759326BC8 /* Rect.swift */; };
|
||||||
00FF76C198B892A242BACBA0 /* View+ObservableObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEA171F995F100B4E80C25E3 /* View+ObservableObject.swift */; };
|
02FF6E0FF588278BC1C0E96E /* ComposedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE36B7FB4825960CFD1EE9A0 /* ComposedView.swift */; };
|
||||||
00FF79AAF9921EE12F892356 /* Layer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE59CDA3C4C23D3DCD619C36 /* Layer.swift */; };
|
02FF769EE4F24E03387EE327 /* Control+logTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE9EBAED75B41BFE5B66EF7B /* Control+logTree.swift */; };
|
||||||
00FF7EBE80C2D2F703193AE2 /* SetEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE39E81DC7BE1BDBF278368B /* SetEnvironment.swift */; };
|
02FF76C198B892A242BACBA0 /* View+ObservableObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEA171F995F100B4E80C25E3 /* View+ObservableObject.swift */; };
|
||||||
00FF7FEDD08A068D8D066266 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE56EC4E9A199BCE5A4F11A9 /* Button.swift */; };
|
02FF79AAF9921EE12F892356 /* Layer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE59CDA3C4C23D3DCD619C36 /* Layer.swift */; };
|
||||||
00FF814531DF6F008282E112 /* VStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE8A46FC66E9580571ECE3D7 /* VStack.swift */; };
|
02FF7EBE80C2D2F703193AE2 /* SetEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE39E81DC7BE1BDBF278368B /* SetEnvironment.swift */; };
|
||||||
00FF8259DABBDE007D9CA96C /* ModifierView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE1D3E792C9AB2D0FEA7D0A2 /* ModifierView.swift */; };
|
02FF7FEDD08A068D8D066266 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE56EC4E9A199BCE5A4F11A9 /* Button.swift */; };
|
||||||
00FF86BDBAB1FB01FC69713C /* Background.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEF5075DC088803278713767 /* Background.swift */; };
|
02FF814531DF6F008282E112 /* VStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE8A46FC66E9580571ECE3D7 /* VStack.swift */; };
|
||||||
00FF89E95841426E895D81E5 /* Color+View.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE87BA54DCED0BC71F4DDCBC /* Color+View.swift */; };
|
02FF8259DABBDE007D9CA96C /* ModifierView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE1D3E792C9AB2D0FEA7D0A2 /* ModifierView.swift */; };
|
||||||
00FF8C1E18A733FD0EE6B012 /* Alignment.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE78B3B9FF062FE5A86D10CB /* Alignment.swift */; };
|
02FF86BDBAB1FB01FC69713C /* Background.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEF5075DC088803278713767 /* Background.swift */; };
|
||||||
00FF8FA09DB2BD499064AC64 /* _ConditionalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7CE4A8C0BEDBFEB07D7052 /* _ConditionalView.swift */; };
|
02FF89E95841426E895D81E5 /* Color+View.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE87BA54DCED0BC71F4DDCBC /* Color+View.swift */; };
|
||||||
00FF9443A13020538EDF8602 /* Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE88BA287622CAA44EEFBB05 /* Cell.swift */; };
|
02FF8C1E18A733FD0EE6B012 /* Alignment.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE78B3B9FF062FE5A86D10CB /* Alignment.swift */; };
|
||||||
00FFA88328D15EA01534CBB6 /* Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE955B7713691568C9113C22 /* Node.swift */; };
|
02FF8FA09DB2BD499064AC64 /* _ConditionalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7CE4A8C0BEDBFEB07D7052 /* _ConditionalView.swift */; };
|
||||||
00FFAC2EE02A2748301EB053 /* GeometryReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE04B709B3969540B2E9FBF6 /* GeometryReader.swift */; };
|
02FF9443A13020538EDF8602 /* Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE88BA287622CAA44EEFBB05 /* Cell.swift */; };
|
||||||
00FFAE6A70F1E1714BD84C61 /* ForEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE645B3378625EF192815274 /* ForEach.swift */; };
|
02FFA88328D15EA01534CBB6 /* Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE955B7713691568C9113C22 /* Node.swift */; };
|
||||||
00FFB51099CAC91D5F78F022 /* ViewBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE0FE8D7E60C3D79B2E83B9C /* ViewBuilder.swift */; };
|
02FFAC2EE02A2748301EB053 /* GeometryReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE04B709B3969540B2E9FBF6 /* GeometryReader.swift */; };
|
||||||
00FFB7DC9A3293ECE8393A58 /* Binding.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE24A664919669AC0926796A /* Binding.swift */; };
|
02FFAE6A70F1E1714BD84C61 /* ForEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE645B3378625EF192815274 /* ForEach.swift */; };
|
||||||
00FFB8584ED0017DB11DE731 /* TupleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6E5D2B3020404DBED9B8FA /* TupleView.swift */; };
|
02FFB51099CAC91D5F78F022 /* ViewBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE0FE8D7E60C3D79B2E83B9C /* ViewBuilder.swift */; };
|
||||||
00FFB9C9BAB730C1E9019D6D /* PrimitiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECDEC291E284E1243C69040 /* PrimitiveView.swift */; };
|
02FFB7DC9A3293ECE8393A58 /* Binding.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE24A664919669AC0926796A /* Binding.swift */; };
|
||||||
00FFC6099114A3970F594B5A /* Group.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEF83A958022D95AB0510862 /* Group.swift */; };
|
02FFB8584ED0017DB11DE731 /* TupleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6E5D2B3020404DBED9B8FA /* TupleView.swift */; };
|
||||||
00FFC77584E23F3984779346 /* Edges.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED4C93198EC989AFB18C04D /* Edges.swift */; };
|
02FFB9C9BAB730C1E9019D6D /* PrimitiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FECDEC291E284E1243C69040 /* PrimitiveView.swift */; };
|
||||||
00FFC7BA845C5AB46EEDD9EC /* GenericView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEAF08A52EEFA7CD8D7ACB91 /* GenericView.swift */; };
|
02FFC6099114A3970F594B5A /* Group.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEF83A958022D95AB0510862 /* Group.swift */; };
|
||||||
00FFC927145F56EA91D8C9F9 /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE335FCA49CCC6A3C60B53B5 /* Window.swift */; };
|
02FFC77584E23F3984779346 /* Edges.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED4C93198EC989AFB18C04D /* Edges.swift */; };
|
||||||
00FFC950564A0A8E85DE76AA /* Control.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2F2B1FD47D4F1B77B16984 /* Control.swift */; };
|
02FFC7BA845C5AB46EEDD9EC /* GenericView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEAF08A52EEFA7CD8D7ACB91 /* GenericView.swift */; };
|
||||||
00FFCEF1BD7F380C94FAADB0 /* Spacer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEFFB379E67528ADA003A9FF /* Spacer.swift */; };
|
02FFC927145F56EA91D8C9F9 /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE335FCA49CCC6A3C60B53B5 /* Window.swift */; };
|
||||||
00FFD84E8471C8E5126FC9E0 /* Optional+View.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7B02AD81BAA59E17ABF025 /* Optional+View.swift */; };
|
02FFC950564A0A8E85DE76AA /* Control.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2F2B1FD47D4F1B77B16984 /* Control.swift */; };
|
||||||
00FFDC2481C8A9ED7403DE2C /* Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE91AD15BF6BBB472852849F /* Position.swift */; };
|
02FFCEF1BD7F380C94FAADB0 /* Spacer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEFFB379E67528ADA003A9FF /* Spacer.swift */; };
|
||||||
00FFDFD37AE54401B53A5ABB /* Size.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE866088E045EAB828EAE645 /* Size.swift */; };
|
02FFD84E8471C8E5126FC9E0 /* Optional+View.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7B02AD81BAA59E17ABF025 /* Optional+View.swift */; };
|
||||||
00FFE75BB68A3EF17D60E39C /* EmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7E35A8870F6ECDB585186F /* EmptyView.swift */; };
|
02FFDC2481C8A9ED7403DE2C /* Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE91AD15BF6BBB472852849F /* Position.swift */; };
|
||||||
00FFEE3805EB06CFC8FC03C7 /* View+Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEDEA3D2E3B24689EE2C2D07 /* View+Environment.swift */; };
|
02FFDFD37AE54401B53A5ABB /* Size.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE866088E045EAB828EAE645 /* Size.swift */; };
|
||||||
00FFEE5BFF62FA2C9CE8512D /* WeakSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED14FCCEFFF6DEE187B47AF /* WeakSet.swift */; };
|
02FFE75BB68A3EF17D60E39C /* EmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7E35A8870F6ECDB585186F /* EmptyView.swift */; };
|
||||||
00FFF11402FCE9EA7A96512F /* Application.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE48F0B66A1921E14F62F077 /* Application.swift */; };
|
02FFEE3805EB06CFC8FC03C7 /* View+Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEDEA3D2E3B24689EE2C2D07 /* View+Environment.swift */; };
|
||||||
00FFF2E0DDE16A7D1010746B /* Renderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEB6D73210F2E5F83E8C6A60 /* Renderer.swift */; };
|
02FFEE5BFF62FA2C9CE8512D /* WeakSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED14FCCEFFF6DEE187B47AF /* WeakSet.swift */; };
|
||||||
00FFF57F463FD5B6941F2333 /* ScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE230A21685D7895A8803FF1 /* ScrollView.swift */; };
|
02FFF11402FCE9EA7A96512F /* Application.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE48F0B66A1921E14F62F077 /* Application.swift */; };
|
||||||
00FFFD7F86C6332ACFE8E09A /* OnAppear.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6BA5124AB5DCB7C1C69060 /* OnAppear.swift */; };
|
02FFF2E0DDE16A7D1010746B /* Renderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEB6D73210F2E5F83E8C6A60 /* Renderer.swift */; };
|
||||||
01FF556AC73989CC680307A3 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE359F43A055950CD2C4031A /* main.swift */; };
|
02FFF57F463FD5B6941F2333 /* ScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE230A21685D7895A8803FF1 /* ScrollView.swift */; };
|
||||||
|
02FFFD7F86C6332ACFE8E09A /* OnAppear.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6BA5124AB5DCB7C1C69060 /* OnAppear.swift */; };
|
||||||
|
03FF556AC73989CC680307A3 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE359F43A055950CD2C4031A /* main.swift */; };
|
||||||
FF0000000000000000000004 /* Products */ = {
|
FF0000000000000000000004 /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
00004EB553A70000000000FF /* libSwiftTUI.a */,
|
00001E1FC9CF0000000000FF /* libRunnerCore.a */,
|
||||||
0100FAB81B6F0000000000FF /* StadtRundlauf */,
|
02004EB553A70000000000FF /* libSwiftTUI.a */,
|
||||||
|
010021D7AEE90000000000FF /* RunnerCoreTests.xctest */,
|
||||||
|
0300FAB81B6F0000000000FF /* StadtRundlauf */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,20 @@ _BUNDLE_EXTENSIONS = [
|
||||||
_TRIPLE_MATCH = re.compile(r"([^-]+-[^-]+)(-\D+)[^-]*(-.*)?")
|
_TRIPLE_MATCH = re.compile(r"([^-]+-[^-]+)(-\D+)[^-]*(-.*)?")
|
||||||
|
|
||||||
_SETTINGS = {
|
_SETTINGS = {
|
||||||
|
"arm64-apple-macosx RunnerCoreTests.xctest/Contents/MacOS/RunnerCoreTests": {
|
||||||
|
"c": "-iquote$(PROJECT_DIR) -iquote$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin -O0 -DDEBUG=1 -fstack-protector -fstack-protector-all",
|
||||||
|
"f": [
|
||||||
|
"$(DEVELOPER_DIR)/Platforms/MacOSX.platform/Developer/Library/Frameworks",
|
||||||
|
],
|
||||||
|
"s": [
|
||||||
|
"$(DEVELOPER_DIR)/Platforms/MacOSX.platform/Developer/usr/lib",
|
||||||
|
"$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject",
|
||||||
|
],
|
||||||
|
},
|
||||||
"arm64-apple-macosx StadtRundlauf": {
|
"arm64-apple-macosx StadtRundlauf": {
|
||||||
"c": "-iquote$(PROJECT_DIR) -iquote$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin -O0 -DDEBUG=1 -fstack-protector -fstack-protector-all",
|
"c": "-iquote$(PROJECT_DIR) -iquote$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin -O0 -DDEBUG=1 -fstack-protector -fstack-protector-all",
|
||||||
"s": [
|
"s": [
|
||||||
|
"$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin/m323/Sources/MiniProject",
|
||||||
"$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin/external/+http_archive+swifttui",
|
"$(BAZEL_OUT)/darwin_arm64-dbg-ST-9a5aec5712f9/bin/external/+http_archive+swifttui",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "9999"
|
||||||
|
version = "1.7">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "NO">
|
||||||
|
<PreActions>
|
||||||
|
<ExecutionAction
|
||||||
|
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
|
||||||
|
<ActionContent
|
||||||
|
title = "Initialize Bazel Build Output Groups File"
|
||||||
|
scriptText = "mkdir -p "${BUILD_MARKER_FILE%/*}" touch "$BUILD_MARKER_FILE" ">
|
||||||
|
<EnvironmentBuildable>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "00001E1FC9CF000000000001"
|
||||||
|
BuildableName = "libRunnerCore.a"
|
||||||
|
BlueprintName = "RunnerCore"
|
||||||
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</EnvironmentBuildable>
|
||||||
|
</ActionContent>
|
||||||
|
</ExecutionAction>
|
||||||
|
<ExecutionAction
|
||||||
|
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
|
||||||
|
<ActionContent
|
||||||
|
title = "Prepare BazelDependencies"
|
||||||
|
scriptText = "mkdir -p "$PROJECT_DIR" if [[ "${ENABLE_ADDRESS_SANITIZER:-}" == "YES" || \ "${ENABLE_THREAD_SANITIZER:-}" == "YES" || \ "${ENABLE_UNDEFINED_BEHAVIOR_SANITIZER:-}" == "YES" ]] then # TODO: Support custom toolchains once clang.sh supports them cd "$INTERNAL_DIR" || exit 1 ln -shfF "$DEVELOPER_DIR/Toolchains/XcodeDefault.xctoolchain/usr/lib" lib fi ">
|
||||||
|
<EnvironmentBuildable>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "00001E1FC9CF000000000001"
|
||||||
|
BuildableName = "libRunnerCore.a"
|
||||||
|
BlueprintName = "RunnerCore"
|
||||||
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</EnvironmentBuildable>
|
||||||
|
</ActionContent>
|
||||||
|
</ExecutionAction>
|
||||||
|
</PreActions>
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "NO"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "NO"
|
||||||
|
buildForArchiving = "NO"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "00001E1FC9CF000000000001"
|
||||||
|
BuildableName = "libRunnerCore.a"
|
||||||
|
BlueprintName = "RunnerCore"
|
||||||
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "NO"
|
||||||
|
disableMainThreadChecker = "YES"
|
||||||
|
disablePerformanceAntipatternChecker = "YES">
|
||||||
|
<Testables>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
disableMainThreadChecker = "YES"
|
||||||
|
disablePerformanceAntipatternChecker = "YES"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "NO"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
|
|
@ -0,0 +1,146 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "9999"
|
||||||
|
version = "1.7">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "NO">
|
||||||
|
<PreActions>
|
||||||
|
<ExecutionAction
|
||||||
|
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
|
||||||
|
<ActionContent
|
||||||
|
title = "Initialize Bazel Build Output Groups File"
|
||||||
|
scriptText = "mkdir -p "${BUILD_MARKER_FILE%/*}" touch "$BUILD_MARKER_FILE" ">
|
||||||
|
<EnvironmentBuildable>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "010021D7AEE9000000000001"
|
||||||
|
BuildableName = "RunnerCoreTests.xctest"
|
||||||
|
BlueprintName = "RunnerCoreTests"
|
||||||
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</EnvironmentBuildable>
|
||||||
|
</ActionContent>
|
||||||
|
</ExecutionAction>
|
||||||
|
<ExecutionAction
|
||||||
|
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
|
||||||
|
<ActionContent
|
||||||
|
title = "Prepare BazelDependencies"
|
||||||
|
scriptText = "mkdir -p "$PROJECT_DIR" if [[ "${ENABLE_ADDRESS_SANITIZER:-}" == "YES" || \ "${ENABLE_THREAD_SANITIZER:-}" == "YES" || \ "${ENABLE_UNDEFINED_BEHAVIOR_SANITIZER:-}" == "YES" ]] then # TODO: Support custom toolchains once clang.sh supports them cd "$INTERNAL_DIR" || exit 1 ln -shfF "$DEVELOPER_DIR/Toolchains/XcodeDefault.xctoolchain/usr/lib" lib fi ">
|
||||||
|
<EnvironmentBuildable>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "010021D7AEE9000000000001"
|
||||||
|
BuildableName = "RunnerCoreTests.xctest"
|
||||||
|
BlueprintName = "RunnerCoreTests"
|
||||||
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</EnvironmentBuildable>
|
||||||
|
</ActionContent>
|
||||||
|
</ExecutionAction>
|
||||||
|
</PreActions>
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "NO"
|
||||||
|
buildForArchiving = "NO"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "010021D7AEE9000000000001"
|
||||||
|
BuildableName = "RunnerCoreTests.xctest"
|
||||||
|
BlueprintName = "RunnerCoreTests"
|
||||||
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "NO"
|
||||||
|
customLLDBInitFile = "/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj/rules_xcodeproj/bazel.lldbinit"
|
||||||
|
disableMainThreadChecker = "YES"
|
||||||
|
disablePerformanceAntipatternChecker = "YES">
|
||||||
|
<PreActions>
|
||||||
|
<ExecutionAction
|
||||||
|
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
|
||||||
|
<ActionContent
|
||||||
|
title = "Update .lldbinit and copy dSYMs"
|
||||||
|
scriptText = ""$BAZEL_INTEGRATION_DIR/create_lldbinit.sh" "$BAZEL_INTEGRATION_DIR/copy_dsyms.sh" ">
|
||||||
|
<EnvironmentBuildable>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "010021D7AEE9000000000001"
|
||||||
|
BuildableName = "RunnerCoreTests.xctest"
|
||||||
|
BlueprintName = "RunnerCoreTests"
|
||||||
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</EnvironmentBuildable>
|
||||||
|
</ActionContent>
|
||||||
|
</ExecutionAction>
|
||||||
|
</PreActions>
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "010021D7AEE9000000000001"
|
||||||
|
BuildableName = "RunnerCoreTests.xctest"
|
||||||
|
BlueprintName = "RunnerCoreTests"
|
||||||
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
|
<EnvironmentVariables>
|
||||||
|
<EnvironmentVariable
|
||||||
|
key = "BUILD_WORKING_DIRECTORY"
|
||||||
|
value = "$(BUILT_PRODUCTS_DIR)"
|
||||||
|
isEnabled = "YES">
|
||||||
|
</EnvironmentVariable>
|
||||||
|
<EnvironmentVariable
|
||||||
|
key = "BUILD_WORKSPACE_DIRECTORY"
|
||||||
|
value = "$(BUILD_WORKSPACE_DIRECTORY)"
|
||||||
|
isEnabled = "YES">
|
||||||
|
</EnvironmentVariable>
|
||||||
|
</EnvironmentVariables>
|
||||||
|
<Testables>
|
||||||
|
<TestableReference
|
||||||
|
skipped = "NO">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "010021D7AEE9000000000001"
|
||||||
|
BuildableName = "RunnerCoreTests.xctest"
|
||||||
|
BlueprintName = "RunnerCoreTests"
|
||||||
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</TestableReference>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
disableMainThreadChecker = "YES"
|
||||||
|
disablePerformanceAntipatternChecker = "YES"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "NO"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<EnvironmentBuildable>
|
<EnvironmentBuildable>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "0100FAB81B6F000000000001"
|
BlueprintIdentifier = "0300FAB81B6F000000000001"
|
||||||
BuildableName = "StadtRundlauf"
|
BuildableName = "StadtRundlauf"
|
||||||
BlueprintName = "StadtRundlauf"
|
BlueprintName = "StadtRundlauf"
|
||||||
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
<EnvironmentBuildable>
|
<EnvironmentBuildable>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "0100FAB81B6F000000000001"
|
BlueprintIdentifier = "0300FAB81B6F000000000001"
|
||||||
BuildableName = "StadtRundlauf"
|
BuildableName = "StadtRundlauf"
|
||||||
BlueprintName = "StadtRundlauf"
|
BlueprintName = "StadtRundlauf"
|
||||||
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
buildForAnalyzing = "YES">
|
buildForAnalyzing = "YES">
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "0100FAB81B6F000000000001"
|
BlueprintIdentifier = "0300FAB81B6F000000000001"
|
||||||
BuildableName = "StadtRundlauf"
|
BuildableName = "StadtRundlauf"
|
||||||
BlueprintName = "StadtRundlauf"
|
BlueprintName = "StadtRundlauf"
|
||||||
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
|
@ -88,7 +88,7 @@
|
||||||
<EnvironmentBuildable>
|
<EnvironmentBuildable>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "0100FAB81B6F000000000001"
|
BlueprintIdentifier = "0300FAB81B6F000000000001"
|
||||||
BuildableName = "StadtRundlauf"
|
BuildableName = "StadtRundlauf"
|
||||||
BlueprintName = "StadtRundlauf"
|
BlueprintName = "StadtRundlauf"
|
||||||
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
|
@ -101,7 +101,7 @@
|
||||||
runnableDebuggingMode = "0">
|
runnableDebuggingMode = "0">
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "0100FAB81B6F000000000001"
|
BlueprintIdentifier = "0300FAB81B6F000000000001"
|
||||||
BuildableName = "StadtRundlauf"
|
BuildableName = "StadtRundlauf"
|
||||||
BlueprintName = "StadtRundlauf"
|
BlueprintName = "StadtRundlauf"
|
||||||
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
|
@ -136,7 +136,7 @@
|
||||||
<EnvironmentBuildable>
|
<EnvironmentBuildable>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "0100FAB81B6F000000000001"
|
BlueprintIdentifier = "0300FAB81B6F000000000001"
|
||||||
BuildableName = "StadtRundlauf"
|
BuildableName = "StadtRundlauf"
|
||||||
BlueprintName = "StadtRundlauf"
|
BlueprintName = "StadtRundlauf"
|
||||||
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
|
@ -149,7 +149,7 @@
|
||||||
runnableDebuggingMode = "0">
|
runnableDebuggingMode = "0">
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "0100FAB81B6F000000000001"
|
BlueprintIdentifier = "0300FAB81B6F000000000001"
|
||||||
BuildableName = "StadtRundlauf"
|
BuildableName = "StadtRundlauf"
|
||||||
BlueprintName = "StadtRundlauf"
|
BlueprintName = "StadtRundlauf"
|
||||||
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<EnvironmentBuildable>
|
<EnvironmentBuildable>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "00004EB553A7000000000001"
|
BlueprintIdentifier = "02004EB553A7000000000001"
|
||||||
BuildableName = "libSwiftTUI.a"
|
BuildableName = "libSwiftTUI.a"
|
||||||
BlueprintName = "SwiftTUI"
|
BlueprintName = "SwiftTUI"
|
||||||
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
<EnvironmentBuildable>
|
<EnvironmentBuildable>
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "00004EB553A7000000000001"
|
BlueprintIdentifier = "02004EB553A7000000000001"
|
||||||
BuildableName = "libSwiftTUI.a"
|
BuildableName = "libSwiftTUI.a"
|
||||||
BlueprintName = "SwiftTUI"
|
BlueprintName = "SwiftTUI"
|
||||||
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
buildForAnalyzing = "YES">
|
buildForAnalyzing = "YES">
|
||||||
<BuildableReference
|
<BuildableReference
|
||||||
BuildableIdentifier = "primary"
|
BuildableIdentifier = "primary"
|
||||||
BlueprintIdentifier = "00004EB553A7000000000001"
|
BlueprintIdentifier = "02004EB553A7000000000001"
|
||||||
BuildableName = "libSwiftTUI.a"
|
BuildableName = "libSwiftTUI.a"
|
||||||
BlueprintName = "SwiftTUI"
|
BlueprintName = "SwiftTUI"
|
||||||
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
ReferencedContainer = "container:/Users/cediackermann/Projects/m323/Sources/MiniProject/MiniProject.xcodeproj">
|
||||||
|
|
|
||||||
135
Sources/MiniProject/RunnerCore.swift
Normal file
135
Sources/MiniProject/RunnerCore.swift
Normal file
|
|
@ -0,0 +1,135 @@
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
// MARK: - Models
|
||||||
|
|
||||||
|
public enum AgeGroup: Int, CustomStringConvertible, CaseIterable {
|
||||||
|
case junior = 1
|
||||||
|
case adult = 2
|
||||||
|
case senior = 3
|
||||||
|
|
||||||
|
public var description: String {
|
||||||
|
switch self {
|
||||||
|
case .junior: return "Junior"
|
||||||
|
case .adult: return "Adult"
|
||||||
|
case .senior: return "Senior"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct Runner: Equatable {
|
||||||
|
public let name: String
|
||||||
|
public let ageGroup: AgeGroup
|
||||||
|
public let time: String
|
||||||
|
public let number: Int
|
||||||
|
|
||||||
|
public init(name: String, ageGroup: AgeGroup, time: String, number: Int) {
|
||||||
|
self.name = name
|
||||||
|
self.ageGroup = ageGroup
|
||||||
|
self.time = time
|
||||||
|
self.number = number
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum SortKey: String, CaseIterable {
|
||||||
|
case name
|
||||||
|
case ageGroup
|
||||||
|
case time
|
||||||
|
case number
|
||||||
|
|
||||||
|
public func sort(_ lhs: Runner, _ rhs: Runner) -> Bool {
|
||||||
|
switch self {
|
||||||
|
case .name: return lhs.name < rhs.name
|
||||||
|
case .ageGroup: return lhs.ageGroup.rawValue < rhs.ageGroup.rawValue
|
||||||
|
case .time: return lhs.time < rhs.time
|
||||||
|
case .number: return lhs.number < rhs.number
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - IO
|
||||||
|
|
||||||
|
public func readFile(_ path: String) -> String {
|
||||||
|
(try? String(contentsOf: URL(fileURLWithPath: path), encoding: .utf8)) ?? ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Parsing
|
||||||
|
|
||||||
|
public func parseResults(_ content: String, separator: String) -> [Int: String] {
|
||||||
|
let pairs = content
|
||||||
|
.components(separatedBy: .newlines)
|
||||||
|
.compactMap { line -> (Int, String)? in
|
||||||
|
let cols = line.components(separatedBy: separator)
|
||||||
|
guard cols.count >= 2, let key = Int(cols[0]) else { return nil }
|
||||||
|
return (key, cols[1])
|
||||||
|
}
|
||||||
|
return Dictionary(pairs, uniquingKeysWith: { _, last in last })
|
||||||
|
}
|
||||||
|
|
||||||
|
public func parseStarters(_ content: String, separator: String) -> [(nr: Int, ageGroup: Int, name: String)] {
|
||||||
|
content
|
||||||
|
.components(separatedBy: .newlines)
|
||||||
|
.compactMap { line in
|
||||||
|
let cols = line.components(separatedBy: separator)
|
||||||
|
guard cols.count >= 3, let nr = Int(cols[0]), let ageGroup = Int(cols[1])
|
||||||
|
else { return nil }
|
||||||
|
return (nr: nr, ageGroup: ageGroup, name: cols[2])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func assembleRunners(
|
||||||
|
starters: [(nr: Int, ageGroup: Int, name: String)], results: [Int: String]
|
||||||
|
) -> [Runner] {
|
||||||
|
starters.compactMap { starter in
|
||||||
|
guard let time = results[starter.nr],
|
||||||
|
let group = AgeGroup(rawValue: starter.ageGroup)
|
||||||
|
else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return Runner(name: starter.name, ageGroup: group, time: time, number: starter.nr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public func nonParticipants(
|
||||||
|
starters: [(nr: Int, ageGroup: Int, name: String)], results: [Int: String]
|
||||||
|
) -> [Runner] {
|
||||||
|
starters.compactMap { starter in
|
||||||
|
guard results[starter.nr] == nil,
|
||||||
|
let group = AgeGroup(rawValue: starter.ageGroup)
|
||||||
|
else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return Runner(name: starter.name, ageGroup: group, time: "DNS", number: starter.nr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Transforms
|
||||||
|
|
||||||
|
public func visibleRunners(
|
||||||
|
_ runners: [Runner],
|
||||||
|
query: String,
|
||||||
|
includedGroups: Set<AgeGroup>,
|
||||||
|
sortKey: SortKey
|
||||||
|
) -> [Runner] {
|
||||||
|
let needle = query.lowercased()
|
||||||
|
return runners
|
||||||
|
.filter { includedGroups.contains($0.ageGroup) }
|
||||||
|
.filter { needle.isEmpty || $0.name.lowercased().contains(needle) }
|
||||||
|
.sorted(by: sortKey.sort)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func toggling(_ groups: Set<AgeGroup>, _ group: AgeGroup) -> Set<AgeGroup> {
|
||||||
|
groups.contains(group) ? groups.subtracting([group]) : groups.union([group])
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Formatting
|
||||||
|
|
||||||
|
public func menuLabel(_ text: String, on: Bool) -> String {
|
||||||
|
on ? "[\(text)]" : " \(text) "
|
||||||
|
}
|
||||||
|
|
||||||
|
public func formatRow(_ nr: String, _ name: String, _ group: String, _ time: String) -> String {
|
||||||
|
nr.padding(toLength: 6, withPad: " ", startingAt: 0)
|
||||||
|
+ name.padding(toLength: 22, withPad: " ", startingAt: 0)
|
||||||
|
+ group.padding(toLength: 9, withPad: " ", startingAt: 0)
|
||||||
|
+ time
|
||||||
|
}
|
||||||
216
Sources/MiniProject/RunnerCoreTests.swift
Normal file
216
Sources/MiniProject/RunnerCoreTests.swift
Normal file
|
|
@ -0,0 +1,216 @@
|
||||||
|
import Foundation
|
||||||
|
import Testing
|
||||||
|
|
||||||
|
import RunnerCore
|
||||||
|
|
||||||
|
struct RunnerCoreTests {
|
||||||
|
|
||||||
|
// MARK: - AgeGroup
|
||||||
|
|
||||||
|
@Test func ageGroupDescription() {
|
||||||
|
#expect(AgeGroup.junior.description == "Junior")
|
||||||
|
#expect(AgeGroup.adult.description == "Adult")
|
||||||
|
#expect(AgeGroup.senior.description == "Senior")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func ageGroupRawValueInit() {
|
||||||
|
#expect(AgeGroup(rawValue: 1) == .junior)
|
||||||
|
#expect(AgeGroup(rawValue: 3) == .senior)
|
||||||
|
#expect(AgeGroup(rawValue: 0) == nil)
|
||||||
|
#expect(AgeGroup(rawValue: 4) == nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - SortKey.sort
|
||||||
|
|
||||||
|
private func runner(_ name: String, _ group: AgeGroup, _ time: String, _ nr: Int) -> Runner {
|
||||||
|
Runner(name: name, ageGroup: group, time: time, number: nr)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func sortKeyByName() {
|
||||||
|
let a = runner("Bob", .adult, "10:00", 2)
|
||||||
|
let b = runner("Ann", .senior, "09:00", 1)
|
||||||
|
#expect(SortKey.name.sort(b, a))
|
||||||
|
#expect(!SortKey.name.sort(a, b))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func sortKeyByAgeGroup() {
|
||||||
|
let junior = runner("X", .junior, "10:00", 5)
|
||||||
|
let senior = runner("A", .senior, "09:00", 1)
|
||||||
|
#expect(SortKey.ageGroup.sort(junior, senior))
|
||||||
|
#expect(!SortKey.ageGroup.sort(senior, junior))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func sortKeyByTime() {
|
||||||
|
let fast = runner("X", .adult, "09:00", 2)
|
||||||
|
let slow = runner("A", .adult, "10:00", 1)
|
||||||
|
#expect(SortKey.time.sort(fast, slow))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func sortKeyByNumber() {
|
||||||
|
let first = runner("Z", .adult, "10:00", 1)
|
||||||
|
let second = runner("A", .adult, "09:00", 2)
|
||||||
|
#expect(SortKey.number.sort(first, second))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - readFile
|
||||||
|
|
||||||
|
@Test func readFileReturnsContents() throws {
|
||||||
|
let dir = FileManager.default.temporaryDirectory
|
||||||
|
let url = dir.appendingPathComponent("runnercore-test-\(UUID().uuidString).txt")
|
||||||
|
try "hello\nworld".write(to: url, atomically: true, encoding: .utf8)
|
||||||
|
defer { try? FileManager.default.removeItem(at: url) }
|
||||||
|
|
||||||
|
#expect(readFile(url.path) == "hello\nworld")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func readFileMissingReturnsEmpty() {
|
||||||
|
#expect(readFile("/no/such/path/\(UUID().uuidString)") == "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - parseResults
|
||||||
|
|
||||||
|
@Test func parseResultsValidLines() {
|
||||||
|
let content = "1\t09:30\n2\t10:15"
|
||||||
|
let results = parseResults(content, separator: "\t")
|
||||||
|
#expect(results == [1: "09:30", 2: "10:15"])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func parseResultsSkipsMalformed() {
|
||||||
|
let content = "1\t09:30\nnope\n\n3" // "nope" non-int, empty, "3" has <2 cols
|
||||||
|
let results = parseResults(content, separator: "\t")
|
||||||
|
#expect(results == [1: "09:30"])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func parseResultsDuplicateKeyKeepsLast() {
|
||||||
|
let content = "1\tfirst\n1\tsecond"
|
||||||
|
let results = parseResults(content, separator: "\t")
|
||||||
|
#expect(results == [1: "second"])
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - parseStarters
|
||||||
|
|
||||||
|
@Test func parseStartersValidLines() {
|
||||||
|
let content = "1\t2\tAlice\n7\t3\tBob"
|
||||||
|
let starters = parseStarters(content, separator: "\t")
|
||||||
|
#expect(starters.count == 2)
|
||||||
|
#expect(starters[0].nr == 1)
|
||||||
|
#expect(starters[0].ageGroup == 2)
|
||||||
|
#expect(starters[0].name == "Alice")
|
||||||
|
#expect(starters[1].name == "Bob")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func parseStartersSkipsMalformed() {
|
||||||
|
let content = "1\t2\tAlice\nx\t2\tBad\n5\t2" // non-int nr, too few cols
|
||||||
|
let starters = parseStarters(content, separator: "\t")
|
||||||
|
#expect(starters.count == 1)
|
||||||
|
#expect(starters[0].name == "Alice")
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - assembleRunners
|
||||||
|
|
||||||
|
@Test func assembleRunnersMatchesResults() {
|
||||||
|
let starters = [(nr: 1, ageGroup: 2, name: "Alice"), (nr: 2, ageGroup: 3, name: "Bob")]
|
||||||
|
let results = [1: "09:30", 2: "10:00"]
|
||||||
|
let runners = assembleRunners(starters: starters, results: results)
|
||||||
|
#expect(runners.count == 2)
|
||||||
|
#expect(runners[0] == Runner(name: "Alice", ageGroup: .adult, time: "09:30", number: 1))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func assembleRunnersSkipsMissingResultAndBadGroup() {
|
||||||
|
let starters = [
|
||||||
|
(nr: 1, ageGroup: 2, name: "Alice"),
|
||||||
|
(nr: 2, ageGroup: 9, name: "Bob"),
|
||||||
|
]
|
||||||
|
let results = [2: "10:00"]
|
||||||
|
let runners = assembleRunners(starters: starters, results: results)
|
||||||
|
#expect(runners.isEmpty)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - nonParticipants
|
||||||
|
|
||||||
|
@Test func nonParticipantsGetDNS() {
|
||||||
|
let starters = [(nr: 1, ageGroup: 2, name: "Alice"), (nr: 2, ageGroup: 3, name: "Bob")]
|
||||||
|
let results = [2: "10:00"] // only Bob finished
|
||||||
|
let absent = nonParticipants(starters: starters, results: results)
|
||||||
|
#expect(absent == [Runner(name: "Alice", ageGroup: .adult, time: "DNS", number: 1)])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func nonParticipantsSkipsBadGroup() {
|
||||||
|
let starters = [(nr: 1, ageGroup: 9, name: "Ghost")]
|
||||||
|
let absent = nonParticipants(starters: starters, results: [:])
|
||||||
|
#expect(absent.isEmpty)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - visibleRunners
|
||||||
|
|
||||||
|
private var sample: [Runner] {
|
||||||
|
[
|
||||||
|
runner("Alice", .junior, "09:00", 1),
|
||||||
|
runner("Bob", .adult, "10:00", 2),
|
||||||
|
runner("Charlie", .senior, "08:00", 3),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func visibleRunnersFiltersByGroup() {
|
||||||
|
let visible = visibleRunners(
|
||||||
|
sample, query: "", includedGroups: [.adult], sortKey: .number)
|
||||||
|
#expect(visible.map(\.name) == ["Bob"])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func visibleRunnersQueryIsCaseInsensitive() {
|
||||||
|
let visible = visibleRunners(
|
||||||
|
sample, query: "aLiC", includedGroups: Set(AgeGroup.allCases), sortKey: .number)
|
||||||
|
#expect(visible.map(\.name) == ["Alice"])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func visibleRunnersEmptyQueryReturnsAllSorted() {
|
||||||
|
let visible = visibleRunners(
|
||||||
|
sample, query: "", includedGroups: Set(AgeGroup.allCases), sortKey: .time)
|
||||||
|
#expect(visible.map(\.name) == ["Charlie", "Alice", "Bob"])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func visibleRunnersEmptyWhenNoGroups() {
|
||||||
|
let visible = visibleRunners(
|
||||||
|
sample, query: "", includedGroups: [], sortKey: .number)
|
||||||
|
#expect(visible.isEmpty)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - toggling
|
||||||
|
|
||||||
|
@Test func togglingAddsWhenAbsent() {
|
||||||
|
#expect(toggling([.junior], .adult) == [.junior, .adult])
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func togglingRemovesWhenPresent() {
|
||||||
|
#expect(toggling([.junior, .adult], .adult) == [.junior])
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - menuLabel
|
||||||
|
|
||||||
|
@Test func menuLabelOn() {
|
||||||
|
#expect(menuLabel("Name", on: true) == "[Name]")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func menuLabelOff() {
|
||||||
|
#expect(menuLabel("Name", on: false) == " Name ")
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - formatRow
|
||||||
|
|
||||||
|
@Test func formatRowPadsColumns() {
|
||||||
|
let row = formatRow("#1", "Alice", "Junior", "09:00")
|
||||||
|
#expect(row == "#1 Alice Junior 09:00")
|
||||||
|
#expect(row == "#1".padding(toLength: 6, withPad: " ", startingAt: 0)
|
||||||
|
+ "Alice".padding(toLength: 22, withPad: " ", startingAt: 0)
|
||||||
|
+ "Junior".padding(toLength: 9, withPad: " ", startingAt: 0)
|
||||||
|
+ "09:00")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test func formatRowTruncatesLongFields() {
|
||||||
|
// padding(toLength:) truncates when the source is longer than the target.
|
||||||
|
let longName = String(repeating: "x", count: 30)
|
||||||
|
let row = formatRow("#1", longName, "Junior", "09:00")
|
||||||
|
#expect(row.contains(String(repeating: "x", count: 22)))
|
||||||
|
#expect(!row.contains(String(repeating: "x", count: 23)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,133 +1,7 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
|
import RunnerCore
|
||||||
import SwiftTUI
|
import SwiftTUI
|
||||||
|
|
||||||
// MARK: - Models
|
|
||||||
|
|
||||||
enum AgeGroup: Int, CustomStringConvertible, CaseIterable {
|
|
||||||
case junior = 1
|
|
||||||
case adult = 2
|
|
||||||
case senior = 3
|
|
||||||
|
|
||||||
var description: String {
|
|
||||||
switch self {
|
|
||||||
case .junior: return "Junior"
|
|
||||||
case .adult: return "Adult"
|
|
||||||
case .senior: return "Senior"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Runner {
|
|
||||||
let name: String
|
|
||||||
let ageGroup: AgeGroup
|
|
||||||
let time: String
|
|
||||||
let number: Int
|
|
||||||
}
|
|
||||||
|
|
||||||
enum SortKey: String, CaseIterable {
|
|
||||||
case name
|
|
||||||
case ageGroup
|
|
||||||
case time
|
|
||||||
case number
|
|
||||||
|
|
||||||
func sort(_ lhs: Runner, _ rhs: Runner) -> Bool {
|
|
||||||
switch self {
|
|
||||||
case .name: return lhs.name < rhs.name
|
|
||||||
case .ageGroup: return lhs.ageGroup.rawValue < rhs.ageGroup.rawValue
|
|
||||||
case .time: return lhs.time < rhs.time
|
|
||||||
case .number: return lhs.number < rhs.number
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - IO
|
|
||||||
|
|
||||||
func readFile(_ path: String) -> String {
|
|
||||||
(try? String(contentsOf: URL(fileURLWithPath: path), encoding: .utf8)) ?? ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Parsing
|
|
||||||
|
|
||||||
func parseResults(_ content: String, separator: String) -> [Int: String] {
|
|
||||||
let pairs = content
|
|
||||||
.components(separatedBy: .newlines)
|
|
||||||
.compactMap { line -> (Int, String)? in
|
|
||||||
let cols = line.components(separatedBy: separator)
|
|
||||||
guard cols.count >= 2, let key = Int(cols[0]) else { return nil }
|
|
||||||
return (key, cols[1])
|
|
||||||
}
|
|
||||||
return Dictionary(pairs, uniquingKeysWith: { _, last in last })
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseStarters(_ content: String, separator: String) -> [(nr: Int, ageGroup: Int, name: String)] {
|
|
||||||
content
|
|
||||||
.components(separatedBy: .newlines)
|
|
||||||
.compactMap { line in
|
|
||||||
let cols = line.components(separatedBy: separator)
|
|
||||||
guard cols.count >= 3, let nr = Int(cols[0]), let ageGroup = Int(cols[1])
|
|
||||||
else { return nil }
|
|
||||||
return (nr: nr, ageGroup: ageGroup, name: cols[2])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func assembleRunners(starters: [(nr: Int, ageGroup: Int, name: String)], results: [Int: String])
|
|
||||||
-> [Runner]
|
|
||||||
{
|
|
||||||
starters.compactMap { starter in
|
|
||||||
guard let time = results[starter.nr],
|
|
||||||
let group = AgeGroup(rawValue: starter.ageGroup)
|
|
||||||
else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return Runner(name: starter.name, ageGroup: group, time: time, number: starter.nr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func nonParticipants(starters: [(nr: Int, ageGroup: Int, name: String)], results: [Int: String])
|
|
||||||
-> [Runner]
|
|
||||||
{
|
|
||||||
starters.compactMap { starter in
|
|
||||||
guard results[starter.nr] == nil,
|
|
||||||
let group = AgeGroup(rawValue: starter.ageGroup)
|
|
||||||
else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return Runner(name: starter.name, ageGroup: group, time: "DNS", number: starter.nr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Transforms
|
|
||||||
|
|
||||||
func visibleRunners(
|
|
||||||
_ runners: [Runner],
|
|
||||||
query: String,
|
|
||||||
includedGroups: Set<AgeGroup>,
|
|
||||||
sortKey: SortKey
|
|
||||||
) -> [Runner] {
|
|
||||||
let needle = query.lowercased()
|
|
||||||
return runners
|
|
||||||
.filter { includedGroups.contains($0.ageGroup) }
|
|
||||||
.filter { needle.isEmpty || $0.name.lowercased().contains(needle) }
|
|
||||||
.sorted(by: sortKey.sort)
|
|
||||||
}
|
|
||||||
|
|
||||||
func toggling(_ groups: Set<AgeGroup>, _ group: AgeGroup) -> Set<AgeGroup> {
|
|
||||||
groups.contains(group) ? groups.subtracting([group]) : groups.union([group])
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Formatting
|
|
||||||
|
|
||||||
func menuLabel(_ text: String, on: Bool) -> String {
|
|
||||||
on ? "[\(text)]" : " \(text) "
|
|
||||||
}
|
|
||||||
|
|
||||||
func formatRow(_ nr: String, _ name: String, _ group: String, _ time: String) -> String {
|
|
||||||
nr.padding(toLength: 6, withPad: " ", startingAt: 0)
|
|
||||||
+ name.padding(toLength: 22, withPad: " ", startingAt: 0)
|
|
||||||
+ group.padding(toLength: 9, withPad: " ", startingAt: 0)
|
|
||||||
+ time
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Configuration
|
// MARK: - Configuration
|
||||||
|
|
||||||
let resultsURL = "/Users/cediackermann/Projects/m323/Sources/MiniProject/data/results.txt"
|
let resultsURL = "/Users/cediackermann/Projects/m323/Sources/MiniProject/data/results.txt"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue