Repository: Quick/Quick (swift)

Issue:
Drop old OS and Swift versions
I don't see much of a reason or benefit to keep these around and it will simplify many things, including CI.

### Suggested changes:

- iOS/tvOS 13+
- macOS 10.15+
- Swift 5.5+
- Xcode 13+

### Todo:

- [x] Update project to drop old deployment targets
- [x] Update podspec
- [x] Update Package.swift
- [x] Update CI

Pull request:
Resolves #1138

Change minimum supported versions in the the xcodeproj so that it's easier in the future to change this if we desire.

**This drops support for Xcode 12 and earlier, macOS 10.10 through 10.14, iOS 9 through 12, and tvOS 9 through 12**

Patch:
diff --git a/.github/workflows/ci-swiftpm.yml b/.github/workflows/ci-swiftpm.yml
index a51a93969..ddce37712 100644
--- a/.github/workflows/ci-swiftpm.yml
+++ b/.github/workflows/ci-swiftpm.yml
@@ -23,10 +23,10 @@ jobs:
   swiftpm_darwin:
     name: SwiftPM, Darwin, Xcode ${{ matrix.xcode }}
     needs: filter
-    runs-on: macos-11
+    runs-on: macos-12
     strategy:
       matrix:
-        xcode: ["12.4", "12.5", "13.0"]
+        xcode: ["13.3.1"]
       fail-fast: false
     env:
       DEVELOPER_DIR: "/Applications/Xcode_${{ matrix.xcode }}.app"
@@ -43,10 +43,7 @@ jobs:
     strategy:
       matrix:
         container:
-          - swift:5.3
-          - swift:5.4
-          - swiftlang/swift:nightly-5.5
-          - swiftlang/swift:nightly
+          - swift:5.6
       fail-fast: false
     container: ${{ matrix.container }}
     steps:
diff --git a/.github/workflows/ci-xcode.yml b/.github/workflows/ci-xcode.yml
index efe8bc61f..c358c88b3 100644
--- a/.github/workflows/ci-xcode.yml
+++ b/.github/workflows/ci-xcode.yml
@@ -23,10 +23,10 @@ jobs:
   xcode:
     name: Xcode ${{ matrix.xcode }} (${{ matrix.platform }})
     needs: filter
-    runs-on: macos-11
+    runs-on: macos-12
     strategy:
       matrix:
-        xcode: ["12.4", "12.5", "13.0"]
+        xcode: ["13.3.1"]
         platform: ["macos", "ios", "tvos"]
       fail-fast: false
     env:
diff --git a/.github/workflows/cocoapods.yml b/.github/workflows/cocoapods.yml
index c6fe46b6f..ed74d4b9d 100644
--- a/.github/workflows/cocoapods.yml
+++ b/.github/workflows/cocoapods.yml
@@ -23,7 +23,7 @@ jobs:
   cocoapods:
     name: CocoaPods Lint
     needs: filter
-    runs-on: macos-11
+    runs-on: macos-12
     steps:
       - uses: actions/checkout@v3
         if: ${{ needs.filter.outputs.should_skip != 'true' }}
diff --git a/Documentation/en-us/InstallingQuick.md b/Documentation/en-us/InstallingQuick.md
index ace7feded..a9a7de9fd 100644
--- a/Documentation/en-us/InstallingQuick.md
+++ b/Documentation/en-us/InstallingQuick.md
@@ -141,13 +141,60 @@ This is not "the one and only way" to use Carthage to manage dependencies.
 For further reference check out the [Carthage documentation](https://github.com/Carthage/Carthage/blob/master/README.md).
 
 ## [Swift Package Manager](https://github.com/apple/swift-package-manager)
-With the advent of the [swift.org](https://swift.org) open-source project, Swift now has an official, though nascent, package manager tool. Notably, this provides the possibility of using Quick on non-Apple platforms for the first time. Initial steps have been taken to allow using Quick to test projects using the Swift Package Manager, although frequent breakage is expected at this point since the tool is still under heavy development.
 
-Until further documentation has been written, the following repository may be useful as an example of how Quick can be declared as a dependency in a `Package.swift` file for SwiftPM:
+With the advent of the [swift.org](https://swift.org) open-source project, Swift now has an official package manager tool. Notably, this provides the possibility of using Quick on non-Apple platforms for the first time. You can use Swift Package Manager either by using it's integration with Xcode, or by editing your package's `Package.swift` file.
 
-https://github.com/Quick/QuickOnLinuxExample
+### Xcode Integration
 
-### (Not Recommended) Running Quick Specs on a Physical iOS Device
+To install Quick via XCode's Swift Package Manager integration, select your .xcodeproj file, then the project tab, then the Package Dependencies tab. Click on the "plus" button at the bottom of the list, then follow the wizard to add Quick to your project. Specify `https://github.com/Quick/Quick.git` as the url, and be sure to add Quick as a dependency of your unit test target, not your app target.
+
+### Package.swift
+
+Add Quick's github url as a dependency of your package, then as a dependency of your test target, like so:
+
+```swift
+// swift-tools-version:5.5
+
+import PackageDescription
+
+let package = Package(
+    name: "MyPackage",
+    products: [
+    	.library(name: "MyPackage", targets: ["MyPackage"])
+    ],
+    dependencies: [
+        .package(url: "https://github.com/Quick/Quick.git", from: "5.0.0"),
+        .package(url: "https://github.com/Quick/Nimble.git", from: "10.0.0"),
+    ]
+    targets: [
+    	.target(name: "MyPackage", dependencies: []),
+    	.testTarget(name: "MyPackageTests", dependencies: ["Quick", "Nimble"])
+    ]
+)
+```
+
+#### Linux Support
+
+On Linux, you will need to also add a `LinuxMain.swift` at the root of the `Tests` subdirectory. This needs to contain a main struct that calls out to `QCKMain`, like so:
+
+```swift
+import XCTest
+import Quick
+
+@testable import MyPackageTests
+
+@main struct Main {
+    static func main() {
+        QCKMain(
+            [], // list of `QuickSpec` subclasses. to pass in.
+            configuration: [], // Optional, list of QuickConfiguration subclasses to pass in. Defaults to empty array.
+            testCases: [] // Optional, list of XCTestCase subclasses to pass in. Defaults to empty array.
+        )
+    }
+}
+```
+
+## (Not Recommended) Running Quick Specs on a Physical iOS Device
 
 In order to run specs written in Quick on device, you need to add `Quick.framework` and
 `Nimble.framework` as `Embedded Binaries` to the `Host Application` of the
diff --git a/Package.swift b/Package.swift
index 57be1218d..a4c1971e9 100644
--- a/Package.swift
+++ b/Package.swift
@@ -1,11 +1,11 @@
-// swift-tools-version:5.3
+// swift-tools-version:5.6
 
 import PackageDescription
 
 let package = Package(
     name: "Quick",
     platforms: [
-        .macOS(.v10_10), .iOS(.v9), .tvOS(.v9)
+        .macOS(.v10_15), .iOS(.v13), .tvOS(.v13)
     ],
     products: [
         .library(name: "Quick", targets: ["Quick"]),
@@ -49,7 +49,13 @@ let package = Package(
         ])
 #else
         targets.append(contentsOf: [
-            .target(name: "Quick", dependencies: []),
+            .target(
+                name: "Quick",
+                dependencies: [],
+                exclude: [
+                    "Info.plist"
+                ]
+            ),
         ])
 #endif
         return targets
diff --git a/Quick.podspec b/Quick.podspec
index 286143e3e..18803e213 100644
--- a/Quick.podspec
+++ b/Quick.podspec
@@ -11,9 +11,9 @@ Pod::Spec.new do |s|
   s.license      = { :type => "Apache 2.0", :file => "LICENSE" }
 
   s.author       = "Quick Contributors"
-  s.ios.deployment_target = "9.0"
-  s.osx.deployment_target = "10.10"
-  s.tvos.deployment_target = '9.0'
+  s.ios.deployment_target = "13.0"
+  s.osx.deployment_target = "10.15"
+  s.tvos.deployment_target = '13.0'
 
   s.source       = { :git => "https://github.com/Quick/Quick.git", :tag => "v#{s.version}" }
   s.source_files = "Sources/**/*.{swift,h,m}"
diff --git a/Quick.xcodeproj/project.pbxproj b/Quick.xcodeproj/project.pbxproj
index 798facb0e..2e01f2f58 100644
--- a/Quick.xcodeproj/project.pbxproj
+++ b/Quick.xcodeproj/project.pbxproj
@@ -385,6 +385,8 @@
 		8961ABC727B3546E008DD498 /* SelectedTests+ObjC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SelectedTests+ObjC.m"; sourceTree = "<group>"; };
 		89D2C670284D9E18004B108C /* SubclassDetectionSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubclassDetectionSpec.swift; sourceTree = "<group>"; };
 		89D2C674284DA77D004B108C /* SubclassDetection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubclassDetection.swift; sourceTree = "<group>"; };
+		89A7919C28139D0900D99622 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = "<group>"; };
+		89A7919D28139D0900D99622 /* Quick.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; path = Quick.podspec; sourceTree = "<group>"; };
 		8D010A561C11726F00633E2B /* DescribeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DescribeTests.swift; sourceTree = "<group>"; };
 		AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrossReferencingSpecs.swift; sourceTree = "<group>"; };
 		CD1F6502226398F600EBE9D8 /* XCTestObservationCenter+QCKSuspendObservation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "XCTestObservationCenter+QCKSuspendObservation.swift"; sourceTree = "<group>"; };
@@ -763,6 +765,8 @@
 		DAEB6B841943873100289F44 = {
 			isa = PBXGroup;
 			children = (
+				89A7919C28139D0900D99622 /* Package.swift */,
+				89A7919D28139D0900D99622 /* Quick.podspec */,
 				DAEB6B901943873100289F44 /* Quick */,
 				6C3983EE1D1E930D00637469 /* QuickObjectiveC */,
 				DAEB6B9D1943873100289F44 /* QuickTests */,
@@ -1742,7 +1746,6 @@
 				SDKROOT = appletvos;
 				SKIP_INSTALL = YES;
 				TARGETED_DEVICE_FAMILY = 3;
-				TVOS_DEPLOYMENT_TARGET = 9.0;
 			};
 			name = Debug;
 		};
@@ -1778,7 +1781,6 @@
 				SWIFT_COMPILATION_MODE = wholemodule;
 				SWIFT_OPTIMIZATION_LEVEL = "-O";
 				TARGETED_DEVICE_FAMILY = 3;
-				TVOS_DEPLOYMENT_TARGET = 9.0;
 				VALIDATE_PRODUCT = YES;
 			};
 			name = Release;
@@ -1800,7 +1802,6 @@
 				SDKROOT = appletvos;
 				SWIFT_OBJC_BRIDGING_HEADER = Tests/QuickTests/QuickTests/Helpers/QuickTestsBridgingHeader.h;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "QuickTests-Swift.h";
-				TVOS_DEPLOYMENT_TARGET = 9.0;
 			};
 			name = Debug;
 		};
@@ -1823,7 +1824,6 @@
 				SWIFT_OBJC_BRIDGING_HEADER = Tests/QuickTests/QuickTests/Helpers/QuickTestsBridgingHeader.h;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "QuickTests-Swift.h";
 				SWIFT_OPTIMIZATION_LEVEL = "-O";
-				TVOS_DEPLOYMENT_TARGET = 9.0;
 				VALIDATE_PRODUCT = YES;
 			};
 			name = Release;
@@ -1845,7 +1845,6 @@
 				SDKROOT = appletvos;
 				SWIFT_OBJC_BRIDGING_HEADER = Tests/QuickTests/QuickTests/Helpers/QuickTestsBridgingHeader.h;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "QuickFocusedTests-Swift.h";
-				TVOS_DEPLOYMENT_TARGET = 9.0;
 			};
 			name = Debug;
 		};
@@ -1868,7 +1867,6 @@
 				SWIFT_OBJC_BRIDGING_HEADER = Tests/QuickTests/QuickTests/Helpers/QuickTestsBridgingHeader.h;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "QuickFocusedTests-Swift.h";
 				SWIFT_OPTIMIZATION_LEVEL = "-O";
-				TVOS_DEPLOYMENT_TARGET = 9.0;
 				VALIDATE_PRODUCT = YES;
 			};
 			name = Release;
@@ -1889,7 +1887,6 @@
 				);
 				INFOPLIST_FILE = Sources/Quick/Info.plist;
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -1922,7 +1919,6 @@
 				ENABLE_BITCODE = NO;
 				INFOPLIST_FILE = Sources/Quick/Info.plist;
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -1955,7 +1951,6 @@
 					"$(inherited)",
 				);
 				INFOPLIST_FILE = Tests/QuickTests/QuickTests/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -1976,7 +1971,6 @@
 			buildSettings = {
 				CLANG_ENABLE_MODULES = YES;
 				INFOPLIST_FILE = Tests/QuickTests/QuickTests/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -2009,7 +2003,6 @@
 					"@executable_path/../Frameworks",
 					"@loader_path/../Frameworks",
 				);
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
 				MTL_ENABLE_DEBUG_INFO = YES;
 				PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2030,7 +2023,6 @@
 					"@executable_path/../Frameworks",
 					"@loader_path/../Frameworks",
 				);
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
 				MTL_ENABLE_DEBUG_INFO = NO;
 				PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2050,7 +2042,6 @@
 					"$(inherited)",
 				);
 				INFOPLIST_FILE = Tests/QuickTests/QuickAfterSuiteTests/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -2071,7 +2062,6 @@
 			buildSettings = {
 				CLANG_ENABLE_MODULES = YES;
 				INFOPLIST_FILE = Tests/QuickTests/QuickAfterSuiteTests/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -2106,7 +2096,6 @@
 				SDKROOT = appletvos;
 				SWIFT_OBJC_BRIDGING_HEADER = Tests/QuickTests/QuickTests/Helpers/QuickTestsBridgingHeader.h;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "QuickAfterSuiteTests-Swift.h";
-				TVOS_DEPLOYMENT_TARGET = 9.0;
 			};
 			name = Debug;
 		};
@@ -2129,7 +2118,6 @@
 				SWIFT_OBJC_BRIDGING_HEADER = Tests/QuickTests/QuickTests/Helpers/QuickTestsBridgingHeader.h;
 				SWIFT_OBJC_INTERFACE_HEADER_NAME = "QuickAfterSuiteTests-Swift.h";
 				SWIFT_OPTIMIZATION_LEVEL = "-O";
-				TVOS_DEPLOYMENT_TARGET = 9.0;
 				VALIDATE_PRODUCT = YES;
 			};
 			name = Release;
@@ -2163,7 +2151,6 @@
 					"@executable_path/../Frameworks",
 					"@loader_path/../Frameworks",
 				);
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
 				METAL_ENABLE_DEBUG_INFO = YES;
 				PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}";
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2184,7 +2171,6 @@
 					"@executable_path/../Frameworks",
 					"@loader_path/../Frameworks",
 				);
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
 				METAL_ENABLE_DEBUG_INFO = NO;
 				PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}";
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2210,7 +2196,6 @@
 					"@executable_path/../Frameworks",
 					"@loader_path/../Frameworks",
 				);
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
 				MTL_ENABLE_DEBUG_INFO = YES;
 				PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2231,7 +2216,6 @@
 					"@executable_path/../Frameworks",
 					"@loader_path/../Frameworks",
 				);
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
 				MTL_ENABLE_DEBUG_INFO = NO;
 				PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2251,7 +2235,6 @@
 					"$(inherited)",
 				);
 				INFOPLIST_FILE = Tests/QuickTests/QuickFocusedTests/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -2272,7 +2255,6 @@
 			buildSettings = {
 				CLANG_ENABLE_MODULES = YES;
 				INFOPLIST_FILE = Tests/QuickTests/QuickFocusedTests/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
@@ -2342,15 +2324,18 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
+				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+				MACOSX_DEPLOYMENT_TARGET = 10.15;
 				METAL_ENABLE_DEBUG_INFO = YES;
 				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = macosx;
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 				SWIFT_SWIFT3_OBJC_INFERENCE = Off;
 				SWIFT_VERSION = 5.0;
+				TVOS_DEPLOYMENT_TARGET = 13.0;
 				VERSIONING_SYSTEM = "apple-generic";
 				VERSION_INFO_PREFIX = "";
+				WATCHOS_DEPLOYMENT_TARGET = 6.0;
 			};
 			name = Debug;
 		};
@@ -2400,14 +2385,17 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
+				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+				MACOSX_DEPLOYMENT_TARGET = 10.15;
 				METAL_ENABLE_DEBUG_INFO = NO;
 				SDKROOT = macosx;
 				SWIFT_COMPILATION_MODE = wholemodule;
 				SWIFT_SWIFT3_OBJC_INFERENCE = Off;
 				SWIFT_VERSION = 5.0;
+				TVOS_DEPLOYMENT_TARGET = 13.0;
 				VERSIONING_SYSTEM = "apple-generic";
 				VERSION_INFO_PREFIX = "";
+				WATCHOS_DEPLOYMENT_TARGET = 6.0;
 			};
 			name = Release;
 		};
@@ -2429,7 +2417,6 @@
 					"@executable_path/../Frameworks",
 					"@loader_path/../Frameworks",
 				);
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
 				OTHER_LDFLAGS = (
 					"$(inherited)",
 					"-Xlinker",
@@ -2461,7 +2448,6 @@
 					"@executable_path/../Frameworks",
 					"@loader_path/../Frameworks",
 				);
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
 				OTHER_LDFLAGS = (
 					"$(inherited)",
 					"-Xlinker",
@@ -2492,7 +2478,6 @@
 					"@executable_path/../Frameworks",
 					"@loader_path/../Frameworks",
 				);
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
 				METAL_ENABLE_DEBUG_INFO = YES;
 				PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}";
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2513,7 +2498,6 @@
 					"@executable_path/../Frameworks",
 					"@loader_path/../Frameworks",
 				);
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
 				METAL_ENABLE_DEBUG_INFO = NO;
 				PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}";
 				PRODUCT_NAME = "$(TARGET_NAME)";
diff --git a/Sources/Quick/Example.swift b/Sources/Quick/Example.swift
index f30badf0a..9e88db642 100644
--- a/Sources/Quick/Example.swift
+++ b/Sources/Quick/Example.swift
@@ -164,11 +164,6 @@ final public class Example: _ExampleBase {
                 return
             }
 
-            if isLegacyXcode(testRun: testRun) {
-                reportSkippedTest_legacy(testRun: testRun, skippedTestContext: skippedTestContext)
-                return
-            }
-
             guard let sourceCodeContextAny = skippedTestContext.value(forKey: "sourceCodeContext") else {
                 print("""
                 [Quick Warning]: The internals of Apple's XCTestCaseRun have changed.
@@ -198,45 +193,6 @@ final public class Example: _ExampleBase {
         #endif
     }
 
-    #if canImport(Darwin)
-    private func isLegacyXcode(testRun: XCTestRun) -> Bool {
-        !testRun.responds(to: Self.recordSkipSelector)
-    }
-
-    /// Attempt to report a test skip for old Xcode versions (namely Xcode 12.4).
-    ///
-    /// As of Xcode 12.4, the `XCTSkippedTestContext` object contained these fields:
-    /// - `filePath: NSString`
-    /// - `lineNumber: NSString`
-    ///
-    /// After Xcode 12.4, those fields were extracted into a new `sourceCodeContext: XCTSkippedTestContext` property.
-    /// - Parameters:
-    ///   - testRun: The test run that was skipped
-    ///   - skippedTestContext: an `XCTSkippedTestContext` object
-    private func reportSkippedTest_legacy(testRun: XCTestRun, skippedTestContext: NSObject) {
-        let legacyRecordSkipSelector = NSSelectorFromString("recordSkipWithDescription:inFile:atLine:")
-
-        guard let imp = testRun.method(for: legacyRecordSkipSelector),
-              let description = skippedTestContext.value(forKey: "message") as? NSString,
-              let filePath = skippedTestContext.value(forKey: "filePath") as? NSString,
-              let lineNumber = skippedTestContext.value(forKey: "lineNumber") as? UInt32 else {
-            return
-        }
-
-        typealias MethodSigniture = @convention(c) (NSObject, Selector, NSString, NSString, UInt32) -> Void
-
-        let methodImp = unsafeBitCast(imp, to: MethodSigniture.self)
-
-        methodImp(
-            /* self */ testRun,
-            /* selector */ legacyRecordSkipSelector,
-            /* recordSkipWithDescription: */ description,
-            /* inFile: */ filePath,
-            /* atLine: */ lineNumber
-        )
-    }
-    #endif
-
     private func reportFailedTest(_ error: Error, name: String, callsite: Callsite) {
         let description = "Test \(name) threw unexpected error: \(error.localizedDescription)"
 


Test patch:
diff --git a/Tests/LinuxMain.swift b/Tests/LinuxMain.swift
index 43706fcee..59e4981ea 100644
--- a/Tests/LinuxMain.swift
+++ b/Tests/LinuxMain.swift
@@ -3,45 +3,48 @@ import Quick
 
 @testable import QuickTests
 
-Quick.QCKMain([
-    AfterSuiteTests.self,
-    Configuration_AfterEachSpec.self,
-    Configuration_BeforeEachSpec.self,
-    CurrentSpecTests.self,
-    FunctionalTests_AfterEachSpec.self,
-    FunctionalTests_BeforeEachSpec.self,
-    FunctionalTests_BeforeSuite_BeforeSuiteSpec.self,
-    FunctionalTests_BeforeSuite_Spec.self,
-    FunctionalTests_ItSpec.self,
-    FunctionalTests_PendingSpec.self,
-    FunctionalTests_CrossReferencingSpecA.self,
-    FunctionalTests_CrossReferencingSpecB.self,
-    FunctionalTests_SharedExamples_BeforeEachSpec.self,
-    FunctionalTests_SharedExamples_ContextSpec.self,
-    FunctionalTests_SharedExamples_Spec.self,
-    _FunctionalTests_FocusedSpec_Focused.self,
-    _FunctionalTests_FocusedSpec_Unfocused.self,
-],
-configurations: [
-    FunctionalTests_Configuration_AfterEach.self,
-    FunctionalTests_Configuration_BeforeEach.self,
-    FunctionalTests_FocusedSpec_SharedExamplesConfiguration.self,
-    FunctionalTests_SharedExamples_BeforeEachTests_SharedExamples.self,
-    FunctionalTests_SharedExamplesTests_SharedExamples.self,
-],
-testCases: [
-    testCase(AfterEachTests.allTests),
-    testCase(BeforeEachTests.allTests),
-    testCase(BeforeSuiteTests.allTests),
-    testCase(BehaviorTests.allTests),
-    testCase(Configuration_AfterEachTests.allTests),
-    testCase(Configuration_BeforeEachTests.allTests),
-    // testCase(DescribeTests.allTests),
-    testCase(FocusedTests.allTests),
-    testCase(FunctionalTests_CrossReferencingSpecA.allTests),
-    testCase(FunctionalTests_CrossReferencingSpecB.allTests),
-    testCase(ItTests.allTests),
-    testCase(PendingTests.allTests),
-    testCase(SharedExamples_BeforeEachTests.allTests),
-    testCase(SharedExamplesTests.allTests),
-])
+@main struct Main {
+    static func main() {
+        Quick.QCKMain([
+            AfterSuiteTests.self,
+            Configuration_AfterEachSpec.self,
+            Configuration_BeforeEachSpec.self,
+            CurrentSpecTests.self,
+            FunctionalTests_AfterEachSpec.self,
+            FunctionalTests_BeforeEachSpec.self,
+            FunctionalTests_BeforeSuite_BeforeSuiteSpec.self,
+            FunctionalTests_BeforeSuite_Spec.self,
+            FunctionalTests_ItSpec.self,
+            FunctionalTests_PendingSpec.self,
+            FunctionalTests_CrossReferencingSpecA.self,
+            FunctionalTests_CrossReferencingSpecB.self,
+            FunctionalTests_SharedExamples_BeforeEachSpec.self,
+            FunctionalTests_SharedExamples_ContextSpec.self,
+            FunctionalTests_SharedExamples_Spec.self,
+            _FunctionalTests_FocusedSpec_Focused.self,
+            _FunctionalTests_FocusedSpec_Unfocused.self,
+        ],
+        configurations: [
+            FunctionalTests_Configuration_AfterEach.self,
+            FunctionalTests_Configuration_BeforeEach.self,
+            FunctionalTests_FocusedSpec_SharedExamplesConfiguration.self,
+            FunctionalTests_SharedExamples_BeforeEachTests_SharedExamples.self,
+            FunctionalTests_SharedExamplesTests_SharedExamples.self,
+        ],
+        testCases: [
+            testCase(AfterEachTests.allTests),
+            testCase(BeforeEachTests.allTests),
+            testCase(BeforeSuiteTests.allTests),
+            testCase(BehaviorTests.allTests),
+            testCase(Configuration_AfterEachTests.allTests),
+            testCase(Configuration_BeforeEachTests.allTests),
+            testCase(FocusedTests.allTests),
+            testCase(FunctionalTests_CrossReferencingSpecA.allTests),
+            testCase(FunctionalTests_CrossReferencingSpecB.allTests),
+            testCase(ItTests.allTests),
+            testCase(PendingTests.allTests),
+            testCase(SharedExamples_BeforeEachTests.allTests),
+            testCase(SharedExamplesTests.allTests),
+        ])
+    }
+}
diff --git a/Tests/QuickTests/QuickTests/FunctionalTests/ObjC/SelectedTests+ObjC.m b/Tests/QuickTests/QuickTests/FunctionalTests/ObjC/SelectedTests+ObjC.m
index 4f58052be..6df8a5def 100644
--- a/Tests/QuickTests/QuickTests/FunctionalTests/ObjC/SelectedTests+ObjC.m
+++ b/Tests/QuickTests/QuickTests/FunctionalTests/ObjC/SelectedTests+ObjC.m
@@ -33,7 +33,7 @@ - (instancetype)initWithComponents:(NSArray *)components {
 // Invoking private methods in Swift is incredibly janky
 // this functionality is tested in Objective-C.
 
-QuickSpecBegin(FunctionalTests_SelectedTests_Xcode12_5_ObjC)
+QuickSpecBegin(FunctionalTests_SelectedTests_ObjC)
 
 beforeEach(^{
     [QuickTestSuite reset];