diff --git a/Sources/XCTest/Private/PerformanceMeter.swift b/Sources/XCTest/Private/PerformanceMeter.swift
index fa33d88..a44144a 100644
--- a/Sources/XCTest/Private/PerformanceMeter.swift
+++ b/Sources/XCTest/Private/PerformanceMeter.swift
@@ -40,7 +40,7 @@
     ///   as average, and standard deviation
     /// - Parameter file: The source file name where the measurement was invoked
     /// - Parameter line: The source line number where the measurement was invoked
-    func recordMeasurements(results: String, file: StaticString, line: UInt)
+    func recordMeasurements(results: String, file: StaticString, line: Int)
 
     /// Reports a test failure from the analysis of performance measurements.
     /// This can currently be caused by an unexpectedly large standard deviation
@@ -48,14 +48,14 @@
     /// - Parameter description: An explanation of the failure
     /// - Parameter file: The source file name where the measurement was invoked
     /// - Parameter line: The source line number where the measurement was invoked
-    func recordFailure(description: String, file: StaticString, line: UInt)
+    func recordFailure(description: String, file: StaticString, line: Int)
 
     /// Reports a misuse of the `PerformanceMeter` API, such as calling `
     /// startMeasuring` multiple times.
     /// - Parameter description: An explanation of the misuse
     /// - Parameter file: The source file name where the misuse occurred
     /// - Parameter line: The source line number where the misuse occurred
-    func recordAPIViolation(description: String, file: StaticString, line: UInt)
+    func recordAPIViolation(description: String, file: StaticString, line: Int)
 }
 
 /// - Bug: This class is intended to be `internal` but is public to work around
@@ -97,16 +97,16 @@
     private let metrics: [PerformanceMetric]
     private let delegate: PerformanceMeterDelegate
     private let invocationFile: StaticString
-    private let invocationLine: UInt
+    private let invocationLine: Int
 
-    private init(metrics: [PerformanceMetric], delegate: PerformanceMeterDelegate, file: StaticString, line: UInt) {
+    private init(metrics: [PerformanceMetric], delegate: PerformanceMeterDelegate, file: StaticString, line: Int) {
         self.metrics = metrics
         self.delegate = delegate
         self.invocationFile = file
         self.invocationLine = line
     }
 
-    static func measureMetrics(_ metricNames: [String], delegate: PerformanceMeterDelegate, file: StaticString = #file, line: UInt = #line, for block: (PerformanceMeter) -> Void) {
+    static func measureMetrics(_ metricNames: [String], delegate: PerformanceMeterDelegate, file: StaticString = #file, line: Int = #line, for block: (PerformanceMeter) -> Void) {
         do {
             let metrics = try self.metrics(forNames: metricNames)
             let meter = PerformanceMeter(metrics: metrics, delegate: delegate, file: file, line: line)
@@ -116,7 +116,7 @@
         }
     }
 
-    func startMeasuring(file: StaticString = #file, line: UInt = #line) {
+    func startMeasuring(file: StaticString = #file, line: Int = #line) {
         guard state == .iterationUnstarted else {
             return recordAPIViolation(.startMeasuringAlreadyCalled, file: file, line: line)
         }
@@ -124,7 +124,7 @@
         metrics.forEach { $0.startMeasuring() }
     }
 
-    func stopMeasuring(file: StaticString = #file, line: UInt = #line) {
+    func stopMeasuring(file: StaticString = #file, line: Int = #line) {
         guard state != .iterationUnstarted else {
             return recordAPIViolation(.stopBeforeStarting, file: file, line: line)
         }
@@ -195,7 +195,7 @@
         }
     }
 
-    private func recordAPIViolation(_ error: Error, file: StaticString, line: UInt) {
+    private func recordAPIViolation(_ error: Error, file: StaticString, line: Int) {
         state = .measurementAborted
         delegate.recordAPIViolation(description: String(describing: error), file: file, line: line)
     }
diff --git a/Sources/XCTest/Private/PrintObserver.swift b/Sources/XCTest/Private/PrintObserver.swift
index 57ba1aa..ed1eed7 100644
--- a/Sources/XCTest/Private/PrintObserver.swift
+++ b/Sources/XCTest/Private/PrintObserver.swift
@@ -24,7 +24,7 @@
         printAndFlush("Test Case '\(testCase.name)' started at \(dateFormatter.string(from: testCase.testRun!.startDate!))")
     }
 
-    func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: UInt) {
+    func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {
         let file = filePath ?? "<unknown>"
         printAndFlush("\(file):\(lineNumber): error: \(testCase.name) : \(description)")
     }
@@ -68,7 +68,7 @@
 }
 
 extension PrintObserver: XCTestInternalObservation {
-    func testCase(_ testCase: XCTestCase, didMeasurePerformanceResults results: String, file: StaticString, line: UInt) {
+    func testCase(_ testCase: XCTestCase, didMeasurePerformanceResults results: String, file: StaticString, line: Int) {
         printAndFlush("\(file):\(line): Test Case '\(testCase.name)' measured \(results)")
     }
 }
diff --git a/Sources/XCTest/Private/XCPredicateExpectation.swift b/Sources/XCTest/Private/XCPredicateExpectation.swift
index 5107023..e396e3d 100644
--- a/Sources/XCTest/Private/XCPredicateExpectation.swift
+++ b/Sources/XCTest/Private/XCPredicateExpectation.swift
@@ -18,7 +18,7 @@
     internal let handler: XCPredicateExpectationHandler?
     private let evaluationInterval = 0.01
     
-    internal init(predicate: NSPredicate, object: AnyObject, description: String, file: StaticString, line: UInt, testCase: XCTestCase, handler: XCPredicateExpectationHandler? = nil) {
+    internal init(predicate: NSPredicate, object: AnyObject, description: String, file: StaticString, line: Int, testCase: XCTestCase, handler: XCPredicateExpectationHandler? = nil) {
         self.predicate = predicate
         self.object = object
         self.handler = handler
diff --git a/Sources/XCTest/Private/XCTestInternalObservation.swift b/Sources/XCTest/Private/XCTestInternalObservation.swift
index 73d424a..47e8abc 100644
--- a/Sources/XCTest/Private/XCTestInternalObservation.swift
+++ b/Sources/XCTest/Private/XCTestInternalObservation.swift
@@ -23,10 +23,10 @@
     ///   reported, if available.
     /// - Parameter line: The line number in the source file where the failure
     ///   was reported.
-    func testCase(_ testCase: XCTestCase, didMeasurePerformanceResults results: String, file: StaticString, line: UInt)
+    func testCase(_ testCase: XCTestCase, didMeasurePerformanceResults results: String, file: StaticString, line: Int)
 }
 
 // All `XCInternalTestObservation` methods are optional, so empty default implementations are provided
 internal extension XCTestInternalObservation {
-    func testCase(_ testCase: XCTestCase, didMeasurePerformanceResults results: String, file: StaticString, line: UInt) {}
+    func testCase(_ testCase: XCTestCase, didMeasurePerformanceResults results: String, file: StaticString, line: Int) {}
 }
diff --git a/Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift b/Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift
index 0ad03e0..0b33b0f 100644
--- a/Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift
+++ b/Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift
@@ -33,7 +33,7 @@
     ///   between these environments. To ensure compatibility of tests between
     ///   swift-corelibs-xctest and Apple XCTest, it is not recommended to pass
     ///   explicit values for `file` and `line`.
-    @discardableResult func expectation(description: String, file: StaticString = #file, line: UInt = #line) -> XCTestExpectation {
+    @discardableResult func expectation(description: String, file: StaticString = #file, line: Int = #line) -> XCTestExpectation {
         let expectation = XCTestExpectation(
             description: description,
             file: file,
@@ -68,7 +68,7 @@
     ///   these environments. To ensure compatibility of tests between
     ///   swift-corelibs-xctest and Apple XCTest, it is not recommended to pass
     ///   explicit values for `file` and `line`.
-    func waitForExpectations(timeout: TimeInterval, file: StaticString = #file, line: UInt = #line, handler: XCWaitCompletionHandler? = nil) {
+    func waitForExpectations(timeout: TimeInterval, file: StaticString = #file, line: Int = #line, handler: XCWaitCompletionHandler? = nil) {
         // Mirror Objective-C XCTest behavior; display an unexpected test
         // failure when users wait without having first set expectations.
         // FIXME: Objective-C XCTest raises an exception for most "API
@@ -139,7 +139,7 @@
                 // If the test failed, send an error object.
                 error = NSError(
                     domain: XCTestErrorDomain,
-                    code: XCTestErrorCode.timeoutWhileWaiting.rawValue,
+                    code: XCTestError.Code.timeoutWhileWaiting.rawValue,
                     userInfo: [:])
             }
             completionHandler(error)
diff --git a/Sources/XCTest/Public/Asynchronous/XCTestCase+PredicateExpectation.swift b/Sources/XCTest/Public/Asynchronous/XCTestCase+PredicateExpectation.swift
index 792f4ec..bebf316 100644
--- a/Sources/XCTest/Public/Asynchronous/XCTestCase+PredicateExpectation.swift
+++ b/Sources/XCTest/Public/Asynchronous/XCTestCase+PredicateExpectation.swift
@@ -33,7 +33,7 @@
     ///   first successful evaluation will fulfill the expectation. If provided,
     ///   the handler can override that behavior which leaves the caller
     ///   responsible for fulfilling the expectation.
-    @discardableResult func expectation(for predicate: NSPredicate, evaluatedWith object: AnyObject, file: StaticString = #file, line: UInt = #line, handler: XCPredicateExpectationHandler? = nil) -> XCTestExpectation {
+    @discardableResult func expectation(for predicate: NSPredicate, evaluatedWith object: AnyObject, file: StaticString = #file, line: Int = #line, handler: XCPredicateExpectationHandler? = nil) -> XCTestExpectation {
         let expectation = XCPredicateExpectation(
             predicate: predicate,
             object: object,
diff --git a/Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift b/Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift
index e5900f2..e6e62ae 100644
--- a/Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift
+++ b/Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift
@@ -15,12 +15,12 @@
 public class XCTestExpectation {
     internal let description: String
     internal let file: StaticString
-    internal let line: UInt
+    internal let line: Int
 
     internal var isFulfilled = false
     internal weak var testCase: XCTestCase?
 
-    internal init(description: String, file: StaticString, line: UInt, testCase: XCTestCase) {
+    internal init(description: String, file: StaticString, line: Int, testCase: XCTestCase) {
         self.description = description
         self.file = file
         self.line = line
@@ -47,7 +47,7 @@
     ///   between these environments. To ensure compatibility of tests between
     ///   swift-corelibs-xctest and Apple XCTest, it is not recommended to pass
     ///   explicit values for `file` and `line`.
-    public func fulfill(_ file: StaticString = #file, line: UInt = #line) {
+    public func fulfill(_ file: StaticString = #file, line: Int = #line) {
         // FIXME: Objective-C XCTest emits failures when expectations are
         //        fulfilled after the test cases that generated those
         //        expectations have completed. Similarly, this should cause an
diff --git a/Sources/XCTest/Public/XCAbstractTest.swift b/Sources/XCTest/Public/XCAbstractTest.swift
index 6f3e214..464365c 100644
--- a/Sources/XCTest/Public/XCAbstractTest.swift
+++ b/Sources/XCTest/Public/XCAbstractTest.swift
@@ -22,7 +22,7 @@
     }
 
     /// Number of test cases. Must be overridden by subclasses.
-    open var testCaseCount: UInt {
+    open var testCaseCount: Int {
         fatalError("Must be overridden by subclasses.")
     }
 
diff --git a/Sources/XCTest/Public/XCTAssert.swift b/Sources/XCTest/Public/XCTAssert.swift
index dff871a..dd94dd8 100644
--- a/Sources/XCTest/Public/XCTAssert.swift
+++ b/Sources/XCTest/Public/XCTAssert.swift
@@ -93,7 +93,7 @@
             currentTestCase.recordFailure(
                 withDescription: "\(result.failureDescription(assertion)) - \(message())",
                 inFile: String(describing: file),
-                atLine: line,
+                atLine: Int(line),
                 expected: result.isExpected)
         }
     }
diff --git a/Sources/XCTest/Public/XCTestCase+Performance.swift b/Sources/XCTest/Public/XCTestCase+Performance.swift
index 5b9548a..28b736c 100644
--- a/Sources/XCTest/Public/XCTestCase+Performance.swift
+++ b/Sources/XCTest/Public/XCTestCase+Performance.swift
@@ -11,8 +11,30 @@
 //  Methods on XCTestCase for testing the performance of code blocks.
 //
 
-/// Records wall clock time in seconds between `startMeasuring`/`stopMeasuring`.
-public let XCTPerformanceMetric_WallClockTime = WallClockTimeMetric.name
+public struct XCTPerformanceMetric : RawRepresentable, Equatable, Hashable {
+    public private(set) var rawValue: String
+
+    public init(_ rawValue: String) {
+        self.rawValue = rawValue
+    }
+
+    public init(rawValue: String) {
+        self.rawValue = rawValue
+    }
+
+    public var hashValue: Int {
+        return rawValue.hashValue
+    }
+
+    public static func ==(_ lhs: XCTPerformanceMetric, _ rhs: XCTPerformanceMetric) -> Bool {
+        return lhs.rawValue == rhs.rawValue
+    }
+}
+
+public extension XCTPerformanceMetric {
+    /// Records wall clock time in seconds between `startMeasuring`/`stopMeasuring`.
+    public static let wallClockTime = XCTPerformanceMetric(rawValue: WallClockTimeMetric.name)
+}
 
 /// The following methods are called from within a test method to carry out 
 /// performance testing on blocks of code.
@@ -21,11 +43,11 @@
     /// The names of the performance metrics to measure when invoking `measure(block:)`. 
     /// Returns `XCTPerformanceMetric_WallClockTime` by default. Subclasses can
     /// override this to change the behavior of `measure(block:)`
-    class func defaultPerformanceMetrics() -> [String] {
-        return [XCTPerformanceMetric_WallClockTime]
+    class var defaultPerformanceMetrics: [XCTPerformanceMetric] {
+        return [.wallClockTime]
     }
 
-    /// Call from a test method to measure resources (`defaultPerformanceMetrics()`)
+    /// Call from a test method to measure resources (`defaultPerformanceMetrics`)
     /// used by the block in the current process.
     ///
     ///     func testPerformanceOfMyFunction() {
@@ -49,8 +71,8 @@
     ///   these methods are not exactly identical between these environments. To 
     ///   ensure compatibility of tests between swift-corelibs-xctest and Apple
     ///   XCTest, it is not recommended to pass explicit values for `file` and `line`.
-    func measure(file: StaticString = #file, line: UInt = #line, block: () -> Void) {
-        measureMetrics(type(of: self).defaultPerformanceMetrics(),
+    func measure(file: StaticString = #file, line: Int = #line, block: () -> Void) {
+        measureMetrics(type(of: self).defaultPerformanceMetrics,
                        automaticallyStartMeasuring: true,
                        file: file,
                        line: line,
@@ -66,7 +88,7 @@
     /// may interfere the API will measure them separately.
     ///
     ///     func testMyFunction2_WallClockTime() {
-    ///         measureMetrics(type(of: self).defaultPerformanceMetrics(), automaticallyStartMeasuring: false) {
+    ///         measureMetrics(type(of: self).defaultPerformanceMetrics, automaticallyStartMeasuring: false) {
     ///
     ///             // Do setup work that needs to be done for every iteration but
     ///             // you don't want to measure before the call to `startMeasuring()`
@@ -103,12 +125,12 @@
     ///   these methods are not exactly identical between these environments. To
     ///   ensure compatibility of tests between swift-corelibs-xctest and Apple
     ///   XCTest, it is not recommended to pass explicit values for `file` and `line`.
-    func measureMetrics(_ metrics: [String], automaticallyStartMeasuring: Bool, file: StaticString = #file, line: UInt = #line, for block: () -> Void) {
+    func measureMetrics(_ metrics: [XCTPerformanceMetric], automaticallyStartMeasuring: Bool, file: StaticString = #file, line: Int = #line, for block: () -> Void) {
         guard _performanceMeter == nil else {
             return recordAPIViolation(description: "Can only record one set of metrics per test method.", file: file, line: line)
         }
 
-        PerformanceMeter.measureMetrics(metrics, delegate: self, file: file, line: line) { meter in
+        PerformanceMeter.measureMetrics(metrics.map({ $0.rawValue }), delegate: self, file: file, line: line) { meter in
             self._performanceMeter = meter
             if automaticallyStartMeasuring {
                 meter.startMeasuring(file: file, line: line)
@@ -125,7 +147,7 @@
     ///   these methods are not exactly identical between these environments. To
     ///   ensure compatibility of tests between swift-corelibs-xctest and Apple
     ///   XCTest, it is not recommended to pass explicit values for `file` and `line`.
-    func startMeasuring(file: StaticString = #file, line: UInt = #line) {
+    func startMeasuring(file: StaticString = #file, line: Int = #line) {
         guard let performanceMeter = _performanceMeter, !performanceMeter.didFinishMeasuring else {
             return recordAPIViolation(description: "Cannot start measuring. startMeasuring() is only supported from a block passed to measureMetrics(...).", file: file, line: line)
         }
@@ -140,7 +162,7 @@
     ///   these methods are not exactly identical between these environments. To
     ///   ensure compatibility of tests between swift-corelibs-xctest and Apple
     ///   XCTest, it is not recommended to pass explicit values for `file` and `line`.
-    func stopMeasuring(file: StaticString = #file, line: UInt = #line) {
+    func stopMeasuring(file: StaticString = #file, line: Int = #line) {
         guard let performanceMeter = _performanceMeter, !performanceMeter.didFinishMeasuring else {
             return recordAPIViolation(description: "Cannot stop measuring. stopMeasuring() is only supported from a block passed to measureMetrics(...).", file: file, line: line)
         }
@@ -149,18 +171,18 @@
 }
 
 extension XCTestCase: PerformanceMeterDelegate {
-    internal func recordAPIViolation(description: String, file: StaticString, line: UInt) {
+    internal func recordAPIViolation(description: String, file: StaticString, line: Int) {
         recordFailure(withDescription: "API violation - \(description)",
                       inFile: String(describing: file),
                       atLine: line,
                       expected: false)
     }
 
-    internal func recordMeasurements(results: String, file: StaticString, line: UInt) {
-        XCTestObservationCenter.shared().testCase(self, didMeasurePerformanceResults: results, file: file, line: line)
+    internal func recordMeasurements(results: String, file: StaticString, line: Int) {
+        XCTestObservationCenter.shared.testCase(self, didMeasurePerformanceResults: results, file: file, line: line)
     }
 
-    internal func recordFailure(description: String, file: StaticString, line: UInt) {
+    internal func recordFailure(description: String, file: StaticString, line: Int) {
         recordFailure(withDescription: "failed: " + description, inFile: String(describing: file), atLine: line, expected: true)
     }
 }
diff --git a/Sources/XCTest/Public/XCTestCase.swift b/Sources/XCTest/Public/XCTestCase.swift
index be80477..c6fc19b 100644
--- a/Sources/XCTest/Public/XCTestCase.swift
+++ b/Sources/XCTest/Public/XCTestCase.swift
@@ -37,7 +37,7 @@
     /// A private setter for the name of this test case.
     private var _name: String
 
-    open override var testCaseCount: UInt {
+    open override var testCaseCount: Int {
         return 1
     }
 
@@ -99,7 +99,7 @@
     /// - Parameter expected: `true` if the failure being reported was the
     ///   result of a failed assertion, `false` if it was the result of an
     ///   uncaught exception.
-    open func recordFailure(withDescription description: String, inFile filePath: String, atLine lineNumber: UInt, expected: Bool) {
+    open func recordFailure(withDescription description: String, inFile filePath: String, atLine lineNumber: Int, expected: Bool) {
         testRun?.recordFailure(
             withDescription: description,
             inFile: filePath,
diff --git a/Sources/XCTest/Public/XCTestCaseRun.swift b/Sources/XCTest/Public/XCTestCaseRun.swift
index 19cb6d8..14f2b53 100644
--- a/Sources/XCTest/Public/XCTestCaseRun.swift
+++ b/Sources/XCTest/Public/XCTestCaseRun.swift
@@ -15,21 +15,21 @@
 open class XCTestCaseRun: XCTestRun {
     open override func start() {
         super.start()
-        XCTestObservationCenter.shared().testCaseWillStart(testCase)
+        XCTestObservationCenter.shared.testCaseWillStart(testCase)
     }
 
     open override func stop() {
         super.stop()
-        XCTestObservationCenter.shared().testCaseDidFinish(testCase)
+        XCTestObservationCenter.shared.testCaseDidFinish(testCase)
     }
 
-    open override func recordFailure(withDescription description: String, inFile filePath: String?, atLine lineNumber: UInt, expected: Bool) {
+    open override func recordFailure(withDescription description: String, inFile filePath: String?, atLine lineNumber: Int, expected: Bool) {
         super.recordFailure(
             withDescription: "\(test.name) : \(description)",
             inFile: filePath,
             atLine: lineNumber,
             expected: expected)
-        XCTestObservationCenter.shared().testCase(
+        XCTestObservationCenter.shared.testCase(
             testCase,
             didFailWithDescription: description,
             inFile: filePath,
diff --git a/Sources/XCTest/Public/XCTestErrors.swift b/Sources/XCTest/Public/XCTestErrors.swift
index e4b7a94..18014a4 100644
--- a/Sources/XCTest/Public/XCTestErrors.swift
+++ b/Sources/XCTest/Public/XCTestErrors.swift
@@ -14,14 +14,32 @@
 /// The domain used by errors produced by the XCTest library.
 public let XCTestErrorDomain = "org.swift.XCTestErrorDomain"
 
-/// Error codes for errors in the XCTestErrorDomain.
-public enum XCTestErrorCode : Int {
+/// Describes an error in the XCTestErrorDomain.
+public struct XCTestError : _BridgedStoredNSError {
+    public let _nsError: NSError
+
+    public init(_nsError error: NSError) {
+        precondition(error.domain == XCTestErrorDomain)
+        self._nsError = error
+    }
+
+    public static var _nsErrorDomain: String { return XCTestErrorDomain }
+
+    public enum Code : Int, _ErrorCodeProtocol {
+        public typealias _ErrorType = XCTestError
+
+        case timeoutWhileWaiting
+        case failureWhileWaiting
+    }
+}
+
+public extension XCTestError {
     /// Indicates that one or more expectations failed to be fulfilled in time
     /// during a call to `waitForExpectations(timeout:handler:)`
-    case timeoutWhileWaiting
+    public static var timeoutWhileWaiting: XCTestError.Code { return .timeoutWhileWaiting }
 
     /// Indicates that a test assertion failed while waiting for expectations
     /// during a call to `waitForExpectations(timeout:handler:)`
     /// FIXME: swift-corelibs-xctest does not currently produce this error code.
-    case failureWhileWaiting
+    public static var failureWhileWaiting: XCTestError.Code { return .failureWhileWaiting }
 }
diff --git a/Sources/XCTest/Public/XCTestMain.swift b/Sources/XCTest/Public/XCTestMain.swift
index fcf4c44..e21cf40 100644
--- a/Sources/XCTest/Public/XCTestMain.swift
+++ b/Sources/XCTest/Public/XCTestMain.swift
@@ -89,7 +89,7 @@
         exit(0)
     case .run(selectedTestName: _):
         // Add a test observer that prints test progress to stdout.
-        let observationCenter = XCTestObservationCenter.shared()
+        let observationCenter = XCTestObservationCenter.shared
         observationCenter.addTestObserver(PrintObserver())
 
         observationCenter.testBundleWillStart(testBundle)
diff --git a/Sources/XCTest/Public/XCTestObservation.swift b/Sources/XCTest/Public/XCTestObservation.swift
index 834467d..7ee907e 100644
--- a/Sources/XCTest/Public/XCTestObservation.swift
+++ b/Sources/XCTest/Public/XCTestObservation.swift
@@ -39,7 +39,7 @@
     ///   was reported, if available.
     /// - Parameter lineNumber: The line number in the source file where the
     ///   failure was reported.
-    func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: UInt)
+    func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int)
 
     /// Called just after a test finishes executing.
     /// - Parameter testCase: The test case that finished. Its `name` property 
@@ -66,7 +66,7 @@
     func testBundleWillStart(_ testBundle: Bundle) {}
     func testSuiteWillStart(_ testSuite: XCTestSuite) {}
     func testCaseWillStart(_ testCase: XCTestCase) {}
-    func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: UInt) {}
+    func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {}
     func testCaseDidFinish(_ testCase: XCTestCase) {}
     func testSuiteDidFinish(_ testSuite: XCTestSuite) {}
     func testBundleDidFinish(_ testBundle: Bundle) {}
diff --git a/Sources/XCTest/Public/XCTestObservationCenter.swift b/Sources/XCTest/Public/XCTestObservationCenter.swift
index 5694dc9..27d83de 100644
--- a/Sources/XCTest/Public/XCTestObservationCenter.swift
+++ b/Sources/XCTest/Public/XCTestObservationCenter.swift
@@ -11,18 +11,19 @@
 //  Notification center for test run progress events.
 //
 
+private let _sharedCenter: XCTestObservationCenter = XCTestObservationCenter()
+
 /// Provides a registry for objects wishing to be informed about progress
 /// during the course of a test run. Observers must implement the
 /// `XCTestObservation` protocol
 /// - seealso: `XCTestObservation`
 public class XCTestObservationCenter {
 
-    private static var center = XCTestObservationCenter()
     private var observers = Set<ObjectWrapper<XCTestObservation>>()
 
     /// Registration should be performed on this shared instance
-    public class func shared() -> XCTestObservationCenter {
-        return center
+    public class var shared: XCTestObservationCenter {
+        return _sharedCenter
     }
 
     /// Register an observer to receive future events during a test run. The order
@@ -49,7 +50,7 @@
         forEachObserver { $0.testCaseWillStart(testCase) }
     }
 
-    internal func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: UInt) {
+    internal func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {
         forEachObserver { $0.testCase(testCase, didFailWithDescription: description, inFile: filePath, atLine: lineNumber) }
     }
 
@@ -65,7 +66,7 @@
         forEachObserver { $0.testBundleDidFinish(testBundle) }
     }
 
-    internal func testCase(_ testCase: XCTestCase, didMeasurePerformanceResults results: String, file: StaticString, line: UInt) {
+    internal func testCase(_ testCase: XCTestCase, didMeasurePerformanceResults results: String, file: StaticString, line: Int) {
         forEachInternalObserver { $0.testCase(testCase, didMeasurePerformanceResults: results, file: file, line: line) }
     }
 
diff --git a/Sources/XCTest/Public/XCTestRun.swift b/Sources/XCTest/Public/XCTestRun.swift
index 824d6c2..1bb6bad 100644
--- a/Sources/XCTest/Public/XCTestRun.swift
+++ b/Sources/XCTest/Public/XCTestRun.swift
@@ -42,22 +42,22 @@
     }
 
     /// The number of tests in the run.
-    open var testCaseCount: UInt {
+    open var testCaseCount: Int {
         return test.testCaseCount
     }
 
     /// The number of test executions recorded during the run.
-    open private(set) var executionCount: UInt = 0
+    open private(set) var executionCount: Int = 0
 
     /// The number of test failures recorded during the run.
-    open private(set) var failureCount: UInt = 0
+    open private(set) var failureCount: Int = 0
 
     /// The number of uncaught exceptions recorded during the run.
-    open private(set) var unexpectedExceptionCount: UInt = 0
+    open private(set) var unexpectedExceptionCount: Int = 0
 
     /// The total number of test failures and uncaught exceptions recorded
     /// during the run.
-    open var totalFailureCount: UInt {
+    open var totalFailureCount: Int {
         return failureCount + unexpectedExceptionCount
     }
 
@@ -118,7 +118,7 @@
     /// - Parameter expected: `true` if the failure being reported was the
     ///   result of a failed assertion, `false` if it was the result of an
     ///   uncaught exception.
-    func recordFailure(withDescription description: String, inFile filePath: String?, atLine lineNumber: UInt, expected: Bool) {
+    func recordFailure(withDescription description: String, inFile filePath: String?, atLine lineNumber: Int, expected: Bool) {
         guard isStarted else {
             fatalError("Invalid attempt to record a failure for a test run " +
                        "that has not yet been started: \(self)")
diff --git a/Sources/XCTest/Public/XCTestSuite.swift b/Sources/XCTest/Public/XCTestSuite.swift
index 7ab6689..177dd1c 100644
--- a/Sources/XCTest/Public/XCTestSuite.swift
+++ b/Sources/XCTest/Public/XCTestSuite.swift
@@ -30,7 +30,7 @@
     private let _name: String
 
     /// The number of test cases in this suite.
-    open override var testCaseCount: UInt {
+    open override var testCaseCount: Int {
         return tests.reduce(0) { $0 + $1.testCaseCount }
     }
 
diff --git a/Sources/XCTest/Public/XCTestSuiteRun.swift b/Sources/XCTest/Public/XCTestSuiteRun.swift
index d8fc561..ce14369 100644
--- a/Sources/XCTest/Public/XCTestSuiteRun.swift
+++ b/Sources/XCTest/Public/XCTestSuiteRun.swift
@@ -19,29 +19,29 @@
     }
 
     /// The combined execution count of each test case run in the suite.
-    open override var executionCount: UInt {
+    open override var executionCount: Int {
         return testRuns.reduce(0) { $0 + $1.executionCount }
     }
 
     /// The combined failure count of each test case run in the suite.
-    open override var failureCount: UInt {
+    open override var failureCount: Int {
         return testRuns.reduce(0) { $0 + $1.failureCount }
     }
 
     /// The combined unexpected failure count of each test case run in the
     /// suite.
-    open override var unexpectedExceptionCount: UInt {
+    open override var unexpectedExceptionCount: Int {
         return testRuns.reduce(0) { $0 + $1.unexpectedExceptionCount }
     }
 
     open override func start() {
         super.start()
-        XCTestObservationCenter.shared().testSuiteWillStart(testSuite)
+        XCTestObservationCenter.shared.testSuiteWillStart(testSuite)
     }
 
     open override func stop() {
         super.stop()
-        XCTestObservationCenter.shared().testSuiteDidFinish(testSuite)
+        XCTestObservationCenter.shared.testSuiteDidFinish(testSuite)
     }
 
     /// The test run for each of the tests in this suite.
diff --git a/Tests/Functional/Asynchronous/Handler/main.swift b/Tests/Functional/Asynchronous/Handler/main.swift
index 049298c..9be5f0e 100644
--- a/Tests/Functional/Asynchronous/Handler/main.swift
+++ b/Tests/Functional/Asynchronous/Handler/main.swift
@@ -23,7 +23,7 @@
         self.waitForExpectations(timeout: 0.2) { error in
             XCTAssertNotNil(error, "Expectation handlers for unfulfilled expectations should not be nil.")
             XCTAssertEqual(error?.domain, XCTestErrorDomain, "The error domain should be XCTest's own error domain")
-            XCTAssertEqual(error?.code, XCTestErrorCode.timeoutWhileWaiting.rawValue, "The error code should indicate that a timeout occurred")
+            XCTAssertEqual(error?.code, XCTestError.Code.timeoutWhileWaiting.rawValue, "The error code should indicate that a timeout occurred")
             handlerWasCalled = true
         }
         XCTAssertTrue(handlerWasCalled)
diff --git a/Tests/Functional/Observation/All/main.swift b/Tests/Functional/Observation/All/main.swift
index b25767d..3fb03a6 100644
--- a/Tests/Functional/Observation/All/main.swift
+++ b/Tests/Functional/Observation/All/main.swift
@@ -32,7 +32,7 @@
         startedTestCaseNames.append(testCase.name)
     }
 
-    func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: UInt) {
+    func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {
         failureDescriptions.append(description)
     }
 
@@ -50,7 +50,7 @@
 }
 
 let observer = Observer()
-XCTestObservationCenter.shared().addTestObserver(observer)
+XCTestObservationCenter.shared.addTestObserver(observer)
 
 // CHECK: Test Suite 'Observation' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
 class Observation: XCTestCase {
@@ -90,7 +90,7 @@
         XCTAssertEqual(observer.finishedTestCaseNames,["Observation.test_one"])
         XCTAssertEqual(observer.finishedBundlePaths.count, 0)
 
-        XCTestObservationCenter.shared().removeTestObserver(observer)
+        XCTestObservationCenter.shared.removeTestObserver(observer)
     }
 
 // CHECK: Test Case 'Observation.test_three' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
@@ -101,7 +101,7 @@
         XCTAssertEqual(observer.finishedTestCaseNames,["Observation.test_one"])
         XCTAssertEqual(observer.finishedBundlePaths.count, 0)
 
-        XCTestObservationCenter.shared().addTestObserver(observer)
+        XCTestObservationCenter.shared.addTestObserver(observer)
     }
 }
 
diff --git a/Tests/Functional/Observation/Selected/main.swift b/Tests/Functional/Observation/Selected/main.swift
index d68fcda..64e056e 100644
--- a/Tests/Functional/Observation/Selected/main.swift
+++ b/Tests/Functional/Observation/Selected/main.swift
@@ -21,7 +21,7 @@
     }
 
     func testCaseWillStart(_ testCase: XCTestCase) {}
-    func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: UInt) {}
+    func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {}
     func testCaseDidFinish(_ testCase: XCTestCase) {}
 
     func testSuiteDidFinish(_ testSuite: XCTestSuite) {
@@ -32,7 +32,7 @@
 }
 
 let observer = Observer()
-XCTestObservationCenter.shared().addTestObserver(observer)
+XCTestObservationCenter.shared.addTestObserver(observer)
 
 class SkippedTestCase: XCTestCase {
     static var allTests = {
diff --git a/Tests/Functional/Performance/Misuse/main.swift b/Tests/Functional/Performance/Misuse/main.swift
index 28f334e..af1cf0e 100644
--- a/Tests/Functional/Performance/Misuse/main.swift
+++ b/Tests/Functional/Performance/Misuse/main.swift
@@ -21,20 +21,20 @@
         // CHECK: .*/Misuse/main.swift:[[@LINE+1]]: error: PerformanceMisuseTestCase.test_whenMeasuringMultipleInOneTest_fails : API violation - Can only record one set of metrics per test method.
         measure {}
         // CHECK: .*/Misuse/main.swift:[[@LINE+1]]: error: PerformanceMisuseTestCase.test_whenMeasuringMultipleInOneTest_fails : API violation - Can only record one set of metrics per test method.
-        measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: true) {}
+        measureMetrics([.wallClockTime], automaticallyStartMeasuring: true) {}
     }
     // CHECK: Test Case 'PerformanceMisuseTestCase.test_whenMeasuringMultipleInOneTest_fails' failed \(\d+\.\d+ seconds\)
 
     // CHECK: Test Case 'PerformanceMisuseTestCase.test_whenMeasuringMetricsAndNotStartingOrEnding_fails' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
     func test_whenMeasuringMetricsAndNotStartingOrEnding_fails() {
         // CHECK: .*/Misuse/main.swift:[[@LINE+1]]: error: PerformanceMisuseTestCase.test_whenMeasuringMetricsAndNotStartingOrEnding_fails : API violation - startMeasuring\(\) must be called during the block.
-        measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false) {}
+        measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) {}
     }
     // CHECK: Test Case 'PerformanceMisuseTestCase.test_whenMeasuringMetricsAndNotStartingOrEnding_fails' failed \(\d+\.\d+ seconds\)
 
     // CHECK: Test Case 'PerformanceMisuseTestCase.test_whenMeasuringMetricsAndStoppingWithoutStarting_fails' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
     func test_whenMeasuringMetricsAndStoppingWithoutStarting_fails() {
-        measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false) {
+        measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) {
             // CHECK: .*/Misuse/main.swift:[[@LINE+1]]: error: PerformanceMisuseTestCase.test_whenMeasuringMetricsAndStoppingWithoutStarting_fails : API violation - Cannot stop measuring before starting measuring.
             self.stopMeasuring()
         }
@@ -43,7 +43,7 @@
 
     // CHECK: Test Case 'PerformanceMisuseTestCase.test_whenMeasuringMetricsAndStartingTwice_fails' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
     func test_whenMeasuringMetricsAndStartingTwice_fails() {
-        measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false) {
+        measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) {
             self.startMeasuring()
             // CHECK: .*/Misuse/main.swift:[[@LINE+1]]: error: PerformanceMisuseTestCase.test_whenMeasuringMetricsAndStartingTwice_fails : API violation - Already called startMeasuring\(\) once this iteration.
             self.startMeasuring()
@@ -53,7 +53,7 @@
 
     // CHECK: Test Case 'PerformanceMisuseTestCase.test_whenMeasuringMetricsAndStoppingTwice_fails' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
     func test_whenMeasuringMetricsAndStoppingTwice_fails() {
-        measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false) {
+        measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) {
             self.startMeasuring()
             self.stopMeasuring()
             // CHECK: .*/Misuse/main.swift:[[@LINE+1]]: error: PerformanceMisuseTestCase.test_whenMeasuringMetricsAndStoppingTwice_fails : API violation - Already called stopMeasuring\(\) once this iteration.
@@ -104,7 +104,7 @@
     // CHECK: Test Case 'PerformanceMisuseTestCase.test_measuringUnknownMetric_fails' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
     func test_measuringUnknownMetric_fails() {
         // CHECK: .*/Misuse/main.swift:[[@LINE+1]]: error: PerformanceMisuseTestCase.test_measuringUnknownMetric_fails : API violation - Unknown metric: UnladenAirspeedVelocity
-        measureMetrics(["UnladenAirspeedVelocity"], automaticallyStartMeasuring: true) {}
+        measureMetrics([XCTPerformanceMetric("UnladenAirspeedVelocity")], automaticallyStartMeasuring: true) {}
     }
     // CHECK: Test Case 'PerformanceMisuseTestCase.test_measuringUnknownMetric_fails' failed \(\d+\.\d+ seconds\)
 
diff --git a/Tests/Functional/Performance/main.swift b/Tests/Functional/Performance/main.swift
index fc0c86f..6ca3da5 100644
--- a/Tests/Functional/Performance/main.swift
+++ b/Tests/Functional/Performance/main.swift
@@ -30,7 +30,7 @@
     // CHECK: Test Case 'PerformanceTestCase.test_measuresMetricsWithAutomaticStartAndStop' passed \(\d+\.\d+ seconds\)
     func test_measuresMetricsWithAutomaticStartAndStop() {
         var iterationCount = 0
-        measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: true, for: {
+        measureMetrics([.wallClockTime], automaticallyStartMeasuring: true, for: {
             iterationCount += 1
         })
         XCTAssertEqual(iterationCount, 10)
@@ -40,7 +40,7 @@
     // CHECK: .*/Performance/main.swift:[[@LINE+3]]: Test Case 'PerformanceTestCase.test_measuresMetricsWithManualStartAndStop' measured \[Time, seconds\] .*
     // CHECK: Test Case 'PerformanceTestCase.test_measuresMetricsWithManualStartAndStop' passed \(\d+\.\d+ seconds\)
     func test_measuresMetricsWithManualStartAndStop() {
-        measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false) {
+        measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) {
             self.startMeasuring()
             self.stopMeasuring()
         }
@@ -50,7 +50,7 @@
     // CHECK: .*/Performance/main.swift:[[@LINE+3]]: Test Case 'PerformanceTestCase.test_measuresMetricsWithoutExplicitStop' measured \[Time, seconds\] .*
     // CHECK: Test Case 'PerformanceTestCase.test_measuresMetricsWithoutExplicitStop' passed \(\d+\.\d+ seconds\)
     func test_measuresMetricsWithoutExplicitStop() {
-        measureMetrics([XCTPerformanceMetric_WallClockTime], automaticallyStartMeasuring: false) {
+        measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) {
             self.startMeasuring()
         }
     }
@@ -58,7 +58,7 @@
     // CHECK: Test Case 'PerformanceTestCase.test_hasWallClockAsDefaultPerformanceMetric' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
     // CHECK: Test Case 'PerformanceTestCase.test_hasWallClockAsDefaultPerformanceMetric' passed \(\d+\.\d+ seconds\)
     func test_hasWallClockAsDefaultPerformanceMetric() {
-        XCTAssertEqual(PerformanceTestCase.defaultPerformanceMetrics(), [XCTPerformanceMetric_WallClockTime])
+        XCTAssertEqual(PerformanceTestCase.defaultPerformanceMetrics, [.wallClockTime])
     }
 
     // CHECK: Test Case 'PerformanceTestCase.test_printsValuesAfterMeasuring' started at \d+-\d+-\d+ \d+:\d+:\d+\.\d+
