diff --git a/.github/workflows/ci-xcode.yml b/.github/workflows/ci-xcode.yml index 63c54d75e..5a7177949 100644 --- a/.github/workflows/ci-xcode.yml +++ b/.github/workflows/ci-xcode.yml @@ -25,6 +25,7 @@ jobs: - run: ./test macos - run: ./test ios - run: ./test tvos + - run: ./test watchos xcode_spm: name: Xcode ${{ matrix.xcode }} (Swift Package) @@ -40,3 +41,4 @@ jobs: - run: ./test macos_xcodespm - run: ./test ios_xcodespm - run: ./test tvos_xcodespm + - run: ./test watchos_xcodespm diff --git a/Nimble.podspec b/Nimble.podspec index eade52267..7598f8104 100644 --- a/Nimble.podspec +++ b/Nimble.podspec @@ -11,6 +11,7 @@ Pod::Spec.new do |s| s.ios.deployment_target = "9.0" s.osx.deployment_target = "10.10" s.tvos.deployment_target = "9.0" + s.watchos.deployment_target = "5.0" s.source = { :git => "https://github.com/Quick/Nimble.git", :tag => "v#{s.version}" } @@ -37,6 +38,15 @@ Pod::Spec.new do |s| "Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/CwlCatchException.m", "Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/include/CwlCatchException.h", ] + s.watchos.exclude_files = [ + "Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/include/CwlMachBadInstructionHandler.h", + "Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlCatchBadInstruction.swift", + "Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlBadInstructionException.swift", + "Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlDarwinDefinitions.swift", + "Carthage/Checkouts/CwlCatchException/Sources/CwlCatchException/CwlCatchException.swift", + "Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/CwlCatchException.m", + "Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/include/CwlCatchException.h", + ] s.exclude_files = "Sources/Nimble/Adapters/NonObjectiveC/*.swift" s.weak_framework = "XCTest" diff --git a/Nimble.xcodeproj/project.pbxproj b/Nimble.xcodeproj/project.pbxproj index ebb1ab7d5..2f0b8dc36 100644 --- a/Nimble.xcodeproj/project.pbxproj +++ b/Nimble.xcodeproj/project.pbxproj @@ -423,6 +423,112 @@ CDFB6A4B1F7E082500AD8CC7 /* mach_excServer.c in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A371F7E082400AD8CC7 /* mach_excServer.c */; }; CDFB6A4C1F7E082500AD8CC7 /* mach_excServer.c in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A371F7E082400AD8CC7 /* mach_excServer.c */; }; CDFB6A4F1F7E084600AD8CC7 /* CwlMachBadInstructionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A341F7E082400AD8CC7 /* CwlMachBadInstructionHandler.m */; }; + D95F8915267EA13E004B1B4D /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D95F890C267EA13E004B1B4D /* Nimble.framework */; }; + D95F8923267EA1B9004B1B4D /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D95F8924267EA1BC004B1B4D /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D95F8925267EA1BE004B1B4D /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D95F8926267EA1CA004B1B4D /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; }; + D95F8927267EA1CA004B1B4D /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; }; + D95F8928267EA1CA004B1B4D /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; }; + D95F8929267EA1CA004B1B4D /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; }; + D95F892A267EA1D9004B1B4D /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; + D95F892B267EA1D9004B1B4D /* PredicateTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDBC39B82462EA7D00069677 /* PredicateTest.swift */; }; + D95F892C267EA1D9004B1B4D /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; + D95F892D267EA1D9004B1B4D /* LinuxSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CAEDD091CAEA86F003F1584 /* LinuxSupport.swift */; }; + D95F892E267EA1D9004B1B4D /* DSLTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC157902511957100EAA480 /* DSLTest.swift */; }; + D95F892F267EA1D9004B1B4D /* SynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTest.swift */; }; + D95F8930267EA1E8004B1B4D /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; + D95F8931267EA1E8004B1B4D /* BeResultTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 106112C42251E13B000A5848 /* BeResultTest.swift */; }; + D95F8932267EA1E8004B1B4D /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; + D95F8933267EA1E8004B1B4D /* BeWithinTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857D184D2536123F00D8693A /* BeWithinTest.swift */; }; + D95F8934267EA1E8004B1B4D /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; + D95F8935267EA1E8004B1B4D /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; + D95F8936267EA1E8004B1B4D /* ThrowAssertionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F4BB8B31DACA0D00048464B /* ThrowAssertionTest.swift */; }; + D95F8937267EA1E8004B1B4D /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; + D95F8938267EA1E8004B1B4D /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; + D95F8939267EA1E8004B1B4D /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; + D95F893A267EA1E8004B1B4D /* ContainElementSatisfyingTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B13BA091DD360DE00C9098C /* ContainElementSatisfyingTest.swift */; }; + D95F893B267EA1E8004B1B4D /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; + D95F893C267EA1E8004B1B4D /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; + D95F893D267EA1E8004B1B4D /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; + D95F893E267EA1E8004B1B4D /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; + D95F893F267EA1E8004B1B4D /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; + D95F8940267EA1E8004B1B4D /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; + D95F8941267EA1E8004B1B4D /* BeginWithPrefixTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62FB326523B78D4A0047BED9 /* BeginWithPrefixTest.swift */; }; + D95F8942267EA1E8004B1B4D /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; + D95F8943267EA1E8004B1B4D /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; + D95F8944267EA1E8004B1B4D /* SatisfyAllOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8A3B6E920712FC100E25A08 /* SatisfyAllOfTest.swift */; }; + D95F8945267EA1E8004B1B4D /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; + D95F8946267EA1E8004B1B4D /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; + D95F8947267EA1E8004B1B4D /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; + D95F8948267EA1E8004B1B4D /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; + D95F8949267EA1E8004B1B4D /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; + D95F894A267EA1E8004B1B4D /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; + D95F894B267EA1E8004B1B4D /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; + D95F894C267EA1E8004B1B4D /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; + D95F894D267EA1E8004B1B4D /* ElementsEqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B20058C420E92CE400C1264D /* ElementsEqualTest.swift */; }; + D95F894E267EA1E8004B1B4D /* ToSucceedTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A6AB2C11E7F547E00A2F694 /* ToSucceedTest.swift */; }; + D95F894F267EA1E8004B1B4D /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; + D95F8950267EA1E8004B1B4D /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; + D95F8951267EA1EE004B1B4D /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; + D95F8952267EA1EE004B1B4D /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; + D95F8953267EA1EE004B1B4D /* AlwaysFailMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 898F28AF25D9F4C30052B8D0 /* AlwaysFailMatcher.swift */; }; + D95F8954267EA1F7004B1B4D /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; + D95F8955267EA1F7004B1B4D /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; + D95F8956267EA1F7004B1B4D /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; + D95F8957267EA1F7004B1B4D /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; + D95F8958267EA1F7004B1B4D /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; + D95F8959267EA205004B1B4D /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; + D95F895A267EA205004B1B4D /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; + D95F895B267EA205004B1B4D /* ExpectationMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FE661561E6574E20035F243 /* ExpectationMessage.swift */; }; + D95F895C267EA205004B1B4D /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; + D95F895D267EA205004B1B4D /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; + D95F895E267EA205004B1B4D /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; + D95F895F267EA205004B1B4D /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; + D95F8960267EA20A004B1B4D /* ContainElementSatisfying.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B13BA051DD360AA00C9098C /* ContainElementSatisfying.swift */; }; + D95F8961267EA20A004B1B4D /* BeResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 106112BC2251DFE7000A5848 /* BeResult.swift */; }; + D95F8962267EA20A004B1B4D /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; + D95F8963267EA20A004B1B4D /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; + D95F8964267EA20A004B1B4D /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; + D95F8965267EA20A004B1B4D /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; + D95F8966267EA20A004B1B4D /* ToSucceed.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A0A26221E7F52360092A34E /* ToSucceed.swift */; }; + D95F8967267EA20A004B1B4D /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; + D95F8968267EA20A004B1B4D /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; + D95F8969267EA20A004B1B4D /* ElementsEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = B20058C020E92C7500C1264D /* ElementsEqual.swift */; }; + D95F896A267EA20A004B1B4D /* ThrowAssertion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 964CFEFC1C4FF48900513336 /* ThrowAssertion.swift */; }; + D95F896B267EA20A004B1B4D /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; + D95F896C267EA20A004B1B4D /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* Async.swift */; }; + D95F896D267EA20A004B1B4D /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; + D95F896E267EA20A004B1B4D /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; + D95F896F267EA20A004B1B4D /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; + D95F8970267EA20A004B1B4D /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; + D95F8971267EA20A004B1B4D /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; + D95F8972267EA20A004B1B4D /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; + D95F8973267EA20A004B1B4D /* Predicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FA0C3FE1E30B14500623165 /* Predicate.swift */; }; + D95F8974267EA20A004B1B4D /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; + D95F8975267EA20A004B1B4D /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; + D95F8976267EA20A004B1B4D /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; + D95F8977267EA20A004B1B4D /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; + D95F8978267EA20A004B1B4D /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; + D95F8979267EA20A004B1B4D /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; + D95F897A267EA20A004B1B4D /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; + D95F897B267EA20A004B1B4D /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; + D95F897C267EA20A004B1B4D /* BeginWithPrefix.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62FB326123B78BF90047BED9 /* BeginWithPrefix.swift */; }; + D95F897D267EA20A004B1B4D /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; + D95F897E267EA20A004B1B4D /* BeWithin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857D1848253610A900D8693A /* BeWithin.swift */; }; + D95F897F267EA20A004B1B4D /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; + D95F8980267EA20A004B1B4D /* Equal+Tuple.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF5C57A2647B89B0036532C /* Equal+Tuple.swift */; }; + D95F8981267EA20A004B1B4D /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; + D95F8982267EA20A004B1B4D /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; + D95F8983267EA20A004B1B4D /* SatisfyAllOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8F6B5BC2070186D00FCB5ED /* SatisfyAllOf.swift */; }; + D95F8984267EA20E004B1B4D /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; + D95F8985267EA20E004B1B4D /* DispatchTimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0477153423B740AD00402D4E /* DispatchTimeInterval.swift */; }; + D95F8986267EA20E004B1B4D /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; + D95F8987267EA20E004B1B4D /* Await.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Await.swift */; }; + D95F8988267EA20E004B1B4D /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; + D95F8989267EA216004B1B4D /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D95F898A267EA2FC004B1B4D /* CwlMachBadInstructionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFB6A341F7E082400AD8CC7 /* CwlMachBadInstructionHandler.m */; }; + D95F898B267EA315004B1B4D /* CwlCatchBadInstructionPosix.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3D9A78232647BC00802581 /* CwlCatchBadInstructionPosix.swift */; }; DA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; DD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; @@ -506,6 +612,13 @@ remoteGlobalIDString = 1F925EAC195C0D6300ED456B; remoteInfo = "Nimble-macOS"; }; + D95F8916267EA13E004B1B4D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1F1A74201940169200FFFC47 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D95F890B267EA13E004B1B4D; + remoteInfo = Nimble; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ @@ -655,6 +768,8 @@ CDFB6A361F7E082400AD8CC7 /* CwlMachBadInstructionHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CwlMachBadInstructionHandler.h; sourceTree = ""; }; CDFB6A371F7E082400AD8CC7 /* mach_excServer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mach_excServer.c; sourceTree = ""; }; CDFB6A381F7E082400AD8CC7 /* mach_excServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mach_excServer.h; sourceTree = ""; }; + D95F890C267EA13E004B1B4D /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D95F8914267EA13E004B1B4D /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DSL+Wait.swift"; sourceTree = ""; }; DD72EC631A93874A002F7651 /* AllPassTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPassTest.swift; sourceTree = ""; }; DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToObjectTest.swift; sourceTree = ""; }; @@ -711,6 +826,21 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D95F8909267EA13E004B1B4D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D95F8911267EA13E004B1B4D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D95F8915267EA13E004B1B4D /* Nimble.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -771,6 +901,8 @@ 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */, 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */, 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */, + D95F890C267EA13E004B1B4D /* Nimble.framework */, + D95F8914267EA13E004B1B4D /* NimbleTests.xctest */, ); name = Products; sourceTree = ""; @@ -1099,6 +1231,17 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D95F8907267EA13E004B1B4D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D95F8925267EA1BE004B1B4D /* NMBStringify.h in Headers */, + D95F8923267EA1B9004B1B4D /* DSL.h in Headers */, + D95F8924267EA1BC004B1B4D /* NMBExceptionCapture.h in Headers */, + D95F8989267EA216004B1B4D /* Nimble.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -1216,13 +1359,50 @@ productReference = 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; + D95F890B267EA13E004B1B4D /* Nimble-watchOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = D95F8921267EA13E004B1B4D /* Build configuration list for PBXNativeTarget "Nimble-watchOS" */; + buildPhases = ( + D95F8907267EA13E004B1B4D /* Headers */, + D95F8908267EA13E004B1B4D /* Sources */, + D95F8909267EA13E004B1B4D /* Frameworks */, + D95F890A267EA13E004B1B4D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Nimble-watchOS"; + productName = Nimble; + productReference = D95F890C267EA13E004B1B4D /* Nimble.framework */; + productType = "com.apple.product-type.framework"; + }; + D95F8913267EA13E004B1B4D /* Nimble-watchOSTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = D95F8922267EA13E004B1B4D /* Build configuration list for PBXNativeTarget "Nimble-watchOSTests" */; + buildPhases = ( + D95F8910267EA13E004B1B4D /* Sources */, + D95F8911267EA13E004B1B4D /* Frameworks */, + D95F8912267EA13E004B1B4D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + D95F8917267EA13E004B1B4D /* PBXTargetDependency */, + ); + name = "Nimble-watchOSTests"; + productName = NimbleTests; + productReference = D95F8914267EA13E004B1B4D /* NimbleTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 1F1A74201940169200FFFC47 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0730; + DefaultBuildSystemTypeForWorkspace = Latest; + LastSwiftUpdateCheck = 1250; LastUpgradeCheck = 1250; ORGANIZATIONNAME = "Jeff Hui"; TargetAttributes = { @@ -1256,6 +1436,12 @@ CreatedOnToolsVersion = 8.2.1; ProvisioningStyle = Automatic; }; + D95F890B267EA13E004B1B4D = { + CreatedOnToolsVersion = 12.5; + }; + D95F8913267EA13E004B1B4D = { + CreatedOnToolsVersion = 12.5; + }; }; }; buildConfigurationList = 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject "Nimble" */; @@ -1277,6 +1463,8 @@ 1F1A74331940169200FFFC47 /* Nimble-iOSTests */, 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */, 1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */, + D95F890B267EA13E004B1B4D /* Nimble-watchOS */, + D95F8913267EA13E004B1B4D /* Nimble-watchOSTests */, A8F2B2541E79A4AB005BDD17 /* SwiftLint */, ); }; @@ -1325,6 +1513,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D95F890A267EA13E004B1B4D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D95F8912267EA13E004B1B4D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -1786,6 +1988,121 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D95F8908267EA13E004B1B4D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D95F8966267EA20A004B1B4D /* ToSucceed.swift in Sources */, + D95F895B267EA205004B1B4D /* ExpectationMessage.swift in Sources */, + D95F8954267EA1F7004B1B4D /* NimbleEnvironment.swift in Sources */, + D95F895C267EA205004B1B4D /* DSL+Wait.swift in Sources */, + D95F897B267EA20A004B1B4D /* BeLessThanOrEqual.swift in Sources */, + D95F8971267EA20A004B1B4D /* PostNotification.swift in Sources */, + D95F8982267EA20A004B1B4D /* HaveCount.swift in Sources */, + D95F898A267EA2FC004B1B4D /* CwlMachBadInstructionHandler.m in Sources */, + D95F8988267EA20E004B1B4D /* Errors.swift in Sources */, + D95F8926267EA1CA004B1B4D /* XCTestObservationCenter+Register.m in Sources */, + D95F8967267EA20A004B1B4D /* SatisfyAnyOf.swift in Sources */, + D95F8973267EA20A004B1B4D /* Predicate.swift in Sources */, + D95F8976267EA20A004B1B4D /* BeGreaterThanOrEqualTo.swift in Sources */, + D95F8958267EA1F7004B1B4D /* AssertionRecorder.swift in Sources */, + D95F897E267EA20A004B1B4D /* BeWithin.swift in Sources */, + D95F8928267EA1CA004B1B4D /* NMBExceptionCapture.m in Sources */, + D95F8981267EA20A004B1B4D /* BeginWith.swift in Sources */, + D95F8965267EA20A004B1B4D /* BeLogical.swift in Sources */, + D95F895D267EA205004B1B4D /* Expectation.swift in Sources */, + D95F8959267EA205004B1B4D /* NMBExpectation.swift in Sources */, + D95F8979267EA20A004B1B4D /* BeLessThan.swift in Sources */, + D95F8968267EA20A004B1B4D /* BeGreaterThan.swift in Sources */, + D95F8972267EA20A004B1B4D /* Match.swift in Sources */, + D95F8986267EA20E004B1B4D /* Stringers.swift in Sources */, + D95F8985267EA20E004B1B4D /* DispatchTimeInterval.swift in Sources */, + D95F895A267EA205004B1B4D /* Expression.swift in Sources */, + D95F897A267EA20A004B1B4D /* BeNil.swift in Sources */, + D95F895E267EA205004B1B4D /* DSL.swift in Sources */, + D95F897D267EA20A004B1B4D /* BeAKindOf.swift in Sources */, + D95F8977267EA20A004B1B4D /* MatchError.swift in Sources */, + D95F8987267EA20E004B1B4D /* Await.swift in Sources */, + D95F897C267EA20A004B1B4D /* BeginWithPrefix.swift in Sources */, + D95F8927267EA1CA004B1B4D /* NMBStringify.m in Sources */, + D95F898B267EA315004B1B4D /* CwlCatchBadInstructionPosix.swift in Sources */, + D95F8974267EA20A004B1B4D /* RaisesException.swift in Sources */, + D95F8961267EA20A004B1B4D /* BeResult.swift in Sources */, + D95F896C267EA20A004B1B4D /* Async.swift in Sources */, + D95F8964267EA20A004B1B4D /* Contain.swift in Sources */, + D95F8962267EA20A004B1B4D /* Equal.swift in Sources */, + D95F8956267EA1F7004B1B4D /* AssertionDispatcher.swift in Sources */, + D95F8969267EA20A004B1B4D /* ElementsEqual.swift in Sources */, + D95F895F267EA205004B1B4D /* FailureMessage.swift in Sources */, + D95F8955267EA1F7004B1B4D /* NimbleXCTestHandler.swift in Sources */, + D95F8960267EA20A004B1B4D /* ContainElementSatisfying.swift in Sources */, + D95F8983267EA20A004B1B4D /* SatisfyAllOf.swift in Sources */, + D95F8978267EA20A004B1B4D /* BeAnInstanceOf.swift in Sources */, + D95F896D267EA20A004B1B4D /* BeCloseTo.swift in Sources */, + D95F8963267EA20A004B1B4D /* ThrowError.swift in Sources */, + D95F8970267EA20A004B1B4D /* MatcherProtocols.swift in Sources */, + D95F897F267EA20A004B1B4D /* AllPass.swift in Sources */, + D95F896A267EA20A004B1B4D /* ThrowAssertion.swift in Sources */, + D95F8980267EA20A004B1B4D /* Equal+Tuple.swift in Sources */, + D95F896F267EA20A004B1B4D /* EndWith.swift in Sources */, + D95F8975267EA20A004B1B4D /* BeIdenticalTo.swift in Sources */, + D95F8984267EA20E004B1B4D /* SourceLocation.swift in Sources */, + D95F8929267EA1CA004B1B4D /* DSL.m in Sources */, + D95F896B267EA20A004B1B4D /* BeEmpty.swift in Sources */, + D95F896E267EA20A004B1B4D /* BeVoid.swift in Sources */, + D95F8957267EA1F7004B1B4D /* AdapterProtocols.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D95F8910267EA13E004B1B4D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D95F8945267EA1E8004B1B4D /* BeNilTest.swift in Sources */, + D95F8949267EA1E8004B1B4D /* MatchTest.swift in Sources */, + D95F8951267EA1EE004B1B4D /* utils.swift in Sources */, + D95F8941267EA1E8004B1B4D /* BeginWithPrefixTest.swift in Sources */, + D95F893B267EA1E8004B1B4D /* BeLogicalTest.swift in Sources */, + D95F894D267EA1E8004B1B4D /* ElementsEqualTest.swift in Sources */, + D95F8939267EA1E8004B1B4D /* BeIdenticalToObjectTest.swift in Sources */, + D95F8937267EA1E8004B1B4D /* BeginWithTest.swift in Sources */, + D95F8948267EA1E8004B1B4D /* MatchErrorTest.swift in Sources */, + D95F893C267EA1E8004B1B4D /* ContainTest.swift in Sources */, + D95F8933267EA1E8004B1B4D /* BeWithinTest.swift in Sources */, + D95F893A267EA1E8004B1B4D /* ContainElementSatisfyingTest.swift in Sources */, + D95F8952267EA1EE004B1B4D /* ObjectWithLazyProperty.swift in Sources */, + D95F894F267EA1E8004B1B4D /* ThrowErrorTest.swift in Sources */, + D95F8934267EA1E8004B1B4D /* BeEmptyTest.swift in Sources */, + D95F894E267EA1E8004B1B4D /* ToSucceedTest.swift in Sources */, + D95F892E267EA1D9004B1B4D /* DSLTest.swift in Sources */, + D95F8932267EA1E8004B1B4D /* BeGreaterThanOrEqualToTest.swift in Sources */, + D95F8950267EA1E8004B1B4D /* BeIdenticalToTest.swift in Sources */, + D95F8942267EA1E8004B1B4D /* BeAKindOfTest.swift in Sources */, + D95F8947267EA1E8004B1B4D /* BeGreaterThanTest.swift in Sources */, + D95F8935267EA1E8004B1B4D /* SatisfyAnyOfTest.swift in Sources */, + D95F8940267EA1E8004B1B4D /* BeAnInstanceOfTest.swift in Sources */, + D95F8944267EA1E8004B1B4D /* SatisfyAllOfTest.swift in Sources */, + D95F893D267EA1E8004B1B4D /* HaveCountTest.swift in Sources */, + D95F893E267EA1E8004B1B4D /* RaisesExceptionTest.swift in Sources */, + D95F892C267EA1D9004B1B4D /* AsynchronousTest.swift in Sources */, + D95F892D267EA1D9004B1B4D /* LinuxSupport.swift in Sources */, + D95F892F267EA1D9004B1B4D /* SynchronousTest.swift in Sources */, + D95F8953267EA1EE004B1B4D /* AlwaysFailMatcher.swift in Sources */, + D95F892A267EA1D9004B1B4D /* UserDescriptionTest.swift in Sources */, + D95F893F267EA1E8004B1B4D /* BeLessThanOrEqualToTest.swift in Sources */, + D95F894C267EA1E8004B1B4D /* PostNotificationTest.swift in Sources */, + D95F892B267EA1D9004B1B4D /* PredicateTest.swift in Sources */, + D95F894B267EA1E8004B1B4D /* BeLessThanTest.swift in Sources */, + D95F8943267EA1E8004B1B4D /* EqualTest.swift in Sources */, + D95F8930267EA1E8004B1B4D /* EndWithTest.swift in Sources */, + D95F8931267EA1E8004B1B4D /* BeResultTest.swift in Sources */, + D95F8938267EA1E8004B1B4D /* BeCloseToTest.swift in Sources */, + D95F8946267EA1E8004B1B4D /* BeVoidTest.swift in Sources */, + D95F894A267EA1E8004B1B4D /* AllPassTest.swift in Sources */, + D95F8936267EA1E8004B1B4D /* ThrowAssertionTest.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -1834,6 +2151,11 @@ target = 1F925EAC195C0D6300ED456B /* Nimble-macOS */; targetProxy = 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */; }; + D95F8917267EA13E004B1B4D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = D95F890B267EA13E004B1B4D /* Nimble-watchOS */; + targetProxy = D95F8916267EA13E004B1B4D /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -1905,6 +2227,7 @@ SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 5.0; }; name = Debug; }; @@ -1971,6 +2294,7 @@ VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 5.0; }; name = Release; }; @@ -2370,6 +2694,158 @@ }; name = Release; }; + D95F891D267EA13E004B1B4D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Manual; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = Sources/Nimble/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = ( + "$(inherited)", + "-weak_framework", + XCTest, + "-weak-lXCTestSwiftSupport", + ); + PRODUCT_BUNDLE_IDENTIFIER = net.jeffhui.Nimble; + PRODUCT_MODULE_NAME = Nimble; + PRODUCT_NAME = Nimble; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + }; + name = Debug; + }; + D95F891E267EA13E004B1B4D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = Sources/Nimble/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = ( + "$(inherited)", + "-weak_framework", + XCTest, + "-weak-lXCTestSwiftSupport", + ); + PRODUCT_BUNDLE_IDENTIFIER = net.jeffhui.Nimble; + PRODUCT_MODULE_NAME = Nimble; + PRODUCT_NAME = Nimble; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + }; + name = Release; + }; + D95F891F267EA13E004B1B4D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = Tests/NimbleTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = net.jeffhui.NimbleTests; + PRODUCT_NAME = NimbleTests; + SDKROOT = watchos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + }; + name = Debug; + }; + D95F8920267EA13E004B1B4D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = Tests/NimbleTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = net.jeffhui.NimbleTests; + PRODUCT_NAME = NimbleTests; + SDKROOT = watchos; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 4; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -2445,6 +2921,24 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + D95F8921267EA13E004B1B4D /* Build configuration list for PBXNativeTarget "Nimble-watchOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D95F891D267EA13E004B1B4D /* Debug */, + D95F891E267EA13E004B1B4D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D95F8922267EA13E004B1B4D /* Build configuration list for PBXNativeTarget "Nimble-watchOSTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D95F891F267EA13E004B1B4D /* Debug */, + D95F8920267EA13E004B1B4D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 1F1A74201940169200FFFC47 /* Project object */; diff --git a/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-watchOS.xcscheme b/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-watchOS.xcscheme new file mode 100644 index 000000000..71f88a96e --- /dev/null +++ b/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-watchOS.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Package.swift b/Package.swift index 87dfc5f46..257aec37a 100644 --- a/Package.swift +++ b/Package.swift @@ -4,7 +4,7 @@ import PackageDescription let package = Package( name: "Nimble", platforms: [ - .macOS(.v10_10), .iOS(.v9), .tvOS(.v9) + .macOS(.v10_10), .iOS(.v9), .tvOS(.v9), .watchOS(.v5) ], products: [ .library(name: "Nimble", targets: ["Nimble"]), @@ -19,7 +19,7 @@ let package = Package( .product(name: "CwlPreconditionTesting", package: "CwlPreconditionTesting", condition: .when(platforms: [.macOS, .iOS])), .product(name: "CwlPosixPreconditionTesting", package: "CwlPreconditionTesting", - condition: .when(platforms: [.tvOS])) + condition: .when(platforms: [.tvOS, .watchOS])) ], exclude: ["Info.plist"] ), diff --git a/Sources/Nimble/Adapters/NimbleEnvironment.swift b/Sources/Nimble/Adapters/NimbleEnvironment.swift index d20dd31ea..aa515f2f4 100644 --- a/Sources/Nimble/Adapters/NimbleEnvironment.swift +++ b/Sources/Nimble/Adapters/NimbleEnvironment.swift @@ -35,6 +35,7 @@ internal class NimbleEnvironment: NSObject { } var suppressTVOSAssertionWarning: Bool = false + var suppressWatchOSAssertionWarning: Bool = false #if !os(WASI) var awaiter: Awaiter #endif diff --git a/Sources/Nimble/Matchers/ThrowAssertion.swift b/Sources/Nimble/Matchers/ThrowAssertion.swift index 34a94fb3f..1f7d564d5 100644 --- a/Sources/Nimble/Matchers/ThrowAssertion.swift +++ b/Sources/Nimble/Matchers/ThrowAssertion.swift @@ -84,9 +84,7 @@ public func catchBadInstruction(block: @escaping () -> Void) -> BadInstructionEx public func throwAssertion() -> Predicate { return Predicate { actualExpression in - #if os(watchOS) - fatalError("Nimble currently doesn't support watchOS.") - #elseif (arch(x86_64) || arch(arm64)) && (canImport(Darwin) || canImport(Glibc)) + #if (arch(x86_64) || arch(arm64)) && (canImport(Darwin) || canImport(Glibc)) let message = ExpectationMessage.expectedTo("throw an assertion") var actualError: Error? let caughtException: BadInstructionException? = catchBadInstruction { @@ -105,6 +103,21 @@ public func throwAssertion() -> Predicate { print() NimbleEnvironment.activeInstance.suppressTVOSAssertionWarning = true } + #elseif os(watchOS) + if !NimbleEnvironment.activeInstance.suppressWatchOSAssertionWarning { + print() + print("[Nimble Warning]: If you're getting stuck on a debugger breakpoint for a " + + "fatal error while using throwAssertion(), please disable 'Debug Executable' " + + "in your scheme. Go to 'Edit Scheme > Test > Info' and uncheck " + + "'Debug Executable'. If you've already done that, suppress this warning " + + "by setting `NimbleEnvironment.activeInstance.suppressWatchOSAssertionWarning = true`. " + + "This is required because the standard methods of catching assertions " + + "(mach APIs) are unavailable for watchOS. Instead, the same mechanism the " + + "debugger uses is the fallback method for watchOS." + ) + print() + NimbleEnvironment.activeInstance.suppressWatchOSAssertionWarning = true + } #endif do { _ = try actualExpression.evaluate() diff --git a/Tests/NimbleTests/Matchers/ThrowAssertionTest.swift b/Tests/NimbleTests/Matchers/ThrowAssertionTest.swift index 3f708ee17..641797dad 100644 --- a/Tests/NimbleTests/Matchers/ThrowAssertionTest.swift +++ b/Tests/NimbleTests/Matchers/ThrowAssertionTest.swift @@ -4,7 +4,6 @@ import Nimble private let error: Error = NSError(domain: "test", code: 0, userInfo: nil) -#if !os(watchOS) final class ThrowAssertionTest: XCTestCase { func testPositiveMatch() { #if arch(x86_64) || arch(arm64) @@ -76,4 +75,3 @@ final class ThrowAssertionTest: XCTestCase { #endif } } -#endif diff --git a/test b/test index 5ddee4215..a78e1703e 100755 --- a/test +++ b/test @@ -10,11 +10,15 @@ if which xcodebuild > /dev/null; then LATEST_IOS_VERSION=`xcrun simctl list | grep ^iOS | ruby -e 'puts /\(([0-9.]+).*\)/.match(STDIN.read.chomp.split("\n").last).to_a[1]'` LATEST_TVOS_SDK_VERSION=`xcodebuild -showsdks | grep appletvsimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` LATEST_TVOS_VERSION=`xcrun simctl list | grep ^tvOS | ruby -e 'puts /\(([0-9.]+).*\)/.match(STDIN.read.chomp.split("\n").last).to_a[1]'` + LATEST_WATCHOS_SDK_VERSION=`xcodebuild -showsdks | grep watchos | cut -d ' ' -f 2 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` + LATEST_WATCHOS_VERSION=`xcrun simctl list | grep ^watchOS | ruby -e 'puts /\(([0-9.]+).*\)/.match(STDIN.read.chomp.split("\n").last).to_a[1]'` LATEST_MACOS_SDK_VERSION=`xcodebuild -showsdks | grep 'macosx' | cut -d ' ' -f 2 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` BUILD_IOS_SDK_VERSION=${NIMBLE_BUILD_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION} RUNTIME_IOS_VERSION=${NIMBLE_RUNTIME_IOS_VERSION:-$LATEST_IOS_VERSION} BUILD_TVOS_SDK_VERSION=${NIMBLE_BUILD_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION} RUNTIME_TVOS_VERSION=${NIMBLE_RUNTIME_TVOS_VERSION:-$LATEST_TVOS_VERSION} + BUILD_WATCHOS_SDK_VERSION=${NIMBLE_BUILD_WATCHOS_SDK_VERSION:-$LATEST_WATCHOS_SDK_VERSION} + RUNTIME_WATCHOS_VERSION=${NIMBLE_RUNTIME_WATCHOS_VERSION:-$LATEST_WATCHOS_VERSION} BUILD_MACOS_SDK_VERSION=${NIMBLE_BUILD_MACOS_SDK_VERSION:-$LATEST_MACOS_SDK_VERSION} fi @@ -42,6 +46,11 @@ function print_env { echo " Building with tvOS SDK: `color_if_overridden $BUILD_TVOS_SDK_VERSION $NIMBLE_BUILD_TVOS_SDK_VERSION`" echo " Running with tvOS: `color_if_overridden $RUNTIME_TVOS_VERSION $NIMBLE_RUNTIME_TVOS_VERSION`" echo + echo " watchOS:" + echo " Latest watchOS SDK: $LATEST_WATCHOS_SDK_VERSION" + echo " Building with watchOS SDK: `color_if_overridden $BUILD_WATCHOS_SDK_VERSION $NIMBLE_BUILD_WATCHOS_SDK_VERSION`" + echo " Running with watchOS: `color_if_overridden $RUNTIME_WATCHOS_VERSION $NIMBLE_RUNTIME_WATCHOS_VERSION`" + echo echo " macOS:" echo " Latest macOS SDK: $LATEST_MACOS_SDK_VERSION" echo " Building with macOS SDK: `color_if_overridden $BUILD_MACOS_SDK_VERSION $NIMBLE_BUILD_MACOS_SDK_VERSION`" @@ -69,12 +78,19 @@ function test_tvos { run set -o pipefail && xcodebuild -project Nimble.xcodeproj -scheme "Nimble-tvOS" -configuration "Debug" -sdk "appletvsimulator$BUILD_TVOS_SDK_VERSION" -destination "name=Apple TV,OS=$RUNTIME_TVOS_VERSION" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build-for-testing test-without-building | xcpretty } +function test_watchos { + run set -o pipefail && xcodebuild -project Nimble.xcodeproj -scheme "Nimble-watchOS" -configuration "Debug" -destination "generic/platform=watchOS" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build | xcpretty + + run osascript -e 'tell app "Simulator" to quit' + run set -o pipefail && xcodebuild -project Nimble.xcodeproj -scheme "Nimble-watchOS" -configuration "Debug" -sdk "watchsimulator$BUILD_WATCHOS_SDK_VERSION" -destination "name=Apple Watch Series 6 - 40mm,OS=$RUNTIME_WATCHOS_VERSION" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build-for-testing test-without-building | xcpretty +} + function test_macos { run set -o pipefail && xcodebuild -project Nimble.xcodeproj -scheme "Nimble-macOS" -configuration "Debug" -sdk "macosx$BUILD_MACOS_SDK_VERSION" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build-for-testing test-without-building | xcpretty } function test_xcode_spm_macos { - mv Nimble.xcodeproj Nimble.xcodeproj.bak + mv Nimble.xcodeproj Nimble.xcodeproj.bak trap 'mv Nimble.xcodeproj.bak Nimble.xcodeproj' EXIT run set -o pipefail && xcodebuild -scheme "Nimble" -configuration "Debug" -sdk "macosx$BUILD_MACOS_SDK_VERSION" -destination "platform=macOS" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build-for-testing test-without-building | xcpretty } @@ -93,6 +109,13 @@ function test_xcode_spm_tvos { run set -o pipefail && xcodebuild -scheme "Nimble" -configuration "Debug" -sdk "appletvsimulator$BUILD_TVOS_SDK_VERSION" -destination "name=Apple TV,OS=$RUNTIME_TVOS_VERSION" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build-for-testing test-without-building | xcpretty } +function test_xcode_spm_watchos { + run osascript -e 'tell app "Simulator" to quit' + mv Nimble.xcodeproj Nimble.xcodeproj.bak + trap 'mv Nimble.xcodeproj.bak Nimble.xcodeproj' EXIT + run set -o pipefail && xcodebuild -scheme "Nimble" -configuration "Debug" -sdk "watchsimulator$BUILD_WATCHOS_SDK_VERSION" -destination "name=Apple Watch Series 6 - 40mm,OS=$RUNTIME_WATCHOS_VERSION" OTHER_SWIFT_FLAGS='$(inherited) -suppress-warnings' build-for-testing test-without-building | xcpretty +} + function test_podspec { echo "Gathering CocoaPods installation information..." run bundle exec pod --version @@ -117,11 +140,13 @@ function test() { test_macos test_ios test_tvos + test_watchos if xcodebuild --help 2>&1 | grep xcframework > /dev/null; then test_xcode_spm_macos test_xcode_spm_ios test_xcode_spm_tvos + test_xcode_spm_watchos else echo "Not testing with Swift Package Manager version of Xcode because it requires at least Xcode 11" fi @@ -147,18 +172,20 @@ function help { echo "Usage: $0 COMMANDS" echo echo "COMMANDS:" - echo " all - Runs the all tests of macos, ios and tvos" - echo " clean - Cleans the derived data directory of Xcode. Assumes default location" - echo " help - Displays this help" - echo " macos - Runs the tests on macOS 10.10 (Yosemite and newer only)" - echo " macos_xcodespm - Runs the tests on macOS using the Swift Package Manager version of Xcode" - echo " ios - Runs the tests as an iOS device" - echo " ios_xcodespm - Runs the tests as an iOS device using the Swift Package Manager version of Xcode" - echo " tvos - Runs the tests as an tvOS device" - echo " tvos_xcodespm - Runs the tests as an tvOS device using the Swift Package Manager version of Xcode" - echo " podspec - Runs pod lib lint against the podspec to detect breaking changes" - echo " swiftpm - Runs the tests built by the Swift Package Manager" - echo " swiftpm_docker - Runs the tests built by the Swift Package Manager in a docker linux container" + echo " all - Runs the all tests of macos, ios and tvos" + echo " clean - Cleans the derived data directory of Xcode. Assumes default location" + echo " help - Displays this help" + echo " macos - Runs the tests on macOS 10.10 (Yosemite and newer only)" + echo " macos_xcodespm - Runs the tests on macOS using the Swift Package Manager version of Xcode" + echo " ios - Runs the tests as an iOS device" + echo " ios_xcodespm - Runs the tests as an iOS device using the Swift Package Manager version of Xcode" + echo " tvos - Runs the tests as an tvOS device" + echo " tvos_xcodespm - Runs the tests as an tvOS device using the Swift Package Manager version of Xcode" + echo " watchos - Runs the tests as an watchOS device" + echo " watchos_xcodespm - Runs the tests as an watchOS device using the Swift Package Manager version of Xcode" + echo " podspec - Runs pod lib lint against the podspec to detect breaking changes" + echo " swiftpm - Runs the tests built by the Swift Package Manager" + echo " swiftpm_docker - Runs the tests built by the Swift Package Manager in a docker linux container" echo exit 1 } @@ -173,6 +200,8 @@ function main { ios_xcodespm) test_xcode_spm_ios ;; tvos) test_tvos ;; tvos_xcodespm) test_xcode_spm_tvos ;; + watchos) test_watchos ;; + watchos_xcodespm) test_xcode_spm_watchos ;; macos) test_macos ;; macos_xcodespm) test_xcode_spm_macos ;; podspec) test_podspec ;;