From cf39e45b506c2d6faa8ced025f50cda3574c3219 Mon Sep 17 00:00:00 2001 From: Brian Semiglia Date: Wed, 13 Feb 2019 15:53:05 -0500 Subject: [PATCH 1/6] Adds snapshot tests. --- Anchorage.xcodeproj/project.pbxproj | 217 ++++++++++- AnchorageTests/AnchorageTests.swift | 365 +++++++++++++++++- .../__Snapshots__/AnchorageTests/.DS_Store | Bin 0 -> 6148 bytes .../testActiveBatchConstraintsSnapshot.1.png | Bin 0 -> 4810 bytes ...AnchorEqualityWithMultiplierSnapshot.1.png | Bin 0 -> 5273 bytes ...alityWithOffsetAndMultiplierSnapshot.1.png | Bin 0 -> 5273 bytes .../testBasicEqualitySnapshot.1.png | Bin 0 -> 4310 bytes .../testBasicGreaterThanSnapshot.1.png | Bin 0 -> 4693 bytes .../testBasicLessThanSnapshot.1.png | Bin 0 -> 4347 bytes .../testCenterAnchorsSnapshot.1.png | Bin 0 -> 6452 bytes ...AnchorsWithOffsetAndPrioritySnapshot.1.png | Bin 0 -> 6314 bytes .../testCenterAnchorsWithOffsetSnapshot.1.png | Bin 0 -> 6314 bytes .../testEdgeAnchorsSnapshot.1.png | Bin 0 -> 4310 bytes .../testEdgeAnchorsWithInsetsSnapshot.1.png | Bin 0 -> 5653 bytes .../testEqualityWithMultiplierSnapshot.1.png | Bin 0 -> 6452 bytes ...AndMultiplierAndPriorityMathSnapshot.1.png | Bin 0 -> 5162 bytes ...ityWithOffsetAndPriorityMathSnapshot.1.png | Bin 0 -> 5162 bytes .../testEqualityWithOffsetSnapshot.1.png | Bin 0 -> 6452 bytes ...lityWithPriorityConstantMathSnapshot.1.png | Bin 0 -> 4310 bytes ...EqualityWithPriorityConstantSnapshot.1.png | Bin 0 -> 4310 bytes ...alityWithPriorityLiteralMathSnapshot.1.png | Bin 0 -> 4310 bytes ...tEqualityWithPriorityLiteralSnapshot.1.png | Bin 0 -> 4310 bytes .../testHorizontalAnchorsSnapshot.1.png | Bin 0 -> 4428 bytes ...testInactiveBatchConstraintsSnapshot.1.png | Bin 0 -> 4810 bytes .../testNestedBatchConstraintsSnapshots.1.png | Bin 0 -> 6452 bytes .../testSizeAnchorsSnapshot.1.png | Bin 0 -> 4310 bytes ...testSizeAnchorsWithConstantsSnapshot.1.png | Bin 0 -> 4810 bytes .../testVerticalAnchorsSnapshot.1.png | Bin 0 -> 5156 bytes Podfile | 27 ++ Podfile.lock | 20 + 30 files changed, 613 insertions(+), 16 deletions(-) create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/.DS_Store create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testActiveBatchConstraintsSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testAxisAnchorEqualityWithMultiplierSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testAxisAnchorEqualityWithOffsetAndMultiplierSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testBasicEqualitySnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testBasicGreaterThanSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testBasicLessThanSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testCenterAnchorsSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testCenterAnchorsWithOffsetAndPrioritySnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testCenterAnchorsWithOffsetSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testEdgeAnchorsSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testEdgeAnchorsWithInsetsSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithMultiplierSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithOffsetAndMultiplierAndPriorityMathSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithOffsetAndPriorityMathSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithOffsetSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithPriorityConstantMathSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithPriorityConstantSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithPriorityLiteralMathSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithPriorityLiteralSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testHorizontalAnchorsSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testInactiveBatchConstraintsSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testNestedBatchConstraintsSnapshots.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testSizeAnchorsSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testSizeAnchorsWithConstantsSnapshot.1.png create mode 100644 AnchorageTests/__Snapshots__/AnchorageTests/testVerticalAnchorsSnapshot.1.png create mode 100644 Podfile create mode 100644 Podfile.lock diff --git a/Anchorage.xcodeproj/project.pbxproj b/Anchorage.xcodeproj/project.pbxproj index 5ba68a7..80503e0 100644 --- a/Anchorage.xcodeproj/project.pbxproj +++ b/Anchorage.xcodeproj/project.pbxproj @@ -37,6 +37,9 @@ 3C2050B71D3B213B00995DF3 /* Anchorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C2050B61D3B213B00995DF3 /* Anchorage.swift */; }; 7A39D6311EB53E1100BDE9C0 /* AnchorageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A39D6301EB53E1100BDE9C0 /* AnchorageTests.swift */; }; 7A39D6331EB53E1100BDE9C0 /* Anchorage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C2050AB1D3B20FD00995DF3 /* Anchorage.framework */; }; + 7AA89727233059A6A2DE18DB /* Pods_AnchorageDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8F0389C6D00AEDCE0477A2E /* Pods_AnchorageDemo.framework */; }; + A16B0A3423D4C8BD1BBB5C64 /* Pods_AnchorageTests_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AC798BFFD09EBA92C1F6CB5 /* Pods_AnchorageTests_iOS.framework */; }; + A4EE0CC9D8D444A853E40CCE /* Pods_Anchorage_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C576489BB5930483BB9C4EE7 /* Pods_Anchorage_tvOS.framework */; }; BBE7C0D71FAB676F00DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE7C0D51FAB65B900DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift */; }; BBE7C0D81FAB677500DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE7C0D51FAB65B900DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift */; }; BBE7C0D91FAB677600DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE7C0D51FAB65B900DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift */; }; @@ -58,6 +61,7 @@ D469DCB81EB7AB2F000F3DDD /* AnchorGroupProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D469DCB61EB7A975000F3DDD /* AnchorGroupProvider.swift */; }; D469DCB91EB7AB2F000F3DDD /* Priority.swift in Sources */ = {isa = PBXBuildFile; fileRef = D469DCB41EB7A904000F3DDD /* Priority.swift */; }; F154629B1E56846200C3948D /* Anchorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C2050B61D3B213B00995DF3 /* Anchorage.swift */; }; + F502D6B2BD9C979AA94E918A /* Pods_AnchorageTests_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D754D72F6462CE4D58FDCB1 /* Pods_AnchorageTests_macOS.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -92,6 +96,8 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 0CD5EE58281654FA6A928090 /* Pods-Anchorage-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Anchorage-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.debug.xcconfig"; sourceTree = ""; }; + 0D754D72F6462CE4D58FDCB1 /* Pods_AnchorageTests_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AnchorageTests_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 2DBB2D441D99596100A1E94B /* RootViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RootViewController.swift; sourceTree = ""; }; 2DBB2D461D99597500A1E94B /* ToggleActiveHeightCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ToggleActiveHeightCell.swift; path = Cells/ToggleActiveHeightCell.swift; sourceTree = ""; }; 2DBB2D471D99597500A1E94B /* MinimumWidthViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MinimumWidthViewCell.swift; path = Cells/MinimumWidthViewCell.swift; sourceTree = ""; }; @@ -107,10 +113,19 @@ 3C2050AB1D3B20FD00995DF3 /* Anchorage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Anchorage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3C2050AF1D3B20FD00995DF3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 3C2050B61D3B213B00995DF3 /* Anchorage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Anchorage.swift; sourceTree = ""; }; + 4A621F436D7AC1F311660FAA /* Pods-AnchorageDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageDemo.debug.xcconfig"; path = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.debug.xcconfig"; sourceTree = ""; }; + 54C143946A2174E4D55E7431 /* Pods-AnchorageTests-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageTests-iOS.debug.xcconfig"; path = "Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.debug.xcconfig"; sourceTree = ""; }; + 6571D2D39B6C49930B877172 /* Pods-AnchorageDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageDemo.release.xcconfig"; path = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.release.xcconfig"; sourceTree = ""; }; 7A39D62E1EB53E1100BDE9C0 /* AnchorageTests-iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "AnchorageTests-iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 7A39D6301EB53E1100BDE9C0 /* AnchorageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnchorageTests.swift; sourceTree = ""; }; 7A39D6321EB53E1100BDE9C0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 970CF4C3A04070F004E5B81F /* Pods-AnchorageTests-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageTests-macOS.release.xcconfig"; path = "Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.release.xcconfig"; sourceTree = ""; }; + 9AC798BFFD09EBA92C1F6CB5 /* Pods_AnchorageTests_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AnchorageTests_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A23C27A30C0A91E20C837E17 /* Pods-AnchorageTests-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageTests-macOS.debug.xcconfig"; path = "Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.debug.xcconfig"; sourceTree = ""; }; + ABA15247037482DE25BF1C14 /* Pods-Anchorage-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Anchorage-tvOS.release.xcconfig"; path = "Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.release.xcconfig"; sourceTree = ""; }; BBE7C0D51FAB65B900DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSLayoutAnchor+MultiplierConstraints.swift"; sourceTree = ""; }; + C576489BB5930483BB9C4EE7 /* Pods_Anchorage_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Anchorage_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C9544E58395B197F69A49D22 /* Pods-AnchorageTests-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageTests-iOS.release.xcconfig"; path = "Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.release.xcconfig"; sourceTree = ""; }; CD6A0E671EB7CDEF00FFF5DB /* AnchorageTests-macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "AnchorageTests-macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; CD6A0E771EB7CE3A00FFF5DB /* Anchorage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Anchorage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CD6A0E7F1EB7CE3A00FFF5DB /* Anchorage-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Anchorage-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -118,6 +133,7 @@ D401673E1EB7A58D0025DCA5 /* Compatability.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Compatability.swift; sourceTree = ""; }; D469DCB41EB7A904000F3DDD /* Priority.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Priority.swift; sourceTree = ""; }; D469DCB61EB7A975000F3DDD /* AnchorGroupProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnchorGroupProvider.swift; sourceTree = ""; }; + D8F0389C6D00AEDCE0477A2E /* Pods_AnchorageDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AnchorageDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F15462921E56842400C3948D /* Anchorage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Anchorage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -126,6 +142,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 7AA89727233059A6A2DE18DB /* Pods_AnchorageDemo.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -141,6 +158,7 @@ buildActionMask = 2147483647; files = ( 7A39D6331EB53E1100BDE9C0 /* Anchorage.framework in Frameworks */, + A16B0A3423D4C8BD1BBB5C64 /* Pods_AnchorageTests_iOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -149,6 +167,7 @@ buildActionMask = 2147483647; files = ( CD6A0E6C1EB7CDEF00FFF5DB /* Anchorage.framework in Frameworks */, + F502D6B2BD9C979AA94E918A /* Pods_AnchorageTests_macOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -156,6 +175,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A4EE0CC9D8D444A853E40CCE /* Pods_Anchorage_tvOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -210,6 +230,8 @@ 2DD242691D95C2CE001D6725 /* AnchorageDemo */, 7A39D62F1EB53E1100BDE9C0 /* AnchorageTests */, 3C2050AC1D3B20FD00995DF3 /* Products */, + F2374A7C4BE588ED4BBA0B2F /* Pods */, + 981A190F6CEA17202ABA60AE /* Frameworks */, ); sourceTree = ""; }; @@ -251,6 +273,32 @@ path = AnchorageTests; sourceTree = ""; }; + 981A190F6CEA17202ABA60AE /* Frameworks */ = { + isa = PBXGroup; + children = ( + C576489BB5930483BB9C4EE7 /* Pods_Anchorage_tvOS.framework */, + D8F0389C6D00AEDCE0477A2E /* Pods_AnchorageDemo.framework */, + 9AC798BFFD09EBA92C1F6CB5 /* Pods_AnchorageTests_iOS.framework */, + 0D754D72F6462CE4D58FDCB1 /* Pods_AnchorageTests_macOS.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + F2374A7C4BE588ED4BBA0B2F /* Pods */ = { + isa = PBXGroup; + children = ( + 0CD5EE58281654FA6A928090 /* Pods-Anchorage-tvOS.debug.xcconfig */, + ABA15247037482DE25BF1C14 /* Pods-Anchorage-tvOS.release.xcconfig */, + 4A621F436D7AC1F311660FAA /* Pods-AnchorageDemo.debug.xcconfig */, + 6571D2D39B6C49930B877172 /* Pods-AnchorageDemo.release.xcconfig */, + 54C143946A2174E4D55E7431 /* Pods-AnchorageTests-iOS.debug.xcconfig */, + C9544E58395B197F69A49D22 /* Pods-AnchorageTests-iOS.release.xcconfig */, + A23C27A30C0A91E20C837E17 /* Pods-AnchorageTests-macOS.debug.xcconfig */, + 970CF4C3A04070F004E5B81F /* Pods-AnchorageTests-macOS.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -282,6 +330,7 @@ isa = PBXNativeTarget; buildConfigurationList = 2DD242721D95C2CE001D6725 /* Build configuration list for PBXNativeTarget "AnchorageDemo" */; buildPhases = ( + BB97F602967064214646D121 /* [CP] Check Pods Manifest.lock */, 2DD242641D95C2CE001D6725 /* Sources */, 2DD242651D95C2CE001D6725 /* Frameworks */, 2DD242661D95C2CE001D6725 /* Resources */, @@ -318,9 +367,11 @@ isa = PBXNativeTarget; buildConfigurationList = 7A39D6381EB53E1100BDE9C0 /* Build configuration list for PBXNativeTarget "AnchorageTests-iOS" */; buildPhases = ( + F9138B3D1790257E1E3B8AD5 /* [CP] Check Pods Manifest.lock */, 7A39D62A1EB53E1100BDE9C0 /* Sources */, 7A39D62B1EB53E1100BDE9C0 /* Frameworks */, 7A39D62C1EB53E1100BDE9C0 /* Resources */, + CE03B1BD28C524F42BDD2A3C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -336,9 +387,11 @@ isa = PBXNativeTarget; buildConfigurationList = CD6A0E711EB7CDEF00FFF5DB /* Build configuration list for PBXNativeTarget "AnchorageTests-macOS" */; buildPhases = ( + 865C9976AA3925530AF989DF /* [CP] Check Pods Manifest.lock */, CD6A0E631EB7CDEF00FFF5DB /* Sources */, CD6A0E641EB7CDEF00FFF5DB /* Frameworks */, CD6A0E651EB7CDEF00FFF5DB /* Resources */, + 8840D05D022C42AE36163DD5 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -354,6 +407,7 @@ isa = PBXNativeTarget; buildConfigurationList = CD6A0E881EB7CE3A00FFF5DB /* Build configuration list for PBXNativeTarget "Anchorage-tvOS" */; buildPhases = ( + F8BD1FD2891DCAF1F6F63FD4 /* [CP] Check Pods Manifest.lock */, CD6A0E721EB7CE3A00FFF5DB /* Sources */, CD6A0E731EB7CE3A00FFF5DB /* Frameworks */, CD6A0E741EB7CE3A00FFF5DB /* Headers */, @@ -444,7 +498,6 @@ }; CD6A0E7E1EB7CE3A00FFF5DB = { CreatedOnToolsVersion = 8.3.2; - DevelopmentTeam = 336S848KQ4; ProvisioningStyle = Automatic; }; CD6A0E9B1EB7D36400FFF5DB = { @@ -539,6 +592,74 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 865C9976AA3925530AF989DF /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-AnchorageTests-macOS-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 8840D05D022C42AE36163DD5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/SnapshotTesting-macOS/SnapshotTesting.framework", + "${BUILT_PRODUCTS_DIR}/Then-macOS/Then.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + ); + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapshotTesting.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Then.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + BB97F602967064214646D121 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-AnchorageDemo-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; CD6A0E9F1EB7D36A00FFF5DB /* Build and test iOS */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -595,6 +716,74 @@ shellPath = /bin/sh; shellScript = "xcodebuild build -project Anchorage.xcodeproj -scheme AnchorageDemo -sdk iphonesimulator -destination \"name=iPhone 6s\" SWIFT_VERSION=3.0 CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY=\nxcodebuild build -project Anchorage.xcodeproj -scheme AnchorageDemo -sdk iphonesimulator -destination \"name=iPhone 6s\" SWIFT_VERSION=4.0 CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY="; }; + CE03B1BD28C524F42BDD2A3C /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/SnapshotTesting-iOS/SnapshotTesting.framework", + "${BUILT_PRODUCTS_DIR}/Then-iOS/Then.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + ); + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapshotTesting.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Then.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + F8BD1FD2891DCAF1F6F63FD4 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Anchorage-tvOS-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + F9138B3D1790257E1E3B8AD5 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-AnchorageTests-iOS-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -715,6 +904,7 @@ /* Begin XCBuildConfiguration section */ 2DD242731D95C2CE001D6725 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 4A621F436D7AC1F311660FAA /* Pods-AnchorageDemo.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_WARN_INFINITE_RECURSION = YES; @@ -730,6 +920,7 @@ }; 2DD242741D95C2CE001D6725 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 6571D2D39B6C49930B877172 /* Pods-AnchorageDemo.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_WARN_INFINITE_RECURSION = YES; @@ -901,11 +1092,12 @@ }; 7A39D6361EB53E1100BDE9C0 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 54C143946A2174E4D55E7431 /* Pods-AnchorageTests-iOS.debug.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; DEVELOPMENT_TEAM = 2KJHM26Y46; INFOPLIST_FILE = AnchorageTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.raizlabs.$(PRODUCT_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -915,11 +1107,12 @@ }; 7A39D6371EB53E1100BDE9C0 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C9544E58395B197F69A49D22 /* Pods-AnchorageTests-iOS.release.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; DEVELOPMENT_TEAM = 2KJHM26Y46; INFOPLIST_FILE = AnchorageTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.raizlabs.$(PRODUCT_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -929,6 +1122,7 @@ }; CD6A0E6F1EB7CDEF00FFF5DB /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = A23C27A30C0A91E20C837E17 /* Pods-AnchorageTests-macOS.debug.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; COMBINE_HIDPI_IMAGES = YES; @@ -943,6 +1137,7 @@ }; CD6A0E701EB7CDEF00FFF5DB /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 970CF4C3A04070F004E5B81F /* Pods-AnchorageTests-macOS.release.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; COMBINE_HIDPI_IMAGES = YES; @@ -957,6 +1152,7 @@ }; CD6A0E891EB7CE3A00FFF5DB /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 0CD5EE58281654FA6A928090 /* Pods-Anchorage-tvOS.debug.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = ""; @@ -979,6 +1175,7 @@ }; CD6A0E8A1EB7CE3A00FFF5DB /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = ABA15247037482DE25BF1C14 /* Pods-Anchorage-tvOS.release.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = ""; @@ -1004,13 +1201,16 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - DEVELOPMENT_TEAM = 336S848KQ4; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = AnchorageTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.raizlabs.$(PRODUCT_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = appletvos; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Debug; }; @@ -1019,13 +1219,16 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - DEVELOPMENT_TEAM = 336S848KQ4; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = AnchorageTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.raizlabs.$(PRODUCT_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SDKROOT = appletvos; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Release; }; diff --git a/AnchorageTests/AnchorageTests.swift b/AnchorageTests/AnchorageTests.swift index 2c540d1..932380d 100644 --- a/AnchorageTests/AnchorageTests.swift +++ b/AnchorageTests/AnchorageTests.swift @@ -13,13 +13,22 @@ #endif @testable import Anchorage +import SnapshotTesting +import Then import XCTest #if swift(>=4.0) public typealias ConstraintAttribute = NSLayoutConstraint.Attribute #else public typealias ConstraintAttribute = NSLayoutAttribute - func XCTAssertEqual(_ expression1: @autoclosure () throws -> T, _ expression2: @autoclosure () throws -> T, accuracy: T, _ message: @autoclosure () -> String = "", file: StaticString = #file, line: UInt = #line) where T : FloatingPoint { + func XCTAssertEqual( + _ expression1: @autoclosure () throws -> T, + _ expression2: @autoclosure () throws -> T, + accuracy: T, + _ message: @autoclosure () -> String = "", + file: StaticString = #file, + line: UInt = #line + ) where T : FloatingPoint { XCTAssertEqualWithAccuracy(expression1, expression2, accuracy: accuracy, message, file: file, line: line) } #endif @@ -59,10 +68,24 @@ let dEpsilon: Double = 0.00001 class AnchorageTests: XCTestCase { - let view1 = TestView() - let view2 = TestView() + let view1 = TestView().then { + $0.backgroundColor = .red + } + let view2 = TestView().then { + $0.backgroundColor = .blue + } - let window = TestWindow() + let window = TestWindow().then { + $0.backgroundColor = .yellow + $0.frame = .init( + origin: .zero, + size: .init( + width: 200, + height: 200 + ) + ) + $0.isHidden = false + } override func setUp() { #if os(macOS) @@ -74,6 +97,15 @@ class AnchorageTests: XCTestCase { #endif } + func testBasicEqualitySnapshot() { + view1.edgeAnchors == window.edgeAnchors + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testBasicEquality() { let constraint = view1.widthAnchor == view2.widthAnchor assertIdentical(constraint.firstItem, view1) @@ -87,6 +119,18 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(constraint.secondAttribute, .width) } + func testBasicLessThanSnapshot() { + view1.topAnchor == window.topAnchor + view1.leadingAnchor == window.leadingAnchor + view1.trailingAnchor == window.trailingAnchor + view1.bottomAnchor <= window.bottomAnchor + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testBasicLessThan() { let constraint = view1.widthAnchor <= view2.widthAnchor assertIdentical(constraint.firstItem, view1) @@ -100,6 +144,17 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(constraint.secondAttribute, .width) } + func testBasicGreaterThanSnapshot() { + view1.widthAnchor == 50 + view1.heightAnchor == 50 + view1.edgeAnchors >= window.edgeAnchors + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testBasicGreaterThan() { let constraint = view1.widthAnchor >= view2.widthAnchor assertIdentical(constraint.firstItem, view1) @@ -113,6 +168,20 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(constraint.secondAttribute, .width) } + func testEqualityWithOffsetSnapshot() { + view2.widthAnchor == 50 + view2.heightAnchor == 50 + view2.centerAnchors == window.centerAnchors + view1.widthAnchor == view2.widthAnchor + 50 + view1.heightAnchor == view2.heightAnchor + 50 + view1.centerAnchors == window.centerAnchors + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testEqualityWithOffset() { let constraint = view1.widthAnchor == view2.widthAnchor + 10 assertIdentical(constraint.firstItem, view1) @@ -126,6 +195,20 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(constraint.secondAttribute, .width) } + func testEqualityWithMultiplierSnapshot() { + view2.widthAnchor == 50 + view2.heightAnchor == 50 + view2.centerAnchors == window.centerAnchors + view1.widthAnchor == view2.widthAnchor * 2 + view1.heightAnchor == view2.heightAnchor * 2 + view1.centerAnchors == window.centerAnchors + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testEqualityWithMultiplier() { let constraint = view1.widthAnchor == view2.widthAnchor / 2 assertIdentical(constraint.firstItem, view1) @@ -139,6 +222,18 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(constraint.secondAttribute, .width) } + func testAxisAnchorEqualityWithMultiplierSnapshot() { + view1.topAnchor == window.topAnchor + view1.bottomAnchor == window.bottomAnchor + view1.leadingAnchor == window.leadingAnchor + view1.trailingAnchor == window.trailingAnchor * 0.5 + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testAxisAnchorEqualityWithMultiplier() { let constraint = view1.leadingAnchor == view2.trailingAnchor / 2 assertIdentical(constraint.firstItem, view1) @@ -165,6 +260,18 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(constraint.secondAttribute, .width) } + func testAxisAnchorEqualityWithOffsetAndMultiplierSnapshot() { + view1.topAnchor == window.topAnchor + view1.bottomAnchor == window.bottomAnchor + view1.leadingAnchor == window.leadingAnchor + view1.trailingAnchor == (window.trailingAnchor + 50) * 0.25 + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testAxisAnchorEqualityWithOffsetAndMultiplier() { let constraint = view1.trailingAnchor == (view2.centerXAnchor + 10) / 2 assertIdentical(constraint.firstItem, view1) @@ -178,6 +285,23 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(constraint.secondAttribute, .centerX) } + func testEqualityWithPriorityConstantSnapshot() { + view1.topAnchor == window.topAnchor + view1.leadingAnchor == window.leadingAnchor + view1.bottomAnchor == window.bottomAnchor + view1.widthAnchor == window.widthAnchor ~ .high + view2.topAnchor == window.topAnchor + view2.trailingAnchor == window.trailingAnchor + view2.bottomAnchor == window.bottomAnchor + view2.widthAnchor == window.widthAnchor ~ .low + view1.trailingAnchor == view2.leadingAnchor + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testEqualityWithPriorityConstant() { let constraint = view1.widthAnchor == view2.widthAnchor ~ .high assertIdentical(constraint.firstItem, view1) @@ -191,6 +315,23 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(constraint.secondAttribute, .width) } + func testEqualityWithPriorityLiteralSnapshot() { + view1.topAnchor == window.topAnchor + view1.leadingAnchor == window.leadingAnchor + view1.bottomAnchor == window.bottomAnchor + view1.widthAnchor == window.widthAnchor ~ 750 + view2.topAnchor == window.topAnchor + view2.trailingAnchor == window.trailingAnchor + view2.bottomAnchor == window.bottomAnchor + view2.widthAnchor == window.widthAnchor ~ 250 + view1.trailingAnchor == view2.leadingAnchor + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testEqualityWithPriorityLiteral() { let constraint = view1.widthAnchor == view2.widthAnchor ~ 750 assertIdentical(constraint.firstItem, view1) @@ -204,6 +345,23 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(constraint.secondAttribute, .width) } + func testEqualityWithPriorityConstantMathSnapshot() { + view1.topAnchor == window.topAnchor + view1.leadingAnchor == window.leadingAnchor + view1.bottomAnchor == window.bottomAnchor + view1.widthAnchor == window.widthAnchor ~ .high + view2.topAnchor == window.topAnchor + view2.trailingAnchor == window.trailingAnchor + view2.bottomAnchor == window.bottomAnchor + view2.widthAnchor == window.widthAnchor ~ .high - 1 + view1.trailingAnchor == view2.leadingAnchor + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testEqualityWithPriorityConstantMath() { let constraint = view1.widthAnchor == view2.widthAnchor ~ .high - 1 assertIdentical(constraint.firstItem, view1) @@ -217,6 +375,23 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(constraint.secondAttribute, .width) } + func testEqualityWithPriorityLiteralMathSnapshot() { + view1.topAnchor == window.topAnchor + view1.leadingAnchor == window.leadingAnchor + view1.bottomAnchor == window.bottomAnchor + view1.widthAnchor == window.widthAnchor ~ .high + view2.topAnchor == window.topAnchor + view2.trailingAnchor == window.trailingAnchor + view2.bottomAnchor == window.bottomAnchor + view2.widthAnchor == window.widthAnchor ~ Priority(750 - 1) + view1.trailingAnchor == view2.leadingAnchor + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testEqualityWithPriorityLiteralMath() { let constraint = view1.widthAnchor == view2.widthAnchor ~ Priority(750 - 1) assertIdentical(constraint.firstItem, view1) @@ -230,6 +405,23 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(constraint.secondAttribute, .width) } + func testEqualityWithOffsetAndPriorityMathSnapshot() { + view1.topAnchor == window.topAnchor + view1.leadingAnchor == window.leadingAnchor + view1.bottomAnchor == window.bottomAnchor + view1.widthAnchor == window.widthAnchor - 100 ~ .high + 1 + view2.topAnchor == window.topAnchor + view2.trailingAnchor == window.trailingAnchor + view2.bottomAnchor == window.bottomAnchor + view2.widthAnchor == window.widthAnchor ~ .high + view1.trailingAnchor == view2.leadingAnchor + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testEqualityWithOffsetAndPriorityMath() { let constraint = view1.widthAnchor == view2.widthAnchor + 10 ~ .high - 1 assertIdentical(constraint.firstItem, view1) @@ -243,6 +435,23 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(constraint.secondAttribute, .width) } + func testEqualityWithOffsetAndMultiplierAndPriorityMathSnapshot() { + view1.topAnchor == window.topAnchor + view1.leadingAnchor == window.leadingAnchor + view1.bottomAnchor == window.bottomAnchor + view1.widthAnchor == (window.widthAnchor + 50) / 4 ~ .high + 1 + view2.topAnchor == window.topAnchor + view2.trailingAnchor == window.trailingAnchor + view2.bottomAnchor == window.bottomAnchor + view2.widthAnchor == window.widthAnchor ~ .high + view1.trailingAnchor == view2.leadingAnchor + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testEqualityWithOffsetAndMultiplierAndPriorityMath() { let constraint = view1.widthAnchor == (view2.widthAnchor + 10) / 2 ~ .high - 1 assertIdentical(constraint.firstItem, view1) @@ -256,6 +465,20 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(constraint.secondAttribute, .width) } + func testCenterAnchorsSnapshot() { + view2.widthAnchor == 50 + view2.heightAnchor == 50 + view2.centerAnchors == window.centerAnchors + view1.widthAnchor == view2.widthAnchor * 2 + view1.heightAnchor == view2.heightAnchor * 2 + view1.centerAnchors == view2.centerAnchors + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testCenterAnchors() { let constraints = view1.centerAnchors == view2.centerAnchors @@ -282,6 +505,35 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(vertical.secondAttribute, .centerY) } + func testCenterAnchorsWithOffsetSnapshot() { + view2.widthAnchor == 50 + view2.heightAnchor == 50 + view2.centerAnchors == window.centerAnchors + view1.widthAnchor == view2.widthAnchor * 2 + view1.heightAnchor == view2.heightAnchor * 2 + view1.centerAnchors == view2.centerAnchors + 25 + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + + func testCenterAnchorsWithOffsetAndPrioritySnapshot() { + view2.widthAnchor == 50 + view2.heightAnchor == 50 + view2.centerAnchors == window.centerAnchors + view1.widthAnchor == view2.widthAnchor * 2 + view1.heightAnchor == view2.heightAnchor * 2 + view1.bottomAnchor == window.bottomAnchor ~ .low + view1.centerAnchors == view2.centerAnchors + 25 ~ .low + 1 + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testCenterAnchorsWithOffsetAndPriority() { let constraints = view1.centerAnchors == view2.centerAnchors + 10 ~ .high - 1 @@ -308,6 +560,16 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(vertical.secondAttribute, .centerY) } + func testHorizontalAnchorsSnapshot() { + view1.heightAnchor == 50 + view1.horizontalAnchors == window.horizontalAnchors + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testHorizontalAnchors() { let constraints = view1.horizontalAnchors == view2.horizontalAnchors + 10 ~ .high - 1 @@ -334,6 +596,16 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(trailing.secondAttribute, .trailing) } + func testVerticalAnchorsSnapshot() { + view1.widthAnchor == 50 + view1.verticalAnchors == window.verticalAnchors + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testVerticalAnchors() { let constraints = view1.verticalAnchors == view2.verticalAnchors + 10 ~ .high - 1 @@ -360,6 +632,15 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(bottom.secondAttribute, .bottom) } + func testSizeAnchorsSnapshot() { + view1.sizeAnchors == window.sizeAnchors + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testSizeAnchors() { let constraints = view1.sizeAnchors == view2.sizeAnchors + 10 ~ .high - 1 @@ -386,6 +667,15 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(height.secondAttribute, .height) } + func testSizeAnchorsWithConstantsSnapshot() { + view1.sizeAnchors == CGSize(width: 100, height: 100) + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testSizeAnchorsWithConstants() { let constraints = view1.sizeAnchors == CGSize(width: 50, height: 100) ~ .high - 1 @@ -412,6 +702,15 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(height.secondAttribute, .notAnAttribute) } + func testEdgeAnchorsSnapshot() { + view1.edgeAnchors == window.edgeAnchors + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testEdgeAnchors() { let constraints = view1.edgeAnchors == view2.edgeAnchors + 10 ~ .high - 1 @@ -477,6 +776,15 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(bottom.secondAttribute, .bottom) } + func testEdgeAnchorsWithInsetsSnapshot() { + view1.edgeAnchors == window.edgeAnchors + 50 + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testEdgeAnchorsWithInsets() { let insets = EdgeInsets(top: 10, left: 5, bottom: 15, right: 20) @@ -527,6 +835,18 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(bottom.secondAttribute, .bottom) } + func testInactiveBatchConstraintsSnapshot() { + view1.sizeAnchors == window.sizeAnchors - 100 + _ = Anchorage.batch(active: false) { + view2.sizeAnchors == window.sizeAnchors + } + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testInactiveBatchConstraints() { let constraints = Anchorage.batch(active: false) { view1.widthAnchor == view2.widthAnchor @@ -557,6 +877,17 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(height.secondAttribute, .height) } + func testActiveBatchConstraintsSnapshot() { + _ = Anchorage.batch(active: true) { + view1.sizeAnchors == window.sizeAnchors - 100 + } + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testActiveBatchConstraints() { let constraints = Anchorage.batch { view1.widthAnchor == view2.widthAnchor @@ -586,7 +917,23 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(height.firstAttribute, .height) XCTAssertEqual(height.secondAttribute, .height) } - + + func testNestedBatchConstraintsSnapshots() { + _ = Anchorage.batch(active: true) { + view1.sizeAnchors == window.sizeAnchors - 100 + view1.centerAnchors == window.centerAnchors + _ = Anchorage.batch(active: true) { + view2.sizeAnchors == window.sizeAnchors - 150 + view2.centerAnchors == window.centerAnchors + } + } + assertSnapshot( + matching: window, + as: .image, + record: false + ) + } + func testNestedBatchConstraints() { var nestedConstraints: [NSLayoutConstraint] = [] let constraints = Anchorage.batch { @@ -596,11 +943,11 @@ class AnchorageTests: XCTestCase { } view1.leadingAnchor == view2.leadingAnchor } - + let width = constraints[0] let leading = constraints[1] let height = nestedConstraints[0] - + assertIdentical(width.firstItem, view1) assertIdentical(width.secondItem, view2) XCTAssertEqual(width.constant, 0, accuracy: cgEpsilon) @@ -610,7 +957,7 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(width.relation, .equal) XCTAssertEqual(width.firstAttribute, .width) XCTAssertEqual(width.secondAttribute, .width) - + assertIdentical(height.firstItem, view1) assertIdentical(height.secondItem, view2) XCTAssertEqual(height.constant, 0, accuracy: cgEpsilon) @@ -620,7 +967,7 @@ class AnchorageTests: XCTestCase { XCTAssertEqual(height.relation, .equal) XCTAssertEqual(height.firstAttribute, .height) XCTAssertEqual(height.secondAttribute, .height) - + assertIdentical(leading.firstItem, view1) assertIdentical(leading.secondItem, view2) XCTAssertEqual(leading.constant, 0, accuracy: cgEpsilon) diff --git a/AnchorageTests/__Snapshots__/AnchorageTests/.DS_Store b/AnchorageTests/__Snapshots__/AnchorageTests/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0GZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*<4n4{8FC+X*N$6$B+ufH`g}`9ySnQ zcKmkVMD?jv$c9E?FPjs)Oy_@4fx^9hmp?${ZFv%otX$vyY9Z9Vl>< z!NGyC>uSTt6CWE^+eqAR1`K!8OT}6=?RE)I9#i!Xy$fcSk#!q zpfI7~NY;UhClxy!ViZO#84a${)HRwWKoe;Qc7wn7ucpt}d;{yteO z2{P#bSI2@;BS*t>G!c#Fp3!1sw7eXxD8L~wRBA}}zo&91F8Zh70&Gbzc)I$ztaD0e F0s!~3JKO*O literal 0 HcmV?d00001 diff --git a/AnchorageTests/__Snapshots__/AnchorageTests/testAxisAnchorEqualityWithMultiplierSnapshot.1.png b/AnchorageTests/__Snapshots__/AnchorageTests/testAxisAnchorEqualityWithMultiplierSnapshot.1.png new file mode 100644 index 0000000000000000000000000000000000000000..8121922e7973d9e1d57a81c7335266894c800336 GIT binary patch literal 5273 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*<4n4{8FC+X*N$6$B+ufH`g}`9ySnQ zcKmkVMD?jv$c9E?FPjs)Oy_@4fx^9hmp?${ZFv%otX$vyY9Z9Vl>< z!NGyC>uSTt6CWE^+eqAR1`K!8OT}6=?RE)I9#i!Xy$fcSk#!q zpfI7~NY;UhClxy!ViZO#84a${)HRwt<8 literal 0 HcmV?d00001 diff --git a/AnchorageTests/__Snapshots__/AnchorageTests/testAxisAnchorEqualityWithOffsetAndMultiplierSnapshot.1.png b/AnchorageTests/__Snapshots__/AnchorageTests/testAxisAnchorEqualityWithOffsetAndMultiplierSnapshot.1.png new file mode 100644 index 0000000000000000000000000000000000000000..8121922e7973d9e1d57a81c7335266894c800336 GIT binary patch literal 5273 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*<4n4{8FC+X*N$6$B+ufH`g}`9ySnQ zcKmkVMD?jv$c9E?FPjs)Oy_@4fx^9hmp?${ZFv%otX$vyY9Z9Vl>< z!NGyC>uSTt6CWE^+eqAR1`K!8OT}6=?RE)I9#i!Xy$fcSk#!q zpfI7~NY;UhClxy!ViZO#84a${)HRwt<8 literal 0 HcmV?d00001 diff --git a/AnchorageTests/__Snapshots__/AnchorageTests/testBasicEqualitySnapshot.1.png b/AnchorageTests/__Snapshots__/AnchorageTests/testBasicEqualitySnapshot.1.png new file mode 100644 index 0000000000000000000000000000000000000000..215f3ee95063bad6cfbf002a3f6ea438623c21e5 GIT binary patch literal 4310 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*&LBphs|4ow5q3zV@L(#o9i2S85DU~ z9KYY+BB)yNnDfNEC#IL=HXFbG!OmlFfPp!jxp?n`>Jt(P4UBC27#Tk@eP&7pGAA)I zGO8ck=%5?GCLtieC@8=tk)R+cAW$GA^ZN3ylm?`3SB)Mzg}8&I%R4cEkVwJpRE}zy^a7sKM}dw7CFp`-~>uL7jLGZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*&NxQMABG+w7I8?V@L(#n@bA?84Lst zZ+N%=i@Ej;ZkDzmU*6rD$;M-FfPwkyfv(PFjLbl`gZTz``=1%d7=WA&OiCF*Ngjg> zyl*c0+s!fran>|&NP)EQlrUF+ncSZS)~~J51TpCD0lB|V7E6LmI>6PjVARObupCW9 zqq%3a*cdG@M=J_&2n>}PlAVF!|No6z-Ymf8M?a_u@%DyeSG1!5^M#%Nm&*R+5Hcw| z7=0#a{(`y)*MD~N_xIb&f|~_f*e=buR03%>NP8^eKl!4Ekxe2&fmg$k9UK6A8&!Ty z=s72m(7?!csX=H|>1YUyhQLS;fd~5~e*FHI^7HppzJ2;1KQ3oxldwoUQ1N8uKKtAI zKYsrkE+GIcS`P3s+kZOzQ``Q*|KIl$9sU&D`SI|B-@TXF2O9o_u(KWEpDeG&_D;e; zf$d2B?4SA0Y!WkgBm|g^4i>83+bOhn>h`MC0}VidN54`U8c#Mb8Y&3S2^a5uziXQ0 zj%0Khneaz*wJ%0jt`2A8=>RHS=MOiovh?DQb=fl;tubUqEdmAVXwZ$OI(QBnO$^jd e3=`%{O{f=qp>MPQd66P$*vHe=&t;ucLK6T}&1`f4 literal 0 HcmV?d00001 diff --git a/AnchorageTests/__Snapshots__/AnchorageTests/testBasicLessThanSnapshot.1.png b/AnchorageTests/__Snapshots__/AnchorageTests/testBasicLessThanSnapshot.1.png new file mode 100644 index 0000000000000000000000000000000000000000..08c3f487da77018f0902280cba05c53cd0e7f783 GIT binary patch literal 4347 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*&NxQMABG+w7I8?V@L(#n@bA?84Lst zZ+N%=i@Ej;ZkDzmU*6rD$;M-FfPwkyfv(PFjLbl`gZTz``=1%d7=WA&OiCF*Ngjg> zyl*c0+s!fran>|&NP)EQlrUF+ncSZS)~~J51TpCD0lB|V7E6LmI>6PjVARObupCW9 zqq%3a*cdG@M=J_&2n>}PlAVF!|No6z-Ymc-gej;A@piNUG1|--Dyet06*}7d9_`AE h_Tff5uLIU=XFobqs?@G&}gr}>Y%Q~loCIBKws(1hZ literal 0 HcmV?d00001 diff --git a/AnchorageTests/__Snapshots__/AnchorageTests/testCenterAnchorsSnapshot.1.png b/AnchorageTests/__Snapshots__/AnchorageTests/testCenterAnchorsSnapshot.1.png new file mode 100644 index 0000000000000000000000000000000000000000..3403543e59e28d57733e4018751c53a36951e452 GIT binary patch literal 6452 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}**w;Ng+F}-((Iltjv*C{Z>}5mMLY7a zT-^JAY3ixQ#d8~2cuY=+|JlIkxAI0yo!$KT{rt>)1r5wHFRTKNI2;Bt9x$-~;tN?M zKj~l(nA63;ApuhGz~O$Q*B57_8HHeuAOj;*qjf-Mod=sS*c1&Wg@gl)AZ9JQ)QVkl(9{}XSX|E~Tq@jzp| z?1k|8OaA?hk}|#Uvr>kieF}3v`?;>Jq%Y?wFMV><|Rr|9{EWjK|Kw z$&lbN9v>bLR7>exBuUN-iZeNzmiE{Uq%eAa%%Jf#p-mCBYMuvwLj? zQJ(A@w&DDXLjeF ze*LkEV+n7=wv)owgym+>EYAIVJ|-tRuK&8TLN3D=-+3G6eYkOEPWJ2iXGym|Rqc^u z%4A-U`>Ew?%ki{lG132x#cxl${`jkahcrX(Wc4-bHfF}pZ~dCT^9I}%vuzS>A8wp! zdHve|Ge@^Q{aRtma*561_7l$6oc(9d?A-P*U2mK2`s1$^CzvtZQu7~m@@OcJCJbt3 zzgIuc@Z4|Ro&(G3trK21mc$uefaTluP0x3?{bFKQifkub)n>Z|O^6RdKh#_g zh)-Am%cWvY>)1C{9d&?}5_`Djy_b5$&9eoXxeqv<`05b0ULpf#WB9?(vCg%Pjj%Ey zf@7!LiC3a<8$W1O?8{!EZvb}^x8il?$h}E$8{=5dm-BvQg*z!h@ky1!>TraOs~`Ma zw{YJ9xRZ2RV)#?OcEN3|5Vg5)dPN-JBv2r%84ZNdKxjZo2`35}_Nm`JeqJ_#ftiz; zC8-U= z0!)emJV4EY%q&cEIOe287ap6|-KfjP(c-|t!YpyX;Rr(`gF4f3wVhi%tNh>3G;mM= z8YXdoflY~xgT+G7;^ekRJ-Xt|(L4eijRHuP_xToOPyRCRo^fJ>1JE#o21Xtipqc`u zf=RhYC8PD&wxL@tGyBOkwU@Sg(+@EKO=<)>N}>a(=7GxtmD^p$+hTZf4ACt&JGs{P zQgzk&7Dk{qm<}?q83+K?9OyjYxlJ@ZXQ#vspnp*<&zTfGd&&1N^MHYc8YYu-w9nlr zGTd+!-SQhM+s!=RzqA!b4-@s9VRJS#Ms1c4Bt6{`sZfmOU9g0(=9go{Fy8pK+#8WFFh+6EFJatTSm8e6&$ z5mZ`1+NIL2E+CEq0|8v2oFWnx<)XPz2}I=*34}l(ux~CirPJLHJNsonkePQ*a?bmn z_y7E!=bxOJd=;@f)Mn|*r7#%Gh8h+U34_6fhJitYGrY#F?ce}sMTQ2!$~*9{!3WFu zu>C9;Y`L3Zz^Re0Z^21?TnOzWa72J%ctK#SH6OuytC*?3-UExQ)>A_QKRN>+?hVX& z5r#ui=I1+ayH9<_yznsY)}HfOn-F5zj6^D8JEhQ*|r(wnfI`37mm)}ty9K9k8x%1KD)I|b|1QrP_5?Ca#kihME z@3%^q2aQMldMv{|Wr*+d@?Kl%9yNR~u7XRWTbZR%7O zRr%=2bBhU z|1p&hF&I5P@m(`R$=(nsZqHw??PJDkYz9UJ@0%~au;_a|KAbzF9~;TQ3tJx4or(ya z%t3k`6Ve>!z%tILKYPRz+!-@ z4}|xVALO{a=Ha(0oYPw2?|DHt7#N1A;izTmiR-mB7MHVbFxIlkH_aETu`SPL{_PeO z%cl=isC1H)(dV&D0E$r81mMluC@Q5@{b7DYflUe|O8}&qt<~9}m|LiAtdZ{4vJVWb z)hP{aegJ9=Q803eAb0}zJq?-ZM9FcoR8FhiM0+?Z!PdhfN**zq5pBN6Abfp8dxt!# zZLOY3pe)~{Di5^jC1D|9;GvD`>O=D16_b+r$d|mSRZwi*@zx886znRsP}I+}eov9Z zaG({}0=BmM(^g50Cn zpJmW{C&uZT43D!={HmN@Hw0YE;N$NeNXGB9P*ghGnq_i=&kSh@yB>LaKWy1ngFna# zuAPZBGiXR!TQ2LKtC2g&M_b|h>+9>#<}{|R!V#JAaL@xC>>b4=}h zGlTS@h=ZaEeL^F-L7I!KI+Mb-`OFjv^=B6vHM(+fk+Pid7r>?WmKD(5EH~oMDP4e{ zonCiF-EPp^oxw>@1zjRsb4_{Uror1K#*SP|_`M@jG&aBequbamTO9t>kzL={q{htj zXK>T&oGgxwsYh2nHAmvvYVMGRevKrilfnU)s-q4*Ae@aR{L}^bN2ij<6om%8<$B%J z#Nfi#vN9$=VnOoNZ&v*i^hk7OabcXt=)HlyH>=vDwx=N3v@HxaKd)>Sj=^BoZw-&l zBRzr4eji-OPK+lQFpK_HFz9$x0 zRm$cv3Mi6$$!Mq_pE7$QkcjentU(1iz8Dy@TF1ZotQX;oL+qJ!IZj4&#ma{|zuZ9- z!1q5nzEzk27y=vL4u$&y^?}1pA(lP?2_uv#9c`Ka(4@tub<2 z{)TVa>we0UIfLyg^7YNP_sWY{-OVAOOmz_r|EAsHrme%pAGpinBTf=DUTf&>bXDXN zTSIj;`!2ftM>%Jc2f`N`Y!qIa!1D7^DJz9v&vGuvlQw~>>P*0g&57tFBC~0Cl4F8+c@0Y#%s#7kY zU=$Zo<+CI{4#UTHZM3g)5#A5-cuhdKTdLdM**rEJV(B+t@brkS2f0R9CioY-X5TZ*Z~PYdB;=+91Q<@ZhKQ; zQPR@~R}(k0MZ2iv9#EbChtX`#WupWI@w@q;PfQ@=DC^YP?HS!7P*r#$%5bACiBWrW zQtivtINGJ_CN9qFmD*Cw_082-WOV)C|KfKt`7 zs~?xpxK0RXAN?oD#dz+hY+q=DLkBZFRRx{i8#x`{{ zE!s^KOmqv}9oE-YsOwMT&T8~H=!cZD%ylL{J9}yVB#qRU{b4w`r;B{L`TLIad%F0| z?m7p!MN-$EO{^y^5{-wO{xGOcy(Lzvp&KO#vrf-h#hE~s!GDJ24%2iksLJc{GQ*8J zAJMnJX3Mj)DZtl!eOPZUFR4eXOT2}HVkwsr3vEEbmX-&7$6tTRc`l~`H3MmL6B`Va zK4yKw572YKx&UflTO+^#)=0gaNeJH!3Ue64mjQ?JOT1&K8z=kJSvSb9YE`iX#*Fzo z^VgqzldIB?b!&r(*@Hz(|8C}UoIE!Cl&zG!zj+x*PrA}x;5WWx=zdG-s~8mi>Hbhr zJJo^JU6((RWvH(6Y*IJdBmrABy{Xg$vKU>unj52FORYdvA)&zAZ^DDw@0ybS$7XE- zjrU(StJiAWmr2pF+oUBR?4~Ub6|UY+}DpZJz;9nj9u_c$N={lTN<1;m^GAFKxwnLpn+j9J{dWf}{q!zR z!kE;XI+IGg>+oV14r$ubE-WIY$FZtfK$tc`r4ms`kd{YEj3mPlmg{l}_BXw&s;`** zuslmSO$@ZoHyS`C1`fogK{Cf=MU=4>T=}^3Hm>LS=DDsv`6q{0c0jTtrdnKah+BNr z<_Pm#RDoc`IW4W{LX0U~AWd6^M6`LXuteRn`JSIkTDH3pLmmawjJ9j0nCIGk}kVO&j0Nfnd2Iq zR_AgtO4L`P!(vc<&v@%S-E#Q8Xv1R@3b~@G$qtD^Ty={NPh#yYs!OVNw+6pWI1Jj8 x$9F?xP(Hi*O2flsom+Aj*DNylA965#Ms1c4Bt6{`sZfmOU9g0(=9go{Fy8pK+#8WFFh+6EFJatTSm8e6&$ z5mZ`1+NIL2E+CEq0|8v2oFWnx<)XPz2}I=*34}l(ux~CirPJLHJNsonkePQ*a?bmn z_y7E!=bxOJd=;@f)Mn|*r7#%Gh8h+U34_6fhJitYGrY#F?ce}sMTQ2!$~*9{!3WFu zu>C9;Y`L3Zz^Re0Z^21?TnOzWa72J%ctK#SH6OuytC*?3-UExQ)>A_QKRN>+?hVX& z5r#ui=I1+ayH9<_yznsY)}HfOn-F5zj6^D8JEhQ*|r(wnfI`37mm)}ty9K9k8x%1KD)I|b|1QrP_5?Ca#kihME z@3%^q2aQMldMv{|Wr*+d@?Kl%9yNR~u7XRWTbZR%7O zRr%=2bBhU z|1p&hF&I5P@m(`R$=(nsZqHw??PJDkYz9UJ@0%~au;_a|KAbzF9~;TQ3tJx4or(ya z%t3k`6Ve>!z%tILKYPRz+!-@ z4}|xVALO{a=Ha(0oYPw2?|DHt7#N1A;izTmiR-mB7MHVbFxIlkH_aETu`SPL{_PeO z%cl=isC1H)(dV&D0E$r81mMluC@Q5@{b7DYflUe|O8}&qt<~9}m|LiAtdZ{4vJVWb z)hP{aegJ9=Q803eAb0}zJq?-ZM9FcoR8FhiM0+?Z!PdhfN**zq5pBN6Abfp8dxt!# zZLOY3pe)~{Di5^jC1D|9;GvD`>O=D16_b+r$d|mSRZwi*@zx886znRsP}I+}eov9Z zaG({}0=BmM(^g50Cn zpJmW{C&uZT43D!={HmN@Hw0YE;N$NeNXGB9P*ghGnq_i=&kSh@yB>LaKWy1ngFna# zuAPZBGiXR!TQ2LKtC2g&M_b|h>+9>#<}{|R!V#JAaL@xC>>b4=}h zGlTS@h=ZaEeL^F-L7I!KI+Mb-`OFjv^=B6vHM(+fk+Pid7r>?WmKD(5EH~oMDP4e{ zonCiF-EPp^oxw>@1zjRsb4_{Uror1K#*SP|_`M@jG&aBequbamTO9t>kzL={q{htj zXK>T&oGgxwsYh2nHAmvvYVMGRevKrilfnU)s-q4*Ae@aR{L}^bN2ij<6om%8<$B%J z#Nfi#vN9$=VnOoNZ&v*i^hk7OabcXt=)HlyH>=vDwx=N3v@HxaKd)>Sj=^BoZw-&l zBRzr4eji-OPK+lQFpK_HFz9$x0 zRm$cv3Mi6$$!Mq_pE7$QkcjentU(1iz8Dy@TF1ZotQX;oL+qJ!IZj4&#ma{|zuZ9- z!1q5nzEzk27y=vL4u$&y^?}1pA(lP?2_uv#9c`Ka(4@tub<2 z{)TVa>we0UIfLyg^7YNP_sWY{-OVAOOmz_r|EAsHrme%pAGpinBTf=DUTf&>bXDXN zTSIj;`!2ftM>%Jc2f`N`Y!qIa!1D7^DJz9v&vGuvlQw~>>P*0g&57tFBC~0Cl4F8+c@0Y#%s#7kY zU=$Zo<+CI{4#UTHZM3g)5#A5-cuhdKTdLdM**rEJV(B+t@brkS2f0R9CioY-X5TZ*Z~PYdB;=+91Q<@ZhKQ; zQPR@~R}(k0MZ2iv9#EbChtX`#WupWI@w@q;PfQ@=DC^YP?HS!7P*r#$%5bACiBWrW zQtivtINGJ_CN9qFmD*Cw_082-WOV)C|KfKt`7 zs~?xpxK0RXAN?oD#dz+hY+q=DLkBZFRRx{i8#x`{{ zE!s^KOmqv}9oE-YsOwMT&T8~H=!cZD%ylL{J9}yVB#qRU{b4w`r;B{L`TLIad%F0| z?m7p!MN-$EO{^y^5{-wO{xGOcy(Lzvp&KO#vrf-h#hE~s!GDJ24%2iksLJc{GQ*8J zAJMnJX3Mj)DZtl!eOPZUFR4eXOT2}HVkwsr3vEEbmX-&7$6tTRc`l~`H3MmL6B`Va zK4yKw572YKx&UflTO+^#)=0gaNeJH!3Ue64mjQ?JOT1&K8z=kJSvSb9YE`iX#*Fzo z^VgqzldIB?b!&r(*@Hz(|8C}UoIE!Cl&zG!zj+x*PrA}x;5WWx=zdG-s~8mi>Hbhr zJJo^JU6((RWvH(6Y*IJdBmrABy{Xg$vKU>unj52FORYdvA)&zAZ^DDw@0ybS$7XE- zjrU(StJiAWmr2pF+oUBR?4~Ub6|UY+}DpZJz;9nj9u_c$N={lTN<1;m^GAFKxwnLpn+j9J{dWf}{q!zR z!kE;XI+IGg>+oV14r$ubE-WIY$FZtfK$tc`r4ms`kd{YEj3mPlmg{l}_BXw&s;`** zuslmSO$@ZoHyS`C1`fogK{Cf=MU=4>T=}^3Hm>LS=DDsv`6q{0c0jTtrdnKah+BNr z<_Pm#RDoc`IW4W{LX0U~AWd6^M6`LXuteRn`JSIkTDH3pLmmawjJ9j0nCIGk}kVO&j0Nfnd2Iq zR_AgtO4L`P!(vc<&v@%S-E#Q8Xv1R@3b~@G$qtD^Ty={NPh#yYs!OVNw+6pWI1Jj8 x$9F?xP(Hi*O2flsom+Aj*DNylA965GZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*&LBphs|4ow5q3zV@L(#o9i2S85DU~ z9KYY+BB)yNnDfNEC#IL=HXFbG!OmlFfPp!jxp?n`>Jt(P4UBC27#Tk@eP&7pGAA)I zGO8ck=%5?GCLtieC@8=tk)R+cAW$GA^ZN3ylm?`3SB)Mzg}8&I%R4cEkVwJpRE}zy^a7sKM}dw7CFp`-~>uL7jLGZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*<71FwBizhbiJpGV@L(#o2!OghXZ(+ zFWmWmY31(g&23Ew@=s(KocjIg^S<-1Co?kh7#wiON)QsB#Uqi>z{pm_Y&?;F=0r)5 z_yH9K7DUTHoFF;V5TwS3$!P+_=DY;8Pm0Dy$sjc|SXvaA!8Y7E z;Pb>eE#(-enxI~!-7Xg_nJ2V`7=kU-O@gF&${8p5MVVo+te&&SWqd$0fT zWJBY8wl7z2U)dkOG?aVp{o@}C93*e>zF56#Uzx)#2d)0SHYv)pw|%dwk!N4R+b}6) z63-j9TlZdntd*Hy#&9ZGpa15GWpDS&-9OHl$-F>istWV&M!4!vH%>d7ZOW`(fBbu) z!z~64Pt}tL@)p2V+kE>pp*II^m{*Xe(FW-Zxav`>M+1B`nT=+y(ITaRRt2dYutoa+ zf6ME~3mF)=*+EUwx7Q5wSR8qn5B~nY{CruSYEMTZtF)d%K~zrdzWe8|hfg{9yj*NP zkHH6f=3lE;t^a>(Rn~%^l_JOgA5|3J`Nwd<`c*~>6U-Dumo7ST;H<;#eSPPh6>=Fg z`gen?ky_dL?ZAp4V3L;*vpI9_Z!0_g#x0BsY~Fz@f^VfYa!i@b4xU<`Ja>4uynX${ zhUF4l!>1kKTIBZikChxtco|ezsu&g+U)Z+(@n-=KX@*me^*~inZv64*iohCa%92T= z7K3W+(V!kpT%*}(v;d*3$UMgQBX`Mqe>RB&4u=>TH3FCpGO!s47&<5%=se)LPW1nd zBEt`2%q&g{EKQ6&2?|LK4h_PMk0;f$d%2aXm8g9b((7ajqQ0;PgU*+=cy z#qjJo%Frml(U`!%EYTsMAn?HD!48%CyHxfr|Lz0iGARo10Hp+(S(xT<%y|;^v0q!9 zIUi^z&>D#Y3~Wkl94r=s7J4VQ>v_I^X)DYIw1b0%8R*0#42=xxOzJzs{yaW)^guMw zPM|ex1`UlJj7*GvEPdXe)_Py6t~%es2()9=E2FV8n!rZ$3R(&FfITrjcVd~;&8xt+ OF@vY8pUXO@geCxt9NQWI literal 0 HcmV?d00001 diff --git a/AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithMultiplierSnapshot.1.png b/AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithMultiplierSnapshot.1.png new file mode 100644 index 0000000000000000000000000000000000000000..3403543e59e28d57733e4018751c53a36951e452 GIT binary patch literal 6452 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}**w;Ng+F}-((Iltjv*C{Z>}5mMLY7a zT-^JAY3ixQ#d8~2cuY=+|JlIkxAI0yo!$KT{rt>)1r5wHFRTKNI2;Bt9x$-~;tN?M zKj~l(nA63;ApuhGz~O$Q*B57_8HHeuAOj;*qjf-Mod=sS*c1&Wg@gl)AZ9JQ)QVkl(9{}XSX|E~Tq@jzp| z?1k|8OaA?hk}|#Uvr>kieF}3v`?;>Jq%Y?wFMV><|Rr|9{EWjK|Kw z$&lbN9v>bLR7>exBuUN-iZeNzmiE{Uq%eAa%%Jf#p-mCBYMuvwLj? zQJ(A@w&DDXLjeF ze*LkEV+n7=wv)owgym+>EYAIVJ|-tRuK&8TLN3D=-+3G6eYkOEPWJ2iXGym|Rqc^u z%4A-U`>Ew?%ki{lG132x#cxl${`jkahcrX(Wc4-bHfF}pZ~dCT^9I}%vuzS>A8wp! zdHve|Ge@^Q{aRtma*561_7l$6oc(9d?A-P*U2mK2`s1$^CzvtZQu7~m@@OcJCJbt3 zzgIuc@Z4|Ro&(G3trK21mc$uefaTluP0x3?{bFKQifkub)n>Z|O^6RdKh#_g zh)-Am%cWvY>)1C{9d&?}5_`Djy_b5$&9eoXxeqv<`05b0ULpf#WB9?(vCg%Pjj%Ey zf@7!LiC3a<8$W1O?8{!EZvb}^x8il?$h}E$8{=5dm-BvQg*z!h@ky1!>TraOs~`Ma zw{YJ9xRZ2RV)#?OcEN3|5Vg5)dPN-JBv2r%84ZNdKxjZo2`35}_Nm`JeqJ_#ftiz; zC8-U= z0!)emJV4EY%q&cEIOe287ap6|-KfjP(c-|t!YpyX;Rr(`gF4f3wVhi%tNh>3G;mM= z8YXdoflY~xgT+G7;^ekRJ-Xt|(L4eijRHuP_xToOPyRCRo^fJ>1JE#o21Xtipqc`u zf=RhYC8PD&wxL@tGyBOkwU@Sg(+@EKO=<)>N}>a(=7GxtmD^p$+hTZf4ACt&JGs{P zQgzk&7Dk{qm<}?q83+K?9OyjYxlJ@ZXQ#vspnp*<&zTfGd&&1N^MHYc8YYu-w9nlr zGTd+!-SQhM+s!=RzqA!b4-@s9VRJSGZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*<8%c-f!Om^`7^1aSW+od~18$2AvIYulEzA!aD&ABiH1}4x*t}2_3E``FEHbhsaBmJ=GaVl<#eQ`Bg_ z7%f0XOWM);Vzgo%Z64rjNByxA_(fXqmAs*-pFX5 rYP9n?+DjiDYZx7r8FE8QpoU$eV%is;>urs|1|EZ_tDnm{r-UW|);Lw> literal 0 HcmV?d00001 diff --git a/AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithOffsetAndPriorityMathSnapshot.1.png b/AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithOffsetAndPriorityMathSnapshot.1.png new file mode 100644 index 0000000000000000000000000000000000000000..98ef3d4999bace4c97fc757ece7ad0b526a72ca5 GIT binary patch literal 5162 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*<8%c-f!Om^`7^1aSW+od~18$2AvIYulEzA!aD&ABiH1}4x*t}2_3E``FEHbhsaBmJ=GaVl<#eQ`Bg_ z7%f0XOWM);Vzgo%Z64rjNByxA_(fXqmAs*-pFX5 rYP9n?+DjiDYZx7r8FE8QpoU$eV%is;>urs|1|EZ_tDnm{r-UW|);Lw> literal 0 HcmV?d00001 diff --git a/AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithOffsetSnapshot.1.png b/AnchorageTests/__Snapshots__/AnchorageTests/testEqualityWithOffsetSnapshot.1.png new file mode 100644 index 0000000000000000000000000000000000000000..3403543e59e28d57733e4018751c53a36951e452 GIT binary patch literal 6452 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}**w;Ng+F}-((Iltjv*C{Z>}5mMLY7a zT-^JAY3ixQ#d8~2cuY=+|JlIkxAI0yo!$KT{rt>)1r5wHFRTKNI2;Bt9x$-~;tN?M zKj~l(nA63;ApuhGz~O$Q*B57_8HHeuAOj;*qjf-Mod=sS*c1&Wg@gl)AZ9JQ)QVkl(9{}XSX|E~Tq@jzp| z?1k|8OaA?hk}|#Uvr>kieF}3v`?;>Jq%Y?wFMV><|Rr|9{EWjK|Kw z$&lbN9v>bLR7>exBuUN-iZeNzmiE{Uq%eAa%%Jf#p-mCBYMuvwLj? zQJ(A@w&DDXLjeF ze*LkEV+n7=wv)owgym+>EYAIVJ|-tRuK&8TLN3D=-+3G6eYkOEPWJ2iXGym|Rqc^u z%4A-U`>Ew?%ki{lG132x#cxl${`jkahcrX(Wc4-bHfF}pZ~dCT^9I}%vuzS>A8wp! zdHve|Ge@^Q{aRtma*561_7l$6oc(9d?A-P*U2mK2`s1$^CzvtZQu7~m@@OcJCJbt3 zzgIuc@Z4|Ro&(G3trK21mc$uefaTluP0x3?{bFKQifkub)n>Z|O^6RdKh#_g zh)-Am%cWvY>)1C{9d&?}5_`Djy_b5$&9eoXxeqv<`05b0ULpf#WB9?(vCg%Pjj%Ey zf@7!LiC3a<8$W1O?8{!EZvb}^x8il?$h}E$8{=5dm-BvQg*z!h@ky1!>TraOs~`Ma zw{YJ9xRZ2RV)#?OcEN3|5Vg5)dPN-JBv2r%84ZNdKxjZo2`35}_Nm`JeqJ_#ftiz; zC8-U= z0!)emJV4EY%q&cEIOe287ap6|-KfjP(c-|t!YpyX;Rr(`gF4f3wVhi%tNh>3G;mM= z8YXdoflY~xgT+G7;^ekRJ-Xt|(L4eijRHuP_xToOPyRCRo^fJ>1JE#o21Xtipqc`u zf=RhYC8PD&wxL@tGyBOkwU@Sg(+@EKO=<)>N}>a(=7GxtmD^p$+hTZf4ACt&JGs{P zQgzk&7Dk{qm<}?q83+K?9OyjYxlJ@ZXQ#vspnp*<&zTfGd&&1N^MHYc8YYu-w9nlr zGTd+!-SQhM+s!=RzqA!b4-@s9VRJSGZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*&LBphs|4ow5q3zV@L(#o9i2S85DU~ z9KYY+BB)yNnDfNEC#IL=HXFbG!OmlFfPp!jxp?n`>Jt(P4UBC27#Tk@eP&7pGAA)I zGO8ck=%5?GCLtieC@8=tk)R+cAW$GA^ZN3ylm?`3SB)Mzg}8&I%R4cEkVwJpRE}zy^a7sKM}dw7CFp`-~>uL7jLGZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*&LBphs|4ow5q3zV@L(#o9i2S85DU~ z9KYY+BB)yNnDfNEC#IL=HXFbG!OmlFfPp!jxp?n`>Jt(P4UBC27#Tk@eP&7pGAA)I zGO8ck=%5?GCLtieC@8=tk)R+cAW$GA^ZN3ylm?`3SB)Mzg}8&I%R4cEkVwJpRE}zy^a7sKM}dw7CFp`-~>uL7jLGZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*&LBphs|4ow5q3zV@L(#o9i2S85DU~ z9KYY+BB)yNnDfNEC#IL=HXFbG!OmlFfPp!jxp?n`>Jt(P4UBC27#Tk@eP&7pGAA)I zGO8ck=%5?GCLtieC@8=tk)R+cAW$GA^ZN3ylm?`3SB)Mzg}8&I%R4cEkVwJpRE}zy^a7sKM}dw7CFp`-~>uL7jLGZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*&LBphs|4ow5q3zV@L(#o9i2S85DU~ z9KYY+BB)yNnDfNEC#IL=HXFbG!OmlFfPp!jxp?n`>Jt(P4UBC27#Tk@eP&7pGAA)I zGO8ck=%5?GCLtieC@8=tk)R+cAW$GA^ZN3ylm?`3SB)Mzg}8&I%R4cEkVwJpRE}zy^a7sKM}dw7CFp`-~>uL7jLGZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*&KUbEmkZ7(jA^Ijv*C{Z?13TJ>bB@ z#*FtXJ#vmN0+!##zOO=1R* zgg}9sgl@#|Jglaw9(s>Mkg-oUc z=cv-r5Eu=Ckr)C8*cll9|8ITI83SySn1b3QZ!awrWH1moyy4ycFXq}axLMkMe0g_o zCL6e{xO$+ga~UJBC^_I@zQNu8X9l=j*}$Zf0cox9zPadcH_H&jS<}EF1u9;6N|>v^ zOzuwu>(^Fjf*5r7fZX3FizPuO9pLI%FlyvzSdJ#5(cCjyY>bwdqZI`>1cpit$^PwE W?!>?;PFI1091NbWelF{r5}E*C-Hqn} literal 0 HcmV?d00001 diff --git a/AnchorageTests/__Snapshots__/AnchorageTests/testInactiveBatchConstraintsSnapshot.1.png b/AnchorageTests/__Snapshots__/AnchorageTests/testInactiveBatchConstraintsSnapshot.1.png new file mode 100644 index 0000000000000000000000000000000000000000..da3988a69ac4f6844cf52bb84004ab2d6f4ebc2d GIT binary patch literal 4810 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*<4n4{8FC+X*N$6$B+ufH`g}`9ySnQ zcKmkVMD?jv$c9E?FPjs)Oy_@4fx^9hmp?${ZFv%otX$vyY9Z9Vl>< z!NGyC>uSTt6CWE^+eqAR1`K!8OT}6=?RE)I9#i!Xy$fcSk#!q zpfI7~NY;UhClxy!ViZO#84a${)HRwWKoe;Qc7wn7ucpt}d;{yteO z2{P#bSI2@;BS*t>G!c#Fp3!1sw7eXxD8L~wRBA}}zo&91F8Zh70&Gbzc)I$ztaD0e F0s!~3JKO*O literal 0 HcmV?d00001 diff --git a/AnchorageTests/__Snapshots__/AnchorageTests/testNestedBatchConstraintsSnapshots.1.png b/AnchorageTests/__Snapshots__/AnchorageTests/testNestedBatchConstraintsSnapshots.1.png new file mode 100644 index 0000000000000000000000000000000000000000..3403543e59e28d57733e4018751c53a36951e452 GIT binary patch literal 6452 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}**w;Ng+F}-((Iltjv*C{Z>}5mMLY7a zT-^JAY3ixQ#d8~2cuY=+|JlIkxAI0yo!$KT{rt>)1r5wHFRTKNI2;Bt9x$-~;tN?M zKj~l(nA63;ApuhGz~O$Q*B57_8HHeuAOj;*qjf-Mod=sS*c1&Wg@gl)AZ9JQ)QVkl(9{}XSX|E~Tq@jzp| z?1k|8OaA?hk}|#Uvr>kieF}3v`?;>Jq%Y?wFMV><|Rr|9{EWjK|Kw z$&lbN9v>bLR7>exBuUN-iZeNzmiE{Uq%eAa%%Jf#p-mCBYMuvwLj? zQJ(A@w&DDXLjeF ze*LkEV+n7=wv)owgym+>EYAIVJ|-tRuK&8TLN3D=-+3G6eYkOEPWJ2iXGym|Rqc^u z%4A-U`>Ew?%ki{lG132x#cxl${`jkahcrX(Wc4-bHfF}pZ~dCT^9I}%vuzS>A8wp! zdHve|Ge@^Q{aRtma*561_7l$6oc(9d?A-P*U2mK2`s1$^CzvtZQu7~m@@OcJCJbt3 zzgIuc@Z4|Ro&(G3trK21mc$uefaTluP0x3?{bFKQifkub)n>Z|O^6RdKh#_g zh)-Am%cWvY>)1C{9d&?}5_`Djy_b5$&9eoXxeqv<`05b0ULpf#WB9?(vCg%Pjj%Ey zf@7!LiC3a<8$W1O?8{!EZvb}^x8il?$h}E$8{=5dm-BvQg*z!h@ky1!>TraOs~`Ma zw{YJ9xRZ2RV)#?OcEN3|5Vg5)dPN-JBv2r%84ZNdKxjZo2`35}_Nm`JeqJ_#ftiz; zC8-U= z0!)emJV4EY%q&cEIOe287ap6|-KfjP(c-|t!YpyX;Rr(`gF4f3wVhi%tNh>3G;mM= z8YXdoflY~xgT+G7;^ekRJ-Xt|(L4eijRHuP_xToOPyRCRo^fJ>1JE#o21Xtipqc`u zf=RhYC8PD&wxL@tGyBOkwU@Sg(+@EKO=<)>N}>a(=7GxtmD^p$+hTZf4ACt&JGs{P zQgzk&7Dk{qm<}?q83+K?9OyjYxlJ@ZXQ#vspnp*<&zTfGd&&1N^MHYc8YYu-w9nlr zGTd+!-SQhM+s!=RzqA!b4-@s9VRJSGZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*&LBphs|4ow5q3zV@L(#o9i2S85DU~ z9KYY+BB)yNnDfNEC#IL=HXFbG!OmlFfPp!jxp?n`>Jt(P4UBC27#Tk@eP&7pGAA)I zGO8ck=%5?GCLtieC@8=tk)R+cAW$GA^ZN3ylm?`3SB)Mzg}8&I%R4cEkVwJpRE}zy^a7sKM}dw7CFp`-~>uL7jLGZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*<4n4{8FC+X*N$6$B+ufH`g}`9ySnQ zcKmkVMD?jv$c9E?FPjs)Oy_@4fx^9hmp?${ZFv%otX$vyY9Z9Vl>< z!NGyC>uSTt6CWE^+eqAR1`K!8OT}6=?RE)I9#i!Xy$fcSk#!q zpfI7~NY;UhClxy!ViZO#84a${)HRwWKoe;Qc7wn7ucpt}d;{yteO z2{P#bSI2@;BS*t>G!c#Fp3!1sw7eXxD8L~wRBA}}zo&91F8Zh70&Gbzc)I$ztaD0e F0s!~3JKO*O literal 0 HcmV?d00001 diff --git a/AnchorageTests/__Snapshots__/AnchorageTests/testVerticalAnchorsSnapshot.1.png b/AnchorageTests/__Snapshots__/AnchorageTests/testVerticalAnchorsSnapshot.1.png new file mode 100644 index 0000000000000000000000000000000000000000..238496f223136c33d7931c89e63298d116035cab GIT binary patch literal 5156 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9Be?5hW%z|fD~hKkh>GZx^prwfgH{PkH}&M z1~F9-X7mhF`2ZA@$#n4#0n$uB3<4*BSOZD}*<1`#PJ6W?>~CX#$)h-k-5Ku=jdbc&-@EMy4@FM z=J~_JapIP}0i$3bo5YU}Mn*va`)mDwBG%Teu0Pw*z|qmb!NJU2;SY>IBu8ePTr8_!AZFbA5eq;O3gW_91z^8MfL+&Oz4WG=Ev zo42*>Ic}By;2zkmNLF9F_xDzDv3a~Pnn|OcKncImm_P}R(d0Cmu}4d%(IR%VvO}w9 zN9ze%*AoZifz7-B|MzUGVFtGAPJ-HXZ%12oz))`(ZPksouaUbOqn(7&JTcnmMD2o) l=84ffF`6d^U!FK1ZO2!PC{xWt~$(696uo;7tGk literal 0 HcmV?d00001 diff --git a/Podfile b/Podfile new file mode 100644 index 0000000..9340321 --- /dev/null +++ b/Podfile @@ -0,0 +1,27 @@ +# Uncomment the next line to define a global platform for your project + +target 'AnchorageTests-iOS' do + # Comment the next line if you're not using Swift and don't want to use dynamic frameworks + use_frameworks! + pod 'SnapshotTesting', '~> 1.1' + pod 'Then' +end + +target 'AnchorageTests-macOS' do + # Comment the next line if you're not using Swift and don't want to use dynamic frameworks + use_frameworks! + pod 'SnapshotTesting', '~> 1.1' + pod 'Then' +end + +target 'Anchorage-tvOS' do + # Comment the next line if you're not using Swift and don't want to use dynamic frameworks + use_frameworks! + pod 'SnapshotTesting', '~> 1.1' + pod 'Then' +end + +target 'AnchorageDemo' do + # Comment the next line if you're not using Swift and don't want to use dynamic frameworks + use_frameworks! +end diff --git a/Podfile.lock b/Podfile.lock new file mode 100644 index 0000000..f27db4c --- /dev/null +++ b/Podfile.lock @@ -0,0 +1,20 @@ +PODS: + - SnapshotTesting (1.1.0) + - Then (2.4.0) + +DEPENDENCIES: + - SnapshotTesting (~> 1.1) + - Then + +SPEC REPOS: + https://github.com/cocoapods/specs.git: + - SnapshotTesting + - Then + +SPEC CHECKSUMS: + SnapshotTesting: 8ed6a4dceee63f59a60e1bc86f9adbba54eb9287 + Then: 71866660c7af35a7343831f7668e7cd2b62ee0f2 + +PODFILE CHECKSUM: f0b6003146c0e1bda449be289c768e21c2b2f097 + +COCOAPODS: 1.6.0 From 14db2e7d4befc42a1a90f95fff7e137e9adeb760 Mon Sep 17 00:00:00 2001 From: Brian Semiglia Date: Fri, 15 Feb 2019 12:02:30 -0500 Subject: [PATCH 2/6] Adds gems and pods. --- .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + Gemfile | 2 +- Gemfile.lock | 75 +- Podfile | 10 +- Podfile.lock | 2 +- Pods/Manifest.lock | 20 + Pods/Pods.xcodeproj/project.pbxproj | 2103 +++++++++++++++++ Pods/SnapshotTesting/LICENSE | 21 + Pods/SnapshotTesting/README.md | 206 ++ .../SnapshotTesting/AssertSnapshot.swift | 193 ++ .../Sources/SnapshotTesting/Async.swift | 39 + .../SnapshotTesting/Common/Internal.swift | 11 + .../SnapshotTesting/Common/PlistEncoder.swift | 1828 ++++++++++++++ .../Sources/SnapshotTesting/Common/View.swift | 653 +++++ .../Common/XCTAttachment.swift | 8 + .../Sources/SnapshotTesting/Diff.swift | 125 + .../Sources/SnapshotTesting/Diffing.swift | 34 + .../SnapshotTesting/SnapshotTestCase.swift | 146 ++ .../SnapshotTesting/Snapshotting.swift | 90 + .../SnapshotTesting/Snapshotting/Any.swift | 137 ++ .../Snapshotting/CALayer.swift | 49 + .../Snapshotting/CaseIterable.swift | 25 + .../Snapshotting/Codable.swift | 40 + .../SnapshotTesting/Snapshotting/Data.swift | 17 + .../Snapshotting/Description.swift | 7 + .../Snapshotting/NSImage.swift | 110 + .../SnapshotTesting/Snapshotting/NSView.swift | 46 + .../Snapshotting/NSViewController.swift | 26 + .../Snapshotting/SceneKit.swift | 42 + .../Snapshotting/SpriteKit.swift | 42 + .../SnapshotTesting/Snapshotting/String.swift | 26 + .../Snapshotting/UIImage.swift | 103 + .../SnapshotTesting/Snapshotting/UIView.swift | 62 + .../Snapshotting/UIViewController.swift | 110 + .../Snapshotting/URLRequest.swift | 19 + .../Pods-Anchorage-tvOS-Info.plist | 26 + ...s-Anchorage-tvOS-acknowledgements.markdown | 53 + ...Pods-Anchorage-tvOS-acknowledgements.plist | 91 + .../Pods-Anchorage-tvOS-dummy.m | 5 + .../Pods-Anchorage-tvOS-umbrella.h | 16 + .../Pods-Anchorage-tvOS.debug.xcconfig | 10 + .../Pods-Anchorage-tvOS.modulemap | 6 + .../Pods-Anchorage-tvOS.release.xcconfig | 10 + .../Pods-AnchorageDemo-Info.plist | 26 + ...ds-AnchorageDemo-acknowledgements.markdown | 3 + .../Pods-AnchorageDemo-acknowledgements.plist | 29 + .../Pods-AnchorageDemo-dummy.m | 5 + .../Pods-AnchorageDemo-umbrella.h | 16 + .../Pods-AnchorageDemo.debug.xcconfig | 6 + .../Pods-AnchorageDemo.modulemap | 6 + .../Pods-AnchorageDemo.release.xcconfig | 6 + .../Pods-AnchorageTests-iOS-Info.plist | 26 + ...chorageTests-iOS-acknowledgements.markdown | 53 + ...-AnchorageTests-iOS-acknowledgements.plist | 91 + .../Pods-AnchorageTests-iOS-dummy.m | 5 + .../Pods-AnchorageTests-iOS-frameworks.sh | 165 ++ .../Pods-AnchorageTests-iOS-umbrella.h | 16 + .../Pods-AnchorageTests-iOS.debug.xcconfig | 11 + .../Pods-AnchorageTests-iOS.modulemap | 6 + .../Pods-AnchorageTests-iOS.release.xcconfig | 11 + .../Pods-AnchorageTests-macOS-Info.plist | 26 + ...orageTests-macOS-acknowledgements.markdown | 53 + ...nchorageTests-macOS-acknowledgements.plist | 91 + .../Pods-AnchorageTests-macOS-dummy.m | 5 + .../Pods-AnchorageTests-macOS-frameworks.sh | 165 ++ .../Pods-AnchorageTests-macOS-umbrella.h | 16 + .../Pods-AnchorageTests-macOS.debug.xcconfig | 12 + .../Pods-AnchorageTests-macOS.modulemap | 6 + ...Pods-AnchorageTests-macOS.release.xcconfig | 12 + .../SnapshotTesting-iOS-Info.plist | 26 + .../SnapshotTesting-iOS-dummy.m | 5 + .../SnapshotTesting-iOS-prefix.pch | 12 + .../SnapshotTesting-iOS-umbrella.h | 16 + .../SnapshotTesting-iOS.modulemap | 6 + .../SnapshotTesting-iOS.xcconfig | 10 + .../SnapshotTesting-macOS-Info.plist | 26 + .../SnapshotTesting-macOS-dummy.m | 5 + .../SnapshotTesting-macOS-prefix.pch | 12 + .../SnapshotTesting-macOS-umbrella.h | 16 + .../SnapshotTesting-macOS.modulemap | 6 + .../SnapshotTesting-macOS.xcconfig | 11 + .../SnapshotTesting-tvOS-Info.plist | 26 + .../SnapshotTesting-tvOS-dummy.m | 5 + .../SnapshotTesting-tvOS-prefix.pch | 12 + .../SnapshotTesting-tvOS-umbrella.h | 16 + .../SnapshotTesting-tvOS.modulemap | 6 + .../SnapshotTesting-tvOS.xcconfig | 10 + .../Then-iOS/Then-iOS-Info.plist | 26 + .../Then-iOS/Then-iOS-dummy.m | 5 + .../Then-iOS/Then-iOS-prefix.pch | 12 + .../Then-iOS/Then-iOS-umbrella.h | 16 + .../Then-iOS/Then-iOS.modulemap | 6 + .../Then-iOS/Then-iOS.xcconfig | 9 + .../Then-macOS/Then-macOS-Info.plist | 26 + .../Then-macOS/Then-macOS-dummy.m | 5 + .../Then-macOS/Then-macOS-prefix.pch | 12 + .../Then-macOS/Then-macOS-umbrella.h | 16 + .../Then-macOS/Then-macOS.modulemap | 6 + .../Then-macOS/Then-macOS.xcconfig | 10 + .../Then-tvOS/Then-tvOS-Info.plist | 26 + .../Then-tvOS/Then-tvOS-dummy.m | 5 + .../Then-tvOS/Then-tvOS-prefix.pch | 12 + .../Then-tvOS/Then-tvOS-umbrella.h | 16 + .../Then-tvOS/Then-tvOS.modulemap | 6 + .../Then-tvOS/Then-tvOS.xcconfig | 9 + Pods/Then/LICENSE | 21 + Pods/Then/README.md | 131 + Pods/Then/Sources/Then/Then.swift | 85 + 109 files changed, 8175 insertions(+), 40 deletions(-) create mode 100644 Anchorage.xcworkspace/contents.xcworkspacedata create mode 100644 Anchorage.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Pods/Manifest.lock create mode 100644 Pods/Pods.xcodeproj/project.pbxproj create mode 100644 Pods/SnapshotTesting/LICENSE create mode 100644 Pods/SnapshotTesting/README.md create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/AssertSnapshot.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Async.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Common/Internal.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Common/PlistEncoder.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Common/View.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Common/XCTAttachment.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Diff.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Diffing.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/SnapshotTestCase.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Any.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/CALayer.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/CaseIterable.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Codable.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Data.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Description.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/NSImage.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/NSView.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/NSViewController.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/SceneKit.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/SpriteKit.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/String.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/UIImage.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/UIView.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/UIViewController.swift create mode 100644 Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/URLRequest.swift create mode 100644 Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-Info.plist create mode 100644 Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.markdown create mode 100644 Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.plist create mode 100644 Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-dummy.m create mode 100644 Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-umbrella.h create mode 100644 Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.debug.xcconfig create mode 100644 Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.modulemap create mode 100644 Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.release.xcconfig create mode 100644 Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-Info.plist create mode 100644 Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-acknowledgements.markdown create mode 100644 Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-acknowledgements.plist create mode 100644 Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-dummy.m create mode 100644 Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-umbrella.h create mode 100644 Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.debug.xcconfig create mode 100644 Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.modulemap create mode 100644 Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.release.xcconfig create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-Info.plist create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-acknowledgements.markdown create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-acknowledgements.plist create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-dummy.m create mode 100755 Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-frameworks.sh create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-umbrella.h create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.debug.xcconfig create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.modulemap create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.release.xcconfig create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-Info.plist create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-acknowledgements.markdown create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-acknowledgements.plist create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-dummy.m create mode 100755 Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-frameworks.sh create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-umbrella.h create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.debug.xcconfig create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.modulemap create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.release.xcconfig create mode 100644 Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-Info.plist create mode 100644 Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-dummy.m create mode 100644 Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-prefix.pch create mode 100644 Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-umbrella.h create mode 100644 Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS.modulemap create mode 100644 Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS.xcconfig create mode 100644 Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-Info.plist create mode 100644 Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-dummy.m create mode 100644 Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-prefix.pch create mode 100644 Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-umbrella.h create mode 100644 Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS.modulemap create mode 100644 Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS.xcconfig create mode 100644 Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-Info.plist create mode 100644 Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-dummy.m create mode 100644 Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-prefix.pch create mode 100644 Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-umbrella.h create mode 100644 Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.modulemap create mode 100644 Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.xcconfig create mode 100644 Pods/Target Support Files/Then-iOS/Then-iOS-Info.plist create mode 100644 Pods/Target Support Files/Then-iOS/Then-iOS-dummy.m create mode 100644 Pods/Target Support Files/Then-iOS/Then-iOS-prefix.pch create mode 100644 Pods/Target Support Files/Then-iOS/Then-iOS-umbrella.h create mode 100644 Pods/Target Support Files/Then-iOS/Then-iOS.modulemap create mode 100644 Pods/Target Support Files/Then-iOS/Then-iOS.xcconfig create mode 100644 Pods/Target Support Files/Then-macOS/Then-macOS-Info.plist create mode 100644 Pods/Target Support Files/Then-macOS/Then-macOS-dummy.m create mode 100644 Pods/Target Support Files/Then-macOS/Then-macOS-prefix.pch create mode 100644 Pods/Target Support Files/Then-macOS/Then-macOS-umbrella.h create mode 100644 Pods/Target Support Files/Then-macOS/Then-macOS.modulemap create mode 100644 Pods/Target Support Files/Then-macOS/Then-macOS.xcconfig create mode 100644 Pods/Target Support Files/Then-tvOS/Then-tvOS-Info.plist create mode 100644 Pods/Target Support Files/Then-tvOS/Then-tvOS-dummy.m create mode 100644 Pods/Target Support Files/Then-tvOS/Then-tvOS-prefix.pch create mode 100644 Pods/Target Support Files/Then-tvOS/Then-tvOS-umbrella.h create mode 100644 Pods/Target Support Files/Then-tvOS/Then-tvOS.modulemap create mode 100644 Pods/Target Support Files/Then-tvOS/Then-tvOS.xcconfig create mode 100644 Pods/Then/LICENSE create mode 100644 Pods/Then/README.md create mode 100644 Pods/Then/Sources/Then/Then.swift diff --git a/Anchorage.xcworkspace/contents.xcworkspacedata b/Anchorage.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..5c29e1a --- /dev/null +++ b/Anchorage.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Anchorage.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Anchorage.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Anchorage.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Gemfile b/Gemfile index 369c26e..28bba22 100644 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,4 @@ source 'https://rubygems.org' -gem 'cocoapods', '1.6.0.beta.1' +gem 'cocoapods' gem 'fastlane' diff --git a/Gemfile.lock b/Gemfile.lock index 29f7de0..bc55694 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,22 +2,22 @@ GEM remote: https://rubygems.org/ specs: CFPropertyList (3.0.0) - activesupport (4.2.10) + activesupport (4.2.11) i18n (~> 0.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) - addressable (2.5.2) + addressable (2.6.0) public_suffix (>= 2.0.2, < 4.0) atomos (0.1.3) babosa (1.0.2) claide (1.0.2) - cocoapods (1.6.0.beta.1) + cocoapods (1.6.0) activesupport (>= 4.0.2, < 5) claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.6.0.beta.1) + cocoapods-core (= 1.6.0) cocoapods-deintegrate (>= 1.0.2, < 2.0) - cocoapods-downloader (>= 1.2.1, < 2.0) + cocoapods-downloader (>= 1.2.2, < 2.0) cocoapods-plugins (>= 1.0.0, < 2.0) cocoapods-search (>= 1.0.0, < 2.0) cocoapods-stats (>= 1.0.0, < 2.0) @@ -25,22 +25,22 @@ GEM cocoapods-try (>= 1.1.0, < 2.0) colored2 (~> 3.1) escape (~> 0.0.4) - fourflusher (~> 2.0.1) + fourflusher (>= 2.2.0, < 3.0) gh_inspector (~> 1.0) molinillo (~> 0.6.6) nap (~> 1.0) - ruby-macho (~> 1.2) - xcodeproj (>= 1.6.0, < 2.0) - cocoapods-core (1.6.0.beta.1) + ruby-macho (~> 1.3, >= 1.3.1) + xcodeproj (>= 1.8.0, < 2.0) + cocoapods-core (1.6.0) activesupport (>= 4.0.2, < 6) fuzzy_match (~> 2.0.4) nap (~> 1.0) cocoapods-deintegrate (1.0.2) - cocoapods-downloader (1.2.1) + cocoapods-downloader (1.2.2) cocoapods-plugins (1.0.0) nap cocoapods-search (1.0.0) - cocoapods-stats (1.0.0) + cocoapods-stats (1.1.0) cocoapods-trunk (1.3.1) nap (>= 0.8, < 2.0) netrc (~> 0.11) @@ -49,32 +49,33 @@ GEM colored2 (3.1.2) commander-fastlane (4.4.6) highline (~> 1.7.2) - concurrent-ruby (1.0.5) + concurrent-ruby (1.1.4) declarative (0.0.10) declarative-option (0.1.0) + digest-crc (0.4.1) domain_name (0.5.20180417) unf (>= 0.0.5, < 1.0.0) - dotenv (2.5.0) - emoji_regex (0.1.1) + dotenv (2.6.0) + emoji_regex (1.0.1) escape (0.0.4) excon (0.62.0) - faraday (0.15.3) + faraday (0.15.4) multipart-post (>= 1.2, < 3) faraday-cookie_jar (0.0.6) faraday (>= 0.7.4) http-cookie (~> 1.0.0) - faraday_middleware (0.12.2) + faraday_middleware (0.13.1) faraday (>= 0.7.4, < 1.0) - fastimage (2.1.4) - fastlane (2.105.1) + fastimage (2.1.5) + fastlane (2.116.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.3, < 3.0.0) babosa (>= 1.0.2, < 2.0.0) - bundler (>= 1.12.0, < 2.0.0) + bundler (>= 1.12.0, < 3.0.0) colored commander-fastlane (>= 4.4.6, < 5.0.0) dotenv (>= 2.1.1, < 3.0.0) - emoji_regex (~> 0.1) + emoji_regex (>= 0.1, < 2.0) excon (>= 0.45.0, < 1.0.0) faraday (~> 0.9) faraday-cookie_jar (~> 0.0.6) @@ -82,6 +83,7 @@ GEM fastimage (>= 2.1.0, < 3.0.0) gh_inspector (>= 1.1.2, < 2.0.0) google-api-client (>= 0.21.2, < 0.24.0) + google-cloud-storage (>= 1.15.0, < 2.0.0) highline (>= 1.7.2, < 2.0.0) json (< 3.0.0) mini_magick (~> 4.5.1) @@ -102,7 +104,7 @@ GEM xcodeproj (>= 1.6.0, < 2.0.0) xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) - fourflusher (2.0.1) + fourflusher (2.2.0) fuzzy_match (2.0.4) gh_inspector (1.1.3) google-api-client (0.23.9) @@ -113,10 +115,19 @@ GEM representable (~> 3.0) retriable (>= 2.0, < 4.0) signet (~> 0.9) - googleauth (0.6.6) + google-cloud-core (1.3.0) + google-cloud-env (~> 1.0) + google-cloud-env (1.0.5) + faraday (~> 0.11) + google-cloud-storage (1.16.0) + digest-crc (~> 0.4) + google-api-client (~> 0.23) + google-cloud-core (~> 1.2) + googleauth (>= 0.6.2, < 0.10.0) + googleauth (0.6.7) faraday (~> 0.12) jwt (>= 1.4, < 3.0) - memoist (~> 0.12) + memoist (~> 0.16) multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (~> 0.7) @@ -143,7 +154,7 @@ GEM naturally (2.2.0) netrc (0.11.0) os (1.0.0) - plist (3.4.0) + plist (3.5.0) public_suffix (2.0.5) representable (3.0.4) declarative (< 0.1.0) @@ -151,10 +162,10 @@ GEM uber (< 0.2.0) retriable (3.1.2) rouge (2.0.7) - ruby-macho (1.2.0) + ruby-macho (1.3.1) rubyzip (1.2.2) security (0.1.3) - signet (0.9.2) + signet (0.11.0) addressable (~> 2.3) faraday (~> 0.9) jwt (>= 1.5, < 3.0) @@ -169,17 +180,17 @@ GEM thread_safe (0.3.6) tty-cursor (0.6.0) tty-screen (0.6.5) - tty-spinner (0.8.0) - tty-cursor (>= 0.5.0) + tty-spinner (0.9.0) + tty-cursor (~> 0.6.0) tzinfo (1.2.5) thread_safe (~> 0.1) uber (0.1.0) unf (0.1.4) unf_ext unf_ext (0.0.7.5) - unicode-display_width (1.4.0) + unicode-display_width (1.4.1) word_wrap (1.0.0) - xcodeproj (1.6.0) + xcodeproj (1.8.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) @@ -194,8 +205,8 @@ PLATFORMS ruby DEPENDENCIES - cocoapods (= 1.6.0.beta.1) + cocoapods fastlane BUNDLED WITH - 1.16.3 + 1.17.1 diff --git a/Podfile b/Podfile index 9340321..091bdad 100644 --- a/Podfile +++ b/Podfile @@ -1,27 +1,25 @@ -# Uncomment the next line to define a global platform for your project - target 'AnchorageTests-iOS' do - # Comment the next line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! + platform :ios, '10.0' pod 'SnapshotTesting', '~> 1.1' pod 'Then' end target 'AnchorageTests-macOS' do - # Comment the next line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! + platform :osx, '10.10' pod 'SnapshotTesting', '~> 1.1' pod 'Then' end target 'Anchorage-tvOS' do - # Comment the next line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! + platform :tvos, '10.0' pod 'SnapshotTesting', '~> 1.1' pod 'Then' end target 'AnchorageDemo' do - # Comment the next line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! + platform :ios, '9.0' end diff --git a/Podfile.lock b/Podfile.lock index f27db4c..4cbcf1c 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -15,6 +15,6 @@ SPEC CHECKSUMS: SnapshotTesting: 8ed6a4dceee63f59a60e1bc86f9adbba54eb9287 Then: 71866660c7af35a7343831f7668e7cd2b62ee0f2 -PODFILE CHECKSUM: f0b6003146c0e1bda449be289c768e21c2b2f097 +PODFILE CHECKSUM: 3e1cda0e7bcffcd2db4dc54a1e5712d08d8ee748 COCOAPODS: 1.6.0 diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock new file mode 100644 index 0000000..4cbcf1c --- /dev/null +++ b/Pods/Manifest.lock @@ -0,0 +1,20 @@ +PODS: + - SnapshotTesting (1.1.0) + - Then (2.4.0) + +DEPENDENCIES: + - SnapshotTesting (~> 1.1) + - Then + +SPEC REPOS: + https://github.com/cocoapods/specs.git: + - SnapshotTesting + - Then + +SPEC CHECKSUMS: + SnapshotTesting: 8ed6a4dceee63f59a60e1bc86f9adbba54eb9287 + Then: 71866660c7af35a7343831f7668e7cd2b62ee0f2 + +PODFILE CHECKSUM: 3e1cda0e7bcffcd2db4dc54a1e5712d08d8ee748 + +COCOAPODS: 1.6.0 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..d0be523 --- /dev/null +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,2103 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0167287920ACCDBAA36FAF440B2E73BC /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965C55CAF130A9BA3EF2A4EB62D40B20 /* Codable.swift */; }; + 044695191A43AAF858614BBBA8D97DCA /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 256A9B440AA096A008732B2CF616C060 /* UIImage.swift */; }; + 0455F698AB7884BFF3CA43BD510412FD /* AssertSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2406EA61EA89943674005A9CD4B3639 /* AssertSnapshot.swift */; }; + 0586DAAF9509D0885F2EF9ACD73F6CF1 /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42405E80DC247CD63E08C2C8657166AD /* UIView.swift */; }; + 074F049A26BEB9F82D00F9CCAE375143 /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C9F3139F433DBFF38C02433A821DA65 /* Internal.swift */; }; + 080ACCCFD506DF6A66B8EB76A24E5922 /* SnapshotTesting-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C23E22AE1F55A83B348296F06156DF88 /* SnapshotTesting-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0906BFCFB082B45515E1D760EE558A5F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CA96865A965D5D8980DA2F80748AF30 /* Cocoa.framework */; }; + 16BEC2B49DE2EF4D5423A2394AA67113 /* Pods-AnchorageDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 98E05442D9EBD2A1062AEE2576AB7E5B /* Pods-AnchorageDemo-dummy.m */; }; + 1EF87F1431FA2D211961216402691F58 /* Snapshotting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 358ADF75ABCA430654C79616D89ED877 /* Snapshotting.swift */; }; + 237C86AC80FAEF40046EB07872E9DBF9 /* Then-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FBD3ECC8E00D0CD8AC2BFC2AC06D2DBD /* Then-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 23DDBAA2B761B572A8A6F99A2012788B /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42405E80DC247CD63E08C2C8657166AD /* UIView.swift */; }; + 26105FA8E06688FB4B1575B5AC838AC6 /* XCTAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1933C4B1E1C7BA8D4F3CCAD5961051B1 /* XCTAttachment.swift */; }; + 261E1BEA39479A79A992976B5828C7D2 /* Pods-Anchorage-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CDD0BE9C8F7E341DA5FDCCF7E2C3C70A /* Pods-Anchorage-tvOS-dummy.m */; }; + 28BACDA624B71A7101AB724F95568946 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82BB95EE8312F63265020E276C951B38 /* XCTest.framework */; }; + 2B1008B2802CEB8ABA0FC87FAA19177D /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4DD602B6B4DF6C7325BF42A78E02B77 /* View.swift */; }; + 2D78D26C770C0DF44873D35648250724 /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965C55CAF130A9BA3EF2A4EB62D40B20 /* Codable.swift */; }; + 306D79307AA8DBA8689114810CDFDBD0 /* Pods-AnchorageTests-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C1B3B13F1EBD4A8E375BD1BD4DFDCF8B /* Pods-AnchorageTests-iOS-dummy.m */; }; + 30F5A7D54BFB5161E03976BFFFF13694 /* SceneKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A7D44FE70BCBF740D00EE0980645F9 /* SceneKit.swift */; }; + 3388275EB8683A3BFE96B2E2E0B89205 /* CALayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4347FB28511C2B3EA3202681547237EB /* CALayer.swift */; }; + 349FFFE4BBF9367090AB462817CE15E3 /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B398E5CD82632512CC28A5E297DAA24 /* Diff.swift */; }; + 37720C4945A34122A3E8F265AFF8FC86 /* XCTAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1933C4B1E1C7BA8D4F3CCAD5961051B1 /* XCTAttachment.swift */; }; + 3828224C8684DE72CE1D81BAC4198EF2 /* AssertSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2406EA61EA89943674005A9CD4B3639 /* AssertSnapshot.swift */; }; + 3ACAC45C1C50B53299D0C7FA3D35FF14 /* Then.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F89991F439FDF23E07E723F4AF9FEE2 /* Then.swift */; }; + 4080B2B491E5FAEA5A827CD25EF3388D /* Pods-AnchorageTests-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 130E3C1BFE52064305520F10086F4CD7 /* Pods-AnchorageTests-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4554AC9CC29D3325BE60E9EACEB66A96 /* CaseIterable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB91550AABC989FE4285ED023E475BB /* CaseIterable.swift */; }; + 46F47C30C5CB99BE7AD7183468FFE607 /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42405E80DC247CD63E08C2C8657166AD /* UIView.swift */; }; + 498595196417EA09CD71138787A76BCC /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42D84516C7E460DF149D03FD68A2E88 /* Description.swift */; }; + 509902FC3882651D700451F5552F7C53 /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4DD602B6B4DF6C7325BF42A78E02B77 /* View.swift */; }; + 514979C6B7AF0D7BEB5BD0AA9061E05C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80D2A407A2C3DFAA14D5816505CE16FB /* Foundation.framework */; }; + 5458252ACE68EE4A795624BB4FE41F7A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80D2A407A2C3DFAA14D5816505CE16FB /* Foundation.framework */; }; + 5A2362F4A5884F616FE8F6655D604AF5 /* Pods-Anchorage-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E5FB2229AACB26E0AF5A48B9A815393 /* Pods-Anchorage-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E10C13E4334C89D15F8585757F39CF9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80D2A407A2C3DFAA14D5816505CE16FB /* Foundation.framework */; }; + 60712D628BE923B72EDFA56887FF997F /* SnapshotTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D986863111671CA6884EC9DA424EB0BF /* SnapshotTestCase.swift */; }; + 65D1238BFDC0A1EF0B9D9862AAD4D9C3 /* SnapshotTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D986863111671CA6884EC9DA424EB0BF /* SnapshotTestCase.swift */; }; + 6A050073FC7C23A413BE40658EB866AD /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42D84516C7E460DF149D03FD68A2E88 /* Description.swift */; }; + 6B8C832556FFF979AF6AC7631AA76D7E /* SnapshotTesting-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FB58D3C73E2F40CB06D1F775F714E6DC /* SnapshotTesting-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C2CC09453B42EEDF77BDF21120FB7FC /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E76831E592E0A8751BDC86A2B46B4 /* XCTest.framework */; }; + 71228F16AC19D78BCB79C590532ACD59 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B6D259E4FC813C7C278DB9DBC5972B6 /* XCTest.framework */; }; + 727E53967147F8A5D7895383AC0200DA /* SpriteKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 317816D79B4D43319FE1C6FB17C560CC /* SpriteKit.swift */; }; + 76FA8B562250E511C2D72DE0056676AE /* Snapshotting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 358ADF75ABCA430654C79616D89ED877 /* Snapshotting.swift */; }; + 792AC7A288B65A0BFC5F05C09F7D3F0A /* Then-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D73BDB20EB2800BA1B82510954B58D89 /* Then-macOS-dummy.m */; }; + 7DB69A02D6288DA77D993519D1F9724E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1273FEF1E51F93E06A57B3C132E5D5B6 /* Foundation.framework */; }; + 7DE63442C5279D3D4429316B3BCDBF94 /* SnapshotTesting-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 55E12B99B4CCB44858E8634D026809D1 /* SnapshotTesting-tvOS-dummy.m */; }; + 7EF78B3E46CDE4C5050BE6B95EB7D304 /* SpriteKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 317816D79B4D43319FE1C6FB17C560CC /* SpriteKit.swift */; }; + 7F1C82A0EB071F6B687C120A7982B4C2 /* NSView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F30C7E11FF73DCBE6EABF21AD9625F7C /* NSView.swift */; }; + 819223C0027E07056B4F3BAE30E0BA23 /* Then-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 04C69D602595952FEE908613A2ABBB38 /* Then-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84CD20C260D38BE7E209E09B22F620EE /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F7D2836402FEAC11D1EFB5AC570C7A /* String.swift */; }; + 87F5626C142E9B50E71A2FB49A363650 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F951F364A03C68B8F8F74B13397CE018 /* URLRequest.swift */; }; + 8966646261D5CEEA92C8B78F51B39467 /* Then.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F89991F439FDF23E07E723F4AF9FEE2 /* Then.swift */; }; + 8A6E9B0FAE06368C026C29A0CE84DB24 /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B398E5CD82632512CC28A5E297DAA24 /* Diff.swift */; }; + 8C71714EA481D233D7E342D599024D7E /* Pods-AnchorageTests-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 709C480196A6206E1347DCF42BDAFA30 /* Pods-AnchorageTests-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8D7DF72EEAB0E3396F20406198792526 /* Then-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5294D90A71EE162CE8B149EAB02F62F9 /* Then-tvOS-dummy.m */; }; + 912B74E5EB5755D4FDFE5821C6B34BF9 /* Diffing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66E8ABF000AB99392E1B2817B2537EE4 /* Diffing.swift */; }; + 9139CA83DF642D9675192EC89135BFF4 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5002BD7F6695BEC29FBFB0184389338A /* Data.swift */; }; + 92D7D122B07334F3CFC536E3F328FAF0 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F7D2836402FEAC11D1EFB5AC570C7A /* String.swift */; }; + 93A1C33D6AF733FB3677DBBF65C36F1C /* NSImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9651997ADB0A2E4F8B0A940BBB85835 /* NSImage.swift */; }; + 9531006B8FD9AB31819BD7E44201351B /* XCTAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1933C4B1E1C7BA8D4F3CCAD5961051B1 /* XCTAttachment.swift */; }; + 982A5E70D6A2FB45204536CD8F2FDF11 /* CALayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4347FB28511C2B3EA3202681547237EB /* CALayer.swift */; }; + 9988890738CDFEB6FE6DE0900B911C64 /* SnapshotTesting-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 35F0C0216069B783D88624E70557DCE5 /* SnapshotTesting-macOS-dummy.m */; }; + 9AD5A7D77F4AB57A0F0E6ECD6CC85FA5 /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C9F3139F433DBFF38C02433A821DA65 /* Internal.swift */; }; + 9C10C9441D9DA3B3DC8830490166633B /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4DD602B6B4DF6C7325BF42A78E02B77 /* View.swift */; }; + 9EFA96B6F6DEDDFFEF44DD09EA82E1B1 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 256A9B440AA096A008732B2CF616C060 /* UIImage.swift */; }; + 9F5ADD5F8011A7FAEE6AF208C3AE7387 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97CACE987AA56996C27200325AE1E0FE /* Async.swift */; }; + 9FCF899E356F2D2D00D6E86B71C2DA31 /* CALayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4347FB28511C2B3EA3202681547237EB /* CALayer.swift */; }; + A2030B6E9CE7E0397E83CF9B37D24133 /* NSView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F30C7E11FF73DCBE6EABF21AD9625F7C /* NSView.swift */; }; + AACC9E6E5C62B9E2EEE5C4E6D76AE869 /* AssertSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2406EA61EA89943674005A9CD4B3639 /* AssertSnapshot.swift */; }; + ACD31C851EDCD4E1914B32817106E2CC /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C9F3139F433DBFF38C02433A821DA65 /* Internal.swift */; }; + AD9AF16A36AFE9D5FE0472516614C756 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97CACE987AA56996C27200325AE1E0FE /* Async.swift */; }; + ADCA53869A50FF60EF1C544F5026F079 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F951F364A03C68B8F8F74B13397CE018 /* URLRequest.swift */; }; + B134374E2FD2881BC40079F1C7C7D0C3 /* Any.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8633EC95242ACCC213DBAA0CEB80934D /* Any.swift */; }; + B25FF0C07A8FE1AAC975C181B584BEB9 /* PlistEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21426BF2AC1DA88C6FCA8C2D5F5A24D5 /* PlistEncoder.swift */; }; + B37268C35405C60FB3B6718C26E92BE5 /* Then-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0591342C89422D273FA0A8FB34BD40F3 /* Then-iOS-dummy.m */; }; + B6B529300AB69D23E49A7879C3FB8CE0 /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B398E5CD82632512CC28A5E297DAA24 /* Diff.swift */; }; + B82B6D2B10EEBEF976EA5FB9726404B9 /* Diffing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66E8ABF000AB99392E1B2817B2537EE4 /* Diffing.swift */; }; + BA0EE8E553BC4A1CEC2C0C67795785CC /* SceneKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A7D44FE70BCBF740D00EE0980645F9 /* SceneKit.swift */; }; + BFC0246962C462CF7251B278FBBC8566 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1273FEF1E51F93E06A57B3C132E5D5B6 /* Foundation.framework */; }; + C500ED8417B05C2ED1FCF1AE2BBAE10B /* Then.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F89991F439FDF23E07E723F4AF9FEE2 /* Then.swift */; }; + C57D94158B6171642C216402F60E06E5 /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3B55CF773D64E7EB0305E3716943D56 /* UIViewController.swift */; }; + C58A86701BDE739C4FBF763F374A0C4F /* SpriteKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 317816D79B4D43319FE1C6FB17C560CC /* SpriteKit.swift */; }; + C5FD1E84454612C06C604308D8FC9E8F /* SnapshotTesting-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DD8820F45A4555404DEB40D4A5B500C /* SnapshotTesting-iOS-dummy.m */; }; + C982DA876BC34B57C840E6DC6FCE9524 /* PlistEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21426BF2AC1DA88C6FCA8C2D5F5A24D5 /* PlistEncoder.swift */; }; + CA05A2F41D718B108823A9D265B013C9 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F7D2836402FEAC11D1EFB5AC570C7A /* String.swift */; }; + CA5AEC6E7196BDBA5E52C9158F1BDACA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CA96865A965D5D8980DA2F80748AF30 /* Cocoa.framework */; }; + CB0DAA9A3EA654BA70A2CDD11219909E /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5002BD7F6695BEC29FBFB0184389338A /* Data.swift */; }; + CB1585203B451AB3201D8BF6AD929D17 /* NSView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F30C7E11FF73DCBE6EABF21AD9625F7C /* NSView.swift */; }; + CCC86ECA5CBBD1D97A536380C603097C /* SnapshotTesting-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = ABE5E3DBC4FEA3AA43DA42C2190C33F5 /* SnapshotTesting-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CE77FC2F51C1E1574F370474AA305281 /* CaseIterable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB91550AABC989FE4285ED023E475BB /* CaseIterable.swift */; }; + D2A04E02CB46939D980309D3E92DF249 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 256A9B440AA096A008732B2CF616C060 /* UIImage.swift */; }; + D474F267F4A305299E957397A418A2F2 /* NSImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9651997ADB0A2E4F8B0A940BBB85835 /* NSImage.swift */; }; + DAA9D4579E50771252D2FDF4A485CE5A /* Any.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8633EC95242ACCC213DBAA0CEB80934D /* Any.swift */; }; + DAAB0822D509F85E1A46568F46E5D2C4 /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965C55CAF130A9BA3EF2A4EB62D40B20 /* Codable.swift */; }; + DD177876534138982E2FBD7E65A387FE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1273FEF1E51F93E06A57B3C132E5D5B6 /* Foundation.framework */; }; + DEA436989DC00453BBB3C03D898D58E0 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F951F364A03C68B8F8F74B13397CE018 /* URLRequest.swift */; }; + E014AB41C2F82355F2128AB660FEEECF /* Snapshotting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 358ADF75ABCA430654C79616D89ED877 /* Snapshotting.swift */; }; + E210E40512B1AE1D8338D2EB6A15D3EC /* CaseIterable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB91550AABC989FE4285ED023E475BB /* CaseIterable.swift */; }; + E270912E7B10BA403E5370AB51C94710 /* Pods-AnchorageTests-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7200517E4D704CFBA46453819558ABD5 /* Pods-AnchorageTests-macOS-dummy.m */; }; + E663D85E9EC79B9F9B9269D9D9D37420 /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3B55CF773D64E7EB0305E3716943D56 /* UIViewController.swift */; }; + EA2EDE1F399BAE50949B7211D455C666 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5002BD7F6695BEC29FBFB0184389338A /* Data.swift */; }; + EC686F864B71300BE53F4CCB3BF43498 /* NSImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9651997ADB0A2E4F8B0A940BBB85835 /* NSImage.swift */; }; + ECC2065C37EACB74887F3E7CFF68A3AC /* NSViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7778714CF103E155F34D274BBF7F647E /* NSViewController.swift */; }; + EE07959B238D8A3BB7F004D92E6C487D /* PlistEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21426BF2AC1DA88C6FCA8C2D5F5A24D5 /* PlistEncoder.swift */; }; + EEF6DA19C881270B3F994D7E8BE77478 /* SnapshotTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D986863111671CA6884EC9DA424EB0BF /* SnapshotTestCase.swift */; }; + EF4ED6531A27E860DFA37E0E0E9363A7 /* SceneKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A7D44FE70BCBF740D00EE0980645F9 /* SceneKit.swift */; }; + F24817F2D634138EB247EAAFF7EEA1DF /* Diffing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66E8ABF000AB99392E1B2817B2537EE4 /* Diffing.swift */; }; + F3FE7803F9443ABC3EAFDF7E82894922 /* NSViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7778714CF103E155F34D274BBF7F647E /* NSViewController.swift */; }; + F6514DC9058D01E07ABF0C21371A0418 /* Pods-AnchorageDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E6B04326391F81046FD2666FEC98FA5 /* Pods-AnchorageDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F67CEBA1909C4051481F745DD13E4C72 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CA96865A965D5D8980DA2F80748AF30 /* Cocoa.framework */; }; + F7822DE8E57DFE31F4C7A416357B540A /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97CACE987AA56996C27200325AE1E0FE /* Async.swift */; }; + F7DF8B6B841BED91E7BEB36523EB5E5A /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3B55CF773D64E7EB0305E3716943D56 /* UIViewController.swift */; }; + F7E53D5FFD347FAE2E7BB14C06FF1411 /* Then-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FE835AAFEC39ECF4A8D8484C66A00A86 /* Then-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F83A0FAC1AB07F7EC3EC912B71312D14 /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42D84516C7E460DF149D03FD68A2E88 /* Description.swift */; }; + F92C3C8388372A940FCE103CBF4F4CE0 /* Any.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8633EC95242ACCC213DBAA0CEB80934D /* Any.swift */; }; + FA5E583D715EE2C55F8DB26AC79121B7 /* NSViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7778714CF103E155F34D274BBF7F647E /* NSViewController.swift */; }; + FDFB80325A63DF5F36A558B4CD13353D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1273FEF1E51F93E06A57B3C132E5D5B6 /* Foundation.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 075E5410F22770033A17F6274315C000 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8956971230A66A9091D771C679C4D504; + remoteInfo = "Then-tvOS"; + }; + 5BCB232BC9DD74D037F4ADED82BBA55F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7610167605D0B897E54BAD036DCEA5AC; + remoteInfo = "SnapshotTesting-macOS"; + }; + 78E9433360485B8F3D9945EDD2ED8919 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B9F261CD35E95C218DA0E191B7F960C0; + remoteInfo = "SnapshotTesting-iOS"; + }; + 84544994D66844251838350725F85B53 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6D0A0A256C98D01A3A3D00616C05A47A; + remoteInfo = "Then-iOS"; + }; + E289DB4820AEED901323EA08A6822308 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1100484FD281C00F225FC545EDD53E2D; + remoteInfo = "SnapshotTesting-tvOS"; + }; + EC157CF7091980E27508E14F94025C67 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 52C1AFA5B3F0135A5A8DC1FDCFCE5628; + remoteInfo = "Then-macOS"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 04C69D602595952FEE908613A2ABBB38 /* Then-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Then-tvOS-umbrella.h"; path = "../Then-tvOS/Then-tvOS-umbrella.h"; sourceTree = ""; }; + 0591342C89422D273FA0A8FB34BD40F3 /* Then-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Then-iOS-dummy.m"; sourceTree = ""; }; + 08F4F5114C713FEE511AA2079FB6ABC1 /* SnapshotTesting-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SnapshotTesting-tvOS-prefix.pch"; path = "../SnapshotTesting-tvOS/SnapshotTesting-tvOS-prefix.pch"; sourceTree = ""; }; + 0ABFDBB7A06BB1EE9B5007814E2DEE33 /* Pods-AnchorageTests-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-macOS.release.xcconfig"; sourceTree = ""; }; + 0FC955AA8B2C7C53E6C3B0D1E7933206 /* Pods-AnchorageDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageDemo.release.xcconfig"; sourceTree = ""; }; + 1273FEF1E51F93E06A57B3C132E5D5B6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 130E3C1BFE52064305520F10086F4CD7 /* Pods-AnchorageTests-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AnchorageTests-macOS-umbrella.h"; sourceTree = ""; }; + 162C227E9398F03B64B9823922D91225 /* Then-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Then-tvOS-prefix.pch"; path = "../Then-tvOS/Then-tvOS-prefix.pch"; sourceTree = ""; }; + 173958FAB88D2F72A0F340CB2917FBA7 /* Pods-AnchorageTests-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AnchorageTests-iOS-acknowledgements.markdown"; sourceTree = ""; }; + 1933C4B1E1C7BA8D4F3CCAD5961051B1 /* XCTAttachment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XCTAttachment.swift; path = Sources/SnapshotTesting/Common/XCTAttachment.swift; sourceTree = ""; }; + 1CDA287600F0EC775621573243AED92F /* Pods-AnchorageDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AnchorageDemo-acknowledgements.markdown"; sourceTree = ""; }; + 1D23AE667D560763AA87134430AD30B2 /* Pods-AnchorageTests-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-iOS-Info.plist"; sourceTree = ""; }; + 1DD8820F45A4555404DEB40D4A5B500C /* SnapshotTesting-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapshotTesting-iOS-dummy.m"; sourceTree = ""; }; + 1E41CA265D891A900DF76602033ACB01 /* Pods-AnchorageTests-macOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AnchorageTests-macOS-acknowledgements.markdown"; sourceTree = ""; }; + 21426BF2AC1DA88C6FCA8C2D5F5A24D5 /* PlistEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlistEncoder.swift; path = Sources/SnapshotTesting/Common/PlistEncoder.swift; sourceTree = ""; }; + 224F534F86BCFC567E696947AB9074B3 /* SnapshotTesting-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "SnapshotTesting-macOS.modulemap"; path = "../SnapshotTesting-macOS/SnapshotTesting-macOS.modulemap"; sourceTree = ""; }; + 256A9B440AA096A008732B2CF616C060 /* UIImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIImage.swift; path = Sources/SnapshotTesting/Snapshotting/UIImage.swift; sourceTree = ""; }; + 27F6328B70B914857E8FBE676EF0EBA6 /* Then-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "Then-macOS.modulemap"; path = "../Then-macOS/Then-macOS.modulemap"; sourceTree = ""; }; + 317816D79B4D43319FE1C6FB17C560CC /* SpriteKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpriteKit.swift; path = Sources/SnapshotTesting/Snapshotting/SpriteKit.swift; sourceTree = ""; }; + 34201157929BF91F4DAD49F635E311A7 /* Then-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Then-macOS-prefix.pch"; path = "../Then-macOS/Then-macOS-prefix.pch"; sourceTree = ""; }; + 345B52A04C7D86A10C16E97C5B04806F /* Pods-Anchorage-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Anchorage-tvOS.modulemap"; sourceTree = ""; }; + 358ADF75ABCA430654C79616D89ED877 /* Snapshotting.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Snapshotting.swift; path = Sources/SnapshotTesting/Snapshotting.swift; sourceTree = ""; }; + 35F0C0216069B783D88624E70557DCE5 /* SnapshotTesting-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SnapshotTesting-macOS-dummy.m"; path = "../SnapshotTesting-macOS/SnapshotTesting-macOS-dummy.m"; sourceTree = ""; }; + 3E5FB2229AACB26E0AF5A48B9A815393 /* Pods-Anchorage-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Anchorage-tvOS-umbrella.h"; sourceTree = ""; }; + 3FBF92D1A6C5274E34DB08E7439E19F7 /* Then-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "Then-tvOS.modulemap"; path = "../Then-tvOS/Then-tvOS.modulemap"; sourceTree = ""; }; + 40506ABCEAA9CEEDCAF00CD0B479D195 /* SnapshotTesting-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "SnapshotTesting-tvOS.modulemap"; path = "../SnapshotTesting-tvOS/SnapshotTesting-tvOS.modulemap"; sourceTree = ""; }; + 42405E80DC247CD63E08C2C8657166AD /* UIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIView.swift; path = Sources/SnapshotTesting/Snapshotting/UIView.swift; sourceTree = ""; }; + 4347FB28511C2B3EA3202681547237EB /* CALayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CALayer.swift; path = Sources/SnapshotTesting/Snapshotting/CALayer.swift; sourceTree = ""; }; + 4DEED31A1B1DC815815B119DB1E99415 /* Then.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Then.framework; path = "Then-macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4F89991F439FDF23E07E723F4AF9FEE2 /* Then.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Then.swift; path = Sources/Then/Then.swift; sourceTree = ""; }; + 5002BD7F6695BEC29FBFB0184389338A /* Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Data.swift; path = Sources/SnapshotTesting/Snapshotting/Data.swift; sourceTree = ""; }; + 50AC94832F989B8A475CCBA624C67BD6 /* Then-macOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "Then-macOS-Info.plist"; path = "../Then-macOS/Then-macOS-Info.plist"; sourceTree = ""; }; + 521331738ADCCE09C000DCFAB7B338CB /* Pods_AnchorageTests_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AnchorageTests_iOS.framework; path = "Pods-AnchorageTests-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5294D90A71EE162CE8B149EAB02F62F9 /* Then-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Then-tvOS-dummy.m"; path = "../Then-tvOS/Then-tvOS-dummy.m"; sourceTree = ""; }; + 530541043EF3145DE0D91D08B09580BB /* Pods_AnchorageTests_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AnchorageTests_macOS.framework; path = "Pods-AnchorageTests-macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 55E12B99B4CCB44858E8634D026809D1 /* SnapshotTesting-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SnapshotTesting-tvOS-dummy.m"; path = "../SnapshotTesting-tvOS/SnapshotTesting-tvOS-dummy.m"; sourceTree = ""; }; + 57364CC62A5FF52A48E22A44537F7644 /* Pods-AnchorageDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageDemo.debug.xcconfig"; sourceTree = ""; }; + 5B6D259E4FC813C7C278DB9DBC5972B6 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 5BB304A2B316D5217FB1783186B5FFDE /* Then-tvOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "Then-tvOS-Info.plist"; path = "../Then-tvOS/Then-tvOS-Info.plist"; sourceTree = ""; }; + 5BB91550AABC989FE4285ED023E475BB /* CaseIterable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CaseIterable.swift; path = Sources/SnapshotTesting/Snapshotting/CaseIterable.swift; sourceTree = ""; }; + 60E7D8444B8491F20BAC986FF8D2ACCF /* Then-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Then-iOS-prefix.pch"; sourceTree = ""; }; + 66E8ABF000AB99392E1B2817B2537EE4 /* Diffing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diffing.swift; path = Sources/SnapshotTesting/Diffing.swift; sourceTree = ""; }; + 6A54EB1B11DA3CF0C926BE4411FE6906 /* SnapshotTesting-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "SnapshotTesting-macOS.xcconfig"; path = "../SnapshotTesting-macOS/SnapshotTesting-macOS.xcconfig"; sourceTree = ""; }; + 6A63DDBF270441261A469396FDD801C4 /* Then.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Then.framework; path = "Then-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B398E5CD82632512CC28A5E297DAA24 /* Diff.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diff.swift; path = Sources/SnapshotTesting/Diff.swift; sourceTree = ""; }; + 6DA66D97F4F4ECE35A9040B4A51F9077 /* Then.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Then.framework; path = "Then-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6ED7B055CE587655FDFA735EB338A17E /* Pods-Anchorage-tvOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Anchorage-tvOS-acknowledgements.markdown"; sourceTree = ""; }; + 709C480196A6206E1347DCF42BDAFA30 /* Pods-AnchorageTests-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AnchorageTests-iOS-umbrella.h"; sourceTree = ""; }; + 71F6E5746E6B255825E1AED14DADA428 /* SnapshotTesting-macOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "SnapshotTesting-macOS-Info.plist"; path = "../SnapshotTesting-macOS/SnapshotTesting-macOS-Info.plist"; sourceTree = ""; }; + 7200517E4D704CFBA46453819558ABD5 /* Pods-AnchorageTests-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AnchorageTests-macOS-dummy.m"; sourceTree = ""; }; + 72353BF82CC9BB789E674FD2351C2983 /* SnapshotTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapshotTesting.framework; path = "SnapshotTesting-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7778714CF103E155F34D274BBF7F647E /* NSViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSViewController.swift; path = Sources/SnapshotTesting/Snapshotting/NSViewController.swift; sourceTree = ""; }; + 79A7D44FE70BCBF740D00EE0980645F9 /* SceneKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SceneKit.swift; path = Sources/SnapshotTesting/Snapshotting/SceneKit.swift; sourceTree = ""; }; + 7C9F3139F433DBFF38C02433A821DA65 /* Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Internal.swift; path = Sources/SnapshotTesting/Common/Internal.swift; sourceTree = ""; }; + 7E0E7CE462515112D0F01EDA7A30C9F9 /* Pods-Anchorage-tvOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Anchorage-tvOS-Info.plist"; sourceTree = ""; }; + 80D2A407A2C3DFAA14D5816505CE16FB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 82BB95EE8312F63265020E276C951B38 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 85F49DB9CEEACD346E1D3983763D701A /* Then-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Then-macOS.xcconfig"; path = "../Then-macOS/Then-macOS.xcconfig"; sourceTree = ""; }; + 8633EC95242ACCC213DBAA0CEB80934D /* Any.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Any.swift; path = Sources/SnapshotTesting/Snapshotting/Any.swift; sourceTree = ""; }; + 874F07DD58B171606A8661D56E60D4E2 /* Pods-Anchorage-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Anchorage-tvOS.debug.xcconfig"; sourceTree = ""; }; + 8AC20AD3D5323FDE0DA1A4B79BB5802B /* SnapshotTesting-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "SnapshotTesting-iOS.xcconfig"; sourceTree = ""; }; + 8CA96865A965D5D8980DA2F80748AF30 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; + 8DC173513BC803B3D44E843509FD343B /* SnapshotTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapshotTesting.framework; path = "SnapshotTesting-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 93CC40A804F9ED3FF7297AA15A7D1F96 /* Pods-AnchorageDemo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AnchorageDemo.modulemap"; sourceTree = ""; }; + 965C55CAF130A9BA3EF2A4EB62D40B20 /* Codable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Codable.swift; path = Sources/SnapshotTesting/Snapshotting/Codable.swift; sourceTree = ""; }; + 974BC1C63AEF0D469F6D3E53618E8498 /* SnapshotTesting-tvOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "SnapshotTesting-tvOS-Info.plist"; path = "../SnapshotTesting-tvOS/SnapshotTesting-tvOS-Info.plist"; sourceTree = ""; }; + 97B9F0FBBE30E08BBC99FBE9A55A073D /* Then-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Then-iOS-Info.plist"; sourceTree = ""; }; + 97CACE987AA56996C27200325AE1E0FE /* Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Sources/SnapshotTesting/Async.swift; sourceTree = ""; }; + 98E05442D9EBD2A1062AEE2576AB7E5B /* Pods-AnchorageDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AnchorageDemo-dummy.m"; sourceTree = ""; }; + 99E1E5E14AF4C4AB0F648F9813C597F2 /* Pods-AnchorageTests-macOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-macOS-acknowledgements.plist"; sourceTree = ""; }; + 9CAC26450F66035389598418664255C9 /* Pods-AnchorageTests-iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-iOS-acknowledgements.plist"; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9E2F1FF0D46D83EF65DB3D40C767F470 /* Pods-AnchorageTests-macOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-macOS-Info.plist"; sourceTree = ""; }; + 9E3917A586ED6E688A514C13D065F3A8 /* Pods_AnchorageDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AnchorageDemo.framework; path = "Pods-AnchorageDemo.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 9E6B04326391F81046FD2666FEC98FA5 /* Pods-AnchorageDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AnchorageDemo-umbrella.h"; sourceTree = ""; }; + A3B55CF773D64E7EB0305E3716943D56 /* UIViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewController.swift; path = Sources/SnapshotTesting/Snapshotting/UIViewController.swift; sourceTree = ""; }; + A88810EE685E87A9025661BA3A35FCAF /* Then-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Then-iOS.modulemap"; sourceTree = ""; }; + ABE5E3DBC4FEA3AA43DA42C2190C33F5 /* SnapshotTesting-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SnapshotTesting-tvOS-umbrella.h"; path = "../SnapshotTesting-tvOS/SnapshotTesting-tvOS-umbrella.h"; sourceTree = ""; }; + B4DD602B6B4DF6C7325BF42A78E02B77 /* View.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = View.swift; path = Sources/SnapshotTesting/Common/View.swift; sourceTree = ""; }; + BDEEE3256B39A05705D8A231852F77D1 /* SnapshotTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapshotTesting.framework; path = "SnapshotTesting-macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + C12CA39317AD120E26F585F4163BACE8 /* Pods-AnchorageDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageDemo-acknowledgements.plist"; sourceTree = ""; }; + C1B3B13F1EBD4A8E375BD1BD4DFDCF8B /* Pods-AnchorageTests-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AnchorageTests-iOS-dummy.m"; sourceTree = ""; }; + C21F7BEB8D545C8A168013EA143C9DEB /* Pods-AnchorageTests-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-iOS.release.xcconfig"; sourceTree = ""; }; + C23E22AE1F55A83B348296F06156DF88 /* SnapshotTesting-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SnapshotTesting-macOS-umbrella.h"; path = "../SnapshotTesting-macOS/SnapshotTesting-macOS-umbrella.h"; sourceTree = ""; }; + C2406EA61EA89943674005A9CD4B3639 /* AssertSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertSnapshot.swift; path = Sources/SnapshotTesting/AssertSnapshot.swift; sourceTree = ""; }; + C2B3D54BEFB82791E10C2BF6C0BE4934 /* SnapshotTesting-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "SnapshotTesting-tvOS.xcconfig"; path = "../SnapshotTesting-tvOS/SnapshotTesting-tvOS.xcconfig"; sourceTree = ""; }; + C6F7D2836402FEAC11D1EFB5AC570C7A /* String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = String.swift; path = Sources/SnapshotTesting/Snapshotting/String.swift; sourceTree = ""; }; + C8D7B07BF8D79D1EE3E47061DE3605C7 /* Pods-AnchorageTests-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-macOS.debug.xcconfig"; sourceTree = ""; }; + C8EFD9CC5A1EC227C60003CB08B668E2 /* SnapshotTesting-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapshotTesting-iOS-prefix.pch"; sourceTree = ""; }; + CA3CE1BFABB0DBB44C628E752E1E3908 /* Pods-AnchorageTests-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AnchorageTests-iOS-frameworks.sh"; sourceTree = ""; }; + CDD0BE9C8F7E341DA5FDCCF7E2C3C70A /* Pods-Anchorage-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Anchorage-tvOS-dummy.m"; sourceTree = ""; }; + D14471B7C10690FD7AF60B7B40C22FFE /* SnapshotTesting-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapshotTesting-iOS-Info.plist"; sourceTree = ""; }; + D73BDB20EB2800BA1B82510954B58D89 /* Then-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Then-macOS-dummy.m"; path = "../Then-macOS/Then-macOS-dummy.m"; sourceTree = ""; }; + D986863111671CA6884EC9DA424EB0BF /* SnapshotTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SnapshotTestCase.swift; path = Sources/SnapshotTesting/SnapshotTestCase.swift; sourceTree = ""; }; + DA456BF0BBD9819DA43F59A378C4B2C4 /* Pods-Anchorage-tvOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Anchorage-tvOS-acknowledgements.plist"; sourceTree = ""; }; + DEAD4FE56B631DE55CE14FF9D7994217 /* Then-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Then-tvOS.xcconfig"; path = "../Then-tvOS/Then-tvOS.xcconfig"; sourceTree = ""; }; + E42D84516C7E460DF149D03FD68A2E88 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Sources/SnapshotTesting/Snapshotting/Description.swift; sourceTree = ""; }; + E4492EA781AF58C9A6113423DE2C116B /* Pods-AnchorageTests-macOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AnchorageTests-macOS-frameworks.sh"; sourceTree = ""; }; + E5D1AFC9A083FEB4541905EAEBB51F9E /* Then-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Then-iOS.xcconfig"; sourceTree = ""; }; + E7173700C2FA5626CEB9C8C2A931A985 /* Pods-AnchorageTests-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AnchorageTests-iOS.modulemap"; sourceTree = ""; }; + E88E76831E592E0A8751BDC86A2B46B4 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + E8AA5EA59DCC099639598C34598EC6A5 /* Pods-AnchorageTests-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-iOS.debug.xcconfig"; sourceTree = ""; }; + EB18A04AC54E6FC73DFEDA3A0EDD8165 /* Pods_Anchorage_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Anchorage_tvOS.framework; path = "Pods-Anchorage-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + ED15469099B9295DB5F98439DFA06E20 /* Pods-AnchorageTests-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AnchorageTests-macOS.modulemap"; sourceTree = ""; }; + EE01089483F81A13D6A5A57C7D31CD18 /* Pods-AnchorageDemo-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageDemo-Info.plist"; sourceTree = ""; }; + F10CCB58C8F43ADAFAFFF42808571276 /* SnapshotTesting-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "SnapshotTesting-iOS.modulemap"; sourceTree = ""; }; + F30C7E11FF73DCBE6EABF21AD9625F7C /* NSView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSView.swift; path = Sources/SnapshotTesting/Snapshotting/NSView.swift; sourceTree = ""; }; + F654D012E5B3A2D665F9D09ECC34FC4C /* Pods-Anchorage-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Anchorage-tvOS.release.xcconfig"; sourceTree = ""; }; + F951F364A03C68B8F8F74B13397CE018 /* URLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLRequest.swift; path = Sources/SnapshotTesting/Snapshotting/URLRequest.swift; sourceTree = ""; }; + F9651997ADB0A2E4F8B0A940BBB85835 /* NSImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSImage.swift; path = Sources/SnapshotTesting/Snapshotting/NSImage.swift; sourceTree = ""; }; + FB58D3C73E2F40CB06D1F775F714E6DC /* SnapshotTesting-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapshotTesting-iOS-umbrella.h"; sourceTree = ""; }; + FBD3ECC8E00D0CD8AC2BFC2AC06D2DBD /* Then-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Then-iOS-umbrella.h"; sourceTree = ""; }; + FDB6064E946A29292DAFEFF2E4D10AAC /* SnapshotTesting-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SnapshotTesting-macOS-prefix.pch"; path = "../SnapshotTesting-macOS/SnapshotTesting-macOS-prefix.pch"; sourceTree = ""; }; + FE835AAFEC39ECF4A8D8484C66A00A86 /* Then-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Then-macOS-umbrella.h"; path = "../Then-macOS/Then-macOS-umbrella.h"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1AE9591E6C6D265E0339D14D6631473A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5E10C13E4334C89D15F8585757F39CF9 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4431F18EAC5E2A958A2C12D21C29E10F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FDFB80325A63DF5F36A558B4CD13353D /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8109A18D1253773049A7E748C428F5F3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5458252ACE68EE4A795624BB4FE41F7A /* Foundation.framework in Frameworks */, + 28BACDA624B71A7101AB724F95568946 /* XCTest.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9B2AAA596DD87B21909D8A1E003C471 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 514979C6B7AF0D7BEB5BD0AA9061E05C /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2E6CAC0D83B2E762631446CF14413C5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CA5AEC6E7196BDBA5E52C9158F1BDACA /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C6F694979E05E8B8A2C5BA64BD98E38F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BFC0246962C462CF7251B278FBBC8566 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E02C41536CFDC6E8DA0E5F5DA658DD04 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0906BFCFB082B45515E1D760EE558A5F /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EB7B25A42E22A951351B1D894E8B38EA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F67CEBA1909C4051481F745DD13E4C72 /* Cocoa.framework in Frameworks */, + 71228F16AC19D78BCB79C590532ACD59 /* XCTest.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F3F2F36BE63E44A2527140324FB374F7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7DB69A02D6288DA77D993519D1F9724E /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F586FEBC392893B0109325E7A5D08279 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DD177876534138982E2FBD7E65A387FE /* Foundation.framework in Frameworks */, + 6C2CC09453B42EEDF77BDF21120FB7FC /* XCTest.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 134590C75C151DCB4D42F3180F5AF9E2 /* Support Files */ = { + isa = PBXGroup; + children = ( + A88810EE685E87A9025661BA3A35FCAF /* Then-iOS.modulemap */, + E5D1AFC9A083FEB4541905EAEBB51F9E /* Then-iOS.xcconfig */, + 0591342C89422D273FA0A8FB34BD40F3 /* Then-iOS-dummy.m */, + 97B9F0FBBE30E08BBC99FBE9A55A073D /* Then-iOS-Info.plist */, + 60E7D8444B8491F20BAC986FF8D2ACCF /* Then-iOS-prefix.pch */, + FBD3ECC8E00D0CD8AC2BFC2AC06D2DBD /* Then-iOS-umbrella.h */, + 27F6328B70B914857E8FBE676EF0EBA6 /* Then-macOS.modulemap */, + 85F49DB9CEEACD346E1D3983763D701A /* Then-macOS.xcconfig */, + D73BDB20EB2800BA1B82510954B58D89 /* Then-macOS-dummy.m */, + 50AC94832F989B8A475CCBA624C67BD6 /* Then-macOS-Info.plist */, + 34201157929BF91F4DAD49F635E311A7 /* Then-macOS-prefix.pch */, + FE835AAFEC39ECF4A8D8484C66A00A86 /* Then-macOS-umbrella.h */, + 3FBF92D1A6C5274E34DB08E7439E19F7 /* Then-tvOS.modulemap */, + DEAD4FE56B631DE55CE14FF9D7994217 /* Then-tvOS.xcconfig */, + 5294D90A71EE162CE8B149EAB02F62F9 /* Then-tvOS-dummy.m */, + 5BB304A2B316D5217FB1783186B5FFDE /* Then-tvOS-Info.plist */, + 162C227E9398F03B64B9823922D91225 /* Then-tvOS-prefix.pch */, + 04C69D602595952FEE908613A2ABBB38 /* Then-tvOS-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/Then-iOS"; + sourceTree = ""; + }; + 64374835254145A02101EB56A928CCC3 /* Then */ = { + isa = PBXGroup; + children = ( + 4F89991F439FDF23E07E723F4AF9FEE2 /* Then.swift */, + 134590C75C151DCB4D42F3180F5AF9E2 /* Support Files */, + ); + name = Then; + path = Then; + sourceTree = ""; + }; + 64DBCB6F5562C0471E906F7910F66AC5 /* Products */ = { + isa = PBXGroup; + children = ( + EB18A04AC54E6FC73DFEDA3A0EDD8165 /* Pods_Anchorage_tvOS.framework */, + 9E3917A586ED6E688A514C13D065F3A8 /* Pods_AnchorageDemo.framework */, + 521331738ADCCE09C000DCFAB7B338CB /* Pods_AnchorageTests_iOS.framework */, + 530541043EF3145DE0D91D08B09580BB /* Pods_AnchorageTests_macOS.framework */, + BDEEE3256B39A05705D8A231852F77D1 /* SnapshotTesting.framework */, + 72353BF82CC9BB789E674FD2351C2983 /* SnapshotTesting.framework */, + 8DC173513BC803B3D44E843509FD343B /* SnapshotTesting.framework */, + 6DA66D97F4F4ECE35A9040B4A51F9077 /* Then.framework */, + 4DEED31A1B1DC815815B119DB1E99415 /* Then.framework */, + 6A63DDBF270441261A469396FDD801C4 /* Then.framework */, + ); + name = Products; + sourceTree = ""; + }; + 90D1BA9A932F1D656D6FE6BE3AF749FB /* Pods-AnchorageDemo */ = { + isa = PBXGroup; + children = ( + 93CC40A804F9ED3FF7297AA15A7D1F96 /* Pods-AnchorageDemo.modulemap */, + 1CDA287600F0EC775621573243AED92F /* Pods-AnchorageDemo-acknowledgements.markdown */, + C12CA39317AD120E26F585F4163BACE8 /* Pods-AnchorageDemo-acknowledgements.plist */, + 98E05442D9EBD2A1062AEE2576AB7E5B /* Pods-AnchorageDemo-dummy.m */, + EE01089483F81A13D6A5A57C7D31CD18 /* Pods-AnchorageDemo-Info.plist */, + 9E6B04326391F81046FD2666FEC98FA5 /* Pods-AnchorageDemo-umbrella.h */, + 57364CC62A5FF52A48E22A44537F7644 /* Pods-AnchorageDemo.debug.xcconfig */, + 0FC955AA8B2C7C53E6C3B0D1E7933206 /* Pods-AnchorageDemo.release.xcconfig */, + ); + name = "Pods-AnchorageDemo"; + path = "Target Support Files/Pods-AnchorageDemo"; + sourceTree = ""; + }; + 938E161FF1BA21B965951411BC7AB597 /* iOS */ = { + isa = PBXGroup; + children = ( + 1273FEF1E51F93E06A57B3C132E5D5B6 /* Foundation.framework */, + E88E76831E592E0A8751BDC86A2B46B4 /* XCTest.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 973E9A23C1C74733B19D32FAE8AC8B41 /* tvOS */ = { + isa = PBXGroup; + children = ( + 80D2A407A2C3DFAA14D5816505CE16FB /* Foundation.framework */, + 82BB95EE8312F63265020E276C951B38 /* XCTest.framework */, + ); + name = tvOS; + sourceTree = ""; + }; + 9BC4803E4CDA94E7E1E278EBA0AA1305 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 938E161FF1BA21B965951411BC7AB597 /* iOS */, + E9EDB2EAD17FA52AE8FBEB8488C39B1F /* OS X */, + 973E9A23C1C74733B19D32FAE8AC8B41 /* tvOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + A1DF9EC1E282B66B80E6ABA1416D0CC9 /* Pods-Anchorage-tvOS */ = { + isa = PBXGroup; + children = ( + 345B52A04C7D86A10C16E97C5B04806F /* Pods-Anchorage-tvOS.modulemap */, + 6ED7B055CE587655FDFA735EB338A17E /* Pods-Anchorage-tvOS-acknowledgements.markdown */, + DA456BF0BBD9819DA43F59A378C4B2C4 /* Pods-Anchorage-tvOS-acknowledgements.plist */, + CDD0BE9C8F7E341DA5FDCCF7E2C3C70A /* Pods-Anchorage-tvOS-dummy.m */, + 7E0E7CE462515112D0F01EDA7A30C9F9 /* Pods-Anchorage-tvOS-Info.plist */, + 3E5FB2229AACB26E0AF5A48B9A815393 /* Pods-Anchorage-tvOS-umbrella.h */, + 874F07DD58B171606A8661D56E60D4E2 /* Pods-Anchorage-tvOS.debug.xcconfig */, + F654D012E5B3A2D665F9D09ECC34FC4C /* Pods-Anchorage-tvOS.release.xcconfig */, + ); + name = "Pods-Anchorage-tvOS"; + path = "Target Support Files/Pods-Anchorage-tvOS"; + sourceTree = ""; + }; + A27CC0C45581D3FAA5E81959AEE95464 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + A1DF9EC1E282B66B80E6ABA1416D0CC9 /* Pods-Anchorage-tvOS */, + 90D1BA9A932F1D656D6FE6BE3AF749FB /* Pods-AnchorageDemo */, + D95A8F4343ABB2662593B178D51F3D6C /* Pods-AnchorageTests-iOS */, + EBE22D491018BFE7D87C4565BD064503 /* Pods-AnchorageTests-macOS */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + A588AAA207969D589574AB25A7653491 /* Pods */ = { + isa = PBXGroup; + children = ( + B0C0C9DE44CE262F33DAD26E3FFFFE3D /* SnapshotTesting */, + 64374835254145A02101EB56A928CCC3 /* Then */, + ); + name = Pods; + sourceTree = ""; + }; + B0C0C9DE44CE262F33DAD26E3FFFFE3D /* SnapshotTesting */ = { + isa = PBXGroup; + children = ( + 8633EC95242ACCC213DBAA0CEB80934D /* Any.swift */, + C2406EA61EA89943674005A9CD4B3639 /* AssertSnapshot.swift */, + 97CACE987AA56996C27200325AE1E0FE /* Async.swift */, + 4347FB28511C2B3EA3202681547237EB /* CALayer.swift */, + 5BB91550AABC989FE4285ED023E475BB /* CaseIterable.swift */, + 965C55CAF130A9BA3EF2A4EB62D40B20 /* Codable.swift */, + 5002BD7F6695BEC29FBFB0184389338A /* Data.swift */, + E42D84516C7E460DF149D03FD68A2E88 /* Description.swift */, + 6B398E5CD82632512CC28A5E297DAA24 /* Diff.swift */, + 66E8ABF000AB99392E1B2817B2537EE4 /* Diffing.swift */, + 7C9F3139F433DBFF38C02433A821DA65 /* Internal.swift */, + F9651997ADB0A2E4F8B0A940BBB85835 /* NSImage.swift */, + F30C7E11FF73DCBE6EABF21AD9625F7C /* NSView.swift */, + 7778714CF103E155F34D274BBF7F647E /* NSViewController.swift */, + 21426BF2AC1DA88C6FCA8C2D5F5A24D5 /* PlistEncoder.swift */, + 79A7D44FE70BCBF740D00EE0980645F9 /* SceneKit.swift */, + D986863111671CA6884EC9DA424EB0BF /* SnapshotTestCase.swift */, + 358ADF75ABCA430654C79616D89ED877 /* Snapshotting.swift */, + 317816D79B4D43319FE1C6FB17C560CC /* SpriteKit.swift */, + C6F7D2836402FEAC11D1EFB5AC570C7A /* String.swift */, + 256A9B440AA096A008732B2CF616C060 /* UIImage.swift */, + 42405E80DC247CD63E08C2C8657166AD /* UIView.swift */, + A3B55CF773D64E7EB0305E3716943D56 /* UIViewController.swift */, + F951F364A03C68B8F8F74B13397CE018 /* URLRequest.swift */, + B4DD602B6B4DF6C7325BF42A78E02B77 /* View.swift */, + 1933C4B1E1C7BA8D4F3CCAD5961051B1 /* XCTAttachment.swift */, + D6525AFEBF4B792018308A45E0442745 /* Support Files */, + ); + name = SnapshotTesting; + path = SnapshotTesting; + sourceTree = ""; + }; + CF1408CF629C7361332E53B88F7BD30C = { + isa = PBXGroup; + children = ( + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + 9BC4803E4CDA94E7E1E278EBA0AA1305 /* Frameworks */, + A588AAA207969D589574AB25A7653491 /* Pods */, + 64DBCB6F5562C0471E906F7910F66AC5 /* Products */, + A27CC0C45581D3FAA5E81959AEE95464 /* Targets Support Files */, + ); + sourceTree = ""; + }; + D6525AFEBF4B792018308A45E0442745 /* Support Files */ = { + isa = PBXGroup; + children = ( + F10CCB58C8F43ADAFAFFF42808571276 /* SnapshotTesting-iOS.modulemap */, + 8AC20AD3D5323FDE0DA1A4B79BB5802B /* SnapshotTesting-iOS.xcconfig */, + 1DD8820F45A4555404DEB40D4A5B500C /* SnapshotTesting-iOS-dummy.m */, + D14471B7C10690FD7AF60B7B40C22FFE /* SnapshotTesting-iOS-Info.plist */, + C8EFD9CC5A1EC227C60003CB08B668E2 /* SnapshotTesting-iOS-prefix.pch */, + FB58D3C73E2F40CB06D1F775F714E6DC /* SnapshotTesting-iOS-umbrella.h */, + 224F534F86BCFC567E696947AB9074B3 /* SnapshotTesting-macOS.modulemap */, + 6A54EB1B11DA3CF0C926BE4411FE6906 /* SnapshotTesting-macOS.xcconfig */, + 35F0C0216069B783D88624E70557DCE5 /* SnapshotTesting-macOS-dummy.m */, + 71F6E5746E6B255825E1AED14DADA428 /* SnapshotTesting-macOS-Info.plist */, + FDB6064E946A29292DAFEFF2E4D10AAC /* SnapshotTesting-macOS-prefix.pch */, + C23E22AE1F55A83B348296F06156DF88 /* SnapshotTesting-macOS-umbrella.h */, + 40506ABCEAA9CEEDCAF00CD0B479D195 /* SnapshotTesting-tvOS.modulemap */, + C2B3D54BEFB82791E10C2BF6C0BE4934 /* SnapshotTesting-tvOS.xcconfig */, + 55E12B99B4CCB44858E8634D026809D1 /* SnapshotTesting-tvOS-dummy.m */, + 974BC1C63AEF0D469F6D3E53618E8498 /* SnapshotTesting-tvOS-Info.plist */, + 08F4F5114C713FEE511AA2079FB6ABC1 /* SnapshotTesting-tvOS-prefix.pch */, + ABE5E3DBC4FEA3AA43DA42C2190C33F5 /* SnapshotTesting-tvOS-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SnapshotTesting-iOS"; + sourceTree = ""; + }; + D95A8F4343ABB2662593B178D51F3D6C /* Pods-AnchorageTests-iOS */ = { + isa = PBXGroup; + children = ( + E7173700C2FA5626CEB9C8C2A931A985 /* Pods-AnchorageTests-iOS.modulemap */, + 173958FAB88D2F72A0F340CB2917FBA7 /* Pods-AnchorageTests-iOS-acknowledgements.markdown */, + 9CAC26450F66035389598418664255C9 /* Pods-AnchorageTests-iOS-acknowledgements.plist */, + C1B3B13F1EBD4A8E375BD1BD4DFDCF8B /* Pods-AnchorageTests-iOS-dummy.m */, + CA3CE1BFABB0DBB44C628E752E1E3908 /* Pods-AnchorageTests-iOS-frameworks.sh */, + 1D23AE667D560763AA87134430AD30B2 /* Pods-AnchorageTests-iOS-Info.plist */, + 709C480196A6206E1347DCF42BDAFA30 /* Pods-AnchorageTests-iOS-umbrella.h */, + E8AA5EA59DCC099639598C34598EC6A5 /* Pods-AnchorageTests-iOS.debug.xcconfig */, + C21F7BEB8D545C8A168013EA143C9DEB /* Pods-AnchorageTests-iOS.release.xcconfig */, + ); + name = "Pods-AnchorageTests-iOS"; + path = "Target Support Files/Pods-AnchorageTests-iOS"; + sourceTree = ""; + }; + E9EDB2EAD17FA52AE8FBEB8488C39B1F /* OS X */ = { + isa = PBXGroup; + children = ( + 8CA96865A965D5D8980DA2F80748AF30 /* Cocoa.framework */, + 5B6D259E4FC813C7C278DB9DBC5972B6 /* XCTest.framework */, + ); + name = "OS X"; + sourceTree = ""; + }; + EBE22D491018BFE7D87C4565BD064503 /* Pods-AnchorageTests-macOS */ = { + isa = PBXGroup; + children = ( + ED15469099B9295DB5F98439DFA06E20 /* Pods-AnchorageTests-macOS.modulemap */, + 1E41CA265D891A900DF76602033ACB01 /* Pods-AnchorageTests-macOS-acknowledgements.markdown */, + 99E1E5E14AF4C4AB0F648F9813C597F2 /* Pods-AnchorageTests-macOS-acknowledgements.plist */, + 7200517E4D704CFBA46453819558ABD5 /* Pods-AnchorageTests-macOS-dummy.m */, + E4492EA781AF58C9A6113423DE2C116B /* Pods-AnchorageTests-macOS-frameworks.sh */, + 9E2F1FF0D46D83EF65DB3D40C767F470 /* Pods-AnchorageTests-macOS-Info.plist */, + 130E3C1BFE52064305520F10086F4CD7 /* Pods-AnchorageTests-macOS-umbrella.h */, + C8D7B07BF8D79D1EE3E47061DE3605C7 /* Pods-AnchorageTests-macOS.debug.xcconfig */, + 0ABFDBB7A06BB1EE9B5007814E2DEE33 /* Pods-AnchorageTests-macOS.release.xcconfig */, + ); + name = "Pods-AnchorageTests-macOS"; + path = "Target Support Files/Pods-AnchorageTests-macOS"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 1C91BB318EE2BD00F3F4C720DDDE46CD /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 080ACCCFD506DF6A66B8EB76A24E5922 /* SnapshotTesting-macOS-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4151C4E4F4BB3296D186379E24D6BC9E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 8C71714EA481D233D7E342D599024D7E /* Pods-AnchorageTests-iOS-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5B3CADAD0BD8A745C9773A98A0DC9FF4 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F7E53D5FFD347FAE2E7BB14C06FF1411 /* Then-macOS-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 78C278DB7E53292E7C3222A58C1CD253 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 819223C0027E07056B4F3BAE30E0BA23 /* Then-tvOS-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 809E060174F4FB252A27164BF5597BD8 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F6514DC9058D01E07ABF0C21371A0418 /* Pods-AnchorageDemo-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A8E9F22E45077F1BC470668DF2C52B51 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 237C86AC80FAEF40046EB07872E9DBF9 /* Then-iOS-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B0588409D528FB9851F03684BA2FD566 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4080B2B491E5FAEA5A827CD25EF3388D /* Pods-AnchorageTests-macOS-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CAD9EFE45564A6A5C20761C8E9A3B1E1 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 5A2362F4A5884F616FE8F6655D604AF5 /* Pods-Anchorage-tvOS-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ED3C4A57B2769BDCD8E9909C8760114E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CCC86ECA5CBBD1D97A536380C603097C /* SnapshotTesting-tvOS-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F7B7AEB6C9C2E58AAE308DE746CC4EC6 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 6B8C832556FFF979AF6AC7631AA76D7E /* SnapshotTesting-iOS-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 1100484FD281C00F225FC545EDD53E2D /* SnapshotTesting-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0490C11DCFFB81CB01368158A1F2EDEA /* Build configuration list for PBXNativeTarget "SnapshotTesting-tvOS" */; + buildPhases = ( + ED3C4A57B2769BDCD8E9909C8760114E /* Headers */, + AE7A66B4B2F917D39321939B3E149630 /* Sources */, + 8109A18D1253773049A7E748C428F5F3 /* Frameworks */, + F6D38DA405A7151DA0AADEE201168006 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "SnapshotTesting-tvOS"; + productName = "SnapshotTesting-tvOS"; + productReference = 8DC173513BC803B3D44E843509FD343B /* SnapshotTesting.framework */; + productType = "com.apple.product-type.framework"; + }; + 144D04ED7C59D7E3B95AE2B3CBDD4784 /* Pods-AnchorageTests-macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5EF7E32B342BA6801B12BC51F1861649 /* Build configuration list for PBXNativeTarget "Pods-AnchorageTests-macOS" */; + buildPhases = ( + B0588409D528FB9851F03684BA2FD566 /* Headers */, + 87DEF8A191C0AF7BF311718252C5993C /* Sources */, + E02C41536CFDC6E8DA0E5F5DA658DD04 /* Frameworks */, + 7F102BD1FE8E6DB2BCFD2315A3F2B319 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + D465AEF207C54CC507B0C90241B357D3 /* PBXTargetDependency */, + AFEA6A3C40ED748F9D193A3382975DC9 /* PBXTargetDependency */, + ); + name = "Pods-AnchorageTests-macOS"; + productName = "Pods-AnchorageTests-macOS"; + productReference = 530541043EF3145DE0D91D08B09580BB /* Pods_AnchorageTests_macOS.framework */; + productType = "com.apple.product-type.framework"; + }; + 52C1AFA5B3F0135A5A8DC1FDCFCE5628 /* Then-macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0ECA114058DA1C5E9E41F61E9C7DFE9B /* Build configuration list for PBXNativeTarget "Then-macOS" */; + buildPhases = ( + 5B3CADAD0BD8A745C9773A98A0DC9FF4 /* Headers */, + CB99BA7BC9727BD32916FFAB9EE1DB5C /* Sources */, + B2E6CAC0D83B2E762631446CF14413C5 /* Frameworks */, + B2333FA6B08C42AC956FC182AA265794 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Then-macOS"; + productName = "Then-macOS"; + productReference = 4DEED31A1B1DC815815B119DB1E99415 /* Then.framework */; + productType = "com.apple.product-type.framework"; + }; + 67A76AF2DBC1A83F1EF622B59C7F1777 /* Pods-AnchorageTests-iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 42B1D356F68F550AD737F7A7D9CAE18A /* Build configuration list for PBXNativeTarget "Pods-AnchorageTests-iOS" */; + buildPhases = ( + 4151C4E4F4BB3296D186379E24D6BC9E /* Headers */, + 18D4888C8D3F7382928CCBDF9F65174B /* Sources */, + C6F694979E05E8B8A2C5BA64BD98E38F /* Frameworks */, + 7D2D9FA2762F1A4E7B02BE8BC315F5BB /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + B91C3A43B93362F9BA30B88565CEDB6E /* PBXTargetDependency */, + 6E8F5F30F3D69E771F3FB8635BC009A1 /* PBXTargetDependency */, + ); + name = "Pods-AnchorageTests-iOS"; + productName = "Pods-AnchorageTests-iOS"; + productReference = 521331738ADCCE09C000DCFAB7B338CB /* Pods_AnchorageTests_iOS.framework */; + productType = "com.apple.product-type.framework"; + }; + 6D0A0A256C98D01A3A3D00616C05A47A /* Then-iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4B4E4C00B108851CC39514A3FB126F0F /* Build configuration list for PBXNativeTarget "Then-iOS" */; + buildPhases = ( + A8E9F22E45077F1BC470668DF2C52B51 /* Headers */, + FB7247964DEA512FF6085D4F7BBCB534 /* Sources */, + F3F2F36BE63E44A2527140324FB374F7 /* Frameworks */, + 0AF50046E3CB35C8C4E25B04B6623A54 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Then-iOS"; + productName = "Then-iOS"; + productReference = 6A63DDBF270441261A469396FDD801C4 /* Then.framework */; + productType = "com.apple.product-type.framework"; + }; + 7610167605D0B897E54BAD036DCEA5AC /* SnapshotTesting-macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 28721BC47C5D4E549BF552CD44598034 /* Build configuration list for PBXNativeTarget "SnapshotTesting-macOS" */; + buildPhases = ( + 1C91BB318EE2BD00F3F4C720DDDE46CD /* Headers */, + 0E1020BBF00BEF102BFDF66BCDE1EB89 /* Sources */, + EB7B25A42E22A951351B1D894E8B38EA /* Frameworks */, + EEC83C42E74D63DD7BC7D38E6FFAF62D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "SnapshotTesting-macOS"; + productName = "SnapshotTesting-macOS"; + productReference = BDEEE3256B39A05705D8A231852F77D1 /* SnapshotTesting.framework */; + productType = "com.apple.product-type.framework"; + }; + 8956971230A66A9091D771C679C4D504 /* Then-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 300EB7003C2358EC6D5ACCAAC111E72D /* Build configuration list for PBXNativeTarget "Then-tvOS" */; + buildPhases = ( + 78C278DB7E53292E7C3222A58C1CD253 /* Headers */, + A49CB7A4A91CD09435EC3A84871841FC /* Sources */, + A9B2AAA596DD87B21909D8A1E003C471 /* Frameworks */, + E0D85CD6977B6886A9BC8488DEC1384C /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Then-tvOS"; + productName = "Then-tvOS"; + productReference = 6DA66D97F4F4ECE35A9040B4A51F9077 /* Then.framework */; + productType = "com.apple.product-type.framework"; + }; + 8C5D2EB560C5B04EFF9E9263EE044EB5 /* Pods-AnchorageDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6F140A9085BF0C93217DED82E41F5984 /* Build configuration list for PBXNativeTarget "Pods-AnchorageDemo" */; + buildPhases = ( + 809E060174F4FB252A27164BF5597BD8 /* Headers */, + 800B4FD5C31797074AF086EF700227C7 /* Sources */, + 4431F18EAC5E2A958A2C12D21C29E10F /* Frameworks */, + 04875F2DCB844065FFA0FE1336707882 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-AnchorageDemo"; + productName = "Pods-AnchorageDemo"; + productReference = 9E3917A586ED6E688A514C13D065F3A8 /* Pods_AnchorageDemo.framework */; + productType = "com.apple.product-type.framework"; + }; + B9F261CD35E95C218DA0E191B7F960C0 /* SnapshotTesting-iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 73EACF4FB2F2F97AE1FD11FBA3DBA4BA /* Build configuration list for PBXNativeTarget "SnapshotTesting-iOS" */; + buildPhases = ( + F7B7AEB6C9C2E58AAE308DE746CC4EC6 /* Headers */, + 52E30D9F072CB41A11EAC7B20C345DD3 /* Sources */, + F586FEBC392893B0109325E7A5D08279 /* Frameworks */, + 0BB28436FCB0D336949E80DE10C4DA03 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "SnapshotTesting-iOS"; + productName = "SnapshotTesting-iOS"; + productReference = 72353BF82CC9BB789E674FD2351C2983 /* SnapshotTesting.framework */; + productType = "com.apple.product-type.framework"; + }; + DB71652937123BBEF6EB6E23CE920276 /* Pods-Anchorage-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5BA47F71E207AD9DB8CF000D11556019 /* Build configuration list for PBXNativeTarget "Pods-Anchorage-tvOS" */; + buildPhases = ( + CAD9EFE45564A6A5C20761C8E9A3B1E1 /* Headers */, + 4704FFB771FF4AA57457E080B9FF02AD /* Sources */, + 1AE9591E6C6D265E0339D14D6631473A /* Frameworks */, + 6CDBEB74853E98C15052250944D180E5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + CAF97EA5F740911357DA4A1CD3003E74 /* PBXTargetDependency */, + EAEA4D4FEF9278AE7735CB7EB8ED51BB /* PBXTargetDependency */, + ); + name = "Pods-Anchorage-tvOS"; + productName = "Pods-Anchorage-tvOS"; + productReference = EB18A04AC54E6FC73DFEDA3A0EDD8165 /* Pods_Anchorage_tvOS.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0930; + LastUpgradeCheck = 0930; + }; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = 64DBCB6F5562C0471E906F7910F66AC5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + DB71652937123BBEF6EB6E23CE920276 /* Pods-Anchorage-tvOS */, + 8C5D2EB560C5B04EFF9E9263EE044EB5 /* Pods-AnchorageDemo */, + 67A76AF2DBC1A83F1EF622B59C7F1777 /* Pods-AnchorageTests-iOS */, + 144D04ED7C59D7E3B95AE2B3CBDD4784 /* Pods-AnchorageTests-macOS */, + B9F261CD35E95C218DA0E191B7F960C0 /* SnapshotTesting-iOS */, + 7610167605D0B897E54BAD036DCEA5AC /* SnapshotTesting-macOS */, + 1100484FD281C00F225FC545EDD53E2D /* SnapshotTesting-tvOS */, + 6D0A0A256C98D01A3A3D00616C05A47A /* Then-iOS */, + 52C1AFA5B3F0135A5A8DC1FDCFCE5628 /* Then-macOS */, + 8956971230A66A9091D771C679C4D504 /* Then-tvOS */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 04875F2DCB844065FFA0FE1336707882 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0AF50046E3CB35C8C4E25B04B6623A54 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0BB28436FCB0D336949E80DE10C4DA03 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6CDBEB74853E98C15052250944D180E5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7D2D9FA2762F1A4E7B02BE8BC315F5BB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7F102BD1FE8E6DB2BCFD2315A3F2B319 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B2333FA6B08C42AC956FC182AA265794 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E0D85CD6977B6886A9BC8488DEC1384C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EEC83C42E74D63DD7BC7D38E6FFAF62D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F6D38DA405A7151DA0AADEE201168006 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0E1020BBF00BEF102BFDF66BCDE1EB89 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F92C3C8388372A940FCE103CBF4F4CE0 /* Any.swift in Sources */, + 0455F698AB7884BFF3CA43BD510412FD /* AssertSnapshot.swift in Sources */, + 9F5ADD5F8011A7FAEE6AF208C3AE7387 /* Async.swift in Sources */, + 3388275EB8683A3BFE96B2E2E0B89205 /* CALayer.swift in Sources */, + 4554AC9CC29D3325BE60E9EACEB66A96 /* CaseIterable.swift in Sources */, + 0167287920ACCDBAA36FAF440B2E73BC /* Codable.swift in Sources */, + EA2EDE1F399BAE50949B7211D455C666 /* Data.swift in Sources */, + 6A050073FC7C23A413BE40658EB866AD /* Description.swift in Sources */, + 349FFFE4BBF9367090AB462817CE15E3 /* Diff.swift in Sources */, + 912B74E5EB5755D4FDFE5821C6B34BF9 /* Diffing.swift in Sources */, + 9AD5A7D77F4AB57A0F0E6ECD6CC85FA5 /* Internal.swift in Sources */, + D474F267F4A305299E957397A418A2F2 /* NSImage.swift in Sources */, + 7F1C82A0EB071F6B687C120A7982B4C2 /* NSView.swift in Sources */, + FA5E583D715EE2C55F8DB26AC79121B7 /* NSViewController.swift in Sources */, + EE07959B238D8A3BB7F004D92E6C487D /* PlistEncoder.swift in Sources */, + EF4ED6531A27E860DFA37E0E0E9363A7 /* SceneKit.swift in Sources */, + 60712D628BE923B72EDFA56887FF997F /* SnapshotTestCase.swift in Sources */, + 9988890738CDFEB6FE6DE0900B911C64 /* SnapshotTesting-macOS-dummy.m in Sources */, + 76FA8B562250E511C2D72DE0056676AE /* Snapshotting.swift in Sources */, + C58A86701BDE739C4FBF763F374A0C4F /* SpriteKit.swift in Sources */, + CA05A2F41D718B108823A9D265B013C9 /* String.swift in Sources */, + 044695191A43AAF858614BBBA8D97DCA /* UIImage.swift in Sources */, + 0586DAAF9509D0885F2EF9ACD73F6CF1 /* UIView.swift in Sources */, + E663D85E9EC79B9F9B9269D9D9D37420 /* UIViewController.swift in Sources */, + DEA436989DC00453BBB3C03D898D58E0 /* URLRequest.swift in Sources */, + 509902FC3882651D700451F5552F7C53 /* View.swift in Sources */, + 26105FA8E06688FB4B1575B5AC838AC6 /* XCTAttachment.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 18D4888C8D3F7382928CCBDF9F65174B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 306D79307AA8DBA8689114810CDFDBD0 /* Pods-AnchorageTests-iOS-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4704FFB771FF4AA57457E080B9FF02AD /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 261E1BEA39479A79A992976B5828C7D2 /* Pods-Anchorage-tvOS-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 52E30D9F072CB41A11EAC7B20C345DD3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B134374E2FD2881BC40079F1C7C7D0C3 /* Any.swift in Sources */, + 3828224C8684DE72CE1D81BAC4198EF2 /* AssertSnapshot.swift in Sources */, + AD9AF16A36AFE9D5FE0472516614C756 /* Async.swift in Sources */, + 982A5E70D6A2FB45204536CD8F2FDF11 /* CALayer.swift in Sources */, + CE77FC2F51C1E1574F370474AA305281 /* CaseIterable.swift in Sources */, + 2D78D26C770C0DF44873D35648250724 /* Codable.swift in Sources */, + 9139CA83DF642D9675192EC89135BFF4 /* Data.swift in Sources */, + F83A0FAC1AB07F7EC3EC912B71312D14 /* Description.swift in Sources */, + 8A6E9B0FAE06368C026C29A0CE84DB24 /* Diff.swift in Sources */, + B82B6D2B10EEBEF976EA5FB9726404B9 /* Diffing.swift in Sources */, + ACD31C851EDCD4E1914B32817106E2CC /* Internal.swift in Sources */, + EC686F864B71300BE53F4CCB3BF43498 /* NSImage.swift in Sources */, + CB1585203B451AB3201D8BF6AD929D17 /* NSView.swift in Sources */, + ECC2065C37EACB74887F3E7CFF68A3AC /* NSViewController.swift in Sources */, + C982DA876BC34B57C840E6DC6FCE9524 /* PlistEncoder.swift in Sources */, + BA0EE8E553BC4A1CEC2C0C67795785CC /* SceneKit.swift in Sources */, + 65D1238BFDC0A1EF0B9D9862AAD4D9C3 /* SnapshotTestCase.swift in Sources */, + C5FD1E84454612C06C604308D8FC9E8F /* SnapshotTesting-iOS-dummy.m in Sources */, + 1EF87F1431FA2D211961216402691F58 /* Snapshotting.swift in Sources */, + 7EF78B3E46CDE4C5050BE6B95EB7D304 /* SpriteKit.swift in Sources */, + 84CD20C260D38BE7E209E09B22F620EE /* String.swift in Sources */, + 9EFA96B6F6DEDDFFEF44DD09EA82E1B1 /* UIImage.swift in Sources */, + 23DDBAA2B761B572A8A6F99A2012788B /* UIView.swift in Sources */, + F7DF8B6B841BED91E7BEB36523EB5E5A /* UIViewController.swift in Sources */, + 87F5626C142E9B50E71A2FB49A363650 /* URLRequest.swift in Sources */, + 9C10C9441D9DA3B3DC8830490166633B /* View.swift in Sources */, + 9531006B8FD9AB31819BD7E44201351B /* XCTAttachment.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 800B4FD5C31797074AF086EF700227C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 16BEC2B49DE2EF4D5423A2394AA67113 /* Pods-AnchorageDemo-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 87DEF8A191C0AF7BF311718252C5993C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E270912E7B10BA403E5370AB51C94710 /* Pods-AnchorageTests-macOS-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A49CB7A4A91CD09435EC3A84871841FC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D7DF72EEAB0E3396F20406198792526 /* Then-tvOS-dummy.m in Sources */, + 3ACAC45C1C50B53299D0C7FA3D35FF14 /* Then.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE7A66B4B2F917D39321939B3E149630 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DAA9D4579E50771252D2FDF4A485CE5A /* Any.swift in Sources */, + AACC9E6E5C62B9E2EEE5C4E6D76AE869 /* AssertSnapshot.swift in Sources */, + F7822DE8E57DFE31F4C7A416357B540A /* Async.swift in Sources */, + 9FCF899E356F2D2D00D6E86B71C2DA31 /* CALayer.swift in Sources */, + E210E40512B1AE1D8338D2EB6A15D3EC /* CaseIterable.swift in Sources */, + DAAB0822D509F85E1A46568F46E5D2C4 /* Codable.swift in Sources */, + CB0DAA9A3EA654BA70A2CDD11219909E /* Data.swift in Sources */, + 498595196417EA09CD71138787A76BCC /* Description.swift in Sources */, + B6B529300AB69D23E49A7879C3FB8CE0 /* Diff.swift in Sources */, + F24817F2D634138EB247EAAFF7EEA1DF /* Diffing.swift in Sources */, + 074F049A26BEB9F82D00F9CCAE375143 /* Internal.swift in Sources */, + 93A1C33D6AF733FB3677DBBF65C36F1C /* NSImage.swift in Sources */, + A2030B6E9CE7E0397E83CF9B37D24133 /* NSView.swift in Sources */, + F3FE7803F9443ABC3EAFDF7E82894922 /* NSViewController.swift in Sources */, + B25FF0C07A8FE1AAC975C181B584BEB9 /* PlistEncoder.swift in Sources */, + 30F5A7D54BFB5161E03976BFFFF13694 /* SceneKit.swift in Sources */, + EEF6DA19C881270B3F994D7E8BE77478 /* SnapshotTestCase.swift in Sources */, + 7DE63442C5279D3D4429316B3BCDBF94 /* SnapshotTesting-tvOS-dummy.m in Sources */, + E014AB41C2F82355F2128AB660FEEECF /* Snapshotting.swift in Sources */, + 727E53967147F8A5D7895383AC0200DA /* SpriteKit.swift in Sources */, + 92D7D122B07334F3CFC536E3F328FAF0 /* String.swift in Sources */, + D2A04E02CB46939D980309D3E92DF249 /* UIImage.swift in Sources */, + 46F47C30C5CB99BE7AD7183468FFE607 /* UIView.swift in Sources */, + C57D94158B6171642C216402F60E06E5 /* UIViewController.swift in Sources */, + ADCA53869A50FF60EF1C544F5026F079 /* URLRequest.swift in Sources */, + 2B1008B2802CEB8ABA0FC87FAA19177D /* View.swift in Sources */, + 37720C4945A34122A3E8F265AFF8FC86 /* XCTAttachment.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CB99BA7BC9727BD32916FFAB9EE1DB5C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 792AC7A288B65A0BFC5F05C09F7D3F0A /* Then-macOS-dummy.m in Sources */, + 8966646261D5CEEA92C8B78F51B39467 /* Then.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FB7247964DEA512FF6085D4F7BBCB534 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B37268C35405C60FB3B6718C26E92BE5 /* Then-iOS-dummy.m in Sources */, + C500ED8417B05C2ED1FCF1AE2BBAE10B /* Then.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 6E8F5F30F3D69E771F3FB8635BC009A1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Then-iOS"; + target = 6D0A0A256C98D01A3A3D00616C05A47A /* Then-iOS */; + targetProxy = 84544994D66844251838350725F85B53 /* PBXContainerItemProxy */; + }; + AFEA6A3C40ED748F9D193A3382975DC9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Then-macOS"; + target = 52C1AFA5B3F0135A5A8DC1FDCFCE5628 /* Then-macOS */; + targetProxy = EC157CF7091980E27508E14F94025C67 /* PBXContainerItemProxy */; + }; + B91C3A43B93362F9BA30B88565CEDB6E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "SnapshotTesting-iOS"; + target = B9F261CD35E95C218DA0E191B7F960C0 /* SnapshotTesting-iOS */; + targetProxy = 78E9433360485B8F3D9945EDD2ED8919 /* PBXContainerItemProxy */; + }; + CAF97EA5F740911357DA4A1CD3003E74 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "SnapshotTesting-tvOS"; + target = 1100484FD281C00F225FC545EDD53E2D /* SnapshotTesting-tvOS */; + targetProxy = E289DB4820AEED901323EA08A6822308 /* PBXContainerItemProxy */; + }; + D465AEF207C54CC507B0C90241B357D3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "SnapshotTesting-macOS"; + target = 7610167605D0B897E54BAD036DCEA5AC /* SnapshotTesting-macOS */; + targetProxy = 5BCB232BC9DD74D037F4ADED82BBA55F /* PBXContainerItemProxy */; + }; + EAEA4D4FEF9278AE7735CB7EB8ED51BB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Then-tvOS"; + target = 8956971230A66A9091D771C679C4D504 /* Then-tvOS */; + targetProxy = 075E5410F22770033A17F6274315C000 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 077272E82785B970E3D1F9342C22617E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C2B3D54BEFB82791E10C2BF6C0BE4934 /* SnapshotTesting-tvOS.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.modulemap"; + PRODUCT_MODULE_NAME = SnapshotTesting; + PRODUCT_NAME = SnapshotTesting; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 0E1F57C532A9E8AB8E6E47AECEC08A70 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6A54EB1B11DA3CF0C926BE4411FE6906 /* SnapshotTesting-macOS.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS.modulemap"; + PRODUCT_MODULE_NAME = SnapshotTesting; + PRODUCT_NAME = SnapshotTesting; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 2F2A59FC15C3533B9134BE66A203CABF /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6A54EB1B11DA3CF0C926BE4411FE6906 /* SnapshotTesting-macOS.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS.modulemap"; + PRODUCT_MODULE_NAME = SnapshotTesting; + PRODUCT_NAME = SnapshotTesting; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 47CE39693D006C1DEB59615D8CABB30A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 4.2; + SYMROOT = "${SRCROOT}/../build"; + TVOS_DEPLOYMENT_TARGET = 10.0; + }; + name = Release; + }; + 4818B91EE04128F9B312608F2DC4420A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E5D1AFC9A083FEB4541905EAEBB51F9E /* Then-iOS.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Then-iOS/Then-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Then-iOS/Then-iOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Then-iOS/Then-iOS.modulemap"; + PRODUCT_MODULE_NAME = Then; + PRODUCT_NAME = Then; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 66289DBB5AC998DCB610B41823326F03 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DEAD4FE56B631DE55CE14FF9D7994217 /* Then-tvOS.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Then-tvOS/Then-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Then-tvOS/Then-tvOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Then-tvOS/Then-tvOS.modulemap"; + PRODUCT_MODULE_NAME = Then; + PRODUCT_NAME = Then; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 696EFD61D427121BCE08D88C2BA20E76 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 85F49DB9CEEACD346E1D3983763D701A /* Then-macOS.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + GCC_PREFIX_HEADER = "Target Support Files/Then-macOS/Then-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Then-macOS/Then-macOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + MODULEMAP_FILE = "Target Support Files/Then-macOS/Then-macOS.modulemap"; + PRODUCT_MODULE_NAME = Then; + PRODUCT_NAME = Then; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 6FD6826467DFC2B1D36E647C7FC81612 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 57364CC62A5FF52A48E22A44537F7644 /* Pods-AnchorageDemo.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 7BFCE3D2D2466D67BD2BEA053B1130FB /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DEAD4FE56B631DE55CE14FF9D7994217 /* Then-tvOS.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Then-tvOS/Then-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Then-tvOS/Then-tvOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Then-tvOS/Then-tvOS.modulemap"; + PRODUCT_MODULE_NAME = Then; + PRODUCT_NAME = Then; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 89348A0E7CAFE9FFD11CB4FFB308FE01 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 85F49DB9CEEACD346E1D3983763D701A /* Then-macOS.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + GCC_PREFIX_HEADER = "Target Support Files/Then-macOS/Then-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Then-macOS/Then-macOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + MODULEMAP_FILE = "Target Support Files/Then-macOS/Then-macOS.modulemap"; + PRODUCT_MODULE_NAME = Then; + PRODUCT_NAME = Then; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 8C20EF66C4BBB77B4741B7DD9DD31006 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0ABFDBB7A06BB1EE9B5007814E2DEE33 /* Pods-AnchorageTests-macOS.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = "Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + A119CDD62AD731805DD6D6265AE6B70B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C8D7B07BF8D79D1EE3E47061DE3605C7 /* Pods-AnchorageTests-macOS.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = "Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + ACB89836FA7B671BCFA448DFD24020CB /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8AC20AD3D5323FDE0DA1A4B79BB5802B /* SnapshotTesting-iOS.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS.modulemap"; + PRODUCT_MODULE_NAME = SnapshotTesting; + PRODUCT_NAME = SnapshotTesting; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + BC27D7FA38819BCF94292270EF11B1BC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.2; + SYMROOT = "${SRCROOT}/../build"; + TVOS_DEPLOYMENT_TARGET = 10.0; + }; + name = Debug; + }; + C10292C222B4240ECF92A50E3D345733 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C2B3D54BEFB82791E10C2BF6C0BE4934 /* SnapshotTesting-tvOS.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.modulemap"; + PRODUCT_MODULE_NAME = SnapshotTesting; + PRODUCT_NAME = SnapshotTesting; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + CE045BDD8957449796D395D5E71BDB5F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F654D012E5B3A2D665F9D09ECC34FC4C /* Pods-Anchorage-tvOS.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + D1FAA84F3A1136CA33855DDFC5893786 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E5D1AFC9A083FEB4541905EAEBB51F9E /* Then-iOS.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Then-iOS/Then-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Then-iOS/Then-iOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Then-iOS/Then-iOS.modulemap"; + PRODUCT_MODULE_NAME = Then; + PRODUCT_NAME = Then; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + D4A1100690AE39CB57CE2890C2CD98DF /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E8AA5EA59DCC099639598C34598EC6A5 /* Pods-AnchorageTests-iOS.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + D5E367D8A7F21967ADACEEDD57CC8258 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8AC20AD3D5323FDE0DA1A4B79BB5802B /* SnapshotTesting-iOS.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS.modulemap"; + PRODUCT_MODULE_NAME = SnapshotTesting; + PRODUCT_NAME = SnapshotTesting; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + D93AC901EA9DF937EF371495B10FDA7C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0FC955AA8B2C7C53E6C3B0D1E7933206 /* Pods-AnchorageDemo.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + DF56CED98C79C6C46AAE670348F4AF9F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C21F7BEB8D545C8A168013EA143C9DEB /* Pods-AnchorageTests-iOS.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + E05BB949050323CBCEBA0675858620E9 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 874F07DD58B171606A8661D56E60D4E2 /* Pods-Anchorage-tvOS.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 0490C11DCFFB81CB01368158A1F2EDEA /* Build configuration list for PBXNativeTarget "SnapshotTesting-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C10292C222B4240ECF92A50E3D345733 /* Debug */, + 077272E82785B970E3D1F9342C22617E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0ECA114058DA1C5E9E41F61E9C7DFE9B /* Build configuration list for PBXNativeTarget "Then-macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 89348A0E7CAFE9FFD11CB4FFB308FE01 /* Debug */, + 696EFD61D427121BCE08D88C2BA20E76 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 28721BC47C5D4E549BF552CD44598034 /* Build configuration list for PBXNativeTarget "SnapshotTesting-macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0E1F57C532A9E8AB8E6E47AECEC08A70 /* Debug */, + 2F2A59FC15C3533B9134BE66A203CABF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 300EB7003C2358EC6D5ACCAAC111E72D /* Build configuration list for PBXNativeTarget "Then-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 66289DBB5AC998DCB610B41823326F03 /* Debug */, + 7BFCE3D2D2466D67BD2BEA053B1130FB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 42B1D356F68F550AD737F7A7D9CAE18A /* Build configuration list for PBXNativeTarget "Pods-AnchorageTests-iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D4A1100690AE39CB57CE2890C2CD98DF /* Debug */, + DF56CED98C79C6C46AAE670348F4AF9F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BC27D7FA38819BCF94292270EF11B1BC /* Debug */, + 47CE39693D006C1DEB59615D8CABB30A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4B4E4C00B108851CC39514A3FB126F0F /* Build configuration list for PBXNativeTarget "Then-iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D1FAA84F3A1136CA33855DDFC5893786 /* Debug */, + 4818B91EE04128F9B312608F2DC4420A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5BA47F71E207AD9DB8CF000D11556019 /* Build configuration list for PBXNativeTarget "Pods-Anchorage-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E05BB949050323CBCEBA0675858620E9 /* Debug */, + CE045BDD8957449796D395D5E71BDB5F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5EF7E32B342BA6801B12BC51F1861649 /* Build configuration list for PBXNativeTarget "Pods-AnchorageTests-macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A119CDD62AD731805DD6D6265AE6B70B /* Debug */, + 8C20EF66C4BBB77B4741B7DD9DD31006 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6F140A9085BF0C93217DED82E41F5984 /* Build configuration list for PBXNativeTarget "Pods-AnchorageDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6FD6826467DFC2B1D36E647C7FC81612 /* Debug */, + D93AC901EA9DF937EF371495B10FDA7C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 73EACF4FB2F2F97AE1FD11FBA3DBA4BA /* Build configuration list for PBXNativeTarget "SnapshotTesting-iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D5E367D8A7F21967ADACEEDD57CC8258 /* Debug */, + ACB89836FA7B671BCFA448DFD24020CB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; +} diff --git a/Pods/SnapshotTesting/LICENSE b/Pods/SnapshotTesting/LICENSE new file mode 100644 index 0000000..cb5a021 --- /dev/null +++ b/Pods/SnapshotTesting/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Point-Free, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Pods/SnapshotTesting/README.md b/Pods/SnapshotTesting/README.md new file mode 100644 index 0000000..d361610 --- /dev/null +++ b/Pods/SnapshotTesting/README.md @@ -0,0 +1,206 @@ +# 📸 SnapshotTesting + +[![Swift 4.2](https://img.shields.io/badge/swift-4.2-ED523F.svg?style=flat)](https://swift.org/download/) [![iOS/macOS/tvOS CI](https://img.shields.io/circleci/project/github/pointfreeco/swift-snapshot-testing/master.svg?label=ios/macos/tvos)](https://circleci.com/gh/pointfreeco/swift-snapshot-testing) [![Linux CI](https://img.shields.io/travis/pointfreeco/swift-snapshot-testing/master.svg?label=linux)](https://travis-ci.org/pointfreeco/swift-nonempty) [![@pointfreeco](https://img.shields.io/badge/contact-@pointfreeco-5AA9E7.svg?style=flat)](https://twitter.com/pointfreeco) + +Delightful Swift snapshot testing. + + + +## Usage + +Once [installed](#installation), _no additional configuration is required_. You can import the `SnapshotTesting` module and call the `assertSnapshot` function. + +``` swift +import SnapshotTesting +import XCTest + +class MyViewControllerTests: XCTestCase { + func testMyViewController() { + let vc = MyViewController() + + assertSnapshot(matching: vc, as: .image) + } +} +``` + +When an assertion first runs, a snapshot is automatically recorded to disk and the test will fail, printing out the file path of any newly-recorded reference. + +> 🛑 failed - No reference was found on disk. Automatically recorded snapshot: … +> +> open "…/MyAppTests/\_\_Snapshots\_\_/MyViewControllerTests/testMyViewController.png" +> +> Re-run "testMyViewController" to test against the newly-recorded snapshot. + +Repeat test runs will load this reference and compare it with the runtime value. If they don't match, the test will fail and describe the difference. + +You can record a new reference by setting the `record` mode to `true` on the assertion or globally. + +``` swift +assertSnapshot(matching: vc, as: .image, record: true) + +// or globally + +record = true +assertSnapshot(matching: vc, as: .image) +``` + +## Snapshot Anything + +While most snapshot testing libraries in the Swift community are limited to `UIImage`s of `UIView`s, SnapshotTesting can work with _any_ format of _any_ value on _any_ Swift platform! + +The `assertSnapshot` function accepts a value and any snapshot strategy that value supports. This means that a [view](Documentation/Available-Snapshot-Strategies.md#uiview) or [view controller](Documentation/Available-Snapshot-Strategies.md#uiviewcontroller) can be tested against an image representation _and_ against a textual representation of its properties and subview hierarchy. + +``` swift +assertSnapshot(matching: vc, as: .image) +assertSnapshot(matching: vc, as: .recursiveDescription) +``` + +View testing is [highly configurable](Documentation/Available-Snapshot-Strategies.md#uiviewcontroller). You can override trait collections (for specific size classes and content size categories) and generate device-agnostic snapshots, all from a single simulator. + +``` swift +assertSnapshot(matching: vc, as: .image(on: .iPhoneSe)) +assertSnapshot(matching: vc, as: .recursiveDescription(on: .iPhoneSe)) + +assertSnapshot(matching: vc, as: .image(on: .iPhoneSe(.landscape))) +assertSnapshot(matching: vc, as: .recursiveDescription(on: .iPhoneSe(.landscape))) + +assertSnapshot(matching: vc, as: .image(on: .iPhoneX)) +assertSnapshot(matching: vc, as: .recursiveDescription(on: .iPhoneX)) + +assertSnapshot(matching: vc, as: .image(on: .iPadMini(.portrait))) +assertSnapshot(matching: vc, as: .recursiveDescription(on: .iPadMini(.portrait))) +``` + +Better yet, SnapshotTesting isn't limited to views and view controllers! There are [a number of available snapshot strategies](Documentation/Available-Snapshot-Strategies.md) to choose from. + +For example, you can snapshot test URL requests (_e.g._, those that your API client prepares). + +``` swift +assertSnapshot(matching: urlRequest, as: .raw) +// POST http://localhost:8080/account +// Cookie: pf_session={"userId":"1"} +// +// email=blob%40pointfree.co&name=Blob +``` + +And you can snapshot test `Encodable` values against their JSON _and_ property list representations. + +``` swift +assertSnapshot(matching: user, as: .json) +// { +// "bio" : "Blobbed around the world.", +// "id" : 1, +// "name" : "Blobby" +// } + +assertSnapshot(matching: user, as: .plist) +// +// +// +// +// bio +// Blobbed around the world. +// id +// 1 +// name +// Blobby +// +// +``` + +In fact, _[any](Documentation/Available-Snapshot-Strategies.md#any)_ value can be snapshot-tested by default using its [mirror](https://developer.apple.com/documentation/swift/mirror)! + +``` swift +assertSnapshot(matching: user, as: .dump) +// ▿ User +// - bio: "Blobbed around the world." +// - id: 1 +// - name: "Blobby" +``` + +If your data can be represented as an image, text, or data, you can write a snapshot test for it! Check out [all of the snapshot strategies](Documentation/Available-Snapshot-Strategies.md) that ship with SnapshotTesting and [learn how to define your own custom strategies](Documentation/Defining-Custom-Snapshot-Strategies.md). + +## Installation + +### Carthage + +If you use [Carthage](https://github.com/Carthage/Carthage), you can add the following dependency to your `Cartfile`: + +``` ruby +github "pointfreeco/swift-snapshot-testing" ~> 1.1 +``` + +> ⚠️ Warning: Carthage instructs you to drag frameworks into your Xcode project. Xcode may automatically attempt to link these frameworks to your app target. `SnapshotTesting.framework` is only compatible with test targets, so when you first add it to your project: +> +> 1. Remove `SnapshotTesting.framework` from any non-test target it may have been added to. +> 2. Add `SnapshotTesting.framework` to any applicable test targets. +> 3. Add a **New Copy Build Phase** to any applicable test targets with **Destination** set to "Frameworks", and add `SnapshotTesting.framework` as an item to this phase. +> 4. Do _not_ add `SnapshotTesting.framework` to the "Input Files" or "Output Files" of your app target's Carthage `copy-frameworks` **Run Script Phase**. +> +> See Carthage's "[Adding frameworks to unit tests or a framework](https://github.com/Carthage/Carthage#adding-frameworks-to-unit-tests-or-a-framework)" documentation for more. + +### CocoaPods + +If your project uses [CocoaPods](https://cocoapods.org), add the pod to any applicable test targets in your `Podfile`: + +```ruby +target 'MyAppTests' do + pod 'SnapshotTesting', '~> 1.1' +end +``` + +### Swift Package Manager + +If you want to use SnapshotTesting in a project that uses [SwiftPM](https://swift.org/package-manager/), add the package as a dependency in `Package.swift`: + +```swift +dependencies: [ + .package(url: "https://github.com/pointfreeco/swift-snapshot-testing.git", from: "1.1.0"), +] +``` + +## Features + + - [**Dozens of snapshot strategies**](Documentation/Available-Snapshot-Strategies.md). Snapshot testing isn't just for `UIView`s and `CALayer`s. Write snapshots against _any_ value. + - [**Write your own snapshot strategies**](Documentation/Defining-Custom-Snapshot-Strategies.md). If you can convert it to an image, string, data, or your own diffable format, you can snapshot test it! Build your own snapshot strategies from scratch or transform existing ones. + - **No configuration required.** Don't fuss with scheme settings and environment variables. Snapshots are automatically saved alongside your tests. + - **More hands-off.** New snapshots are recorded whether `record` mode is `true` or not. + - **Subclass-free.** Assert from any XCTest case or Quick spec. + - **Device-agnostic snapshots.** Render views and view controllers for specific devices and trait collections from a single simulator. + - **First-class Xcode support.** Image differences are captured as XCTest attachments. Text differences are rendered in inline error messages. + - **Supports any platform that supports Swift.** Write snapshot tests for iOS, Linux, macOS, and tvOS. + - **SceneKit, SpriteKit, and WebKit support.** Most snapshot testing libraries don't support these view subclasses. + - **`Codable` support**. Snapshot encodable data structures into their [JSON](Documentation/Available-Snapshot-Strategies.md#json) and [property list](Documentation/Available-Snapshot-Strategies.md#plist) representations. + - **Custom diff tool integration**. + +## Related Tools + + - [`iOSSnapshotTestCase`](https://github.com/uber/ios-snapshot-test-case/) helped introduce screen shot testing to a broad audience in the iOS community. Experience with it inspired the creation of this library. + + - [Jest](https://jestjs.io) brought generalized snapshot testing to the JavaScript community with a polished user experience. Several features of this library (diffing, automatically capturing new snapshots) were directly influenced. + +## Learn More + +SnapshotTesting was designed with [witness-oriented programming](https://www.pointfree.co/episodes/ep39-witness-oriented-library-design). + +This concept (and more) are explored thoroughly in a series of episodes on [Point-Free](https://www.pointfree.co), a video series exploring functional programming and Swift hosted by [Brandon Williams](https://github.com/mbrandonw) and [Stephen Celis](https://github.com/stephencelis). + +Witness-oriented programming was explored in the following episodes: + + - [Episode 33](https://www.pointfree.co/episodes/ep33-protocol-witnesses-part-1): Protocol Witnesses: Part 1 + - [Episode 34](https://www.pointfree.co/episodes/ep34-protocol-witnesses-part-1): Protocol Witnesses: Part 2 + - [Episode 35](https://www.pointfree.co/episodes/ep35-advanced-protocol-witnesses-part-1): Advanced Protocol Witnesses: Part 1 + - [Episode 36](https://www.pointfree.co/episodes/ep36-advanced-protocol-witnesses-part-2): Advanced Protocol Witnesses: Part 2 + - [Episode 37](https://www.pointfree.co/episodes/ep37-protocol-oriented-library-design-part-1): Protocol-Oriented Library Design: Part 1 + - [Episode 38](https://www.pointfree.co/episodes/ep38-protocol-oriented-library-design-part-2): Protocol-Oriented Library Design: Part 2 + - [Episode 39](https://www.pointfree.co/episodes/ep39-witness-oriented-library-design): Witness-Oriented Library Design + + + video poster image + + +## License + +This library is released under the MIT license. See [LICENSE](LICENSE) for details. diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/AssertSnapshot.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/AssertSnapshot.swift new file mode 100644 index 0000000..6f3355a --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/AssertSnapshot.swift @@ -0,0 +1,193 @@ +#if !os(Linux) +import XCTest + +/// Enhances failure messages with a command line diff tool expression that can be copied and pasted into a terminal. +/// +/// diffTool = "ksdiff" +public var diffTool: String? = nil + +/// Whether or not to record all new references. +public var record = false + +/// Asserts that a given value matches a reference on disk. +/// +/// - Parameters: +/// - value: A value to compare against a reference. +/// - snapshotting: A strategy for serializing, deserializing, and comparing values. +/// - name: An optional description of the snapshot. +/// - recording: Whether or not to record a new reference. +/// - timeout: The amount of time a snapshot must be generated in. +/// - file: The file in which failure occurred. Defaults to the file name of the test case in which this function was called. +/// - testName: The name of the test in which failure occurred. Defaults to the function name of the test case in which this function was called. +/// - line: The line number on which failure occurred. Defaults to the line number on which this function was called. +public func assertSnapshot( + matching value: @autoclosure () throws -> Value, + as snapshotting: Snapshotting, + named name: String? = nil, + record recording: Bool = false, + timeout: TimeInterval = 5, + file: StaticString = #file, + testName: String = #function, + line: UInt = #line + ) { + + let failure = verifySnapshot( + matching: value, + as: snapshotting, + named: name, + record: recording, + timeout: timeout, + file: file, + testName: testName, + line: line + ) + guard let message = failure else { return } + XCTFail(message, file: file, line: line) +} + +/// Verifies that a given value matches a reference on disk. +/// +/// - Parameters: +/// - value: A value to compare against a reference. +/// - snapshotting: A strategy for serializing, deserializing, and comparing values. +/// - name: An optional description of the snapshot. +/// - recording: Whether or not to record a new reference. +/// - timeout: The amount of time a snapshot must be generated in. +/// - file: The file in which failure occurred. Defaults to the file name of the test case in which this function was called. +/// - testName: The name of the test in which failure occurred. Defaults to the function name of the test case in which this function was called. +/// - line: The line number on which failure occurred. Defaults to the line number on which this function was called. +/// - Returns: A failure message or, if the value matches, nil. +public func verifySnapshot( + matching value: @autoclosure () throws -> Value, + as snapshotting: Snapshotting, + named name: String? = nil, + record recording: Bool = false, + timeout: TimeInterval = 5, + file: StaticString = #file, + testName: String = #function, + line: UInt = #line + ) + -> String? { + + let recording = recording || record + + do { + let fileUrl = URL(fileURLWithPath: "\(file)") + let fileName = fileUrl.deletingPathExtension().lastPathComponent + let directoryUrl = fileUrl.deletingLastPathComponent() + let snapshotDirectoryUrl: URL = directoryUrl + .appendingPathComponent("__Snapshots__") + .appendingPathComponent(fileName) + + let identifier: String + if let name = name { + identifier = sanitizePathComponent(name) + } else { + let counter = counterQueue.sync { () -> Int in + let key = snapshotDirectoryUrl.appendingPathComponent(testName) + counterMap[key, default: 0] += 1 + return counterMap[key]! + } + identifier = String(counter) + } + + let testName = sanitizePathComponent(testName) + let snapshotFileUrl = snapshotDirectoryUrl + .appendingPathComponent("\(testName).\(identifier)") + .appendingPathExtension(snapshotting.pathExtension ?? "") + let fileManager = FileManager.default + try fileManager.createDirectory(at: snapshotDirectoryUrl, withIntermediateDirectories: true) + + let tookSnapshot = XCTestExpectation(description: "Took snapshot") + var optionalDiffable: Format? + snapshotting.snapshot(try value()).run { b in + optionalDiffable = b + tookSnapshot.fulfill() + } + let result = XCTWaiter.wait(for: [tookSnapshot], timeout: timeout) + switch result { + case .completed: + break + case .timedOut: + return "Exceeded timeout of \(timeout) seconds waiting for snapshot" + case .incorrectOrder, .invertedFulfillment, .interrupted: + return "Couldn't snapshot value" + } + + guard let diffable = optionalDiffable else { + return "Couldn't snapshot value" + } + + guard !recording, fileManager.fileExists(atPath: snapshotFileUrl.path) else { + let diffMessage = (try? Data(contentsOf: snapshotFileUrl)) + .flatMap { data in snapshotting.diffing.diff(snapshotting.diffing.fromData(data), diffable) } + .map { diff, _ in diff.trimmingCharacters(in: .whitespacesAndNewlines) } + ?? "Recorded snapshot: …" + + try snapshotting.diffing.toData(diffable).write(to: snapshotFileUrl) + return recording + ? """ + Record mode is on. \(diffMessage) + + open "\(snapshotFileUrl.path)" + + Turn record mode off and re-run "\(testName)" to test against the newly-recorded snapshot. + """ + : """ + No reference was found on disk. Automatically recorded snapshot: … + + open "\(snapshotFileUrl.path)" + + Re-run "\(testName)" to test against the newly-recorded snapshot. + """ + } + + let data = try Data(contentsOf: snapshotFileUrl) + let reference = snapshotting.diffing.fromData(data) + + guard let (failure, attachments) = snapshotting.diffing.diff(reference, diffable) else { + return nil + } + + let artifactsUrl = URL( + fileURLWithPath: ProcessInfo.processInfo.environment["SNAPSHOT_ARTIFACTS"] ?? NSTemporaryDirectory() + ) + let artifactsSubUrl = artifactsUrl.appendingPathComponent(fileName) + try fileManager.createDirectory(at: artifactsSubUrl, withIntermediateDirectories: true) + let failedSnapshotFileUrl = artifactsSubUrl.appendingPathComponent(snapshotFileUrl.lastPathComponent) + try snapshotting.diffing.toData(diffable).write(to: failedSnapshotFileUrl) + + if !attachments.isEmpty { + #if !os(Linux) + if ProcessInfo.processInfo.environment.keys.contains("__XCODE_BUILT_PRODUCTS_DIR_PATHS") { + XCTContext.runActivity(named: "Attached Failure Diff") { activity in + attachments.forEach { + activity.add($0) + } + } + } + #endif + } + + let diffMessage = diffTool + .map { "\($0) \"\(snapshotFileUrl.path)\" \"\(failedSnapshotFileUrl.path)\"" } + ?? "@\(minus)\n\"\(snapshotFileUrl.path)\"\n@\(plus)\n\"\(failedSnapshotFileUrl.path)\"" + return """ + \(failure.trimmingCharacters(in: .whitespacesAndNewlines)) + + \(diffMessage) + """ + } catch { + return error.localizedDescription + } +} + +private let counterQueue = DispatchQueue(label: "co.pointfree.SnapshotTesting.counter") +private var counterMap: [URL: Int] = [:] +#endif + +func sanitizePathComponent(_ string: String) -> String { + return string + .replacingOccurrences(of: "\\W+", with: "-", options: .regularExpression) + .replacingOccurrences(of: "^-|-$", with: "", options: .regularExpression) +} diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Async.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Async.swift new file mode 100644 index 0000000..427d5a5 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Async.swift @@ -0,0 +1,39 @@ +/// A wrapper around an asynchronous operation. +/// +/// Snapshot strategies may utilize this type to create snapshots in an asynchronous fashion. +/// +/// For example, WebKit's `WKWebView` offers a callback-based API for taking image snapshots (`takeSnapshot`). `Async` allows us to build a value that can pass its callback along to the scope in which the image has been created. +/// +/// Async { callback in +/// webView.takeSnapshot(with: nil) { image, error in +/// callback(image!) +/// } +/// } +public struct Async { + public let run: (@escaping (Value) -> Void) -> Void + + /// Creates an asynchronous operation. + /// + /// - Parameters: + /// - run: A function that, when called, can hand a value to a callback. + /// - callback: A function that can be called with a value. + public init(run: @escaping (_ callback: @escaping (Value) -> Void) -> Void) { + self.run = run + } + + /// Wraps a pure value in an asynchronous operation. + /// + /// - Parameter value: A value to be wrapped in an asynchronous operation. + public init(value: Value) { + self.init { callback in callback(value) } + } + + /// Transforms an Async into an Async with a function `(Value) -> NewValue`. + /// + /// - Parameter f: A transformation to apply to the value wrapped by the async value. + public func map(_ f: @escaping (Value) -> NewValue) -> Async { + return .init { callback in + self.run { a in callback(f(a)) } + } + } +} diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/Internal.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/Internal.swift new file mode 100644 index 0000000..af77913 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/Internal.swift @@ -0,0 +1,11 @@ +#if os(macOS) +import Cocoa +typealias Image = NSImage +typealias ImageView = NSImageView +typealias View = NSView +#elseif os(iOS) || os(tvOS) +import UIKit +typealias Image = UIImage +typealias ImageView = UIImageView +typealias View = UIView +#endif diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/PlistEncoder.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/PlistEncoder.swift new file mode 100644 index 0000000..589557e --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/PlistEncoder.swift @@ -0,0 +1,1828 @@ +// NB: This file is copied from Swift to make available to Linux Swift 4.2 and below. +// +// https://github.com/apple/swift/blob/master/stdlib/public/SDK/Foundation/PlistEncoder.swift +import Foundation + +extension DecodingError { + internal static func _typeMismatch(at path: [CodingKey], expectation: Any.Type, reality: Any) -> DecodingError { + let description = "Expected to decode \(expectation) but found \(type(of: reality)) instead." + return .typeMismatch(expectation, Context(codingPath: path, debugDescription: description)) + } +} + +let kCFBooleanTrue = NSNumber(booleanLiteral: true) +let kCFBooleanFalse = NSNumber(booleanLiteral: false) + + +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// + +//===----------------------------------------------------------------------===// +// Plist Encoder +//===----------------------------------------------------------------------===// + +/// `PropertyListEncoder` facilitates the encoding of `Encodable` values into property lists. +open class PropertyListEncoder { + + // MARK: - Options + + /// The output format to write the property list data in. Defaults to `.binary`. + open var outputFormat: PropertyListSerialization.PropertyListFormat = .binary + + /// Contextual user-provided information for use during encoding. + open var userInfo: [CodingUserInfoKey : Any] = [:] + + /// Options set on the top-level encoder to pass down the encoding hierarchy. + fileprivate struct _Options { + let outputFormat: PropertyListSerialization.PropertyListFormat + let userInfo: [CodingUserInfoKey : Any] + } + + /// The options set on the top-level encoder. + fileprivate var options: _Options { + return _Options(outputFormat: outputFormat, userInfo: userInfo) + } + + // MARK: - Constructing a Property List Encoder + + /// Initializes `self` with default strategies. + public init() {} + + // MARK: - Encoding Values + + /// Encodes the given top-level value and returns its property list representation. + /// + /// - parameter value: The value to encode. + /// - returns: A new `Data` value containing the encoded property list data. + /// - throws: `EncodingError.invalidValue` if a non-conforming floating-point value is encountered during encoding, and the encoding strategy is `.throw`. + /// - throws: An error if any value throws an error during encoding. + open func encode(_ value: Value) throws -> Data { + let topLevel = try encodeToTopLevelContainer(value) + if topLevel is NSNumber { + throw EncodingError.invalidValue(value, + EncodingError.Context(codingPath: [], + debugDescription: "Top-level \(Value.self) encoded as number property list fragment.")) + } else if topLevel is NSString { + throw EncodingError.invalidValue(value, + EncodingError.Context(codingPath: [], + debugDescription: "Top-level \(Value.self) encoded as string property list fragment.")) + } else if topLevel is NSDate { + throw EncodingError.invalidValue(value, + EncodingError.Context(codingPath: [], + debugDescription: "Top-level \(Value.self) encoded as date property list fragment.")) + } + + do { + return try PropertyListSerialization.data(fromPropertyList: topLevel, format: self.outputFormat, options: 0) + } catch { + throw EncodingError.invalidValue(value, + EncodingError.Context(codingPath: [], debugDescription: "Unable to encode the given top-level value as a property list", underlyingError: error)) + } + } + + /// Encodes the given top-level value and returns its plist-type representation. + /// + /// - parameter value: The value to encode. + /// - returns: A new top-level array or dictionary representing the value. + /// - throws: `EncodingError.invalidValue` if a non-conforming floating-point value is encountered during encoding, and the encoding strategy is `.throw`. + /// - throws: An error if any value throws an error during encoding. + internal func encodeToTopLevelContainer(_ value: Value) throws -> Any { + let encoder = _PlistEncoder(options: self.options) + guard let topLevel = try encoder.box_(value) else { + throw EncodingError.invalidValue(value, + EncodingError.Context(codingPath: [], + debugDescription: "Top-level \(Value.self) did not encode any values.")) + } + + return topLevel + } +} + +// MARK: - _PlistEncoder + +fileprivate class _PlistEncoder : Encoder { + // MARK: Properties + + /// The encoder's storage. + fileprivate var storage: _PlistEncodingStorage + + /// Options set on the top-level encoder. + fileprivate let options: PropertyListEncoder._Options + + /// The path to the current point in encoding. + fileprivate(set) public var codingPath: [CodingKey] + + /// Contextual user-provided information for use during encoding. + public var userInfo: [CodingUserInfoKey : Any] { + return self.options.userInfo + } + + // MARK: - Initialization + + /// Initializes `self` with the given top-level encoder options. + fileprivate init(options: PropertyListEncoder._Options, codingPath: [CodingKey] = []) { + self.options = options + self.storage = _PlistEncodingStorage() + self.codingPath = codingPath + } + + /// Returns whether a new element can be encoded at this coding path. + /// + /// `true` if an element has not yet been encoded at this coding path; `false` otherwise. + fileprivate var canEncodeNewValue: Bool { + // Every time a new value gets encoded, the key it's encoded for is pushed onto the coding path (even if it's a nil key from an unkeyed container). + // At the same time, every time a container is requested, a new value gets pushed onto the storage stack. + // If there are more values on the storage stack than on the coding path, it means the value is requesting more than one container, which violates the precondition. + // + // This means that anytime something that can request a new container goes onto the stack, we MUST push a key onto the coding path. + // Things which will not request containers do not need to have the coding path extended for them (but it doesn't matter if it is, because they will not reach here). + return self.storage.count == self.codingPath.count + } + + // MARK: - Encoder Methods + public func container(keyedBy: Key.Type) -> KeyedEncodingContainer { + // If an existing keyed container was already requested, return that one. + let topContainer: NSMutableDictionary + if self.canEncodeNewValue { + // We haven't yet pushed a container at this level; do so here. + topContainer = self.storage.pushKeyedContainer() + } else { + guard let container = self.storage.containers.last as? NSMutableDictionary else { + preconditionFailure("Attempt to push new keyed encoding container when already previously encoded at this path.") + } + + topContainer = container + } + + let container = _PlistKeyedEncodingContainer(referencing: self, codingPath: self.codingPath, wrapping: topContainer) + return KeyedEncodingContainer(container) + } + + public func unkeyedContainer() -> UnkeyedEncodingContainer { + // If an existing unkeyed container was already requested, return that one. + let topContainer: NSMutableArray + if self.canEncodeNewValue { + // We haven't yet pushed a container at this level; do so here. + topContainer = self.storage.pushUnkeyedContainer() + } else { + guard let container = self.storage.containers.last as? NSMutableArray else { + preconditionFailure("Attempt to push new unkeyed encoding container when already previously encoded at this path.") + } + + topContainer = container + } + + return _PlistUnkeyedEncodingContainer(referencing: self, codingPath: self.codingPath, wrapping: topContainer) + } + + public func singleValueContainer() -> SingleValueEncodingContainer { + return self + } +} + +// MARK: - Encoding Storage and Containers + +fileprivate struct _PlistEncodingStorage { + // MARK: Properties + + /// The container stack. + /// Elements may be any one of the plist types (NSNumber, NSString, NSDate, NSArray, NSDictionary). + private(set) fileprivate var containers: [NSObject] = [] + + // MARK: - Initialization + + /// Initializes `self` with no containers. + fileprivate init() {} + + // MARK: - Modifying the Stack + + fileprivate var count: Int { + return self.containers.count + } + + fileprivate mutating func pushKeyedContainer() -> NSMutableDictionary { + let dictionary = NSMutableDictionary() + self.containers.append(dictionary) + return dictionary + } + + fileprivate mutating func pushUnkeyedContainer() -> NSMutableArray { + let array = NSMutableArray() + self.containers.append(array) + return array + } + + fileprivate mutating func push(container: __owned NSObject) { + self.containers.append(container) + } + + fileprivate mutating func popContainer() -> NSObject { + precondition(!self.containers.isEmpty, "Empty container stack.") + return self.containers.popLast()! + } +} + +// MARK: - Encoding Containers + +fileprivate struct _PlistKeyedEncodingContainer : KeyedEncodingContainerProtocol { + typealias Key = K + + // MARK: Properties + + /// A reference to the encoder we're writing to. + private let encoder: _PlistEncoder + + /// A reference to the container we're writing to. + private let container: NSMutableDictionary + + /// The path of coding keys taken to get to this point in encoding. + private(set) public var codingPath: [CodingKey] + + // MARK: - Initialization + + /// Initializes `self` with the given references. + fileprivate init(referencing encoder: _PlistEncoder, codingPath: [CodingKey], wrapping container: NSMutableDictionary) { + self.encoder = encoder + self.codingPath = codingPath + self.container = container + } + + // MARK: - KeyedEncodingContainerProtocol Methods + + public mutating func encodeNil(forKey key: Key) throws { self.container[key.stringValue] = _plistNullNSString } + public mutating func encode(_ value: Bool, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + public mutating func encode(_ value: Int, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + public mutating func encode(_ value: Int8, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + public mutating func encode(_ value: Int16, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + public mutating func encode(_ value: Int32, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + public mutating func encode(_ value: Int64, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + public mutating func encode(_ value: UInt, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + public mutating func encode(_ value: UInt8, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + public mutating func encode(_ value: UInt16, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + public mutating func encode(_ value: UInt32, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + public mutating func encode(_ value: UInt64, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + public mutating func encode(_ value: String, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + public mutating func encode(_ value: Float, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + public mutating func encode(_ value: Double, forKey key: Key) throws { self.container[key.stringValue] = self.encoder.box(value) } + + public mutating func encode(_ value: T, forKey key: Key) throws { + self.encoder.codingPath.append(key) + defer { self.encoder.codingPath.removeLast() } + self.container[key.stringValue] = try self.encoder.box(value) + } + + public mutating func nestedContainer(keyedBy keyType: NestedKey.Type, forKey key: Key) -> KeyedEncodingContainer { + let dictionary = NSMutableDictionary() + self.container[key.stringValue] = dictionary + + self.codingPath.append(key) + defer { self.codingPath.removeLast() } + + let container = _PlistKeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: dictionary) + return KeyedEncodingContainer(container) + } + + public mutating func nestedUnkeyedContainer(forKey key: Key) -> UnkeyedEncodingContainer { + let array = NSMutableArray() + self.container[key.stringValue] = array + + self.codingPath.append(key) + defer { self.codingPath.removeLast() } + return _PlistUnkeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: array) + } + + public mutating func superEncoder() -> Encoder { + return _PlistReferencingEncoder(referencing: self.encoder, at: _PlistKey.super, wrapping: self.container) + } + + public mutating func superEncoder(forKey key: Key) -> Encoder { + return _PlistReferencingEncoder(referencing: self.encoder, at: key, wrapping: self.container) + } +} + +fileprivate struct _PlistUnkeyedEncodingContainer : UnkeyedEncodingContainer { + // MARK: Properties + + /// A reference to the encoder we're writing to. + private let encoder: _PlistEncoder + + /// A reference to the container we're writing to. + private let container: NSMutableArray + + /// The path of coding keys taken to get to this point in encoding. + private(set) public var codingPath: [CodingKey] + + /// The number of elements encoded into the container. + public var count: Int { + return self.container.count + } + + // MARK: - Initialization + + /// Initializes `self` with the given references. + fileprivate init(referencing encoder: _PlistEncoder, codingPath: [CodingKey], wrapping container: NSMutableArray) { + self.encoder = encoder + self.codingPath = codingPath + self.container = container + } + + // MARK: - UnkeyedEncodingContainer Methods + + public mutating func encodeNil() throws { self.container.add(_plistNullNSString) } + public mutating func encode(_ value: Bool) throws { self.container.add(self.encoder.box(value)) } + public mutating func encode(_ value: Int) throws { self.container.add(self.encoder.box(value)) } + public mutating func encode(_ value: Int8) throws { self.container.add(self.encoder.box(value)) } + public mutating func encode(_ value: Int16) throws { self.container.add(self.encoder.box(value)) } + public mutating func encode(_ value: Int32) throws { self.container.add(self.encoder.box(value)) } + public mutating func encode(_ value: Int64) throws { self.container.add(self.encoder.box(value)) } + public mutating func encode(_ value: UInt) throws { self.container.add(self.encoder.box(value)) } + public mutating func encode(_ value: UInt8) throws { self.container.add(self.encoder.box(value)) } + public mutating func encode(_ value: UInt16) throws { self.container.add(self.encoder.box(value)) } + public mutating func encode(_ value: UInt32) throws { self.container.add(self.encoder.box(value)) } + public mutating func encode(_ value: UInt64) throws { self.container.add(self.encoder.box(value)) } + public mutating func encode(_ value: Float) throws { self.container.add(self.encoder.box(value)) } + public mutating func encode(_ value: Double) throws { self.container.add(self.encoder.box(value)) } + public mutating func encode(_ value: String) throws { self.container.add(self.encoder.box(value)) } + + public mutating func encode(_ value: T) throws { + self.encoder.codingPath.append(_PlistKey(index: self.count)) + defer { self.encoder.codingPath.removeLast() } + self.container.add(try self.encoder.box(value)) + } + + public mutating func nestedContainer(keyedBy keyType: NestedKey.Type) -> KeyedEncodingContainer { + self.codingPath.append(_PlistKey(index: self.count)) + defer { self.codingPath.removeLast() } + + let dictionary = NSMutableDictionary() + self.container.add(dictionary) + + let container = _PlistKeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: dictionary) + return KeyedEncodingContainer(container) + } + + public mutating func nestedUnkeyedContainer() -> UnkeyedEncodingContainer { + self.codingPath.append(_PlistKey(index: self.count)) + defer { self.codingPath.removeLast() } + + let array = NSMutableArray() + self.container.add(array) + return _PlistUnkeyedEncodingContainer(referencing: self.encoder, codingPath: self.codingPath, wrapping: array) + } + + public mutating func superEncoder() -> Encoder { + return _PlistReferencingEncoder(referencing: self.encoder, at: self.container.count, wrapping: self.container) + } +} + +extension _PlistEncoder : SingleValueEncodingContainer { + // MARK: - SingleValueEncodingContainer Methods + + private func assertCanEncodeNewValue() { + precondition(self.canEncodeNewValue, "Attempt to encode value through single value container when previously value already encoded.") + } + + public func encodeNil() throws { + assertCanEncodeNewValue() + self.storage.push(container: _plistNullNSString) + } + + public func encode(_ value: Bool) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: Int) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: Int8) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: Int16) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: Int32) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: Int64) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: UInt) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: UInt8) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: UInt16) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: UInt32) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: UInt64) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: String) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: Float) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: Double) throws { + assertCanEncodeNewValue() + self.storage.push(container: self.box(value)) + } + + public func encode(_ value: T) throws { + assertCanEncodeNewValue() + try self.storage.push(container: self.box(value)) + } +} + +// MARK: - Concrete Value Representations + +extension _PlistEncoder { + + /// Returns the given value boxed in a container appropriate for pushing onto the container stack. + fileprivate func box(_ value: Bool) -> NSObject { return NSNumber(value: value) } + fileprivate func box(_ value: Int) -> NSObject { return NSNumber(value: value) } + fileprivate func box(_ value: Int8) -> NSObject { return NSNumber(value: value) } + fileprivate func box(_ value: Int16) -> NSObject { return NSNumber(value: value) } + fileprivate func box(_ value: Int32) -> NSObject { return NSNumber(value: value) } + fileprivate func box(_ value: Int64) -> NSObject { return NSNumber(value: value) } + fileprivate func box(_ value: UInt) -> NSObject { return NSNumber(value: value) } + fileprivate func box(_ value: UInt8) -> NSObject { return NSNumber(value: value) } + fileprivate func box(_ value: UInt16) -> NSObject { return NSNumber(value: value) } + fileprivate func box(_ value: UInt32) -> NSObject { return NSNumber(value: value) } + fileprivate func box(_ value: UInt64) -> NSObject { return NSNumber(value: value) } + fileprivate func box(_ value: Float) -> NSObject { return NSNumber(value: value) } + fileprivate func box(_ value: Double) -> NSObject { return NSNumber(value: value) } + fileprivate func box(_ value: String) -> NSObject { return NSString(string: value) } + + fileprivate func box(_ value: T) throws -> NSObject { + return try self.box_(value) ?? NSDictionary() + } + + fileprivate func box_(_ value: T) throws -> NSObject? { + if T.self == Date.self || T.self == NSDate.self { + // PropertyListSerialization handles NSDate directly. + return (value as! NSDate) + } else if T.self == Data.self || T.self == NSData.self { + // PropertyListSerialization handles NSData directly. + return (value as! NSData) + } + + // The value should request a container from the _PlistEncoder. + let depth = self.storage.count + do { + try value.encode(to: self) + } catch let error { + // If the value pushed a container before throwing, pop it back off to restore state. + if self.storage.count > depth { + let _ = self.storage.popContainer() + } + + throw error + } + + // The top container should be a new container. + guard self.storage.count > depth else { + return nil + } + + return self.storage.popContainer() + } +} + +// MARK: - _PlistReferencingEncoder + +/// _PlistReferencingEncoder is a special subclass of _PlistEncoder which has its own storage, but references the contents of a different encoder. +/// It's used in superEncoder(), which returns a new encoder for encoding a superclass -- the lifetime of the encoder should not escape the scope it's created in, but it doesn't necessarily know when it's done being used (to write to the original container). +fileprivate class _PlistReferencingEncoder : _PlistEncoder { + // MARK: Reference types. + + /// The type of container we're referencing. + private enum Reference { + /// Referencing a specific index in an array container. + case array(NSMutableArray, Int) + + /// Referencing a specific key in a dictionary container. + case dictionary(NSMutableDictionary, String) + } + + // MARK: - Properties + + /// The encoder we're referencing. + private let encoder: _PlistEncoder + + /// The container reference itself. + private let reference: Reference + + // MARK: - Initialization + + /// Initializes `self` by referencing the given array container in the given encoder. + fileprivate init(referencing encoder: _PlistEncoder, at index: Int, wrapping array: NSMutableArray) { + self.encoder = encoder + self.reference = .array(array, index) + super.init(options: encoder.options, codingPath: encoder.codingPath) + + self.codingPath.append(_PlistKey(index: index)) + } + + /// Initializes `self` by referencing the given dictionary container in the given encoder. + fileprivate init(referencing encoder: _PlistEncoder, at key: CodingKey, wrapping dictionary: NSMutableDictionary) { + self.encoder = encoder + self.reference = .dictionary(dictionary, key.stringValue) + super.init(options: encoder.options, codingPath: encoder.codingPath) + + self.codingPath.append(key) + } + + // MARK: - Coding Path Operations + + fileprivate override var canEncodeNewValue: Bool { + // With a regular encoder, the storage and coding path grow together. + // A referencing encoder, however, inherits its parents coding path, as well as the key it was created for. + // We have to take this into account. + return self.storage.count == self.codingPath.count - self.encoder.codingPath.count - 1 + } + + // MARK: - Deinitialization + + // Finalizes `self` by writing the contents of our storage to the referenced encoder's storage. + deinit { + let value: Any + switch self.storage.count { + case 0: value = NSDictionary() + case 1: value = self.storage.popContainer() + default: fatalError("Referencing encoder deallocated with multiple containers on stack.") + } + + switch self.reference { + case .array(let array, let index): + array.insert(value, at: index) + + case .dictionary(let dictionary, let key): + dictionary[NSString(string: key)] = value + } + } +} + +//===----------------------------------------------------------------------===// +// Plist Decoder +//===----------------------------------------------------------------------===// + +/// `PropertyListDecoder` facilitates the decoding of property list values into semantic `Decodable` types. +open class PropertyListDecoder { + // MARK: Options + + /// Contextual user-provided information for use during decoding. + open var userInfo: [CodingUserInfoKey : Any] = [:] + + /// Options set on the top-level encoder to pass down the decoding hierarchy. + fileprivate struct _Options { + let userInfo: [CodingUserInfoKey : Any] + } + + /// The options set on the top-level decoder. + fileprivate var options: _Options { + return _Options(userInfo: userInfo) + } + + // MARK: - Constructing a Property List Decoder + + /// Initializes `self` with default strategies. + public init() {} + + // MARK: - Decoding Values + + /// Decodes a top-level value of the given type from the given property list representation. + /// + /// - parameter type: The type of the value to decode. + /// - parameter data: The data to decode from. + /// - returns: A value of the requested type. + /// - throws: `DecodingError.dataCorrupted` if values requested from the payload are corrupted, or if the given data is not a valid property list. + /// - throws: An error if any value throws an error during decoding. + open func decode(_ type: T.Type, from data: Data) throws -> T { + var format: PropertyListSerialization.PropertyListFormat = .binary + return try decode(type, from: data, format: &format) + } + + /// Decodes a top-level value of the given type from the given property list representation. + /// + /// - parameter type: The type of the value to decode. + /// - parameter data: The data to decode from. + /// - parameter format: The parsed property list format. + /// - returns: A value of the requested type along with the detected format of the property list. + /// - throws: `DecodingError.dataCorrupted` if values requested from the payload are corrupted, or if the given data is not a valid property list. + /// - throws: An error if any value throws an error during decoding. + open func decode(_ type: T.Type, from data: Data, format: inout PropertyListSerialization.PropertyListFormat) throws -> T { + let topLevel: Any + do { + topLevel = try PropertyListSerialization.propertyList(from: data, options: [], format: &format) + } catch { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "The given data was not a valid property list.", underlyingError: error)) + } + + return try decode(type, fromTopLevel: topLevel) + } + + /// Decodes a top-level value of the given type from the given property list container (top-level array or dictionary). + /// + /// - parameter type: The type of the value to decode. + /// - parameter container: The top-level plist container. + /// - returns: A value of the requested type. + /// - throws: `DecodingError.dataCorrupted` if values requested from the payload are corrupted, or if the given data is not a valid property list. + /// - throws: An error if any value throws an error during decoding. + internal func decode(_ type: T.Type, fromTopLevel container: Any) throws -> T { + let decoder = _PlistDecoder(referencing: container, options: self.options) + guard let value = try decoder.unbox(container, as: type) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: [], debugDescription: "The given data did not contain a top-level value.")) + } + + return value + } +} + +// MARK: - _PlistDecoder + +fileprivate class _PlistDecoder : Decoder { + // MARK: Properties + + /// The decoder's storage. + fileprivate var storage: _PlistDecodingStorage + + /// Options set on the top-level decoder. + fileprivate let options: PropertyListDecoder._Options + + /// The path to the current point in encoding. + fileprivate(set) public var codingPath: [CodingKey] + + /// Contextual user-provided information for use during encoding. + public var userInfo: [CodingUserInfoKey : Any] { + return self.options.userInfo + } + + // MARK: - Initialization + + /// Initializes `self` with the given top-level container and options. + fileprivate init(referencing container: Any, at codingPath: [CodingKey] = [], options: PropertyListDecoder._Options) { + self.storage = _PlistDecodingStorage() + self.storage.push(container: container) + self.codingPath = codingPath + self.options = options + } + + // MARK: - Decoder Methods + + public func container(keyedBy type: Key.Type) throws -> KeyedDecodingContainer { + guard !(self.storage.topContainer is NSNull) else { + throw DecodingError.valueNotFound(KeyedDecodingContainer.self, + DecodingError.Context(codingPath: self.codingPath, + debugDescription: "Cannot get keyed decoding container -- found null value instead.")) + } + + guard let topContainer = self.storage.topContainer as? [String : Any] else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: self.storage.topContainer) + } + + let container = _PlistKeyedDecodingContainer(referencing: self, wrapping: topContainer) + return KeyedDecodingContainer(container) + } + + public func unkeyedContainer() throws -> UnkeyedDecodingContainer { + guard !(self.storage.topContainer is NSNull) else { + throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, + DecodingError.Context(codingPath: self.codingPath, + debugDescription: "Cannot get unkeyed decoding container -- found null value instead.")) + } + + guard let topContainer = self.storage.topContainer as? [Any] else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: self.storage.topContainer) + } + + return _PlistUnkeyedDecodingContainer(referencing: self, wrapping: topContainer) + } + + public func singleValueContainer() throws -> SingleValueDecodingContainer { + return self + } +} + +// MARK: - Decoding Storage + +fileprivate struct _PlistDecodingStorage { + // MARK: Properties + + /// The container stack. + /// Elements may be any one of the plist types (NSNumber, Date, String, Array, [String : Any]). + private(set) fileprivate var containers: [Any] = [] + + // MARK: - Initialization + + /// Initializes `self` with no containers. + fileprivate init() {} + + // MARK: - Modifying the Stack + + fileprivate var count: Int { + return self.containers.count + } + + fileprivate var topContainer: Any { + precondition(!self.containers.isEmpty, "Empty container stack.") + return self.containers.last! + } + + fileprivate mutating func push(container: __owned Any) { + self.containers.append(container) + } + + fileprivate mutating func popContainer() { + precondition(!self.containers.isEmpty, "Empty container stack.") + self.containers.removeLast() + } +} + +// MARK: Decoding Containers + +fileprivate struct _PlistKeyedDecodingContainer : KeyedDecodingContainerProtocol { + typealias Key = K + + // MARK: Properties + + /// A reference to the decoder we're reading from. + private let decoder: _PlistDecoder + + /// A reference to the container we're reading from. + private let container: [String : Any] + + /// The path of coding keys taken to get to this point in decoding. + private(set) public var codingPath: [CodingKey] + + // MARK: - Initialization + + /// Initializes `self` by referencing the given decoder and container. + fileprivate init(referencing decoder: _PlistDecoder, wrapping container: [String : Any]) { + self.decoder = decoder + self.container = container + self.codingPath = decoder.codingPath + } + + // MARK: - KeyedDecodingContainerProtocol Methods + + public var allKeys: [Key] { + return self.container.keys.compactMap { Key(stringValue: $0) } + } + + public func contains(_ key: Key) -> Bool { + return self.container[key.stringValue] != nil + } + + public func decodeNil(forKey key: Key) throws -> Bool { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + guard let value = entry as? String else { + return false + } + + return value == _plistNull + } + + public func decode(_ type: Bool.Type, forKey key: Key) throws -> Bool { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: Bool.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: Int.Type, forKey key: Key) throws -> Int { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: Int.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: Int8.Type, forKey key: Key) throws -> Int8 { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: Int8.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: Int16.Type, forKey key: Key) throws -> Int16 { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: Int16.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: Int32.Type, forKey key: Key) throws -> Int32 { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: Int32.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: Int64.Type, forKey key: Key) throws -> Int64 { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: Int64.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: UInt.Type, forKey key: Key) throws -> UInt { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: UInt.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: UInt8.Type, forKey key: Key) throws -> UInt8 { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: UInt8.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: UInt16.Type, forKey key: Key) throws -> UInt16 { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: UInt16.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: UInt32.Type, forKey key: Key) throws -> UInt32 { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: UInt32.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: UInt64.Type, forKey key: Key) throws -> UInt64 { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: UInt64.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: Float.Type, forKey key: Key) throws -> Float { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + guard let value = try self.decoder.unbox(entry, as: Float.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: Double.Type, forKey key: Key) throws -> Double { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: Double.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: String.Type, forKey key: Key) throws -> String { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: String.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func decode(_ type: T.Type, forKey key: Key) throws -> T { + guard let entry = self.container[key.stringValue] else { + throw DecodingError.keyNotFound(key, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "No value associated with key \(key) (\"\(key.stringValue)\").")) + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: type) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath, debugDescription: "Expected \(type) value but found null instead.")) + } + + return value + } + + public func nestedContainer(keyedBy type: NestedKey.Type, forKey key: Key) throws -> KeyedDecodingContainer { + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = self.container[key.stringValue] else { + throw DecodingError.valueNotFound(KeyedDecodingContainer.self, + DecodingError.Context(codingPath: self.codingPath, + debugDescription: "Cannot get nested keyed container -- no value found for key \"\(key.stringValue)\"")) + } + + guard let dictionary = value as? [String : Any] else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: value) + } + + let container = _PlistKeyedDecodingContainer(referencing: self.decoder, wrapping: dictionary) + return KeyedDecodingContainer(container) + } + + public func nestedUnkeyedContainer(forKey key: Key) throws -> UnkeyedDecodingContainer { + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = self.container[key.stringValue] else { + throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, + DecodingError.Context(codingPath: self.codingPath, + debugDescription: "Cannot get nested unkeyed container -- no value found for key \"\(key.stringValue)\"")) + } + + guard let array = value as? [Any] else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: value) + } + + return _PlistUnkeyedDecodingContainer(referencing: self.decoder, wrapping: array) + } + + private func _superDecoder(forKey key: __owned CodingKey) throws -> Decoder { + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + let value: Any = self.container[key.stringValue] ?? NSNull() + return _PlistDecoder(referencing: value, at: self.decoder.codingPath, options: self.decoder.options) + } + + public func superDecoder() throws -> Decoder { + return try _superDecoder(forKey: _PlistKey.super) + } + + public func superDecoder(forKey key: Key) throws -> Decoder { + return try _superDecoder(forKey: key) + } +} + +fileprivate struct _PlistUnkeyedDecodingContainer : UnkeyedDecodingContainer { + // MARK: Properties + + /// A reference to the decoder we're reading from. + private let decoder: _PlistDecoder + + /// A reference to the container we're reading from. + private let container: [Any] + + /// The path of coding keys taken to get to this point in decoding. + private(set) public var codingPath: [CodingKey] + + /// The index of the element we're about to decode. + private(set) public var currentIndex: Int + + // MARK: - Initialization + + /// Initializes `self` by referencing the given decoder and container. + fileprivate init(referencing decoder: _PlistDecoder, wrapping container: [Any]) { + self.decoder = decoder + self.container = container + self.codingPath = decoder.codingPath + self.currentIndex = 0 + } + + // MARK: - UnkeyedDecodingContainer Methods + + public var count: Int? { + return self.container.count + } + + public var isAtEnd: Bool { + return self.currentIndex >= self.count! + } + + public mutating func decodeNil() throws -> Bool { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(Any?.self, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + if self.container[self.currentIndex] is NSNull { + self.currentIndex += 1 + return true + } else { + return false + } + } + + public mutating func decode(_ type: Bool.Type) throws -> Bool { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Bool.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: Int.Type) throws -> Int { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: Int8.Type) throws -> Int8 { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int8.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: Int16.Type) throws -> Int16 { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int16.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: Int32.Type) throws -> Int32 { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int32.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: Int64.Type) throws -> Int64 { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int64.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: UInt.Type) throws -> UInt { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: UInt8.Type) throws -> UInt8 { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt8.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: UInt16.Type) throws -> UInt16 { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt16.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: UInt32.Type) throws -> UInt32 { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt32.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: UInt64.Type) throws -> UInt64 { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: UInt64.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: Float.Type) throws -> Float { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Float.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: Double.Type) throws -> Double { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Double.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: String.Type) throws -> String { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: String.self) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: T.Type) throws -> T { + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Unkeyed container is at end.")) + } + + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: type) else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.decoder.codingPath + [_PlistKey(index: self.currentIndex)], debugDescription: "Expected \(type) but found null instead.")) + } + + self.currentIndex += 1 + return decoded + } + + public mutating func nestedContainer(keyedBy type: NestedKey.Type) throws -> KeyedDecodingContainer { + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(KeyedDecodingContainer.self, + DecodingError.Context(codingPath: self.codingPath, + debugDescription: "Cannot get nested keyed container -- unkeyed container is at end.")) + } + + let value = self.container[self.currentIndex] + guard !(value is NSNull) else { + throw DecodingError.valueNotFound(KeyedDecodingContainer.self, + DecodingError.Context(codingPath: self.codingPath, + debugDescription: "Cannot get keyed decoding container -- found null value instead.")) + } + + guard let dictionary = value as? [String : Any] else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: [String : Any].self, reality: value) + } + + self.currentIndex += 1 + let container = _PlistKeyedDecodingContainer(referencing: self.decoder, wrapping: dictionary) + return KeyedDecodingContainer(container) + } + + public mutating func nestedUnkeyedContainer() throws -> UnkeyedDecodingContainer { + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, + DecodingError.Context(codingPath: self.codingPath, + debugDescription: "Cannot get nested unkeyed container -- unkeyed container is at end.")) + } + + let value = self.container[self.currentIndex] + guard !(value is NSNull) else { + throw DecodingError.valueNotFound(UnkeyedDecodingContainer.self, + DecodingError.Context(codingPath: self.codingPath, + debugDescription: "Cannot get keyed decoding container -- found null value instead.")) + } + + guard let array = value as? [Any] else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: [Any].self, reality: value) + } + + self.currentIndex += 1 + return _PlistUnkeyedDecodingContainer(referencing: self.decoder, wrapping: array) + } + + public mutating func superDecoder() throws -> Decoder { + self.decoder.codingPath.append(_PlistKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard !self.isAtEnd else { + throw DecodingError.valueNotFound(Decoder.self, DecodingError.Context(codingPath: self.codingPath, + debugDescription: "Cannot get superDecoder() -- unkeyed container is at end.")) + } + + let value = self.container[self.currentIndex] + self.currentIndex += 1 + return _PlistDecoder(referencing: value, at: self.decoder.codingPath, options: self.decoder.options) + } +} + +extension _PlistDecoder : SingleValueDecodingContainer { + // MARK: SingleValueDecodingContainer Methods + + private func expectNonNull(_ type: T.Type) throws { + guard !self.decodeNil() else { + throw DecodingError.valueNotFound(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "Expected \(type) but found null value instead.")) + } + } + + public func decodeNil() -> Bool { + guard let string = self.storage.topContainer as? String else { + return false + } + + return string == _plistNull + } + + public func decode(_ type: Bool.Type) throws -> Bool { + try expectNonNull(Bool.self) + return try self.unbox(self.storage.topContainer, as: Bool.self)! + } + + public func decode(_ type: Int.Type) throws -> Int { + try expectNonNull(Int.self) + return try self.unbox(self.storage.topContainer, as: Int.self)! + } + + public func decode(_ type: Int8.Type) throws -> Int8 { + try expectNonNull(Int8.self) + return try self.unbox(self.storage.topContainer, as: Int8.self)! + } + + public func decode(_ type: Int16.Type) throws -> Int16 { + try expectNonNull(Int16.self) + return try self.unbox(self.storage.topContainer, as: Int16.self)! + } + + public func decode(_ type: Int32.Type) throws -> Int32 { + try expectNonNull(Int32.self) + return try self.unbox(self.storage.topContainer, as: Int32.self)! + } + + public func decode(_ type: Int64.Type) throws -> Int64 { + try expectNonNull(Int64.self) + return try self.unbox(self.storage.topContainer, as: Int64.self)! + } + + public func decode(_ type: UInt.Type) throws -> UInt { + try expectNonNull(UInt.self) + return try self.unbox(self.storage.topContainer, as: UInt.self)! + } + + public func decode(_ type: UInt8.Type) throws -> UInt8 { + try expectNonNull(UInt8.self) + return try self.unbox(self.storage.topContainer, as: UInt8.self)! + } + + public func decode(_ type: UInt16.Type) throws -> UInt16 { + try expectNonNull(UInt16.self) + return try self.unbox(self.storage.topContainer, as: UInt16.self)! + } + + public func decode(_ type: UInt32.Type) throws -> UInt32 { + try expectNonNull(UInt32.self) + return try self.unbox(self.storage.topContainer, as: UInt32.self)! + } + + public func decode(_ type: UInt64.Type) throws -> UInt64 { + try expectNonNull(UInt64.self) + return try self.unbox(self.storage.topContainer, as: UInt64.self)! + } + + public func decode(_ type: Float.Type) throws -> Float { + try expectNonNull(Float.self) + return try self.unbox(self.storage.topContainer, as: Float.self)! + } + + public func decode(_ type: Double.Type) throws -> Double { + try expectNonNull(Double.self) + return try self.unbox(self.storage.topContainer, as: Double.self)! + } + + public func decode(_ type: String.Type) throws -> String { + try expectNonNull(String.self) + return try self.unbox(self.storage.topContainer, as: String.self)! + } + + public func decode(_ type: T.Type) throws -> T { + try expectNonNull(type) + return try self.unbox(self.storage.topContainer, as: type)! + } +} + +// MARK: - Concrete Value Representations + +extension _PlistDecoder { + /// Returns the given value unboxed from a container. + fileprivate func unbox(_ value: Any, as type: Bool.Type) throws -> Bool? { + if let string = value as? String, string == _plistNull { return nil } + + if let number = value as? NSNumber { + // TODO: Add a flag to coerce non-boolean numbers into Bools? + if number === kCFBooleanTrue as NSNumber { + return true + } else if number === kCFBooleanFalse as NSNumber { + return false + } + + /* FIXME: If swift-corelibs-foundation doesn't change to use NSNumber, this code path will need to be included and tested: + } else if let bool = value as? Bool { + return bool + */ + + } + + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + fileprivate func unbox(_ value: Any, as type: Int.Type) throws -> Int? { + if let string = value as? String, string == _plistNull { return nil } + + guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + let int = number.intValue + guard NSNumber(value: int) == number else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) + } + + return int + } + + fileprivate func unbox(_ value: Any, as type: Int8.Type) throws -> Int8? { + if let string = value as? String, string == _plistNull { return nil } + + guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + let int8 = number.int8Value + guard NSNumber(value: int8) == number else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) + } + + return int8 + } + + fileprivate func unbox(_ value: Any, as type: Int16.Type) throws -> Int16? { + if let string = value as? String, string == _plistNull { return nil } + + guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + let int16 = number.int16Value + guard NSNumber(value: int16) == number else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) + } + + return int16 + } + + fileprivate func unbox(_ value: Any, as type: Int32.Type) throws -> Int32? { + if let string = value as? String, string == _plistNull { return nil } + + guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + let int32 = number.int32Value + guard NSNumber(value: int32) == number else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) + } + + return int32 + } + + fileprivate func unbox(_ value: Any, as type: Int64.Type) throws -> Int64? { + if let string = value as? String, string == _plistNull { return nil } + + guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + let int64 = number.int64Value + guard NSNumber(value: int64) == number else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) + } + + return int64 + } + + fileprivate func unbox(_ value: Any, as type: UInt.Type) throws -> UInt? { + if let string = value as? String, string == _plistNull { return nil } + + guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + let uint = number.uintValue + guard NSNumber(value: uint) == number else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) + } + + return uint + } + + fileprivate func unbox(_ value: Any, as type: UInt8.Type) throws -> UInt8? { + if let string = value as? String, string == _plistNull { return nil } + + guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + let uint8 = number.uint8Value + guard NSNumber(value: uint8) == number else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) + } + + return uint8 + } + + fileprivate func unbox(_ value: Any, as type: UInt16.Type) throws -> UInt16? { + if let string = value as? String, string == _plistNull { return nil } + + guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + let uint16 = number.uint16Value + guard NSNumber(value: uint16) == number else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) + } + + return uint16 + } + + fileprivate func unbox(_ value: Any, as type: UInt32.Type) throws -> UInt32? { + if let string = value as? String, string == _plistNull { return nil } + + guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + let uint32 = number.uint32Value + guard NSNumber(value: uint32) == number else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) + } + + return uint32 + } + + fileprivate func unbox(_ value: Any, as type: UInt64.Type) throws -> UInt64? { + if let string = value as? String, string == _plistNull { return nil } + + guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + let uint64 = number.uint64Value + guard NSNumber(value: uint64) == number else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) + } + + return uint64 + } + + fileprivate func unbox(_ value: Any, as type: Float.Type) throws -> Float? { + if let string = value as? String, string == _plistNull { return nil } + + guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + let float = number.floatValue + guard NSNumber(value: float) == number else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) + } + + return float + } + + fileprivate func unbox(_ value: Any, as type: Double.Type) throws -> Double? { + if let string = value as? String, string == _plistNull { return nil } + + guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + let double = number.doubleValue + guard NSNumber(value: double) == number else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "Parsed property list number <\(number)> does not fit in \(type).")) + } + + return double + } + + fileprivate func unbox(_ value: Any, as type: String.Type) throws -> String? { + guard let string = value as? String else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + return string == _plistNull ? nil : string + } + + fileprivate func unbox(_ value: Any, as type: Date.Type) throws -> Date? { + if let string = value as? String, string == _plistNull { return nil } + + guard let date = value as? Date else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + return date + } + + fileprivate func unbox(_ value: Any, as type: Data.Type) throws -> Data? { + if let string = value as? String, string == _plistNull { return nil } + + guard let data = value as? Data else { + throw DecodingError._typeMismatch(at: self.codingPath, expectation: type, reality: value) + } + + return data + } + + fileprivate func unbox(_ value: Any, as type: T.Type) throws -> T? { + if type == Date.self || type == NSDate.self { + return try self.unbox(value, as: Date.self) as? T + } else if type == Data.self || type == NSData.self { + return try self.unbox(value, as: Data.self) as? T + } else { + self.storage.push(container: value) + defer { self.storage.popContainer() } + return try type.init(from: self) + } + } +} + +//===----------------------------------------------------------------------===// +// Shared Plist Null Representation +//===----------------------------------------------------------------------===// + +// Since plists do not support null values by default, we will encode them as "$null". +fileprivate let _plistNull = "$null" +fileprivate let _plistNullNSString = NSString(string: _plistNull) + +//===----------------------------------------------------------------------===// +// Shared Key Types +//===----------------------------------------------------------------------===// + +fileprivate struct _PlistKey : CodingKey { + public var stringValue: String + public var intValue: Int? + + public init?(stringValue: String) { + self.stringValue = stringValue + self.intValue = nil + } + + public init?(intValue: Int) { + self.stringValue = "\(intValue)" + self.intValue = intValue + } + + fileprivate init(index: Int) { + self.stringValue = "Index \(index)" + self.intValue = index + } + + fileprivate static let `super` = _PlistKey(stringValue: "super")! +} diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/View.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/View.swift new file mode 100644 index 0000000..02ec376 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/View.swift @@ -0,0 +1,653 @@ +#if os(iOS) || os(macOS) || os(tvOS) +#if os(macOS) +import Cocoa +#endif +import SceneKit +import SpriteKit +#if os(iOS) || os(tvOS) +import UIKit +#endif +#if os(iOS) || os(macOS) +import WebKit +#endif + +#if os(iOS) || os(tvOS) +public struct ViewImageConfig { + public enum Orientation { + case landscape + case portrait + } + + public var safeArea: UIEdgeInsets + public var size: CGSize? + public var traits: UITraitCollection + + public init( + safeArea: UIEdgeInsets = .zero, + size: CGSize? = nil, + traits: UITraitCollection = .init() + ) { + self.safeArea = safeArea + self.size = size + self.traits = traits + } + + #if os(iOS) + public static let iPhoneSe = ViewImageConfig.iPhoneSe(.portrait) + + public static func iPhoneSe(_ orientation: Orientation) -> ViewImageConfig { + let safeArea: UIEdgeInsets + let size: CGSize + switch orientation { + case .landscape: + safeArea = .zero + size = .init(width: 568, height: 320) + case .portrait: + safeArea = .init(top: 20, left: 0, bottom: 0, right: 0) + size = .init(width: 320, height: 568) + } + return .init(safeArea: safeArea, size: size, traits: .iPhoneSe(orientation)) + } + + public static let iPhone8 = ViewImageConfig.iPhone8(.portrait) + + public static func iPhone8(_ orientation: Orientation) -> ViewImageConfig { + let safeArea: UIEdgeInsets + let size: CGSize + switch orientation { + case .landscape: + safeArea = .zero + size = .init(width: 667, height: 375) + case .portrait: + safeArea = .init(top: 20, left: 0, bottom: 0, right: 0) + size = .init(width: 375, height: 667) + } + return .init(safeArea: safeArea, size: size, traits: .iPhone8(orientation)) + } + + public static let iPhone8Plus = ViewImageConfig.iPhone8Plus(.portrait) + + public static func iPhone8Plus(_ orientation: Orientation) -> ViewImageConfig { + let safeArea: UIEdgeInsets + let size: CGSize + switch orientation { + case .landscape: + safeArea = .zero + size = .init(width: 736, height: 414) + case .portrait: + safeArea = .init(top: 20, left: 0, bottom: 0, right: 0) + size = .init(width: 414, height: 736) + } + return .init(safeArea: safeArea, size: size, traits: .iPhone8Plus(orientation)) + } + + public static let iPhoneX = ViewImageConfig.iPhoneX(.portrait) + + public static func iPhoneX(_ orientation: Orientation) -> ViewImageConfig { + let safeArea: UIEdgeInsets + let size: CGSize + switch orientation { + case .landscape: + safeArea = .init(top: 0, left: 44, bottom: 24, right: 44) + size = .init(width: 812, height: 375) + case .portrait: + safeArea = .init(top: 44, left: 0, bottom: 34, right: 0) + size = .init(width: 375, height: 812) + } + return .init(safeArea: safeArea, size: size, traits: .iPhoneX(orientation)) + } + + public static let iPhoneXsMax = ViewImageConfig.iPhoneXsMax(.portrait) + + public static func iPhoneXsMax(_ orientation: Orientation) -> ViewImageConfig { + let safeArea: UIEdgeInsets + let size: CGSize + switch orientation { + case .landscape: + safeArea = .init(top: 0, left: 44, bottom: 24, right: 44) + size = .init(width: 896, height: 414) + case .portrait: + safeArea = .init(top: 44, left: 0, bottom: 34, right: 0) + size = .init(width: 414, height: 896) + } + return .init(safeArea: safeArea, size: size, traits: .iPhoneXsMax(orientation)) + } + + @available(iOS 11.0, *) + public static let iPhoneXr = ViewImageConfig.iPhoneXr(.portrait) + + @available(iOS 11.0, *) + public static func iPhoneXr(_ orientation: Orientation) -> ViewImageConfig { + let safeArea: UIEdgeInsets + let size: CGSize + switch orientation { + case .landscape: + safeArea = .init(top: 0, left: 44, bottom: 24, right: 44) + size = .init(width: 896, height: 414) + case .portrait: + safeArea = .init(top: 44, left: 0, bottom: 34, right: 0) + size = .init(width: 414, height: 896) + } + return .init(safeArea: safeArea, size: size, traits: .iPhoneXr(orientation)) + } + + public static let iPadMini = ViewImageConfig.iPadMini(.landscape) + + public static func iPadMini(_ orientation: Orientation) -> ViewImageConfig { + let size: CGSize + switch orientation { + case .landscape: + size = .init(width: 1024, height: 768) + case .portrait: + size = .init(width: 768, height: 1024) + } + return .init(safeArea: .init(top: 20, left: 0, bottom: 0, right: 0), size: size, traits: .iPadMini) + } + + public static let iPadPro10_5 = ViewImageConfig.iPadPro10_5(.landscape) + + public static func iPadPro10_5(_ orientation: Orientation) -> ViewImageConfig { + let size: CGSize + switch orientation { + case .landscape: + size = .init(width: 1112, height: 834) + case .portrait: + size = .init(width: 834, height: 1112) + } + return .init(safeArea: .init(top: 20, left: 0, bottom: 0, right: 0), size: size, traits: .iPadPro10_5) + } + + public static let iPadPro12_9 = ViewImageConfig.iPadPro12_9(.landscape) + + public static func iPadPro12_9(_ orientation: Orientation) -> ViewImageConfig { + let size: CGSize + switch orientation { + case .landscape: + size = .init(width: 1366, height: 1024) + case .portrait: + size = .init(width: 1024, height: 1366) + } + return .init(safeArea: .init(top: 20, left: 0, bottom: 0, right: 0), size: size, traits: .iPadPro12_9) + } + #elseif os(tvOS) + public static let tv = ViewImageConfig( + safeArea: .init(top: 60, left: 90, bottom: 60, right: 90), + size: .init(width: 1920, height: 1080), + traits: .init() + ) + #endif +} + +extension UITraitCollection { + #if os(iOS) + public static func iPhoneSe(_ orientation: ViewImageConfig.Orientation) + -> UITraitCollection { + let base: [UITraitCollection] = [ +// .init(displayGamut: .SRGB), +// .init(displayScale: 2), + .init(forceTouchCapability: .available), + .init(layoutDirection: .leftToRight), + .init(preferredContentSizeCategory: .medium), + .init(userInterfaceIdiom: .phone) + ] + switch orientation { + case .landscape: + return .init( + traitsFrom: base + [ + .init(horizontalSizeClass: .compact), + .init(verticalSizeClass: .compact) + ] + ) + case .portrait: + return .init( + traitsFrom: base + [ + .init(horizontalSizeClass: .compact), + .init(verticalSizeClass: .regular), + ] + ) + } + } + + public static func iPhone8(_ orientation: ViewImageConfig.Orientation) + -> UITraitCollection { + let base: [UITraitCollection] = [ +// .init(displayGamut: .P3), +// .init(displayScale: 2), + .init(forceTouchCapability: .available), + .init(layoutDirection: .leftToRight), + .init(preferredContentSizeCategory: .medium), + .init(userInterfaceIdiom: .phone) + ] + switch orientation { + case .landscape: + return .init( + traitsFrom: base + [ + .init(horizontalSizeClass: .compact), + .init(verticalSizeClass: .compact) + ] + ) + case .portrait: + return .init( + traitsFrom: base + [ + .init(horizontalSizeClass: .compact), + .init(verticalSizeClass: .regular) + ] + ) + } + } + + public static func iPhone8Plus(_ orientation: ViewImageConfig.Orientation) + -> UITraitCollection { + let base: [UITraitCollection] = [ +// .init(displayGamut: .P3), +// .init(displayScale: 3), + .init(forceTouchCapability: .available), + .init(layoutDirection: .leftToRight), + .init(preferredContentSizeCategory: .medium), + .init(userInterfaceIdiom: .phone) + ] + switch orientation { + case .landscape: + return .init( + traitsFrom: base + [ + .init(horizontalSizeClass: .regular), + .init(verticalSizeClass: .compact) + ] + ) + case .portrait: + return .init( + traitsFrom: base + [ + .init(horizontalSizeClass: .compact), + .init(verticalSizeClass: .regular) + ] + ) + } + } + + public static func iPhoneX(_ orientation: ViewImageConfig.Orientation) + -> UITraitCollection { + let base: [UITraitCollection] = [ +// .init(displayGamut: .P3), +// .init(displayScale: 3), + .init(forceTouchCapability: .available), + .init(layoutDirection: .leftToRight), + .init(preferredContentSizeCategory: .medium), + .init(userInterfaceIdiom: .phone) + ] + switch orientation { + case .landscape: + return .init( + traitsFrom: base + [ + .init(horizontalSizeClass: .compact), + .init(verticalSizeClass: .compact) + ] + ) + case .portrait: + return .init( + traitsFrom: base + [ + .init(horizontalSizeClass: .compact), + .init(verticalSizeClass: .regular) + ] + ) + } + } + + public static func iPhoneXr(_ orientation: ViewImageConfig.Orientation) + -> UITraitCollection { + let base: [UITraitCollection] = [ +// .init(displayGamut: .P3), +// .init(displayScale: 2), + .init(forceTouchCapability: .unavailable), + .init(layoutDirection: .leftToRight), + .init(preferredContentSizeCategory: .medium), + .init(userInterfaceIdiom: .phone) + ] + switch orientation { + case .landscape: + return .init( + traitsFrom: base + [ + .init(horizontalSizeClass: .regular), + .init(verticalSizeClass: .compact) + ] + ) + case .portrait: + return .init( + traitsFrom: base + [ + .init(horizontalSizeClass: .compact), + .init(verticalSizeClass: .regular) + ] + ) + } + } + + public static func iPhoneXsMax(_ orientation: ViewImageConfig.Orientation) + -> UITraitCollection { + let base: [UITraitCollection] = [ +// .init(displayGamut: .P3), +// .init(displayScale: 3), + .init(forceTouchCapability: .available), + .init(layoutDirection: .leftToRight), + .init(preferredContentSizeCategory: .medium), + .init(userInterfaceIdiom: .phone) + ] + switch orientation { + case .landscape: + return .init( + traitsFrom: base + [ + .init(horizontalSizeClass: .regular), + .init(verticalSizeClass: .compact) + ] + ) + case .portrait: + return .init( + traitsFrom: [ + .init(horizontalSizeClass: .compact), + .init(verticalSizeClass: .regular) + ] + ) + } + } + + public static let iPadMini = iPad + public static let iPadPro10_5 = iPad + public static let iPadPro12_9 = iPad + + private static let iPad = UITraitCollection( + traitsFrom: [ +// .init(displayScale: 2), + .init(horizontalSizeClass: .regular), + .init(verticalSizeClass: .regular), + .init(userInterfaceIdiom: .pad) + ] + ) + #elseif os(tvOS) + // TODO + #endif +} +#endif + +func addImagesForRenderedViews(_ view: View) -> [Async] { + return view.snapshot + .map { async in + [ + Async { callback in + async.run { image in + let imageView = ImageView() + imageView.image = image + imageView.frame = view.frame + #if os(macOS) + view.superview?.addSubview(imageView, positioned: .above, relativeTo: view) + #elseif os(iOS) || os(tvOS) + view.superview?.insertSubview(imageView, aboveSubview: view) + #endif + callback(imageView) + } + } + ] + } + ?? view.subviews.flatMap(addImagesForRenderedViews) +} + +extension View { + var snapshot: Async? { + func inWindow(_ perform: () -> T) -> T { + #if os(macOS) + let superview = self.superview + defer { superview?.addSubview(self) } + let window = ScaledWindow() + window.contentView = NSView() + window.contentView?.addSubview(self) + window.makeKey() + #endif + return perform() + } + #if os(iOS) || os(tvOS) + if let glkView = self as? GLKView { + return Async(value: inWindow { glkView.snapshot }) + } + #endif + if let scnView = self as? SCNView { + return Async(value: inWindow { scnView.snapshot() }) + } else if let skView = self as? SKView { + if #available(macOS 10.11, *) { + let cgImage = inWindow { skView.texture(from: skView.scene!)!.cgImage() } + #if os(macOS) + let image = Image(cgImage: cgImage, size: skView.bounds.size) + #elseif os(iOS) || os(tvOS) + let image = Image(cgImage: cgImage) + #endif + return Async(value: image) + } else { + fatalError("Taking SKView snapshots requires macOS 10.11 or greater") + } + } + #if os(iOS) || os(macOS) + if let wkWebView = self as? WKWebView { + return Async { callback in + let delegate = NavigationDelegate() + let work = { + if #available(iOS 11.0, macOS 10.13, *) { + inWindow { + wkWebView.takeSnapshot(with: nil) { image, _ in + _ = delegate + callback(image!) + } + } + } else { + #if os(iOS) + fatalError("Taking WKWebView snapshots requires iOS 11.0 or greater") + #elseif os(macOS) + fatalError("Taking WKWebView snapshots requires macOS 10.13 or greater") + #endif + } + } + + if wkWebView.isLoading { + delegate.didFinish = work + wkWebView.navigationDelegate = delegate + } else { + work() + } + } + } + #endif + return nil + } +} + +#if os(iOS) || os(macOS) +private final class NavigationDelegate: NSObject, WKNavigationDelegate { + var didFinish: () -> Void + + init(didFinish: @escaping () -> Void = {}) { + self.didFinish = didFinish + } + + func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { + webView.evaluateJavaScript("document.readyState") { _, _ in + self.didFinish() + } + } +} +#endif + +#if os(iOS) || os(tvOS) +func prepareView( + config: ViewImageConfig, + drawHierarchyInKeyWindow: Bool, + traits: UITraitCollection, + view: UIView, + viewController: UIViewController + ) { + let size = config.size ?? viewController.view.frame.size + guard size.width > 0, size.height > 0 else { + fatalError("View not renderable to image at size \(size)") + } + view.frame.size = size + if view != viewController.view { + viewController.view.bounds = view.bounds + viewController.view.addSubview(view) + } + let traits = UITraitCollection(traitsFrom: [config.traits, traits]) + let window: UIWindow + if drawHierarchyInKeyWindow { + guard let keyWindow = UIApplication.shared.keyWindow else { + fatalError("'drawHierarchyInKeyWindow' requires tests to be run in a host application") + } + window = keyWindow + window.frame.size = size + } else { + window = Window( + config: .init(safeArea: config.safeArea, size: config.size ?? size, traits: traits), + viewController: viewController + ) + } + add(traits: traits, viewController: viewController, to: window) +} + +func snapshotView( + config: ViewImageConfig, + drawHierarchyInKeyWindow: Bool, + traits: UITraitCollection, + view: UIView, + viewController: UIViewController + ) + -> Async { + let initialFrame = view.frame + prepareView( + config: config, + drawHierarchyInKeyWindow: drawHierarchyInKeyWindow, + traits: traits, + view: view, + viewController: viewController + ) + // NB: Avoid safe area influence. + if config.safeArea == .zero { view.frame.origin = .init(x: offscreen, y: offscreen) } + return view.snapshot ?? Async { callback in + addImagesForRenderedViews(view).sequence().run { views in + callback( + renderer(bounds: view.bounds, for: traits).image { ctx in + if drawHierarchyInKeyWindow { + view.drawHierarchy(in: view.bounds, afterScreenUpdates: true) + } else { + view.layer.render(in: ctx.cgContext) + } + } + ) + views.forEach { $0.removeFromSuperview() } + view.frame = initialFrame + } + } +} + +private let offscreen: CGFloat = 10_000 + +func renderer(bounds: CGRect, for traits: UITraitCollection) -> UIGraphicsImageRenderer { + let renderer: UIGraphicsImageRenderer + if #available(iOS 11.0, tvOS 11.0, *) { + renderer = UIGraphicsImageRenderer(bounds: bounds, format: .init(for: traits)) + } else { + renderer = UIGraphicsImageRenderer(bounds: bounds) + } + return renderer +} + +private func add(traits: UITraitCollection, viewController: UIViewController, to window: UIWindow) { + let rootViewController = UIViewController() + rootViewController.view.backgroundColor = .clear + rootViewController.view.frame = window.frame + rootViewController.view.translatesAutoresizingMaskIntoConstraints = + viewController.view.translatesAutoresizingMaskIntoConstraints + rootViewController.preferredContentSize = rootViewController.view.frame.size + viewController.view.frame = rootViewController.view.frame + rootViewController.view.addSubview(viewController.view) + if viewController.view.translatesAutoresizingMaskIntoConstraints { + viewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] + } else { + NSLayoutConstraint.activate([ + viewController.view.topAnchor.constraint(equalTo: rootViewController.view.topAnchor), + viewController.view.bottomAnchor.constraint(equalTo: rootViewController.view.bottomAnchor), + viewController.view.leadingAnchor.constraint(equalTo: rootViewController.view.leadingAnchor), + viewController.view.trailingAnchor.constraint(equalTo: rootViewController.view.trailingAnchor), + ]) + } + rootViewController.addChild(viewController) + rootViewController.setOverrideTraitCollection(traits, forChild: viewController) + viewController.didMove(toParent: rootViewController) + rootViewController.beginAppearanceTransition(true, animated: false) + rootViewController.endAppearanceTransition() + window.rootViewController = rootViewController + rootViewController.view.setNeedsLayout() + rootViewController.view.layoutIfNeeded() +} + +private final class Window: UIWindow { + var config: ViewImageConfig + + init(config: ViewImageConfig, viewController: UIViewController) { + let size = config.size ?? viewController.view.bounds.size + self.config = config + super.init(frame: .init(origin: .zero, size: size)) + + // NB: Safe area renders inaccurately for UI{Navigation,TabBar}Controller. + // Fixes welcome! + if viewController is UINavigationController { + self.frame.size.height -= self.config.safeArea.top + self.config.safeArea.top = 0 + } else if let viewController = viewController as? UITabBarController { + self.frame.size.height -= self.config.safeArea.bottom + self.config.safeArea.bottom = 0 + if viewController.selectedViewController is UINavigationController { + self.frame.size.height -= self.config.safeArea.top + self.config.safeArea.top = 0 + } + } + self.isHidden = false + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + @available(iOS 11.0, *) + override var safeAreaInsets: UIEdgeInsets { + #if os(iOS) + let removeTopInset = self.config.safeArea == .init(top: 20, left: 0, bottom: 0, right: 0) + && self.rootViewController?.prefersStatusBarHidden ?? false + if removeTopInset { return .zero } + #endif + return self.config.safeArea + } +} +#endif + +#if os(macOS) +import Cocoa + +private final class ScaledWindow: NSWindow { + override var backingScaleFactor: CGFloat { + return 2 + } +} +#endif +#endif + +extension Array { + func sequence() -> Async<[A]> where Element == Async { + guard !self.isEmpty else { return Async(value: []) } + return Async<[A]> { callback in + var result = [A?](repeating: nil, count: self.count) + result.reserveCapacity(self.count) + var count = 0 + zip(self.indices, self).forEach { idx, async in + async.run { + result[idx] = $0 + count += 1 + if count == self.count { + callback(result as! [A]) + } + } + } + } + } +} diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/XCTAttachment.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/XCTAttachment.swift new file mode 100644 index 0000000..2358e33 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Common/XCTAttachment.swift @@ -0,0 +1,8 @@ +#if os(Linux) +import Foundation + +public struct XCTAttachment { + init(data: Data) {} + init(data: Data, uniformTypeIdentifier: String) {} +} +#endif diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Diff.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Diff.swift new file mode 100644 index 0000000..20d264c --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Diff.swift @@ -0,0 +1,125 @@ +import Foundation + +struct Difference { + enum Which { + case first + case second + case both + } + + let elements: [A] + let which: Which +} + +func diff(_ fst: [A], _ snd: [A]) -> [Difference] { + var idxsOf = [A: [Int]]() + fst.enumerated().forEach { idxsOf[$1, default: []].append($0) } + + let sub = snd.enumerated().reduce((overlap: [Int: Int](), fst: 0, snd: 0, len: 0)) { sub, sndPair in + (idxsOf[sndPair.element] ?? []) + .reduce((overlap: [Int: Int](), fst: sub.fst, snd: sub.snd, len: sub.len)) { innerSub, fstIdx in + + var newOverlap = innerSub.overlap + newOverlap[fstIdx] = (sub.overlap[fstIdx - 1] ?? 0) + 1 + + if let newLen = newOverlap[fstIdx], newLen > sub.len { + return (newOverlap, fstIdx - newLen + 1, sndPair.offset - newLen + 1, newLen) + } + return (newOverlap, innerSub.fst, innerSub.snd, innerSub.len) + } + } + let (_, fstIdx, sndIdx, len) = sub + + if len == 0 { + let fstDiff = fst.isEmpty ? [] : [Difference(elements: fst, which: .first)] + let sndDiff = snd.isEmpty ? [] : [Difference(elements: snd, which: .second)] + return fstDiff + sndDiff + } else { + let fstDiff = diff(Array(fst.prefix(upTo: fstIdx)), Array(snd.prefix(upTo: sndIdx))) + let midDiff = [Difference(elements: Array(fst.suffix(from: fstIdx).prefix(len)), which: .both)] + let lstDiff = diff(Array(fst.suffix(from: fstIdx + len)), Array(snd.suffix(from: sndIdx + len))) + return fstDiff + midDiff + lstDiff + } +} + +let minus = "−" +let plus = "+" +private let figureSpace = "\u{2007}" + +struct Hunk { + let fstIdx: Int + let fstLen: Int + let sndIdx: Int + let sndLen: Int + let lines: [String] + + var patchMark: String { + let fstMark = "\(minus)\(fstIdx + 1),\(fstLen)" + let sndMark = "\(plus)\(sndIdx + 1),\(sndLen)" + return "@@ \(fstMark) \(sndMark) @@" + } + + // Semigroup + + static func +(lhs: Hunk, rhs: Hunk) -> Hunk { + return Hunk( + fstIdx: lhs.fstIdx + rhs.fstIdx, + fstLen: lhs.fstLen + rhs.fstLen, + sndIdx: lhs.sndIdx + rhs.sndIdx, + sndLen: lhs.sndLen + rhs.sndLen, + lines: lhs.lines + rhs.lines + ) + } + + // Monoid + + init(fstIdx: Int = 0, fstLen: Int = 0, sndIdx: Int = 0, sndLen: Int = 0, lines: [String] = []) { + self.fstIdx = fstIdx + self.fstLen = fstLen + self.sndIdx = sndIdx + self.sndLen = sndLen + self.lines = lines + } + + init(idx: Int = 0, len: Int = 0, lines: [String] = []) { + self.init(fstIdx: idx, fstLen: len, sndIdx: idx, sndLen: len, lines: lines) + } +} + +func chunk(diff diffs: [Difference], context ctx: Int = 4) -> [Hunk] { + func prepending(_ prefix: String) -> (String) -> String { + return { prefix + $0 + ($0.hasSuffix(" ") ? "¬" : "") } + } + let changed: (Hunk) -> Bool = { $0.lines.contains(where: { $0.hasPrefix(minus) || $0.hasPrefix(plus) }) } + + let (hunk, hunks) = diffs + .reduce((current: Hunk(), hunks: [Hunk]())) { cursor, diff in + let (current, hunks) = cursor + let len = diff.elements.count + + switch diff.which { + case .both where len > ctx * 2: + let hunk = current + Hunk(len: ctx, lines: diff.elements.prefix(ctx).map(prepending(figureSpace))) + let next = Hunk( + fstIdx: current.fstIdx + current.fstLen + len - ctx, + fstLen: ctx, + sndIdx: current.sndIdx + current.sndLen + len - ctx, + sndLen: ctx, + lines: (diff.elements.suffix(ctx) as ArraySlice).map(prepending(figureSpace)) + ) + return (next, changed(hunk) ? hunks + [hunk] : hunks) + case .both where current.lines.isEmpty: + let lines = (diff.elements.suffix(ctx) as ArraySlice).map(prepending(figureSpace)) + let count = lines.count + return (current + Hunk(idx: len - count, len: count, lines: lines), hunks) + case .both: + return (current + Hunk(len: len, lines: diff.elements.map(prepending(figureSpace))), hunks) + case .first: + return (current + Hunk(fstLen: len, lines: diff.elements.map(prepending(minus))), hunks) + case .second: + return (current + Hunk(sndLen: len, lines: diff.elements.map(prepending(plus))), hunks) + } + } + + return changed(hunk) ? hunks + [hunk] : hunks +} diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Diffing.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Diffing.swift new file mode 100644 index 0000000..09ea426 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Diffing.swift @@ -0,0 +1,34 @@ +import Foundation +import XCTest + +/// The ability to compare `Value`s and convert them to and from `Data`. +public struct Diffing { + /// Converts a value _to_ data. + public let toData: (Value) -> Data + + /// Produces a value _from_ data. + public let fromData: (Data) -> Value + + /// Compares two values. If the values do not match, returns a failure message and artifacts describing the failure. + public let diff: (Value, Value) -> (String, [XCTAttachment])? + + /// Creates a new `Diffing` on `Value`. + /// + /// - Parameters: + /// - toData: A function used to convert a value _to_ data. + /// - value: A value to convert into data. + /// - fromData: A function used to produce a value _from_ data. + /// - data: Data to convert into a value. + /// - diff: A function used to compare two values. If the values do not match, returns a failure message and artifacts describing the failure. + /// - lhs: A value to compare. + /// - rhs: Another value to compare. + public init( + toData: @escaping (_ value: Value) -> Data, + fromData: @escaping (_ data: Data) -> Value, + diff: @escaping (_ lhs: Value, _ rhs: Value) -> (String, [XCTAttachment])? + ) { + self.toData = toData + self.fromData = fromData + self.diff = diff + } +} diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/SnapshotTestCase.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/SnapshotTestCase.swift new file mode 100644 index 0000000..0222707 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/SnapshotTestCase.swift @@ -0,0 +1,146 @@ +#if os(Linux) +import XCTest + +/// An XCTest subclass that provides snaphot testing helpers. +open class SnapshotTestCase: XCTestCase { + /// Whether or not to record all new references. + open var record = false + + /// Enhances failure messages with a command line expression that can be copied and pasted into a terminal. + /// + /// diffTool = "ksdiff" + open var diffTool: String? = nil + + /// Asserts that a given value matches a reference on disk. + /// + /// - Parameters: + /// - value: A value to compare against a reference. + /// - snapshotting: A strategy for serializing, deserializing, and comparing values. + /// - name: An optional description of the snapshot. + /// - recording: Whether or not to record a new reference. + /// - timeout: The amount of time a snapshot must be generated in. + /// - file: The file in which failure occurred. Defaults to the file name of the test case in which this function was called. + /// - testName: The name of the test in which failure occurred. Defaults to the function name of the test case in which this function was called. + /// - line: The line number on which failure occurred. Defaults to the line number on which this function was called. + public func assertSnapshot( + matching value: Value, + as snapshotting: Snapshotting, + named name: String? = nil, + record recording: Bool = false, + timeout: TimeInterval = 5, + file: StaticString = #file, + testName: String = #function, + line: UInt = #line + ) { + + let recording = recording || self.record + + do { + let fileUrl = URL(fileURLWithPath: "\(file)") + let fileName = fileUrl.deletingPathExtension().lastPathComponent + let directoryUrl = fileUrl.deletingLastPathComponent() + let snapshotDirectoryUrl: URL = directoryUrl + .appendingPathComponent("__Snapshots__") + .appendingPathComponent(fileName) + + let identifier: String + if let name = name { + identifier = sanitizePathComponent(name) + } else { + identifier = String(counter) + counter += 1 + } + + let testName = sanitizePathComponent(testName) + let snapshotFileUrl = snapshotDirectoryUrl + .appendingPathComponent("\(testName).\(identifier)") + .appendingPathExtension(snapshotting.pathExtension ?? "") + let fileManager = FileManager.default + try fileManager.createDirectory(at: snapshotDirectoryUrl, withIntermediateDirectories: true) + + let tookSnapshot = self.expectation(description: "Took snapshot") + var optionalDiffable: Format? + snapshotting.snapshot(value).run { b in + optionalDiffable = b + tookSnapshot.fulfill() + } + #if os(Linux) + self.waitForExpectations(timeout: timeout) + #else + self.wait(for: [tookSnapshot], timeout: timeout) + #endif + + guard let diffable = optionalDiffable else { + XCTFail("Couldn't snapshot value", file: file, line: line) + return + } + + guard !recording, fileManager.fileExists(atPath: snapshotFileUrl.path) else { + let diffMessage = (try? Data(contentsOf: snapshotFileUrl)) + .flatMap { data in snapshotting.diffing.diff(snapshotting.diffing.fromData(data), diffable) } + .map { diff, _ in diff.trimmingCharacters(in: .whitespacesAndNewlines) } + ?? "Recorded snapshot: …" + + try snapshotting.diffing.toData(diffable).write(to: snapshotFileUrl) + let message = recording + ? """ + Record mode is on. \(diffMessage) + + open "\(snapshotFileUrl.path)" + + Turn record mode off and re-run "\(testName)" to test against the newly-recorded snapshot. + """ + : """ + No reference was found on disk. Automatically recorded snapshot: … + + open "\(snapshotFileUrl.path)" + + Re-run "\(testName)" to test against the newly-recorded snapshot. + """ + + XCTFail(message, file: file, line: line) + return + } + + let data = try Data(contentsOf: snapshotFileUrl) + let reference = snapshotting.diffing.fromData(data) + + guard let (failure, attachments) = snapshotting.diffing.diff(reference, diffable) else { + return + } + + let artifactsUrl = URL( + fileURLWithPath: ProcessInfo.processInfo.environment["SNAPSHOT_ARTIFACTS"] ?? NSTemporaryDirectory() + ) + let artifactsSubUrl = artifactsUrl.appendingPathComponent(fileName) + try fileManager.createDirectory(at: artifactsSubUrl, withIntermediateDirectories: true) + let failedSnapshotFileUrl = artifactsSubUrl.appendingPathComponent(snapshotFileUrl.lastPathComponent) + try snapshotting.diffing.toData(diffable).write(to: failedSnapshotFileUrl) + + if !attachments.isEmpty { + #if !os(Linux) + XCTContext.runActivity(named: "Attached Failure Diff") { activity in + attachments.forEach { + activity.add($0) + } + } + #endif + } + + let diffMessage = self.diffTool + .map { "\($0) \"\(snapshotFileUrl.path)\" \"\(failedSnapshotFileUrl.path)\"" } + ?? "@\(minus)\n\"\(snapshotFileUrl.path)\"\n@\(plus)\n\"\(failedSnapshotFileUrl.path)\"" + let message = """ + \(failure.trimmingCharacters(in: .whitespacesAndNewlines)) + + \(diffMessage) + """ + XCTFail(message, file: file, line: line) + } catch { + XCTFail(error.localizedDescription, file: file, line: line) + } + } + + private var counter = 1 +} +#endif diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting.swift new file mode 100644 index 0000000..db0844b --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting.swift @@ -0,0 +1,90 @@ +import Foundation +import XCTest + +/// A type representing the ability to transform a snapshottable value into a diffable format (like text or an image) for snapshot testing. +public struct Snapshotting { + /// The path extension applied to references saved to disk. + public var pathExtension: String? + + /// How the snapshot format is diffed and converted to and from data. + public let diffing: Diffing + + /// How a value is transformed into a diffable snapshot format. + public let snapshot: (Value) -> Async + + /// Creates a snapshot strategy. + /// + /// - Parameters: + /// - pathExtension: The path extension applied to references saved to disk. + /// - diffing: How to diff and convert the snapshot format to and from data. + /// - snapshot: An asynchronous transform function from a value into a diffable snapshot format. + /// - value: A value to be converted. + public init( + pathExtension: String?, + diffing: Diffing, + asyncSnapshot: @escaping (_ value: Value) -> Async + ) { + self.pathExtension = pathExtension + self.diffing = diffing + self.snapshot = asyncSnapshot + } + + /// Creates a snapshot strategy. + /// + /// - Parameters: + /// - pathExtension: The path extension applied to references saved to disk. + /// - diffing: How to diff and convert the snapshot format to and from data. + /// - snapshot: A transform function from a value into a diffable snapshot format. + /// - value: A snapshot value to be converted. + public init( + pathExtension: String?, + diffing: Diffing, + snapshot: @escaping (_ value: Value) -> Format + ) { + self.init(pathExtension: pathExtension, diffing: diffing) { + Async(value: snapshot($0)) + } + } + + /// Transforms a strategy on `Value`s into a strategy on `A`s through a function `(A) -> Async`. + /// + /// - Parameters: + /// - transform: A transform function from `A` into `Async`. + /// - otherValue: A value to be transformed. + public func asyncPullback(_ transform: @escaping (_ otherValue: A) -> Async) -> Snapshotting { + return Snapshotting( + pathExtension: self.pathExtension, + diffing: self.diffing + ) { a0 in + return .init { callback in + transform(a0).run { a in + self.snapshot(a).run { b in + callback(b) + } + } + } + } + } + + /// Transforms a strategy on `Value`s into a strategy on `A`s through a function `(A) -> Value`. + /// + /// - Parameters: + /// - transform: A transform function from `A` into `Value`. + /// - otherValue: A value to be transformed. + public func pullback(_ transform: @escaping (_ otherValue: A) -> Value) -> Snapshotting { + return self.asyncPullback { Async(value: transform($0)) } + } +} + +/// A snapshot strategy where the type being snapshot is also a diffable type. +public typealias SimplySnapshotting = Snapshotting + +extension Snapshotting where Value == Format { + public init(pathExtension: String?, diffing: Diffing) { + self.init( + pathExtension: pathExtension, + diffing: diffing, + snapshot: { $0 } + ) + } +} diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Any.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Any.swift new file mode 100644 index 0000000..6898fdf --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Any.swift @@ -0,0 +1,137 @@ +import Foundation + +extension Snapshotting where Format == String { + /// A snapshot strategy for comparing any structure based on a sanitized text dump. + public static var dump: Snapshotting { + return SimplySnapshotting.lines.pullback { snap($0) } + } +} + +private func snap(_ value: T, name: String? = nil, indent: Int = 0) -> String { + let indentation = String(repeating: " ", count: indent) + let mirror = Mirror(reflecting: value) + var children = mirror.children + let count = children.count + let bullet = count == 0 ? "-" : "▿" + + let description: String + switch (value, mirror.displayStyle) { + case (_, .collection?): + description = count == 1 ? "1 element" : "\(count) elements" + case (_, .dictionary?): + description = count == 1 ? "1 key/value pair" : "\(count) key/value pairs" + children = sort(children) + case (_, .set?): + description = count == 1 ? "1 member" : "\(count) members" + children = sort(children) + case (_, .tuple?): + description = count == 1 ? "(1 element)" : "(\(count) elements)" + case (_, .optional?): + let subjectType = String(describing: mirror.subjectType) + .replacingOccurrences(of: " #\\d+", with: "", options: .regularExpression) + description = count == 0 ? "\(subjectType).none" : "\(subjectType)" + case (let value as AnySnapshotStringConvertible, _) where type(of: value).renderChildren: + description = value.snapshotDescription + case (let value as AnySnapshotStringConvertible, _): + return "\(indentation)- \(name.map { "\($0): " } ?? "")\(value.snapshotDescription)\n" + case (let value as CustomStringConvertible, _): + description = value.description + case (_, .class?), (_, .struct?): + description = String(describing: mirror.subjectType) + .replacingOccurrences(of: " #\\d+", with: "", options: .regularExpression) + children = sort(children) + case (_, .enum?): + let subjectType = String(describing: mirror.subjectType) + .replacingOccurrences(of: " #\\d+", with: "", options: .regularExpression) + description = count == 0 ? "\(subjectType).\(value)" : "\(subjectType)" + case (let value, _): + description = String(describing: value) + } + + let lines = ["\(indentation)\(bullet) \(name.map { "\($0): " } ?? "")\(description)\n"] + + children.map { snap($1, name: $0, indent: indent + 2) } + + return lines.joined() +} + +private func sort(_ children: Mirror.Children) -> Mirror.Children { + return .init(children.sorted { snap($0) < snap($1) }) +} + +/// A type with a customized snapshot dump representation. +/// +/// Types that conform to the `AnySnapshotStringConvertible` protocol can provide their own representation to be used when converting an instance to a `dump`-based snapshot. +public protocol AnySnapshotStringConvertible { + /// Whether or not to dump child nodes (defaults to `false`). + static var renderChildren: Bool { get } + + /// A textual snapshot dump representation of this instance. + var snapshotDescription: String { get } +} + +extension AnySnapshotStringConvertible { + public static var renderChildren: Bool { + return false + } +} + +extension Character: AnySnapshotStringConvertible { + public var snapshotDescription: String { + return self.debugDescription + } +} + +extension Data: AnySnapshotStringConvertible { + public var snapshotDescription: String { + return self.debugDescription + } +} + +extension Date: AnySnapshotStringConvertible { + public var snapshotDescription: String { + return snapshotDateFormatter.string(from: self) + } +} + +extension NSObject: AnySnapshotStringConvertible { + #if canImport(ObjectiveC) + @objc open var snapshotDescription: String { + return purgePointers(self.debugDescription) + } + #else + open var snapshotDescription: String { + return purgePointers(self.debugDescription) + } + #endif +} + +extension String: AnySnapshotStringConvertible { + public var snapshotDescription: String { + return self.debugDescription + } +} + +extension Substring: AnySnapshotStringConvertible { + public var snapshotDescription: String { + return self.debugDescription + } +} + +extension URL: AnySnapshotStringConvertible { + public var snapshotDescription: String { + return self.debugDescription + } +} + +private let snapshotDateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" + formatter.calendar = Calendar(identifier: .gregorian) + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.timeZone = TimeZone(abbreviation: "UTC") + return formatter +}() + +func purgePointers(_ string: String) -> String { + return string.replacingOccurrences(of: ":?\\s*0x[\\da-f]+(\\s*)", with: "$1", options: .regularExpression) +} diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/CALayer.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/CALayer.swift new file mode 100644 index 0000000..200c76d --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/CALayer.swift @@ -0,0 +1,49 @@ +#if os(macOS) +import Cocoa + +extension Snapshotting where Value == CALayer, Format == NSImage { + /// A snapshot strategy for comparing layers based on pixel equality. + public static var image: Snapshotting { + return .image(precision: 1) + } + + /// A snapshot strategy for comparing layers based on pixel equality. + /// + /// - Parameter precision: The percentage of pixels that must match. + public static func image(precision: Float) -> Snapshotting { + return SimplySnapshotting.image(precision: precision).pullback { layer in + let image = NSImage(size: layer.bounds.size) + image.lockFocus() + let context = NSGraphicsContext.current!.cgContext + layer.setNeedsLayout() + layer.layoutIfNeeded() + layer.render(in: context) + image.unlockFocus() + return image + } + } +} +#elseif os(iOS) || os(tvOS) +import UIKit + +extension Snapshotting where Value == CALayer, Format == UIImage { + /// A snapshot strategy for comparing layers based on pixel equality. + public static var image: Snapshotting { + return .image() + } + + /// A snapshot strategy for comparing layers based on pixel equality. + /// + /// - Parameter precision: The percentage of pixels that must match. + public static func image(precision: Float = 1, traits: UITraitCollection = .init()) + -> Snapshotting { + return SimplySnapshotting.image(precision: precision).pullback { layer in + renderer(bounds: layer.bounds, for: traits).image { ctx in + layer.setNeedsLayout() + layer.layoutIfNeeded() + layer.render(in: ctx.cgContext) + } + } + } +} +#endif diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/CaseIterable.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/CaseIterable.swift new file mode 100644 index 0000000..1a6330e --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/CaseIterable.swift @@ -0,0 +1,25 @@ +extension Snapshotting where Value: CaseIterable, Format == String { + /// A strategy for snapshotting the output for every input of a function. The format of the snapshot + /// is a comma-separated value (CSV) file that shows the mapping of inputs to outputs. + /// + /// Parameter witness: A snapshotting value on the output of the function to be snapshot. + /// Returns: A snapshot strategy on functions (Value) -> A that feeds every possible input into the + /// function and records the output into a CSV file. + public static func `func`(into witness: Snapshotting) -> Snapshotting<(Value) -> A, Format> { + var snapshotting = Snapshotting.lines.asyncPullback { (f: (Value) -> A) in + Value.allCases.map { input in + witness.snapshot(f(input)) + .map { (input, $0) } + } + .sequence() + .map { rows in + rows.map { "\"\($0)\",\"\($1)\"" } + .joined(separator: "\n") + } + } + + snapshotting.pathExtension = "csv" + + return snapshotting + } +} diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Codable.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Codable.swift new file mode 100644 index 0000000..ed3e329 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Codable.swift @@ -0,0 +1,40 @@ +import Foundation + +extension Snapshotting where Value: Encodable, Format == String { + /// A snapshot strategy for comparing encodable structures based on their JSON representation. + @available(iOS 11.0, macOS 10.13, tvOS 11.0, *) + public static var json: Snapshotting { + let encoder = JSONEncoder() + encoder.outputFormatting = [.prettyPrinted, .sortedKeys] + return .json(encoder) + } + + /// A snapshot strategy for comparing encodable structures based on their JSON representation. + /// + /// - Parameter encoder: A JSON encoder. + public static func json(_ encoder: JSONEncoder) -> Snapshotting { + var snapshotting = SimplySnapshotting.lines.pullback { (encodable: Value) in + try! String(decoding: encoder.encode(encodable), as: UTF8.self) + } + snapshotting.pathExtension = "json" + return snapshotting + } + + /// A snapshot strategy for comparing encodable structures based on their property list representation. + public static var plist: Snapshotting { + let encoder = PropertyListEncoder() + encoder.outputFormat = .xml + return .plist(encoder) + } + + /// A snapshot strategy for comparing encodable structures based on their property list representation. + /// + /// - Parameter encoder: A property list encoder. + public static func plist(_ encoder: PropertyListEncoder) -> Snapshotting { + var snapshotting = SimplySnapshotting.lines.pullback { (encodable: Value) in + try! String(decoding: encoder.encode(encodable), as: UTF8.self) + } + snapshotting.pathExtension = "plist" + return snapshotting + } +} diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Data.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Data.swift new file mode 100644 index 0000000..6d52049 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Data.swift @@ -0,0 +1,17 @@ +import Foundation +import XCTest + +extension Snapshotting where Value == Data, Format == Data { + static var data: Snapshotting { + return .init( + pathExtension: nil, + diffing: .init(toData: { $0 }, fromData: { $0 }) { old, new in + guard old != new else { return nil } + let message = old.count == new.count + ? "Expected data to match" + : "Expected \(new) to match \(old)" + return (message, []) + } + ) + } +} diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Description.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Description.swift new file mode 100644 index 0000000..41641d2 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/Description.swift @@ -0,0 +1,7 @@ +extension Snapshotting where Format == String { + /// A snapshot strategy that captures a value's textual description from `String`'s `init(description:)` + /// initializer. + public static var description: Snapshotting { + return SimplySnapshotting.lines.pullback(String.init(describing:)) + } +} diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/NSImage.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/NSImage.swift new file mode 100644 index 0000000..d3bcd4d --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/NSImage.swift @@ -0,0 +1,110 @@ +#if os(macOS) +import Cocoa +import XCTest + +extension Snapshotting where Value == NSImage, Format == NSImage { + /// A snapshot strategy for comparing images based on pixel equality. + public static var image: Snapshotting { + return .image(precision: 1) + } + + /// A snapshot strategy for comparing images based on pixel equality. + /// + /// - Parameter precision: The percentage of pixels that must match. + public static func image(precision: Float) -> Snapshotting { + return .init( + pathExtension: "png", + diffing: .init( + toData: { NSImagePNGRepresentation($0)! }, + fromData: { NSImage(data: $0)! } + ) { old, new in + guard !compare(old, new, precision: precision) else { return nil } + let difference = diff(old, new) + let message = new.size == old.size + ? "Expected snapshot to match reference" + : "Expected snapshot@\(new.size) to match reference@\(old.size)" + return ( + message, + [XCTAttachment(image: old), XCTAttachment(image: new), XCTAttachment(image: difference)] + ) + } + ) + } +} + +private func NSImagePNGRepresentation(_ image: NSImage) -> Data? { + guard let cgImage = image.cgImage(forProposedRect: nil, context: nil, hints: nil) else { return nil } + let rep = NSBitmapImageRep(cgImage: cgImage) + rep.size = image.size + return rep.representation(using: .png, properties: [:]) +} + +private func compare(_ old: NSImage, _ new: NSImage, precision: Float) -> Bool { + guard let oldCgImage = old.cgImage(forProposedRect: nil, context: nil, hints: nil) else { return false } + guard let newCgImage = new.cgImage(forProposedRect: nil, context: nil, hints: nil) else { return false } + guard oldCgImage.width != 0 else { return false } + guard newCgImage.width != 0 else { return false } + guard oldCgImage.width == newCgImage.width else { return false } + guard oldCgImage.height != 0 else { return false } + guard newCgImage.height != 0 else { return false } + guard oldCgImage.height == newCgImage.height else { return false } + guard let oldContext = context(for: oldCgImage) else { return false } + guard let newContext = context(for: newCgImage) else { return false } + guard let oldData = oldContext.data else { return false } + guard let newData = newContext.data else { return false } + let byteCount = oldContext.height * oldContext.bytesPerRow + if memcmp(oldData, newData, byteCount) == 0 { return true } + let newer = NSImage(data: NSImagePNGRepresentation(new)!)! + guard let newerCgImage = newer.cgImage(forProposedRect: nil, context: nil, hints: nil) else { return false } + guard let newerContext = context(for: newerCgImage) else { return false } + guard let newerData = newerContext.data else { return false } + if memcmp(oldData, newerData, byteCount) == 0 { return true } + if precision >= 1 { return false } + let oldRep = NSBitmapImageRep(cgImage: oldCgImage) + let newRep = NSBitmapImageRep(cgImage: newerCgImage) + var differentPixelCount = 0 + let pixelCount = oldRep.pixelsWide * oldRep.pixelsHigh + let threshold = 1 - precision + for x in 0.. threshold { return false} + } + } + return true +} + +private func context(for cgImage: CGImage) -> CGContext? { + guard + let space = cgImage.colorSpace, + let context = CGContext( + data: nil, + width: cgImage.width, + height: cgImage.height, + bitsPerComponent: cgImage.bitsPerComponent, + bytesPerRow: cgImage.bytesPerRow, + space: space, + bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue + ) + else { return nil } + + context.draw(cgImage, in: CGRect(x: 0, y: 0, width: cgImage.width, height: cgImage.height)) + return context +} + +private func diff(_ old: NSImage, _ new: NSImage) -> NSImage { + let oldCiImage = CIImage(cgImage: old.cgImage(forProposedRect: nil, context: nil, hints: nil)!) + let newCiImage = CIImage(cgImage: new.cgImage(forProposedRect: nil, context: nil, hints: nil)!) + let differenceFilter = CIFilter(name: "CIDifferenceBlendMode")! + differenceFilter.setValue(oldCiImage, forKey: kCIInputImageKey) + differenceFilter.setValue(newCiImage, forKey: kCIInputBackgroundImageKey) + let maxSize = CGSize( + width: max(old.size.width, new.size.width), + height: max(old.size.height, new.size.height) + ) + let rep = NSCIImageRep(ciImage: differenceFilter.outputImage!) + let difference = NSImage(size: maxSize) + difference.addRepresentation(rep) + return difference +} +#endif diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/NSView.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/NSView.swift new file mode 100644 index 0000000..ce48b65 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/NSView.swift @@ -0,0 +1,46 @@ +#if os(macOS) +import Cocoa + +extension Snapshotting where Value == NSView, Format == NSImage { + /// A snapshot strategy for comparing views based on pixel equality. + public static var image: Snapshotting { + return .image() + } + + /// A snapshot strategy for comparing views based on pixel equality. + /// + /// - Parameters: + /// - precision: The percentage of pixels that must match. + /// - size: A view size override. + public static func image(precision: Float = 1, size: CGSize? = nil) -> Snapshotting { + return SimplySnapshotting.image(precision: precision).asyncPullback { view in + let initialSize = view.frame.size + if let size = size { view.frame.size = size } + guard view.frame.width > 0, view.frame.height > 0 else { + fatalError("View not renderable to image at size \(view.frame.size)") + } + return view.snapshot ?? Async { callback in + addImagesForRenderedViews(view).sequence().run { views in + let image = NSImage(data: view.dataWithPDF(inside: view.bounds))! + image.size = .init(width: image.size.width, height: image.size.height) + callback(image) + views.forEach { $0.removeFromSuperview() } + view.frame.size = initialSize + } + } + } + } +} + +extension Snapshotting where Value == NSView, Format == String { + /// A snapshot strategy for comparing views based on a recursive description of their properties and hierarchies. + public static var recursiveDescription: Snapshotting { + return SimplySnapshotting.lines.pullback { view in + return purgePointers( + view.perform(Selector(("_subtreeDescription"))).retain().takeUnretainedValue() + as! String + ) + } + } +} +#endif diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/NSViewController.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/NSViewController.swift new file mode 100644 index 0000000..70d9724 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/NSViewController.swift @@ -0,0 +1,26 @@ +#if os(macOS) +import Cocoa + +extension Snapshotting where Value == NSViewController, Format == NSImage { + /// A snapshot strategy for comparing view controller views based on pixel equality. + public static var image: Snapshotting { + return .image() + } + + /// A snapshot strategy for comparing view controller views based on pixel equality. + /// + /// - Parameters: + /// - precision: The percentage of pixels that must match. + /// - size: A view size override. + public static func image(precision: Float = 1, size: CGSize? = nil) -> Snapshotting { + return Snapshotting.image(precision: precision, size: size).pullback { $0.view } + } +} + +extension Snapshotting where Value == NSViewController, Format == String { + /// A snapshot strategy for comparing view controller views based on a recursive description of their properties and hierarchies. + public static var recursiveDescription: Snapshotting { + return Snapshotting.recursiveDescription.pullback { $0.view } + } +} +#endif diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/SceneKit.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/SceneKit.swift new file mode 100644 index 0000000..86dc7ff --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/SceneKit.swift @@ -0,0 +1,42 @@ +#if os(iOS) || os(macOS) || os(tvOS) +import SceneKit +#if os(macOS) +import Cocoa +#elseif os(iOS) || os(tvOS) +import UIKit +#endif + +#if os(macOS) +extension Snapshotting where Value == SCNScene, Format == NSImage { + /// A snapshot strategy for comparing SceneKit scenes based on pixel equality. + /// + /// - Parameters: + /// - precision: The percentage of pixels that must match. + /// - size: The size of the scene. + public static func image(precision: Float = 1, size: CGSize) -> Snapshotting { + return .scnScene(precision: precision, size: size) + } +} +#elseif os(iOS) || os(tvOS) +extension Snapshotting where Value == SCNScene, Format == UIImage { + /// A snapshot strategy for comparing SceneKit scenes based on pixel equality. + /// + /// - Parameters: + /// - precision: The percentage of pixels that must match. + /// - size: The size of the scene. + public static func image(precision: Float = 1, size: CGSize) -> Snapshotting { + return .scnScene(precision: precision, size: size) + } +} +#endif + +fileprivate extension Snapshotting where Value == SCNScene, Format == Image { + static func scnScene(precision: Float, size: CGSize) -> Snapshotting { + return Snapshotting.image(precision: precision).pullback { scene in + let view = SCNView(frame: .init(x: 0, y: 0, width: size.width, height: size.height)) + view.scene = scene + return view + } + } +} +#endif diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/SpriteKit.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/SpriteKit.swift new file mode 100644 index 0000000..8d71ce1 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/SpriteKit.swift @@ -0,0 +1,42 @@ +#if os(iOS) || os(macOS) || os(tvOS) +import SpriteKit +#if os(macOS) +import Cocoa +#elseif os(iOS) || os(tvOS) +import UIKit +#endif + +#if os(macOS) +extension Snapshotting where Value == SKScene, Format == NSImage { + /// A snapshot strategy for comparing SpriteKit scenes based on pixel equality. + /// + /// - Parameters: + /// - precision: The percentage of pixels that must match. + /// - size: The size of the scene. + public static func image(precision: Float = 1, size: CGSize) -> Snapshotting { + return .skScene(precision: precision, size: size) + } +} +#elseif os(iOS) || os(tvOS) +extension Snapshotting where Value == SKScene, Format == UIImage { + /// A snapshot strategy for comparing SpriteKit scenes based on pixel equality. + /// + /// - Parameters: + /// - precision: The percentage of pixels that must match. + /// - size: The size of the scene. + public static func image(precision: Float = 1, size: CGSize) -> Snapshotting { + return .skScene(precision: precision, size: size) + } +} +#endif + +fileprivate extension Snapshotting where Value == SKScene, Format == Image { + static func skScene(precision: Float, size: CGSize) -> Snapshotting { + return Snapshotting.image(precision: precision).pullback { scene in + let view = SKView(frame: .init(x: 0, y: 0, width: size.width, height: size.height)) + view.presentScene(scene) + return view + } + } +} +#endif diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/String.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/String.swift new file mode 100644 index 0000000..07eddbd --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/String.swift @@ -0,0 +1,26 @@ +import Foundation +import XCTest + +extension Snapshotting where Value == String, Format == String { + /// A snapshot strategy for comparing strings based on equality. + public static let lines = Snapshotting(pathExtension: "txt", diffing: .lines) +} + +extension Diffing where Value == String { + /// A line-diffing strategy for UTF-8 text. + public static let lines = Diffing( + toData: { Data($0.utf8) }, + fromData: { String(decoding: $0, as: UTF8.self) } + ) { old, new in + guard old != new else { return nil } + let hunks = chunk(diff: SnapshotTesting.diff( + old.split(separator: "\n", omittingEmptySubsequences: false).map(String.init), + new.split(separator: "\n", omittingEmptySubsequences: false).map(String.init) + )) + let failure = hunks + .flatMap { [$0.patchMark] + $0.lines } + .joined(separator: "\n") + let attachment = XCTAttachment(data: Data(failure.utf8), uniformTypeIdentifier: "public.patch-file") + return ("Diff: …\n\n\(failure)", [attachment]) + } +} diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/UIImage.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/UIImage.swift new file mode 100644 index 0000000..2d5c4e7 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/UIImage.swift @@ -0,0 +1,103 @@ +#if os(iOS) || os(tvOS) +import UIKit +import XCTest + +extension Snapshotting where Value == UIImage, Format == UIImage { + /// A snapshot strategy for comparing images based on pixel equality. + public static var image: Snapshotting { + return .image(precision: 1) + } + + /// A snapshot strategy for comparing images based on pixel equality. + /// + /// - Parameter precision: The percentage of pixels that must match. + public static func image(precision: Float) -> Snapshotting { + return .init( + pathExtension: "png", + diffing: .init( + toData: { $0.pngData()! }, + fromData: { UIImage(data: $0, scale: UIScreen.main.scale)! } + ) { old, new in + guard !compare(old, new, precision: precision) else { return nil } + let difference = diff(old, new) + let message = new.size == old.size + ? "Expected snapshot to match reference" + : "Expected snapshot@\(new.size) to match reference@\(old.size)" + let oldAttachment = XCTAttachment(image: old) + oldAttachment.name = "reference" + let newAttachment = XCTAttachment(image: new) + newAttachment.name = "failure" + let differenceAttachment = XCTAttachment(image: difference) + differenceAttachment.name = "difference" + return ( + message, + [oldAttachment, newAttachment, differenceAttachment] + ) + } + ) + } +} + +private func compare(_ old: UIImage, _ new: UIImage, precision: Float) -> Bool { + guard let oldCgImage = old.cgImage else { return false } + guard let newCgImage = new.cgImage else { return false } + guard oldCgImage.width != 0 else { return false } + guard newCgImage.width != 0 else { return false } + guard oldCgImage.width == newCgImage.width else { return false } + guard oldCgImage.height != 0 else { return false } + guard newCgImage.height != 0 else { return false } + guard oldCgImage.height == newCgImage.height else { return false } + let maxBytesPerRow = max(oldCgImage.bytesPerRow, newCgImage.bytesPerRow) + let byteCount = maxBytesPerRow * oldCgImage.height + var oldBytes = [UInt8](repeating: 0, count: byteCount) + guard let oldContext = context(for: oldCgImage, data: &oldBytes) else { return false } + guard let oldData = oldContext.data else { return false } + if let newContext = context(for: newCgImage), let newData = newContext.data { + if memcmp(oldData, newData, byteCount) == 0 { return true } + } + let newer = UIImage(data: new.pngData()!)! + guard let newerCgImage = newer.cgImage else { return false } + var newerBytes = [UInt8](repeating: 0, count: byteCount) + guard let newerContext = context(for: newerCgImage, data: &newerBytes) else { return false } + guard let newerData = newerContext.data else { return false } + if memcmp(oldData, newerData, byteCount) == 0 { return true } + if precision >= 1 { return false } + var differentPixelCount = 0 + let threshold = 1 - precision + for byte in 0.. threshold { return false} + } + return true +} + +private func context(for cgImage: CGImage, data: UnsafeMutableRawPointer? = nil) -> CGContext? { + guard + let space = cgImage.colorSpace, + let context = CGContext( + data: data, + width: cgImage.width, + height: cgImage.height, + bitsPerComponent: cgImage.bitsPerComponent, + bytesPerRow: cgImage.bytesPerRow, + space: space, + bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue + ) + else { return nil } + + context.draw(cgImage, in: CGRect(x: 0, y: 0, width: cgImage.width, height: cgImage.height)) + return context +} + +private func diff(_ old: UIImage, _ new: UIImage) -> UIImage { + let oldCiImage = CIImage(cgImage: old.cgImage!) + let newCiImage = CIImage(cgImage: new.cgImage!) + let differenceFilter = CIFilter(name: "CIDifferenceBlendMode")! + differenceFilter.setValue(oldCiImage, forKey: kCIInputImageKey) + differenceFilter.setValue(newCiImage, forKey: kCIInputBackgroundImageKey) + let differenceCiImage = differenceFilter.outputImage! + let context = CIContext() + let differenceCgImage = context.createCGImage(differenceCiImage, from: differenceCiImage.extent)! + return UIImage(cgImage: differenceCgImage) +} +#endif diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/UIView.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/UIView.swift new file mode 100644 index 0000000..9a5cca9 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/UIView.swift @@ -0,0 +1,62 @@ +#if os(iOS) || os(tvOS) +import UIKit + +extension Snapshotting where Value == UIView, Format == UIImage { + /// A snapshot strategy for comparing views based on pixel equality. + public static var image: Snapshotting { + return .image() + } + + /// A snapshot strategy for comparing views based on pixel equality. + /// + /// - Parameters: + /// - drawHierarchyInKeyWindow: Utilize the simulator's key window in order to render `UIAppearance` and `UIVisualEffect`s. This option requires a host application for your tests and will _not_ work for framework test targets. + /// - precision: The percentage of pixels that must match. + /// - size: A view size override. + /// - traits: A trait collection override. + public static func image( + drawHierarchyInKeyWindow: Bool = false, + precision: Float = 1, + size: CGSize? = nil, + traits: UITraitCollection = .init() + ) + -> Snapshotting { + + return SimplySnapshotting.image(precision: precision).asyncPullback { view in + snapshotView( + config: .init(safeArea: .zero, size: size ?? view.frame.size, traits: .init()), + drawHierarchyInKeyWindow: drawHierarchyInKeyWindow, + traits: traits, + view: view, + viewController: .init() + ) + } + } +} + +extension Snapshotting where Value == UIView, Format == String { + /// A snapshot strategy for comparing views based on a recursive description of their properties and hierarchies. + public static let recursiveDescription = Snapshotting.recursiveDescription() + + /// A snapshot strategy for comparing views based on a recursive description of their properties and hierarchies. + public static func recursiveDescription( + size: CGSize? = nil, + traits: UITraitCollection = .init() + ) + -> Snapshotting { + return SimplySnapshotting.lines.pullback { view in + prepareView( + config: .init(safeArea: .zero, size: size ?? view.frame.size, traits: traits), + drawHierarchyInKeyWindow: false, + traits: .init(), + view: view, + viewController: .init() + ) + return purgePointers( + view.perform(Selector(("recursiveDescription"))).retain().takeUnretainedValue() + as! String + ) + } + } +} +#endif diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/UIViewController.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/UIViewController.swift new file mode 100644 index 0000000..edbd47a --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/UIViewController.swift @@ -0,0 +1,110 @@ +#if os(iOS) || os(tvOS) +import UIKit + +extension Snapshotting where Value == UIViewController, Format == UIImage { + /// A snapshot strategy for comparing view controller views based on pixel equality. + public static var image: Snapshotting { + return .image() + } + + /// A snapshot strategy for comparing view controller views based on pixel equality. + /// + /// - Parameters: + /// - config: A set of device configuration settings. + /// - precision: The percentage of pixels that must match. + /// - size: A view size override. + /// - traits: A trait collection override. + public static func image( + on config: ViewImageConfig, + precision: Float = 1, + size: CGSize? = nil, + traits: UITraitCollection = .init() + ) + -> Snapshotting { + + return SimplySnapshotting.image(precision: precision).asyncPullback { viewController in + snapshotView( + config: size.map { .init(safeArea: config.safeArea, size: $0, traits: config.traits) } ?? config, + drawHierarchyInKeyWindow: false, + traits: traits, + view: viewController.view, + viewController: viewController + ) + } + } + + /// A snapshot strategy for comparing view controller views based on pixel equality. + /// + /// - Parameters: + /// - drawHierarchyInKeyWindow: Utilize the simulator's key window in order to render `UIAppearance` and `UIVisualEffect`s. This option requires a host application for your tests and will _not_ work for framework test targets. + /// - precision: The percentage of pixels that must match. + /// - size: A view size override. + /// - traits: A trait collection override. + public static func image( + drawHierarchyInKeyWindow: Bool = false, + precision: Float = 1, + size: CGSize? = nil, + traits: UITraitCollection = .init() + ) + -> Snapshotting { + + return SimplySnapshotting.image(precision: precision).asyncPullback { viewController in + snapshotView( + config: .init(safeArea: .zero, size: size, traits: traits), + drawHierarchyInKeyWindow: drawHierarchyInKeyWindow, + traits: .init(), + view: viewController.view, + viewController: viewController + ) + } + } +} + +extension Snapshotting where Value == UIViewController, Format == String { + /// A snapshot strategy for comparing view controllers based on their embedded controller hierarchy. + public static var hierarchy: Snapshotting { + return Snapshotting.lines.pullback { viewController in + prepareView( + config: .init(), + drawHierarchyInKeyWindow: false, + traits: .init(), + view: viewController.view, + viewController: viewController + ) + return purgePointers( + viewController.perform(Selector(("_printHierarchy"))).retain().takeUnretainedValue() as! String + ) + } + } + + /// A snapshot strategy for comparing view controller views based on a recursive description of their properties and hierarchies. + public static let recursiveDescription = Snapshotting.recursiveDescription() + + /// A snapshot strategy for comparing view controller views based on a recursive description of their properties and hierarchies. + /// + /// - Parameters: + /// - config: A set of device configuration settings. + /// - size: A view size override. + /// - traits: A trait collection override. + public static func recursiveDescription( + on config: ViewImageConfig = .init(), + size: CGSize? = nil, + traits: UITraitCollection = .init() + ) + -> Snapshotting { + return SimplySnapshotting.lines.pullback { viewController in + prepareView( + config: .init(safeArea: config.safeArea, size: size ?? config.size, traits: config.traits), + drawHierarchyInKeyWindow: false, + traits: .init(), + view: viewController.view, + viewController: viewController + ) + return purgePointers( + viewController.view.perform(Selector(("recursiveDescription"))).retain().takeUnretainedValue() + as! String + ) + } + } +} +#endif diff --git a/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/URLRequest.swift b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/URLRequest.swift new file mode 100644 index 0000000..a177083 --- /dev/null +++ b/Pods/SnapshotTesting/Sources/SnapshotTesting/Snapshotting/URLRequest.swift @@ -0,0 +1,19 @@ +import Foundation + +extension Snapshotting where Value == URLRequest, Format == String { + /// A snapshot strategy for comparing requests based on raw equality. + public static let raw = SimplySnapshotting.lines.pullback { (request: URLRequest) in + + let method = "\(request.httpMethod ?? "GET") \(request.url?.absoluteString ?? "(null)")" + + let headers = (request.allHTTPHeaderFields ?? [:]) + .map { key, value in "\(key): \(value)" } + .sorted() + + let body = request.httpBody + .map { ["\n\(String(decoding: $0, as: UTF8.self))"] } + ?? [] + + return ([method] + headers + body).joined(separator: "\n") + } +} diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-Info.plist b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.markdown b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.markdown new file mode 100644 index 0000000..3642054 --- /dev/null +++ b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.markdown @@ -0,0 +1,53 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## SnapshotTesting + +MIT License + +Copyright (c) 2017 Point-Free, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +## Then + +The MIT License (MIT) + +Copyright (c) 2015 Suyeol Jeon (xoul.kr) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.plist b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.plist new file mode 100644 index 0000000..ed19002 --- /dev/null +++ b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.plist @@ -0,0 +1,91 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + MIT License + +Copyright (c) 2017 Point-Free, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + License + MIT + Title + SnapshotTesting + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2015 Suyeol Jeon (xoul.kr) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + License + MIT + Title + Then + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-dummy.m b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-dummy.m new file mode 100644 index 0000000..cc71a14 --- /dev/null +++ b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Anchorage_tvOS : NSObject +@end +@implementation PodsDummy_Pods_Anchorage_tvOS +@end diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-umbrella.h b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-umbrella.h new file mode 100644 index 0000000..1eb130c --- /dev/null +++ b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_Anchorage_tvOSVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_Anchorage_tvOSVersionString[]; + diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.debug.xcconfig b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.debug.xcconfig new file mode 100644 index 0000000..8bdaddd --- /dev/null +++ b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.debug.xcconfig @@ -0,0 +1,10 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/Then-tvOS" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-tvOS/SnapshotTesting.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Then-tvOS/Then.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "SnapshotTesting" -framework "Then" -framework "XCTest" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.modulemap b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.modulemap new file mode 100644 index 0000000..8fd5a35 --- /dev/null +++ b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.modulemap @@ -0,0 +1,6 @@ +framework module Pods_Anchorage_tvOS { + umbrella header "Pods-Anchorage-tvOS-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.release.xcconfig b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.release.xcconfig new file mode 100644 index 0000000..8bdaddd --- /dev/null +++ b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.release.xcconfig @@ -0,0 +1,10 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/Then-tvOS" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-tvOS/SnapshotTesting.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Then-tvOS/Then.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "SnapshotTesting" -framework "Then" -framework "XCTest" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-Info.plist b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-acknowledgements.markdown b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-acknowledgements.markdown new file mode 100644 index 0000000..102af75 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-acknowledgements.markdown @@ -0,0 +1,3 @@ +# Acknowledgements +This application makes use of the following third party libraries: +Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-acknowledgements.plist b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-acknowledgements.plist new file mode 100644 index 0000000..7acbad1 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-acknowledgements.plist @@ -0,0 +1,29 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-dummy.m b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-dummy.m new file mode 100644 index 0000000..5c91f69 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_AnchorageDemo : NSObject +@end +@implementation PodsDummy_Pods_AnchorageDemo +@end diff --git a/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-umbrella.h b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-umbrella.h new file mode 100644 index 0000000..957cb5c --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_AnchorageDemoVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_AnchorageDemoVersionString[]; + diff --git a/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.debug.xcconfig b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.debug.xcconfig new file mode 100644 index 0000000..566aa02 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.debug.xcconfig @@ -0,0 +1,6 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.modulemap b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.modulemap new file mode 100644 index 0000000..d559548 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.modulemap @@ -0,0 +1,6 @@ +framework module Pods_AnchorageDemo { + umbrella header "Pods-AnchorageDemo-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.release.xcconfig b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.release.xcconfig new file mode 100644 index 0000000..566aa02 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.release.xcconfig @@ -0,0 +1,6 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-Info.plist b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-acknowledgements.markdown b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-acknowledgements.markdown new file mode 100644 index 0000000..3642054 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-acknowledgements.markdown @@ -0,0 +1,53 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## SnapshotTesting + +MIT License + +Copyright (c) 2017 Point-Free, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +## Then + +The MIT License (MIT) + +Copyright (c) 2015 Suyeol Jeon (xoul.kr) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-acknowledgements.plist b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-acknowledgements.plist new file mode 100644 index 0000000..ed19002 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-acknowledgements.plist @@ -0,0 +1,91 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + MIT License + +Copyright (c) 2017 Point-Free, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + License + MIT + Title + SnapshotTesting + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2015 Suyeol Jeon (xoul.kr) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + License + MIT + Title + Then + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-dummy.m b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-dummy.m new file mode 100644 index 0000000..b876808 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_AnchorageTests_iOS : NSObject +@end +@implementation PodsDummy_Pods_AnchorageTests_iOS +@end diff --git a/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-frameworks.sh b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-frameworks.sh new file mode 100755 index 0000000..6f82895 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-frameworks.sh @@ -0,0 +1,165 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=1 +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SnapshotTesting-iOS/SnapshotTesting.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Then-iOS/Then.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SnapshotTesting-iOS/SnapshotTesting.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Then-iOS/Then.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-umbrella.h b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-umbrella.h new file mode 100644 index 0000000..69766d2 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_AnchorageTests_iOSVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_AnchorageTests_iOSVersionString[]; + diff --git a/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.debug.xcconfig b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.debug.xcconfig new file mode 100644 index 0000000..a2fdde5 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.debug.xcconfig @@ -0,0 +1,11 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/Then-iOS" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-iOS/SnapshotTesting.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Then-iOS/Then.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "SnapshotTesting" -framework "Then" -framework "XCTest" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.modulemap b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.modulemap new file mode 100644 index 0000000..fbdd44d --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.modulemap @@ -0,0 +1,6 @@ +framework module Pods_AnchorageTests_iOS { + umbrella header "Pods-AnchorageTests-iOS-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.release.xcconfig b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.release.xcconfig new file mode 100644 index 0000000..a2fdde5 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.release.xcconfig @@ -0,0 +1,11 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/Then-iOS" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-iOS/SnapshotTesting.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Then-iOS/Then.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "SnapshotTesting" -framework "Then" -framework "XCTest" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-Info.plist b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-acknowledgements.markdown b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-acknowledgements.markdown new file mode 100644 index 0000000..3642054 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-acknowledgements.markdown @@ -0,0 +1,53 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## SnapshotTesting + +MIT License + +Copyright (c) 2017 Point-Free, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +## Then + +The MIT License (MIT) + +Copyright (c) 2015 Suyeol Jeon (xoul.kr) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-acknowledgements.plist b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-acknowledgements.plist new file mode 100644 index 0000000..ed19002 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-acknowledgements.plist @@ -0,0 +1,91 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + MIT License + +Copyright (c) 2017 Point-Free, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + License + MIT + Title + SnapshotTesting + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2015 Suyeol Jeon (xoul.kr) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + License + MIT + Title + Then + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-dummy.m b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-dummy.m new file mode 100644 index 0000000..5d26046 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_AnchorageTests_macOS : NSObject +@end +@implementation PodsDummy_Pods_AnchorageTests_macOS +@end diff --git a/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-frameworks.sh b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-frameworks.sh new file mode 100755 index 0000000..8f54792 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-frameworks.sh @@ -0,0 +1,165 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=1 +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SnapshotTesting-macOS/SnapshotTesting.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Then-macOS/Then.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SnapshotTesting-macOS/SnapshotTesting.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Then-macOS/Then.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-umbrella.h b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-umbrella.h new file mode 100644 index 0000000..01c75a1 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_AnchorageTests_macOSVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_AnchorageTests_macOSVersionString[]; + diff --git a/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.debug.xcconfig b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.debug.xcconfig new file mode 100644 index 0000000..0cf54af --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.debug.xcconfig @@ -0,0 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +CODE_SIGN_IDENTITY = +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/Then-macOS" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-macOS/SnapshotTesting.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Then-macOS/Then.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "SnapshotTesting" -framework "Then" -framework "XCTest" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.modulemap b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.modulemap new file mode 100644 index 0000000..704e429 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.modulemap @@ -0,0 +1,6 @@ +framework module Pods_AnchorageTests_macOS { + umbrella header "Pods-AnchorageTests-macOS-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.release.xcconfig b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.release.xcconfig new file mode 100644 index 0000000..0cf54af --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.release.xcconfig @@ -0,0 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +CODE_SIGN_IDENTITY = +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/Then-macOS" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-macOS/SnapshotTesting.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Then-macOS/Then.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "SnapshotTesting" -framework "Then" -framework "XCTest" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-Info.plist b/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-Info.plist new file mode 100644 index 0000000..21a30b4 --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.1.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-dummy.m b/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-dummy.m new file mode 100644 index 0000000..4b12b46 --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SnapshotTesting_iOS : NSObject +@end +@implementation PodsDummy_SnapshotTesting_iOS +@end diff --git a/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-prefix.pch b/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-umbrella.h b/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-umbrella.h new file mode 100644 index 0000000..cf2e3d0 --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double SnapshotTestingVersionNumber; +FOUNDATION_EXPORT const unsigned char SnapshotTestingVersionString[]; + diff --git a/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS.modulemap b/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS.modulemap new file mode 100644 index 0000000..e3eaead --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS.modulemap @@ -0,0 +1,6 @@ +framework module SnapshotTesting { + umbrella header "SnapshotTesting-iOS-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS.xcconfig b/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS.xcconfig new file mode 100644 index 0000000..4a2872e --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-iOS/SnapshotTesting-iOS.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-iOS +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapshotTesting +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-Info.plist b/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-Info.plist new file mode 100644 index 0000000..21a30b4 --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.1.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-dummy.m b/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-dummy.m new file mode 100644 index 0000000..8ecca34 --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SnapshotTesting_macOS : NSObject +@end +@implementation PodsDummy_SnapshotTesting_macOS +@end diff --git a/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-prefix.pch b/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-prefix.pch new file mode 100644 index 0000000..082f8af --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-umbrella.h b/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-umbrella.h new file mode 100644 index 0000000..112390a --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double SnapshotTestingVersionNumber; +FOUNDATION_EXPORT const unsigned char SnapshotTestingVersionString[]; + diff --git a/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS.modulemap b/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS.modulemap new file mode 100644 index 0000000..7f1259b --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS.modulemap @@ -0,0 +1,6 @@ +framework module SnapshotTesting { + umbrella header "SnapshotTesting-macOS-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS.xcconfig b/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS.xcconfig new file mode 100644 index 0000000..8ab4d1a --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS.xcconfig @@ -0,0 +1,11 @@ +CODE_SIGN_IDENTITY = +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-macOS +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapshotTesting +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-Info.plist b/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-Info.plist new file mode 100644 index 0000000..21a30b4 --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.1.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-dummy.m b/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-dummy.m new file mode 100644 index 0000000..dd0d0a7 --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SnapshotTesting_tvOS : NSObject +@end +@implementation PodsDummy_SnapshotTesting_tvOS +@end diff --git a/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-prefix.pch b/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-umbrella.h b/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-umbrella.h new file mode 100644 index 0000000..cf2e3d0 --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double SnapshotTestingVersionNumber; +FOUNDATION_EXPORT const unsigned char SnapshotTestingVersionString[]; + diff --git a/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.modulemap b/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.modulemap new file mode 100644 index 0000000..8803d80 --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.modulemap @@ -0,0 +1,6 @@ +framework module SnapshotTesting { + umbrella header "SnapshotTesting-tvOS-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.xcconfig b/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.xcconfig new file mode 100644 index 0000000..a1c73c5 --- /dev/null +++ b/Pods/Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-tvOS +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SnapshotTesting +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/Then-iOS/Then-iOS-Info.plist b/Pods/Target Support Files/Then-iOS/Then-iOS-Info.plist new file mode 100644 index 0000000..e526849 --- /dev/null +++ b/Pods/Target Support Files/Then-iOS/Then-iOS-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.4.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Then-iOS/Then-iOS-dummy.m b/Pods/Target Support Files/Then-iOS/Then-iOS-dummy.m new file mode 100644 index 0000000..df482cd --- /dev/null +++ b/Pods/Target Support Files/Then-iOS/Then-iOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Then_iOS : NSObject +@end +@implementation PodsDummy_Then_iOS +@end diff --git a/Pods/Target Support Files/Then-iOS/Then-iOS-prefix.pch b/Pods/Target Support Files/Then-iOS/Then-iOS-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/Then-iOS/Then-iOS-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/Then-iOS/Then-iOS-umbrella.h b/Pods/Target Support Files/Then-iOS/Then-iOS-umbrella.h new file mode 100644 index 0000000..851f9ac --- /dev/null +++ b/Pods/Target Support Files/Then-iOS/Then-iOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double ThenVersionNumber; +FOUNDATION_EXPORT const unsigned char ThenVersionString[]; + diff --git a/Pods/Target Support Files/Then-iOS/Then-iOS.modulemap b/Pods/Target Support Files/Then-iOS/Then-iOS.modulemap new file mode 100644 index 0000000..998312b --- /dev/null +++ b/Pods/Target Support Files/Then-iOS/Then-iOS.modulemap @@ -0,0 +1,6 @@ +framework module Then { + umbrella header "Then-iOS-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Then-iOS/Then-iOS.xcconfig b/Pods/Target Support Files/Then-iOS/Then-iOS.xcconfig new file mode 100644 index 0000000..59a43d7 --- /dev/null +++ b/Pods/Target Support Files/Then-iOS/Then-iOS.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Then-iOS +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Then +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/Then-macOS/Then-macOS-Info.plist b/Pods/Target Support Files/Then-macOS/Then-macOS-Info.plist new file mode 100644 index 0000000..e526849 --- /dev/null +++ b/Pods/Target Support Files/Then-macOS/Then-macOS-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.4.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Then-macOS/Then-macOS-dummy.m b/Pods/Target Support Files/Then-macOS/Then-macOS-dummy.m new file mode 100644 index 0000000..f9cd4ec --- /dev/null +++ b/Pods/Target Support Files/Then-macOS/Then-macOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Then_macOS : NSObject +@end +@implementation PodsDummy_Then_macOS +@end diff --git a/Pods/Target Support Files/Then-macOS/Then-macOS-prefix.pch b/Pods/Target Support Files/Then-macOS/Then-macOS-prefix.pch new file mode 100644 index 0000000..082f8af --- /dev/null +++ b/Pods/Target Support Files/Then-macOS/Then-macOS-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/Then-macOS/Then-macOS-umbrella.h b/Pods/Target Support Files/Then-macOS/Then-macOS-umbrella.h new file mode 100644 index 0000000..4f98671 --- /dev/null +++ b/Pods/Target Support Files/Then-macOS/Then-macOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double ThenVersionNumber; +FOUNDATION_EXPORT const unsigned char ThenVersionString[]; + diff --git a/Pods/Target Support Files/Then-macOS/Then-macOS.modulemap b/Pods/Target Support Files/Then-macOS/Then-macOS.modulemap new file mode 100644 index 0000000..ee83717 --- /dev/null +++ b/Pods/Target Support Files/Then-macOS/Then-macOS.modulemap @@ -0,0 +1,6 @@ +framework module Then { + umbrella header "Then-macOS-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Then-macOS/Then-macOS.xcconfig b/Pods/Target Support Files/Then-macOS/Then-macOS.xcconfig new file mode 100644 index 0000000..14ada9d --- /dev/null +++ b/Pods/Target Support Files/Then-macOS/Then-macOS.xcconfig @@ -0,0 +1,10 @@ +CODE_SIGN_IDENTITY = +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Then-macOS +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Then +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/Then-tvOS/Then-tvOS-Info.plist b/Pods/Target Support Files/Then-tvOS/Then-tvOS-Info.plist new file mode 100644 index 0000000..e526849 --- /dev/null +++ b/Pods/Target Support Files/Then-tvOS/Then-tvOS-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.4.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Then-tvOS/Then-tvOS-dummy.m b/Pods/Target Support Files/Then-tvOS/Then-tvOS-dummy.m new file mode 100644 index 0000000..f28446b --- /dev/null +++ b/Pods/Target Support Files/Then-tvOS/Then-tvOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Then_tvOS : NSObject +@end +@implementation PodsDummy_Then_tvOS +@end diff --git a/Pods/Target Support Files/Then-tvOS/Then-tvOS-prefix.pch b/Pods/Target Support Files/Then-tvOS/Then-tvOS-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/Then-tvOS/Then-tvOS-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/Then-tvOS/Then-tvOS-umbrella.h b/Pods/Target Support Files/Then-tvOS/Then-tvOS-umbrella.h new file mode 100644 index 0000000..851f9ac --- /dev/null +++ b/Pods/Target Support Files/Then-tvOS/Then-tvOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double ThenVersionNumber; +FOUNDATION_EXPORT const unsigned char ThenVersionString[]; + diff --git a/Pods/Target Support Files/Then-tvOS/Then-tvOS.modulemap b/Pods/Target Support Files/Then-tvOS/Then-tvOS.modulemap new file mode 100644 index 0000000..b995db8 --- /dev/null +++ b/Pods/Target Support Files/Then-tvOS/Then-tvOS.modulemap @@ -0,0 +1,6 @@ +framework module Then { + umbrella header "Then-tvOS-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Then-tvOS/Then-tvOS.xcconfig b/Pods/Target Support Files/Then-tvOS/Then-tvOS.xcconfig new file mode 100644 index 0000000..e4203c7 --- /dev/null +++ b/Pods/Target Support Files/Then-tvOS/Then-tvOS.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Then-tvOS +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Then +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Then/LICENSE b/Pods/Then/LICENSE new file mode 100644 index 0000000..7f0cb52 --- /dev/null +++ b/Pods/Then/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Suyeol Jeon (xoul.kr) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Pods/Then/README.md b/Pods/Then/README.md new file mode 100644 index 0000000..b70a490 --- /dev/null +++ b/Pods/Then/README.md @@ -0,0 +1,131 @@ +# Then + +![Swift](https://img.shields.io/badge/Swift-4.2-orange.svg) +[![CocoaPods](http://img.shields.io/cocoapods/v/Then.svg)](https://cocoapods.org/pods/Then) +[![Build Status](https://travis-ci.org/devxoul/Then.svg?branch=master)](https://travis-ci.org/devxoul/Then) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) + +✨ Super sweet syntactic sugar for Swift initializers. + +## At a Glance + +Initialize UILabel **then** set its properties. + +```swift +let label = UILabel().then { + $0.textAlignment = .center + $0.textColor = .black + $0.text = "Hello, World!" +} +``` + +This is equivalent to: + +```swift +let label: UILabel = { + let label = UILabel() + label.textAlignment = .center + label.textColor = .black + label.text = "Hello, World!" + return label +}() +``` + +## Tips and Tricks + +- You can use `then()` to all of `NSObject` subclasses. + + ```swift + let queue = OperationQueue().then { + $0.maxConcurrentOperationCount = 1 + } + ``` + +- Want to use with your own types? Just make extensions. + + ```swift + extension MyType: Then {} + + let instance = MyType().then { + $0.really = "awesome!" + } + ``` + +- Use `with()` when copying the value types. + + ```swift + let newFrame = oldFrame.with { + $0.size.width = 200 + $0.size.height = 100 + } + newFrame.width // 200 + newFrame.height // 100 + ``` + +- Use `do()` to do something with less typing. + + ```swift + UserDefaults.standard.do { + $0.set("devxoul", forKey: "username") + $0.set("devxoul@gmail.com", forKey: "email") + $0.synchronize() + } + ``` + +## Real World Example + +Here's an example usage in an UIViewController subclass. + +```swift +final class MyViewController: UIViewController { + + let titleLabel = UILabel().then { + $0.textColor = .black + $0.textAlignment = .center + } + + let tableView = UITableView().then { + $0.backgroundColor = .clear + $0.separatorStyle = .none + $0.register(MyCell.self, forCellReuseIdentifier: "myCell") + } + + override func viewDidLoad() { + super.viewDidLoad() + self.view.addSubview(self.titleLabel) + self.view.addSubview(self.tableView) + } + +} +``` + +## Installation + +- **For iOS 8+ projects** with [CocoaPods](https://cocoapods.org): + + ```ruby + pod 'Then' + ``` + +- **For iOS 8+ projects** with [Carthage](https://github.com/Carthage/Carthage): + + ``` + github "devxoul/Then" + ``` + +- **Using [Swift Package Manager](https://swift.org/package-manager)**: + + ```swift + import PackageDescription + + let package = Package( + name: "MyAwesomeApp", + dependencies: [ + .Package(url: "https://github.com/devxoul/Then", majorVersion: 2), + ] + ) + ``` + +## License + +**Then** is under MIT license. See the [LICENSE](LICENSE) file for more info. diff --git a/Pods/Then/Sources/Then/Then.swift b/Pods/Then/Sources/Then/Then.swift new file mode 100644 index 0000000..2be8422 --- /dev/null +++ b/Pods/Then/Sources/Then/Then.swift @@ -0,0 +1,85 @@ +// The MIT License (MIT) +// +// Copyright (c) 2015 Suyeol Jeon (xoul.kr) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +import Foundation +import CoreGraphics +#if os(iOS) || os(tvOS) + import UIKit.UIGeometry +#endif + +public protocol Then {} + +extension Then where Self: Any { + + /// Makes it available to set properties with closures just after initializing and copying the value types. + /// + /// let frame = CGRect().with { + /// $0.origin.x = 10 + /// $0.size.width = 100 + /// } + public func with(_ block: (inout Self) throws -> Void) rethrows -> Self { + var copy = self + try block(©) + return copy + } + + /// Makes it available to execute something with closures. + /// + /// UserDefaults.standard.do { + /// $0.set("devxoul", forKey: "username") + /// $0.set("devxoul@gmail.com", forKey: "email") + /// $0.synchronize() + /// } + public func `do`(_ block: (Self) throws -> Void) rethrows { + try block(self) + } + +} + +extension Then where Self: AnyObject { + + /// Makes it available to set properties with closures just after initializing. + /// + /// let label = UILabel().then { + /// $0.textAlignment = .Center + /// $0.textColor = UIColor.blackColor() + /// $0.text = "Hello, World!" + /// } + public func then(_ block: (Self) throws -> Void) rethrows -> Self { + try block(self) + return self + } + +} + +extension NSObject: Then {} + +extension CGPoint: Then {} +extension CGRect: Then {} +extension CGSize: Then {} +extension CGVector: Then {} + +#if os(iOS) || os(tvOS) + extension UIEdgeInsets: Then {} + extension UIOffset: Then {} + extension UIRectEdge: Then {} +#endif From 79a107874613e93913f191b7e79ac015d34eef49 Mon Sep 17 00:00:00 2001 From: Brian Semiglia Date: Fri, 15 Feb 2019 12:29:16 -0500 Subject: [PATCH 3/6] Fixes typo. --- Anchorage.xcodeproj/project.pbxproj | 67 +- .../xcschemes/Anchorage-tvOS.xcscheme | 4 +- Podfile | 2 +- Podfile.lock | 2 +- Pods/Manifest.lock | 2 +- Pods/Pods.xcodeproj/project.pbxproj | 958 +++++++++--------- .../Pods-Anchorage-tvOS-dummy.m | 5 - .../Pods-Anchorage-tvOS.modulemap | 6 - .../Pods-AnchorageTests-tvOS-Info.plist} | 0 ...orageTests-tvOS-acknowledgements.markdown} | 0 ...nchorageTests-tvOS-acknowledgements.plist} | 0 .../Pods-AnchorageTests-tvOS-dummy.m | 5 + .../Pods-AnchorageTests-tvOS-frameworks.sh | 165 +++ .../Pods-AnchorageTests-tvOS-umbrella.h} | 4 +- .../Pods-AnchorageTests-tvOS.debug.xcconfig} | 3 +- .../Pods-AnchorageTests-tvOS.modulemap | 6 + ...Pods-AnchorageTests-tvOS.release.xcconfig} | 3 +- 17 files changed, 713 insertions(+), 519 deletions(-) delete mode 100644 Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-dummy.m delete mode 100644 Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.modulemap rename Pods/Target Support Files/{Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-Info.plist => Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-Info.plist} (100%) rename Pods/Target Support Files/{Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.markdown => Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-acknowledgements.markdown} (100%) rename Pods/Target Support Files/{Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.plist => Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-acknowledgements.plist} (100%) create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-dummy.m create mode 100755 Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-frameworks.sh rename Pods/Target Support Files/{Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-umbrella.h => Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-umbrella.h} (57%) rename Pods/Target Support Files/{Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.release.xcconfig => Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.debug.xcconfig} (91%) create mode 100644 Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.modulemap rename Pods/Target Support Files/{Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.debug.xcconfig => Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.release.xcconfig} (91%) diff --git a/Anchorage.xcodeproj/project.pbxproj b/Anchorage.xcodeproj/project.pbxproj index 80503e0..3c8aea1 100644 --- a/Anchorage.xcodeproj/project.pbxproj +++ b/Anchorage.xcodeproj/project.pbxproj @@ -35,11 +35,11 @@ 2DD2426D1D95C2CE001D6725 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2DD2426C1D95C2CE001D6725 /* Assets.xcassets */; }; 2DD242701D95C2CE001D6725 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2DD2426E1D95C2CE001D6725 /* LaunchScreen.storyboard */; }; 3C2050B71D3B213B00995DF3 /* Anchorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C2050B61D3B213B00995DF3 /* Anchorage.swift */; }; + 4ECBAE41831224D033E1F647 /* Pods_AnchorageTests_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4471E81EED984DA2A5AB656F /* Pods_AnchorageTests_tvOS.framework */; }; 7A39D6311EB53E1100BDE9C0 /* AnchorageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A39D6301EB53E1100BDE9C0 /* AnchorageTests.swift */; }; 7A39D6331EB53E1100BDE9C0 /* Anchorage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C2050AB1D3B20FD00995DF3 /* Anchorage.framework */; }; 7AA89727233059A6A2DE18DB /* Pods_AnchorageDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8F0389C6D00AEDCE0477A2E /* Pods_AnchorageDemo.framework */; }; A16B0A3423D4C8BD1BBB5C64 /* Pods_AnchorageTests_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AC798BFFD09EBA92C1F6CB5 /* Pods_AnchorageTests_iOS.framework */; }; - A4EE0CC9D8D444A853E40CCE /* Pods_Anchorage_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C576489BB5930483BB9C4EE7 /* Pods_Anchorage_tvOS.framework */; }; BBE7C0D71FAB676F00DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE7C0D51FAB65B900DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift */; }; BBE7C0D81FAB677500DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE7C0D51FAB65B900DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift */; }; BBE7C0D91FAB677600DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE7C0D51FAB65B900DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift */; }; @@ -96,8 +96,8 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0CD5EE58281654FA6A928090 /* Pods-Anchorage-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Anchorage-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.debug.xcconfig"; sourceTree = ""; }; 0D754D72F6462CE4D58FDCB1 /* Pods_AnchorageTests_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AnchorageTests_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0EBDE61D960490AFF3426E26 /* Pods-AnchorageTests-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageTests-tvOS.release.xcconfig"; path = "Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.release.xcconfig"; sourceTree = ""; }; 2DBB2D441D99596100A1E94B /* RootViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RootViewController.swift; sourceTree = ""; }; 2DBB2D461D99597500A1E94B /* ToggleActiveHeightCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ToggleActiveHeightCell.swift; path = Cells/ToggleActiveHeightCell.swift; sourceTree = ""; }; 2DBB2D471D99597500A1E94B /* MinimumWidthViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MinimumWidthViewCell.swift; path = Cells/MinimumWidthViewCell.swift; sourceTree = ""; }; @@ -113,6 +113,7 @@ 3C2050AB1D3B20FD00995DF3 /* Anchorage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Anchorage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3C2050AF1D3B20FD00995DF3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 3C2050B61D3B213B00995DF3 /* Anchorage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Anchorage.swift; sourceTree = ""; }; + 4471E81EED984DA2A5AB656F /* Pods_AnchorageTests_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AnchorageTests_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4A621F436D7AC1F311660FAA /* Pods-AnchorageDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageDemo.debug.xcconfig"; path = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.debug.xcconfig"; sourceTree = ""; }; 54C143946A2174E4D55E7431 /* Pods-AnchorageTests-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageTests-iOS.debug.xcconfig"; path = "Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.debug.xcconfig"; sourceTree = ""; }; 6571D2D39B6C49930B877172 /* Pods-AnchorageDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageDemo.release.xcconfig"; path = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.release.xcconfig"; sourceTree = ""; }; @@ -122,13 +123,13 @@ 970CF4C3A04070F004E5B81F /* Pods-AnchorageTests-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageTests-macOS.release.xcconfig"; path = "Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.release.xcconfig"; sourceTree = ""; }; 9AC798BFFD09EBA92C1F6CB5 /* Pods_AnchorageTests_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AnchorageTests_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A23C27A30C0A91E20C837E17 /* Pods-AnchorageTests-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageTests-macOS.debug.xcconfig"; path = "Target Support Files/Pods-AnchorageTests-macOS/Pods-AnchorageTests-macOS.debug.xcconfig"; sourceTree = ""; }; - ABA15247037482DE25BF1C14 /* Pods-Anchorage-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Anchorage-tvOS.release.xcconfig"; path = "Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.release.xcconfig"; sourceTree = ""; }; + B92CA6FD50E603DA2E0E9EC3 /* Pods-AnchorageTests-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageTests-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.debug.xcconfig"; sourceTree = ""; }; BBE7C0D51FAB65B900DACD2D /* NSLayoutAnchor+MultiplierConstraints.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSLayoutAnchor+MultiplierConstraints.swift"; sourceTree = ""; }; C576489BB5930483BB9C4EE7 /* Pods_Anchorage_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Anchorage_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C9544E58395B197F69A49D22 /* Pods-AnchorageTests-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageTests-iOS.release.xcconfig"; path = "Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.release.xcconfig"; sourceTree = ""; }; CD6A0E671EB7CDEF00FFF5DB /* AnchorageTests-macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "AnchorageTests-macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; CD6A0E771EB7CE3A00FFF5DB /* Anchorage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Anchorage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CD6A0E7F1EB7CE3A00FFF5DB /* Anchorage-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Anchorage-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + CD6A0E7F1EB7CE3A00FFF5DB /* AnchorageTests-tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "AnchorageTests-tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; D401673C1EB7A4A30025DCA5 /* Internal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Internal.swift; sourceTree = ""; }; D401673E1EB7A58D0025DCA5 /* Compatability.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Compatability.swift; sourceTree = ""; }; D469DCB41EB7A904000F3DDD /* Priority.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Priority.swift; sourceTree = ""; }; @@ -175,7 +176,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A4EE0CC9D8D444A853E40CCE /* Pods_Anchorage_tvOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -184,6 +184,7 @@ buildActionMask = 2147483647; files = ( CD6A0E801EB7CE3A00FFF5DB /* Anchorage.framework in Frameworks */, + 4ECBAE41831224D033E1F647 /* Pods_AnchorageTests_tvOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -244,7 +245,7 @@ 7A39D62E1EB53E1100BDE9C0 /* AnchorageTests-iOS.xctest */, CD6A0E671EB7CDEF00FFF5DB /* AnchorageTests-macOS.xctest */, CD6A0E771EB7CE3A00FFF5DB /* Anchorage.framework */, - CD6A0E7F1EB7CE3A00FFF5DB /* Anchorage-tvOSTests.xctest */, + CD6A0E7F1EB7CE3A00FFF5DB /* AnchorageTests-tvOS.xctest */, ); name = Products; sourceTree = ""; @@ -280,6 +281,7 @@ D8F0389C6D00AEDCE0477A2E /* Pods_AnchorageDemo.framework */, 9AC798BFFD09EBA92C1F6CB5 /* Pods_AnchorageTests_iOS.framework */, 0D754D72F6462CE4D58FDCB1 /* Pods_AnchorageTests_macOS.framework */, + 4471E81EED984DA2A5AB656F /* Pods_AnchorageTests_tvOS.framework */, ); name = Frameworks; sourceTree = ""; @@ -287,14 +289,14 @@ F2374A7C4BE588ED4BBA0B2F /* Pods */ = { isa = PBXGroup; children = ( - 0CD5EE58281654FA6A928090 /* Pods-Anchorage-tvOS.debug.xcconfig */, - ABA15247037482DE25BF1C14 /* Pods-Anchorage-tvOS.release.xcconfig */, 4A621F436D7AC1F311660FAA /* Pods-AnchorageDemo.debug.xcconfig */, 6571D2D39B6C49930B877172 /* Pods-AnchorageDemo.release.xcconfig */, 54C143946A2174E4D55E7431 /* Pods-AnchorageTests-iOS.debug.xcconfig */, C9544E58395B197F69A49D22 /* Pods-AnchorageTests-iOS.release.xcconfig */, A23C27A30C0A91E20C837E17 /* Pods-AnchorageTests-macOS.debug.xcconfig */, 970CF4C3A04070F004E5B81F /* Pods-AnchorageTests-macOS.release.xcconfig */, + B92CA6FD50E603DA2E0E9EC3 /* Pods-AnchorageTests-tvOS.debug.xcconfig */, + 0EBDE61D960490AFF3426E26 /* Pods-AnchorageTests-tvOS.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -407,7 +409,6 @@ isa = PBXNativeTarget; buildConfigurationList = CD6A0E881EB7CE3A00FFF5DB /* Build configuration list for PBXNativeTarget "Anchorage-tvOS" */; buildPhases = ( - F8BD1FD2891DCAF1F6F63FD4 /* [CP] Check Pods Manifest.lock */, CD6A0E721EB7CE3A00FFF5DB /* Sources */, CD6A0E731EB7CE3A00FFF5DB /* Frameworks */, CD6A0E741EB7CE3A00FFF5DB /* Headers */, @@ -422,22 +423,24 @@ productReference = CD6A0E771EB7CE3A00FFF5DB /* Anchorage.framework */; productType = "com.apple.product-type.framework"; }; - CD6A0E7E1EB7CE3A00FFF5DB /* Anchorage-tvOSTests */ = { + CD6A0E7E1EB7CE3A00FFF5DB /* AnchorageTests-tvOS */ = { isa = PBXNativeTarget; - buildConfigurationList = CD6A0E8B1EB7CE3A00FFF5DB /* Build configuration list for PBXNativeTarget "Anchorage-tvOSTests" */; + buildConfigurationList = CD6A0E8B1EB7CE3A00FFF5DB /* Build configuration list for PBXNativeTarget "AnchorageTests-tvOS" */; buildPhases = ( + D04C6B22FFFC86492AE7D6EB /* [CP] Check Pods Manifest.lock */, CD6A0E7B1EB7CE3A00FFF5DB /* Sources */, CD6A0E7C1EB7CE3A00FFF5DB /* Frameworks */, CD6A0E7D1EB7CE3A00FFF5DB /* Resources */, + 5E760A64FAB86952B4EF4995 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( CD6A0E821EB7CE3A00FFF5DB /* PBXTargetDependency */, ); - name = "Anchorage-tvOSTests"; + name = "AnchorageTests-tvOS"; productName = "Anchorage-tvOSTests"; - productReference = CD6A0E7F1EB7CE3A00FFF5DB /* Anchorage-tvOSTests.xctest */; + productReference = CD6A0E7F1EB7CE3A00FFF5DB /* AnchorageTests-tvOS.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; F15462911E56842400C3948D /* Anchorage-macOS */ = { @@ -531,7 +534,7 @@ F15462911E56842400C3948D /* Anchorage-macOS */, CD6A0E661EB7CDEF00FFF5DB /* AnchorageTests-macOS */, CD6A0E761EB7CE3A00FFF5DB /* Anchorage-tvOS */, - CD6A0E7E1EB7CE3A00FFF5DB /* Anchorage-tvOSTests */, + CD6A0E7E1EB7CE3A00FFF5DB /* AnchorageTests-tvOS */, CD6A0E9B1EB7D36400FFF5DB /* RunAllTests */, ); }; @@ -592,6 +595,30 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 5E760A64FAB86952B4EF4995 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/SnapshotTesting-tvOS/SnapshotTesting.framework", + "${BUILT_PRODUCTS_DIR}/Then-tvOS/Then.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + ); + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapshotTesting.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Then.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 865C9976AA3925530AF989DF /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -740,7 +767,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F8BD1FD2891DCAF1F6F63FD4 /* [CP] Check Pods Manifest.lock */ = { + D04C6B22FFFC86492AE7D6EB /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -755,7 +782,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Anchorage-tvOS-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-AnchorageTests-tvOS-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -1152,7 +1179,6 @@ }; CD6A0E891EB7CE3A00FFF5DB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0CD5EE58281654FA6A928090 /* Pods-Anchorage-tvOS.debug.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = ""; @@ -1175,7 +1201,6 @@ }; CD6A0E8A1EB7CE3A00FFF5DB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ABA15247037482DE25BF1C14 /* Pods-Anchorage-tvOS.release.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = ""; @@ -1198,8 +1223,8 @@ }; CD6A0E8C1EB7CE3A00FFF5DB /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = B92CA6FD50E603DA2E0E9EC3 /* Pods-AnchorageTests-tvOS.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; @@ -1216,8 +1241,8 @@ }; CD6A0E8D1EB7CE3A00FFF5DB /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 0EBDE61D960490AFF3426E26 /* Pods-AnchorageTests-tvOS.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; @@ -1355,7 +1380,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CD6A0E8B1EB7CE3A00FFF5DB /* Build configuration list for PBXNativeTarget "Anchorage-tvOSTests" */ = { + CD6A0E8B1EB7CE3A00FFF5DB /* Build configuration list for PBXNativeTarget "AnchorageTests-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( CD6A0E8C1EB7CE3A00FFF5DB /* Debug */, diff --git a/Anchorage.xcodeproj/xcshareddata/xcschemes/Anchorage-tvOS.xcscheme b/Anchorage.xcodeproj/xcshareddata/xcschemes/Anchorage-tvOS.xcscheme index e12d2bb..674e3f7 100644 --- a/Anchorage.xcodeproj/xcshareddata/xcschemes/Anchorage-tvOS.xcscheme +++ b/Anchorage.xcodeproj/xcshareddata/xcschemes/Anchorage-tvOS.xcscheme @@ -34,8 +34,8 @@ diff --git a/Podfile b/Podfile index 091bdad..a792a56 100644 --- a/Podfile +++ b/Podfile @@ -12,7 +12,7 @@ target 'AnchorageTests-macOS' do pod 'Then' end -target 'Anchorage-tvOS' do +target 'AnchorageTests-tvOS' do use_frameworks! platform :tvos, '10.0' pod 'SnapshotTesting', '~> 1.1' diff --git a/Podfile.lock b/Podfile.lock index 4cbcf1c..0b9cf11 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -15,6 +15,6 @@ SPEC CHECKSUMS: SnapshotTesting: 8ed6a4dceee63f59a60e1bc86f9adbba54eb9287 Then: 71866660c7af35a7343831f7668e7cd2b62ee0f2 -PODFILE CHECKSUM: 3e1cda0e7bcffcd2db4dc54a1e5712d08d8ee748 +PODFILE CHECKSUM: 0caff9821dd50ad0bc3b6173fc17e9adbec0af80 COCOAPODS: 1.6.0 diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 4cbcf1c..0b9cf11 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -15,6 +15,6 @@ SPEC CHECKSUMS: SnapshotTesting: 8ed6a4dceee63f59a60e1bc86f9adbba54eb9287 Then: 71866660c7af35a7343831f7668e7cd2b62ee0f2 -PODFILE CHECKSUM: 3e1cda0e7bcffcd2db4dc54a1e5712d08d8ee748 +PODFILE CHECKSUM: 0caff9821dd50ad0bc3b6173fc17e9adbec0af80 COCOAPODS: 1.6.0 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index d0be523..72224a2 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -8,127 +8,127 @@ /* Begin PBXBuildFile section */ 0167287920ACCDBAA36FAF440B2E73BC /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965C55CAF130A9BA3EF2A4EB62D40B20 /* Codable.swift */; }; + 03DDAC8AB1CE26A98E055618B5C4F049 /* SpriteKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 317816D79B4D43319FE1C6FB17C560CC /* SpriteKit.swift */; }; 044695191A43AAF858614BBBA8D97DCA /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 256A9B440AA096A008732B2CF616C060 /* UIImage.swift */; }; 0455F698AB7884BFF3CA43BD510412FD /* AssertSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2406EA61EA89943674005A9CD4B3639 /* AssertSnapshot.swift */; }; 0586DAAF9509D0885F2EF9ACD73F6CF1 /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42405E80DC247CD63E08C2C8657166AD /* UIView.swift */; }; - 074F049A26BEB9F82D00F9CCAE375143 /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C9F3139F433DBFF38C02433A821DA65 /* Internal.swift */; }; 080ACCCFD506DF6A66B8EB76A24E5922 /* SnapshotTesting-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C23E22AE1F55A83B348296F06156DF88 /* SnapshotTesting-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0906BFCFB082B45515E1D760EE558A5F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CA96865A965D5D8980DA2F80748AF30 /* Cocoa.framework */; }; - 16BEC2B49DE2EF4D5423A2394AA67113 /* Pods-AnchorageDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 98E05442D9EBD2A1062AEE2576AB7E5B /* Pods-AnchorageDemo-dummy.m */; }; + 0A7278AE7FAC55D3BFD4E867F0627BF6 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F7D2836402FEAC11D1EFB5AC570C7A /* String.swift */; }; + 169C9B3CB02AEB4063FDB2DE8D7E9E56 /* Pods-AnchorageTests-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EDD6584865283009A6703C17C1E53460 /* Pods-AnchorageTests-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 16BEC2B49DE2EF4D5423A2394AA67113 /* Pods-AnchorageDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 89292A765BE3EC48439AA52333991451 /* Pods-AnchorageDemo-dummy.m */; }; + 1E74EC7BEF8B021F360813B72D71795E /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3B55CF773D64E7EB0305E3716943D56 /* UIViewController.swift */; }; 1EF87F1431FA2D211961216402691F58 /* Snapshotting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 358ADF75ABCA430654C79616D89ED877 /* Snapshotting.swift */; }; 237C86AC80FAEF40046EB07872E9DBF9 /* Then-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FBD3ECC8E00D0CD8AC2BFC2AC06D2DBD /* Then-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 23DDBAA2B761B572A8A6F99A2012788B /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42405E80DC247CD63E08C2C8657166AD /* UIView.swift */; }; + 25021F6939648F201BBB05161A41D022 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82BB95EE8312F63265020E276C951B38 /* XCTest.framework */; }; 26105FA8E06688FB4B1575B5AC838AC6 /* XCTAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1933C4B1E1C7BA8D4F3CCAD5961051B1 /* XCTAttachment.swift */; }; - 261E1BEA39479A79A992976B5828C7D2 /* Pods-Anchorage-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CDD0BE9C8F7E341DA5FDCCF7E2C3C70A /* Pods-Anchorage-tvOS-dummy.m */; }; - 28BACDA624B71A7101AB724F95568946 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82BB95EE8312F63265020E276C951B38 /* XCTest.framework */; }; - 2B1008B2802CEB8ABA0FC87FAA19177D /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4DD602B6B4DF6C7325BF42A78E02B77 /* View.swift */; }; + 265B42BC272F57B89B4866CE17063D8E /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965C55CAF130A9BA3EF2A4EB62D40B20 /* Codable.swift */; }; + 2B32A44CB3CBB47FEBD5078CF2AFD3FF /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42405E80DC247CD63E08C2C8657166AD /* UIView.swift */; }; + 2C28C24F97EA71FDE43655697411C2DD /* SnapshotTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D986863111671CA6884EC9DA424EB0BF /* SnapshotTestCase.swift */; }; 2D78D26C770C0DF44873D35648250724 /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965C55CAF130A9BA3EF2A4EB62D40B20 /* Codable.swift */; }; - 306D79307AA8DBA8689114810CDFDBD0 /* Pods-AnchorageTests-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C1B3B13F1EBD4A8E375BD1BD4DFDCF8B /* Pods-AnchorageTests-iOS-dummy.m */; }; - 30F5A7D54BFB5161E03976BFFFF13694 /* SceneKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A7D44FE70BCBF740D00EE0980645F9 /* SceneKit.swift */; }; + 306D79307AA8DBA8689114810CDFDBD0 /* Pods-AnchorageTests-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7439E1930B47E0CD5A8D7AFEDCBD89F0 /* Pods-AnchorageTests-iOS-dummy.m */; }; 3388275EB8683A3BFE96B2E2E0B89205 /* CALayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4347FB28511C2B3EA3202681547237EB /* CALayer.swift */; }; 349FFFE4BBF9367090AB462817CE15E3 /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B398E5CD82632512CC28A5E297DAA24 /* Diff.swift */; }; - 37720C4945A34122A3E8F265AFF8FC86 /* XCTAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1933C4B1E1C7BA8D4F3CCAD5961051B1 /* XCTAttachment.swift */; }; + 34CB5F80E664F7681A1F5B529DA6F2A8 /* PlistEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21426BF2AC1DA88C6FCA8C2D5F5A24D5 /* PlistEncoder.swift */; }; 3828224C8684DE72CE1D81BAC4198EF2 /* AssertSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2406EA61EA89943674005A9CD4B3639 /* AssertSnapshot.swift */; }; - 3ACAC45C1C50B53299D0C7FA3D35FF14 /* Then.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F89991F439FDF23E07E723F4AF9FEE2 /* Then.swift */; }; - 4080B2B491E5FAEA5A827CD25EF3388D /* Pods-AnchorageTests-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 130E3C1BFE52064305520F10086F4CD7 /* Pods-AnchorageTests-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4080B2B491E5FAEA5A827CD25EF3388D /* Pods-AnchorageTests-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 01C6C7064B856700F1EC102FAB9EA0EA /* Pods-AnchorageTests-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4554AC9CC29D3325BE60E9EACEB66A96 /* CaseIterable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB91550AABC989FE4285ED023E475BB /* CaseIterable.swift */; }; - 46F47C30C5CB99BE7AD7183468FFE607 /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42405E80DC247CD63E08C2C8657166AD /* UIView.swift */; }; - 498595196417EA09CD71138787A76BCC /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42D84516C7E460DF149D03FD68A2E88 /* Description.swift */; }; 509902FC3882651D700451F5552F7C53 /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4DD602B6B4DF6C7325BF42A78E02B77 /* View.swift */; }; - 514979C6B7AF0D7BEB5BD0AA9061E05C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80D2A407A2C3DFAA14D5816505CE16FB /* Foundation.framework */; }; - 5458252ACE68EE4A795624BB4FE41F7A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80D2A407A2C3DFAA14D5816505CE16FB /* Foundation.framework */; }; - 5A2362F4A5884F616FE8F6655D604AF5 /* Pods-Anchorage-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E5FB2229AACB26E0AF5A48B9A815393 /* Pods-Anchorage-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5E10C13E4334C89D15F8585757F39CF9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80D2A407A2C3DFAA14D5816505CE16FB /* Foundation.framework */; }; + 5FFF1D012CCE4B39AF2DDA5247F20018 /* SnapshotTesting-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 55E12B99B4CCB44858E8634D026809D1 /* SnapshotTesting-tvOS-dummy.m */; }; 60712D628BE923B72EDFA56887FF997F /* SnapshotTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D986863111671CA6884EC9DA424EB0BF /* SnapshotTestCase.swift */; }; + 60A5A1D80EECB43C54AC8F34920530B8 /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4DD602B6B4DF6C7325BF42A78E02B77 /* View.swift */; }; 65D1238BFDC0A1EF0B9D9862AAD4D9C3 /* SnapshotTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D986863111671CA6884EC9DA424EB0BF /* SnapshotTestCase.swift */; }; 6A050073FC7C23A413BE40658EB866AD /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42D84516C7E460DF149D03FD68A2E88 /* Description.swift */; }; 6B8C832556FFF979AF6AC7631AA76D7E /* SnapshotTesting-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FB58D3C73E2F40CB06D1F775F714E6DC /* SnapshotTesting-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6C2CC09453B42EEDF77BDF21120FB7FC /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E88E76831E592E0A8751BDC86A2B46B4 /* XCTest.framework */; }; + 7018B88A9A4F9D3226BCACAB0A51088B /* NSViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7778714CF103E155F34D274BBF7F647E /* NSViewController.swift */; }; 71228F16AC19D78BCB79C590532ACD59 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B6D259E4FC813C7C278DB9DBC5972B6 /* XCTest.framework */; }; - 727E53967147F8A5D7895383AC0200DA /* SpriteKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 317816D79B4D43319FE1C6FB17C560CC /* SpriteKit.swift */; }; + 712F798FD87366330E22F396D9CE4E36 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80D2A407A2C3DFAA14D5816505CE16FB /* Foundation.framework */; }; + 71816AB8852A16BFC1FBDF65434D40E1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80D2A407A2C3DFAA14D5816505CE16FB /* Foundation.framework */; }; + 74AF3CAA3D36AD9D12803BE075A06491 /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42D84516C7E460DF149D03FD68A2E88 /* Description.swift */; }; + 76752BF832E8531AA182596881329030 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5002BD7F6695BEC29FBFB0184389338A /* Data.swift */; }; 76FA8B562250E511C2D72DE0056676AE /* Snapshotting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 358ADF75ABCA430654C79616D89ED877 /* Snapshotting.swift */; }; 792AC7A288B65A0BFC5F05C09F7D3F0A /* Then-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D73BDB20EB2800BA1B82510954B58D89 /* Then-macOS-dummy.m */; }; 7DB69A02D6288DA77D993519D1F9724E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1273FEF1E51F93E06A57B3C132E5D5B6 /* Foundation.framework */; }; - 7DE63442C5279D3D4429316B3BCDBF94 /* SnapshotTesting-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 55E12B99B4CCB44858E8634D026809D1 /* SnapshotTesting-tvOS-dummy.m */; }; 7EF78B3E46CDE4C5050BE6B95EB7D304 /* SpriteKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 317816D79B4D43319FE1C6FB17C560CC /* SpriteKit.swift */; }; 7F1C82A0EB071F6B687C120A7982B4C2 /* NSView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F30C7E11FF73DCBE6EABF21AD9625F7C /* NSView.swift */; }; - 819223C0027E07056B4F3BAE30E0BA23 /* Then-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 04C69D602595952FEE908613A2ABBB38 /* Then-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7F77966945145CFAD7F0D6DC51D14CBC /* NSView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F30C7E11FF73DCBE6EABF21AD9625F7C /* NSView.swift */; }; 84CD20C260D38BE7E209E09B22F620EE /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F7D2836402FEAC11D1EFB5AC570C7A /* String.swift */; }; 87F5626C142E9B50E71A2FB49A363650 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F951F364A03C68B8F8F74B13397CE018 /* URLRequest.swift */; }; 8966646261D5CEEA92C8B78F51B39467 /* Then.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F89991F439FDF23E07E723F4AF9FEE2 /* Then.swift */; }; 8A6E9B0FAE06368C026C29A0CE84DB24 /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B398E5CD82632512CC28A5E297DAA24 /* Diff.swift */; }; - 8C71714EA481D233D7E342D599024D7E /* Pods-AnchorageTests-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 709C480196A6206E1347DCF42BDAFA30 /* Pods-AnchorageTests-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D7DF72EEAB0E3396F20406198792526 /* Then-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5294D90A71EE162CE8B149EAB02F62F9 /* Then-tvOS-dummy.m */; }; + 8C71714EA481D233D7E342D599024D7E /* Pods-AnchorageTests-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 726BD043C3FE28C8C25915325EF3F801 /* Pods-AnchorageTests-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 912B74E5EB5755D4FDFE5821C6B34BF9 /* Diffing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66E8ABF000AB99392E1B2817B2537EE4 /* Diffing.swift */; }; 9139CA83DF642D9675192EC89135BFF4 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5002BD7F6695BEC29FBFB0184389338A /* Data.swift */; }; - 92D7D122B07334F3CFC536E3F328FAF0 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F7D2836402FEAC11D1EFB5AC570C7A /* String.swift */; }; - 93A1C33D6AF733FB3677DBBF65C36F1C /* NSImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9651997ADB0A2E4F8B0A940BBB85835 /* NSImage.swift */; }; + 91FFFA8F1F9BE4FAC2F51ABF14AE3323 /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C9F3139F433DBFF38C02433A821DA65 /* Internal.swift */; }; 9531006B8FD9AB31819BD7E44201351B /* XCTAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1933C4B1E1C7BA8D4F3CCAD5961051B1 /* XCTAttachment.swift */; }; + 958D84CA1A743F9A6E686F9B2501627E /* Then.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F89991F439FDF23E07E723F4AF9FEE2 /* Then.swift */; }; 982A5E70D6A2FB45204536CD8F2FDF11 /* CALayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4347FB28511C2B3EA3202681547237EB /* CALayer.swift */; }; 9988890738CDFEB6FE6DE0900B911C64 /* SnapshotTesting-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 35F0C0216069B783D88624E70557DCE5 /* SnapshotTesting-macOS-dummy.m */; }; 9AD5A7D77F4AB57A0F0E6ECD6CC85FA5 /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C9F3139F433DBFF38C02433A821DA65 /* Internal.swift */; }; 9C10C9441D9DA3B3DC8830490166633B /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4DD602B6B4DF6C7325BF42A78E02B77 /* View.swift */; }; 9EFA96B6F6DEDDFFEF44DD09EA82E1B1 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 256A9B440AA096A008732B2CF616C060 /* UIImage.swift */; }; 9F5ADD5F8011A7FAEE6AF208C3AE7387 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97CACE987AA56996C27200325AE1E0FE /* Async.swift */; }; - 9FCF899E356F2D2D00D6E86B71C2DA31 /* CALayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4347FB28511C2B3EA3202681547237EB /* CALayer.swift */; }; - A2030B6E9CE7E0397E83CF9B37D24133 /* NSView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F30C7E11FF73DCBE6EABF21AD9625F7C /* NSView.swift */; }; - AACC9E6E5C62B9E2EEE5C4E6D76AE869 /* AssertSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2406EA61EA89943674005A9CD4B3639 /* AssertSnapshot.swift */; }; + A0EDD4BEA21F20719EF6928DC94400BB /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97CACE987AA56996C27200325AE1E0FE /* Async.swift */; }; + A4622CE5B6B66300FDEAECD04F915823 /* NSImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9651997ADB0A2E4F8B0A940BBB85835 /* NSImage.swift */; }; + A59148B7780A118FD12EFB068628A188 /* AssertSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2406EA61EA89943674005A9CD4B3639 /* AssertSnapshot.swift */; }; + AB7984A7FF33E1387FA4944954FD7562 /* Snapshotting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 358ADF75ABCA430654C79616D89ED877 /* Snapshotting.swift */; }; ACD31C851EDCD4E1914B32817106E2CC /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C9F3139F433DBFF38C02433A821DA65 /* Internal.swift */; }; AD9AF16A36AFE9D5FE0472516614C756 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97CACE987AA56996C27200325AE1E0FE /* Async.swift */; }; - ADCA53869A50FF60EF1C544F5026F079 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F951F364A03C68B8F8F74B13397CE018 /* URLRequest.swift */; }; + B023231416B9A937DAE7556062AB66B4 /* Then-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5294D90A71EE162CE8B149EAB02F62F9 /* Then-tvOS-dummy.m */; }; B134374E2FD2881BC40079F1C7C7D0C3 /* Any.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8633EC95242ACCC213DBAA0CEB80934D /* Any.swift */; }; - B25FF0C07A8FE1AAC975C181B584BEB9 /* PlistEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21426BF2AC1DA88C6FCA8C2D5F5A24D5 /* PlistEncoder.swift */; }; B37268C35405C60FB3B6718C26E92BE5 /* Then-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0591342C89422D273FA0A8FB34BD40F3 /* Then-iOS-dummy.m */; }; - B6B529300AB69D23E49A7879C3FB8CE0 /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B398E5CD82632512CC28A5E297DAA24 /* Diff.swift */; }; + B4D03096D484C032618AF91F79C55BA2 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 256A9B440AA096A008732B2CF616C060 /* UIImage.swift */; }; B82B6D2B10EEBEF976EA5FB9726404B9 /* Diffing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66E8ABF000AB99392E1B2817B2537EE4 /* Diffing.swift */; }; BA0EE8E553BC4A1CEC2C0C67795785CC /* SceneKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A7D44FE70BCBF740D00EE0980645F9 /* SceneKit.swift */; }; BFC0246962C462CF7251B278FBBC8566 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1273FEF1E51F93E06A57B3C132E5D5B6 /* Foundation.framework */; }; C500ED8417B05C2ED1FCF1AE2BBAE10B /* Then.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F89991F439FDF23E07E723F4AF9FEE2 /* Then.swift */; }; - C57D94158B6171642C216402F60E06E5 /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3B55CF773D64E7EB0305E3716943D56 /* UIViewController.swift */; }; C58A86701BDE739C4FBF763F374A0C4F /* SpriteKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 317816D79B4D43319FE1C6FB17C560CC /* SpriteKit.swift */; }; C5FD1E84454612C06C604308D8FC9E8F /* SnapshotTesting-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DD8820F45A4555404DEB40D4A5B500C /* SnapshotTesting-iOS-dummy.m */; }; C982DA876BC34B57C840E6DC6FCE9524 /* PlistEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21426BF2AC1DA88C6FCA8C2D5F5A24D5 /* PlistEncoder.swift */; }; CA05A2F41D718B108823A9D265B013C9 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F7D2836402FEAC11D1EFB5AC570C7A /* String.swift */; }; + CA553432EEDB86CBE2E26A319F2DBE39 /* SceneKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A7D44FE70BCBF740D00EE0980645F9 /* SceneKit.swift */; }; CA5AEC6E7196BDBA5E52C9158F1BDACA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CA96865A965D5D8980DA2F80748AF30 /* Cocoa.framework */; }; - CB0DAA9A3EA654BA70A2CDD11219909E /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5002BD7F6695BEC29FBFB0184389338A /* Data.swift */; }; CB1585203B451AB3201D8BF6AD929D17 /* NSView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F30C7E11FF73DCBE6EABF21AD9625F7C /* NSView.swift */; }; - CCC86ECA5CBBD1D97A536380C603097C /* SnapshotTesting-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = ABE5E3DBC4FEA3AA43DA42C2190C33F5 /* SnapshotTesting-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CC110C769F87211FF3D4B8AD4260BC86 /* SnapshotTesting-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = ABE5E3DBC4FEA3AA43DA42C2190C33F5 /* SnapshotTesting-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CDDF751CE0CEFCB85E98440E8D1669D2 /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B398E5CD82632512CC28A5E297DAA24 /* Diff.swift */; }; CE77FC2F51C1E1574F370474AA305281 /* CaseIterable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB91550AABC989FE4285ED023E475BB /* CaseIterable.swift */; }; - D2A04E02CB46939D980309D3E92DF249 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 256A9B440AA096A008732B2CF616C060 /* UIImage.swift */; }; + D151DCA1ADC7DC7F95FBD34781B6D318 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F951F364A03C68B8F8F74B13397CE018 /* URLRequest.swift */; }; D474F267F4A305299E957397A418A2F2 /* NSImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9651997ADB0A2E4F8B0A940BBB85835 /* NSImage.swift */; }; - DAA9D4579E50771252D2FDF4A485CE5A /* Any.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8633EC95242ACCC213DBAA0CEB80934D /* Any.swift */; }; - DAAB0822D509F85E1A46568F46E5D2C4 /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965C55CAF130A9BA3EF2A4EB62D40B20 /* Codable.swift */; }; + D940A41A89FFC516C109DD1AF38F6155 /* Diffing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66E8ABF000AB99392E1B2817B2537EE4 /* Diffing.swift */; }; DD177876534138982E2FBD7E65A387FE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1273FEF1E51F93E06A57B3C132E5D5B6 /* Foundation.framework */; }; DEA436989DC00453BBB3C03D898D58E0 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F951F364A03C68B8F8F74B13397CE018 /* URLRequest.swift */; }; - E014AB41C2F82355F2128AB660FEEECF /* Snapshotting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 358ADF75ABCA430654C79616D89ED877 /* Snapshotting.swift */; }; - E210E40512B1AE1D8338D2EB6A15D3EC /* CaseIterable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB91550AABC989FE4285ED023E475BB /* CaseIterable.swift */; }; - E270912E7B10BA403E5370AB51C94710 /* Pods-AnchorageTests-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7200517E4D704CFBA46453819558ABD5 /* Pods-AnchorageTests-macOS-dummy.m */; }; + E204BC44C9531B5DFF1B2AEB1688CE49 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80D2A407A2C3DFAA14D5816505CE16FB /* Foundation.framework */; }; + E270912E7B10BA403E5370AB51C94710 /* Pods-AnchorageTests-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA44A7BD67F4C48F8D90BEF5B12A4C4 /* Pods-AnchorageTests-macOS-dummy.m */; }; E663D85E9EC79B9F9B9269D9D9D37420 /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3B55CF773D64E7EB0305E3716943D56 /* UIViewController.swift */; }; + E92C8AE9EC00FB039B5B831246B58FFF /* CaseIterable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB91550AABC989FE4285ED023E475BB /* CaseIterable.swift */; }; EA2EDE1F399BAE50949B7211D455C666 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5002BD7F6695BEC29FBFB0184389338A /* Data.swift */; }; EC686F864B71300BE53F4CCB3BF43498 /* NSImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9651997ADB0A2E4F8B0A940BBB85835 /* NSImage.swift */; }; ECC2065C37EACB74887F3E7CFF68A3AC /* NSViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7778714CF103E155F34D274BBF7F647E /* NSViewController.swift */; }; EE07959B238D8A3BB7F004D92E6C487D /* PlistEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21426BF2AC1DA88C6FCA8C2D5F5A24D5 /* PlistEncoder.swift */; }; - EEF6DA19C881270B3F994D7E8BE77478 /* SnapshotTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D986863111671CA6884EC9DA424EB0BF /* SnapshotTestCase.swift */; }; EF4ED6531A27E860DFA37E0E0E9363A7 /* SceneKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A7D44FE70BCBF740D00EE0980645F9 /* SceneKit.swift */; }; - F24817F2D634138EB247EAAFF7EEA1DF /* Diffing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66E8ABF000AB99392E1B2817B2537EE4 /* Diffing.swift */; }; - F3FE7803F9443ABC3EAFDF7E82894922 /* NSViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7778714CF103E155F34D274BBF7F647E /* NSViewController.swift */; }; - F6514DC9058D01E07ABF0C21371A0418 /* Pods-AnchorageDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E6B04326391F81046FD2666FEC98FA5 /* Pods-AnchorageDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F4DAAD7D4836625B632794025EEF4FB9 /* XCTAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1933C4B1E1C7BA8D4F3CCAD5961051B1 /* XCTAttachment.swift */; }; + F53A49E3ECEF1546872A68ED645F4236 /* CALayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4347FB28511C2B3EA3202681547237EB /* CALayer.swift */; }; + F6514DC9058D01E07ABF0C21371A0418 /* Pods-AnchorageDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C8B7AB88CDB3116B3C86CBE7544E1FCA /* Pods-AnchorageDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; F67CEBA1909C4051481F745DD13E4C72 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CA96865A965D5D8980DA2F80748AF30 /* Cocoa.framework */; }; - F7822DE8E57DFE31F4C7A416357B540A /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97CACE987AA56996C27200325AE1E0FE /* Async.swift */; }; + F78DABBA61E88DDE03A927FD0E077530 /* Any.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8633EC95242ACCC213DBAA0CEB80934D /* Any.swift */; }; F7DF8B6B841BED91E7BEB36523EB5E5A /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3B55CF773D64E7EB0305E3716943D56 /* UIViewController.swift */; }; F7E53D5FFD347FAE2E7BB14C06FF1411 /* Then-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FE835AAFEC39ECF4A8D8484C66A00A86 /* Then-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; F83A0FAC1AB07F7EC3EC912B71312D14 /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42D84516C7E460DF149D03FD68A2E88 /* Description.swift */; }; + F8D5235C4D3CC7501FACBD137659D5D2 /* Pods-AnchorageTests-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 53391F6468B47D5F84AC340250C41F86 /* Pods-AnchorageTests-tvOS-dummy.m */; }; F92C3C8388372A940FCE103CBF4F4CE0 /* Any.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8633EC95242ACCC213DBAA0CEB80934D /* Any.swift */; }; FA5E583D715EE2C55F8DB26AC79121B7 /* NSViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7778714CF103E155F34D274BBF7F647E /* NSViewController.swift */; }; FDFB80325A63DF5F36A558B4CD13353D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1273FEF1E51F93E06A57B3C132E5D5B6 /* Foundation.framework */; }; + FF7D071DD5172CEFB422ED2AF5B0A5F2 /* Then-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 04C69D602595952FEE908613A2ABBB38 /* Then-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 075E5410F22770033A17F6274315C000 /* PBXContainerItemProxy */ = { + 17C1272EB2CCE162034A98B36D7FAB4A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 8956971230A66A9091D771C679C4D504; + remoteGlobalIDString = 120353CCD0748F91F290AA5CC8967F1C; remoteInfo = "Then-tvOS"; }; 5BCB232BC9DD74D037F4ADED82BBA55F /* PBXContainerItemProxy */ = { @@ -152,11 +152,11 @@ remoteGlobalIDString = 6D0A0A256C98D01A3A3D00616C05A47A; remoteInfo = "Then-iOS"; }; - E289DB4820AEED901323EA08A6822308 /* PBXContainerItemProxy */ = { + C2162746D3A3777C0EF4CE5F6E82B5C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 1100484FD281C00F225FC545EDD53E2D; + remoteGlobalIDString = DA7528F2A0C8496583FB2F480FF3362A; remoteInfo = "SnapshotTesting-tvOS"; }; EC157CF7091980E27508E14F94025C67 /* PBXContainerItemProxy */ = { @@ -169,169 +169,170 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 01C6C7064B856700F1EC102FAB9EA0EA /* Pods-AnchorageTests-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AnchorageTests-macOS-umbrella.h"; sourceTree = ""; }; 04C69D602595952FEE908613A2ABBB38 /* Then-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Then-tvOS-umbrella.h"; path = "../Then-tvOS/Then-tvOS-umbrella.h"; sourceTree = ""; }; 0591342C89422D273FA0A8FB34BD40F3 /* Then-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Then-iOS-dummy.m"; sourceTree = ""; }; + 082255E98CE9825D9B4691D8B627CB36 /* Pods-AnchorageTests-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AnchorageTests-iOS-acknowledgements.markdown"; sourceTree = ""; }; 08F4F5114C713FEE511AA2079FB6ABC1 /* SnapshotTesting-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SnapshotTesting-tvOS-prefix.pch"; path = "../SnapshotTesting-tvOS/SnapshotTesting-tvOS-prefix.pch"; sourceTree = ""; }; - 0ABFDBB7A06BB1EE9B5007814E2DEE33 /* Pods-AnchorageTests-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-macOS.release.xcconfig"; sourceTree = ""; }; - 0FC955AA8B2C7C53E6C3B0D1E7933206 /* Pods-AnchorageDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageDemo.release.xcconfig"; sourceTree = ""; }; + 09E3D4AAD98AD01FF0EB2197945CD787 /* Pods-AnchorageTests-macOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-macOS-acknowledgements.plist"; sourceTree = ""; }; 1273FEF1E51F93E06A57B3C132E5D5B6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 130E3C1BFE52064305520F10086F4CD7 /* Pods-AnchorageTests-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AnchorageTests-macOS-umbrella.h"; sourceTree = ""; }; 162C227E9398F03B64B9823922D91225 /* Then-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Then-tvOS-prefix.pch"; path = "../Then-tvOS/Then-tvOS-prefix.pch"; sourceTree = ""; }; - 173958FAB88D2F72A0F340CB2917FBA7 /* Pods-AnchorageTests-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AnchorageTests-iOS-acknowledgements.markdown"; sourceTree = ""; }; + 176D3235F9B7915357F05C02E1772B8F /* Then.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Then.framework; path = "Then-macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 1933C4B1E1C7BA8D4F3CCAD5961051B1 /* XCTAttachment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XCTAttachment.swift; path = Sources/SnapshotTesting/Common/XCTAttachment.swift; sourceTree = ""; }; - 1CDA287600F0EC775621573243AED92F /* Pods-AnchorageDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AnchorageDemo-acknowledgements.markdown"; sourceTree = ""; }; - 1D23AE667D560763AA87134430AD30B2 /* Pods-AnchorageTests-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-iOS-Info.plist"; sourceTree = ""; }; + 1AAE3EA478FB4EA3B32F2DA8A603C0CA /* Pods-AnchorageTests-macOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-macOS-Info.plist"; sourceTree = ""; }; + 1D25F24DD1B1570592E7DB20FF480654 /* Then.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Then.framework; path = "Then-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1D76B345DC9F88D9FF04868768118A7D /* Pods-AnchorageTests-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-tvOS.release.xcconfig"; sourceTree = ""; }; 1DD8820F45A4555404DEB40D4A5B500C /* SnapshotTesting-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapshotTesting-iOS-dummy.m"; sourceTree = ""; }; - 1E41CA265D891A900DF76602033ACB01 /* Pods-AnchorageTests-macOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AnchorageTests-macOS-acknowledgements.markdown"; sourceTree = ""; }; + 1DE98549818568D25C0DB6CE80F48592 /* Pods-AnchorageTests-iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-iOS-acknowledgements.plist"; sourceTree = ""; }; 21426BF2AC1DA88C6FCA8C2D5F5A24D5 /* PlistEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlistEncoder.swift; path = Sources/SnapshotTesting/Common/PlistEncoder.swift; sourceTree = ""; }; 224F534F86BCFC567E696947AB9074B3 /* SnapshotTesting-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "SnapshotTesting-macOS.modulemap"; path = "../SnapshotTesting-macOS/SnapshotTesting-macOS.modulemap"; sourceTree = ""; }; 256A9B440AA096A008732B2CF616C060 /* UIImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIImage.swift; path = Sources/SnapshotTesting/Snapshotting/UIImage.swift; sourceTree = ""; }; + 258D051971A0E9F254C7C8B47EBA3142 /* Pods-AnchorageDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageDemo.release.xcconfig"; sourceTree = ""; }; 27F6328B70B914857E8FBE676EF0EBA6 /* Then-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "Then-macOS.modulemap"; path = "../Then-macOS/Then-macOS.modulemap"; sourceTree = ""; }; 317816D79B4D43319FE1C6FB17C560CC /* SpriteKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpriteKit.swift; path = Sources/SnapshotTesting/Snapshotting/SpriteKit.swift; sourceTree = ""; }; 34201157929BF91F4DAD49F635E311A7 /* Then-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Then-macOS-prefix.pch"; path = "../Then-macOS/Then-macOS-prefix.pch"; sourceTree = ""; }; - 345B52A04C7D86A10C16E97C5B04806F /* Pods-Anchorage-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Anchorage-tvOS.modulemap"; sourceTree = ""; }; 358ADF75ABCA430654C79616D89ED877 /* Snapshotting.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Snapshotting.swift; path = Sources/SnapshotTesting/Snapshotting.swift; sourceTree = ""; }; 35F0C0216069B783D88624E70557DCE5 /* SnapshotTesting-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SnapshotTesting-macOS-dummy.m"; path = "../SnapshotTesting-macOS/SnapshotTesting-macOS-dummy.m"; sourceTree = ""; }; - 3E5FB2229AACB26E0AF5A48B9A815393 /* Pods-Anchorage-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Anchorage-tvOS-umbrella.h"; sourceTree = ""; }; 3FBF92D1A6C5274E34DB08E7439E19F7 /* Then-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "Then-tvOS.modulemap"; path = "../Then-tvOS/Then-tvOS.modulemap"; sourceTree = ""; }; 40506ABCEAA9CEEDCAF00CD0B479D195 /* SnapshotTesting-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "SnapshotTesting-tvOS.modulemap"; path = "../SnapshotTesting-tvOS/SnapshotTesting-tvOS.modulemap"; sourceTree = ""; }; + 414B2CC14BD2827CA08852B12C994BCE /* Pods-AnchorageTests-tvOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-tvOS-Info.plist"; sourceTree = ""; }; 42405E80DC247CD63E08C2C8657166AD /* UIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIView.swift; path = Sources/SnapshotTesting/Snapshotting/UIView.swift; sourceTree = ""; }; 4347FB28511C2B3EA3202681547237EB /* CALayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CALayer.swift; path = Sources/SnapshotTesting/Snapshotting/CALayer.swift; sourceTree = ""; }; - 4DEED31A1B1DC815815B119DB1E99415 /* Then.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Then.framework; path = "Then-macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4484D17F976A0FD28B9A2B9FF1AA734F /* Pods-AnchorageDemo-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageDemo-Info.plist"; sourceTree = ""; }; + 4EE85B74BD13DEAC728908878E180A01 /* Pods-AnchorageTests-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-iOS.release.xcconfig"; sourceTree = ""; }; 4F89991F439FDF23E07E723F4AF9FEE2 /* Then.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Then.swift; path = Sources/Then/Then.swift; sourceTree = ""; }; 5002BD7F6695BEC29FBFB0184389338A /* Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Data.swift; path = Sources/SnapshotTesting/Snapshotting/Data.swift; sourceTree = ""; }; 50AC94832F989B8A475CCBA624C67BD6 /* Then-macOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "Then-macOS-Info.plist"; path = "../Then-macOS/Then-macOS-Info.plist"; sourceTree = ""; }; - 521331738ADCCE09C000DCFAB7B338CB /* Pods_AnchorageTests_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AnchorageTests_iOS.framework; path = "Pods-AnchorageTests-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 5294D90A71EE162CE8B149EAB02F62F9 /* Then-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Then-tvOS-dummy.m"; path = "../Then-tvOS/Then-tvOS-dummy.m"; sourceTree = ""; }; - 530541043EF3145DE0D91D08B09580BB /* Pods_AnchorageTests_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AnchorageTests_macOS.framework; path = "Pods-AnchorageTests-macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 53391F6468B47D5F84AC340250C41F86 /* Pods-AnchorageTests-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AnchorageTests-tvOS-dummy.m"; sourceTree = ""; }; 55E12B99B4CCB44858E8634D026809D1 /* SnapshotTesting-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SnapshotTesting-tvOS-dummy.m"; path = "../SnapshotTesting-tvOS/SnapshotTesting-tvOS-dummy.m"; sourceTree = ""; }; - 57364CC62A5FF52A48E22A44537F7644 /* Pods-AnchorageDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageDemo.debug.xcconfig"; sourceTree = ""; }; + 5A7DF8E08A7E675148D27A0ECA683410 /* Pods_AnchorageTests_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AnchorageTests_tvOS.framework; path = "Pods-AnchorageTests-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 5B6D259E4FC813C7C278DB9DBC5972B6 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 5BB304A2B316D5217FB1783186B5FFDE /* Then-tvOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "Then-tvOS-Info.plist"; path = "../Then-tvOS/Then-tvOS-Info.plist"; sourceTree = ""; }; 5BB91550AABC989FE4285ED023E475BB /* CaseIterable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CaseIterable.swift; path = Sources/SnapshotTesting/Snapshotting/CaseIterable.swift; sourceTree = ""; }; 60E7D8444B8491F20BAC986FF8D2ACCF /* Then-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Then-iOS-prefix.pch"; sourceTree = ""; }; 66E8ABF000AB99392E1B2817B2537EE4 /* Diffing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diffing.swift; path = Sources/SnapshotTesting/Diffing.swift; sourceTree = ""; }; + 6854C709072D3DC2814A1CFB2517EE41 /* Pods-AnchorageTests-tvOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AnchorageTests-tvOS-frameworks.sh"; sourceTree = ""; }; 6A54EB1B11DA3CF0C926BE4411FE6906 /* SnapshotTesting-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "SnapshotTesting-macOS.xcconfig"; path = "../SnapshotTesting-macOS/SnapshotTesting-macOS.xcconfig"; sourceTree = ""; }; - 6A63DDBF270441261A469396FDD801C4 /* Then.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Then.framework; path = "Then-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 6B398E5CD82632512CC28A5E297DAA24 /* Diff.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diff.swift; path = Sources/SnapshotTesting/Diff.swift; sourceTree = ""; }; - 6DA66D97F4F4ECE35A9040B4A51F9077 /* Then.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Then.framework; path = "Then-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 6ED7B055CE587655FDFA735EB338A17E /* Pods-Anchorage-tvOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Anchorage-tvOS-acknowledgements.markdown"; sourceTree = ""; }; - 709C480196A6206E1347DCF42BDAFA30 /* Pods-AnchorageTests-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AnchorageTests-iOS-umbrella.h"; sourceTree = ""; }; 71F6E5746E6B255825E1AED14DADA428 /* SnapshotTesting-macOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "SnapshotTesting-macOS-Info.plist"; path = "../SnapshotTesting-macOS/SnapshotTesting-macOS-Info.plist"; sourceTree = ""; }; - 7200517E4D704CFBA46453819558ABD5 /* Pods-AnchorageTests-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AnchorageTests-macOS-dummy.m"; sourceTree = ""; }; - 72353BF82CC9BB789E674FD2351C2983 /* SnapshotTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapshotTesting.framework; path = "SnapshotTesting-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 726BD043C3FE28C8C25915325EF3F801 /* Pods-AnchorageTests-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AnchorageTests-iOS-umbrella.h"; sourceTree = ""; }; + 73B818AC6ADBB093DD46BE79F3D894A5 /* Pods_AnchorageTests_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AnchorageTests_macOS.framework; path = "Pods-AnchorageTests-macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7439E1930B47E0CD5A8D7AFEDCBD89F0 /* Pods-AnchorageTests-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AnchorageTests-iOS-dummy.m"; sourceTree = ""; }; 7778714CF103E155F34D274BBF7F647E /* NSViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSViewController.swift; path = Sources/SnapshotTesting/Snapshotting/NSViewController.swift; sourceTree = ""; }; 79A7D44FE70BCBF740D00EE0980645F9 /* SceneKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SceneKit.swift; path = Sources/SnapshotTesting/Snapshotting/SceneKit.swift; sourceTree = ""; }; 7C9F3139F433DBFF38C02433A821DA65 /* Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Internal.swift; path = Sources/SnapshotTesting/Common/Internal.swift; sourceTree = ""; }; - 7E0E7CE462515112D0F01EDA7A30C9F9 /* Pods-Anchorage-tvOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Anchorage-tvOS-Info.plist"; sourceTree = ""; }; 80D2A407A2C3DFAA14D5816505CE16FB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 82BB95EE8312F63265020E276C951B38 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 85F49DB9CEEACD346E1D3983763D701A /* Then-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Then-macOS.xcconfig"; path = "../Then-macOS/Then-macOS.xcconfig"; sourceTree = ""; }; 8633EC95242ACCC213DBAA0CEB80934D /* Any.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Any.swift; path = Sources/SnapshotTesting/Snapshotting/Any.swift; sourceTree = ""; }; - 874F07DD58B171606A8661D56E60D4E2 /* Pods-Anchorage-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Anchorage-tvOS.debug.xcconfig"; sourceTree = ""; }; + 888A10BB1F7335395FA3868BDAA8B646 /* Pods-AnchorageDemo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AnchorageDemo.modulemap"; sourceTree = ""; }; + 88BC1EB58015AEC523B6E74DD07393C4 /* Pods-AnchorageTests-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AnchorageTests-macOS.modulemap"; sourceTree = ""; }; + 89292A765BE3EC48439AA52333991451 /* Pods-AnchorageDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AnchorageDemo-dummy.m"; sourceTree = ""; }; 8AC20AD3D5323FDE0DA1A4B79BB5802B /* SnapshotTesting-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "SnapshotTesting-iOS.xcconfig"; sourceTree = ""; }; 8CA96865A965D5D8980DA2F80748AF30 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; - 8DC173513BC803B3D44E843509FD343B /* SnapshotTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapshotTesting.framework; path = "SnapshotTesting-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 93CC40A804F9ED3FF7297AA15A7D1F96 /* Pods-AnchorageDemo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AnchorageDemo.modulemap"; sourceTree = ""; }; + 8EF2A35F45FBD59C9FD8D500338B5E33 /* Pods-AnchorageTests-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-macOS.release.xcconfig"; sourceTree = ""; }; + 937C6362D44D158854C86F03E114705B /* Pods-AnchorageTests-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AnchorageTests-tvOS.modulemap"; sourceTree = ""; }; + 94C8272317AE815056CE72C256E63E61 /* Pods-AnchorageDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AnchorageDemo-acknowledgements.markdown"; sourceTree = ""; }; 965C55CAF130A9BA3EF2A4EB62D40B20 /* Codable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Codable.swift; path = Sources/SnapshotTesting/Snapshotting/Codable.swift; sourceTree = ""; }; 974BC1C63AEF0D469F6D3E53618E8498 /* SnapshotTesting-tvOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "SnapshotTesting-tvOS-Info.plist"; path = "../SnapshotTesting-tvOS/SnapshotTesting-tvOS-Info.plist"; sourceTree = ""; }; 97B9F0FBBE30E08BBC99FBE9A55A073D /* Then-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Then-iOS-Info.plist"; sourceTree = ""; }; 97CACE987AA56996C27200325AE1E0FE /* Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Sources/SnapshotTesting/Async.swift; sourceTree = ""; }; - 98E05442D9EBD2A1062AEE2576AB7E5B /* Pods-AnchorageDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AnchorageDemo-dummy.m"; sourceTree = ""; }; - 99E1E5E14AF4C4AB0F648F9813C597F2 /* Pods-AnchorageTests-macOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-macOS-acknowledgements.plist"; sourceTree = ""; }; - 9CAC26450F66035389598418664255C9 /* Pods-AnchorageTests-iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-iOS-acknowledgements.plist"; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9E2F1FF0D46D83EF65DB3D40C767F470 /* Pods-AnchorageTests-macOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-macOS-Info.plist"; sourceTree = ""; }; - 9E3917A586ED6E688A514C13D065F3A8 /* Pods_AnchorageDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AnchorageDemo.framework; path = "Pods-AnchorageDemo.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 9E6B04326391F81046FD2666FEC98FA5 /* Pods-AnchorageDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AnchorageDemo-umbrella.h"; sourceTree = ""; }; + 9DCE5D68EE802EF41B8152273D19889B /* SnapshotTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapshotTesting.framework; path = "SnapshotTesting-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + A20CC67D0E1C99D9536CB8820E29D2A3 /* Pods-AnchorageTests-tvOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-tvOS-acknowledgements.plist"; sourceTree = ""; }; A3B55CF773D64E7EB0305E3716943D56 /* UIViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewController.swift; path = Sources/SnapshotTesting/Snapshotting/UIViewController.swift; sourceTree = ""; }; + A4E857C6356ED20B5BFD71B41CF9778A /* Pods-AnchorageTests-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AnchorageTests-iOS.modulemap"; sourceTree = ""; }; A88810EE685E87A9025661BA3A35FCAF /* Then-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Then-iOS.modulemap"; sourceTree = ""; }; ABE5E3DBC4FEA3AA43DA42C2190C33F5 /* SnapshotTesting-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SnapshotTesting-tvOS-umbrella.h"; path = "../SnapshotTesting-tvOS/SnapshotTesting-tvOS-umbrella.h"; sourceTree = ""; }; B4DD602B6B4DF6C7325BF42A78E02B77 /* View.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = View.swift; path = Sources/SnapshotTesting/Common/View.swift; sourceTree = ""; }; - BDEEE3256B39A05705D8A231852F77D1 /* SnapshotTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapshotTesting.framework; path = "SnapshotTesting-macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - C12CA39317AD120E26F585F4163BACE8 /* Pods-AnchorageDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageDemo-acknowledgements.plist"; sourceTree = ""; }; - C1B3B13F1EBD4A8E375BD1BD4DFDCF8B /* Pods-AnchorageTests-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AnchorageTests-iOS-dummy.m"; sourceTree = ""; }; - C21F7BEB8D545C8A168013EA143C9DEB /* Pods-AnchorageTests-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-iOS.release.xcconfig"; sourceTree = ""; }; + B67AC476DC60D199DA1F36C2525346B2 /* Pods-AnchorageTests-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageTests-iOS-Info.plist"; sourceTree = ""; }; C23E22AE1F55A83B348296F06156DF88 /* SnapshotTesting-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SnapshotTesting-macOS-umbrella.h"; path = "../SnapshotTesting-macOS/SnapshotTesting-macOS-umbrella.h"; sourceTree = ""; }; C2406EA61EA89943674005A9CD4B3639 /* AssertSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertSnapshot.swift; path = Sources/SnapshotTesting/AssertSnapshot.swift; sourceTree = ""; }; C2B3D54BEFB82791E10C2BF6C0BE4934 /* SnapshotTesting-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "SnapshotTesting-tvOS.xcconfig"; path = "../SnapshotTesting-tvOS/SnapshotTesting-tvOS.xcconfig"; sourceTree = ""; }; + C542C03A631581C76C9DE28767BE7752 /* Pods-AnchorageTests-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AnchorageTests-iOS-frameworks.sh"; sourceTree = ""; }; C6F7D2836402FEAC11D1EFB5AC570C7A /* String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = String.swift; path = Sources/SnapshotTesting/Snapshotting/String.swift; sourceTree = ""; }; - C8D7B07BF8D79D1EE3E47061DE3605C7 /* Pods-AnchorageTests-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-macOS.debug.xcconfig"; sourceTree = ""; }; + C8B7AB88CDB3116B3C86CBE7544E1FCA /* Pods-AnchorageDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AnchorageDemo-umbrella.h"; sourceTree = ""; }; C8EFD9CC5A1EC227C60003CB08B668E2 /* SnapshotTesting-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapshotTesting-iOS-prefix.pch"; sourceTree = ""; }; - CA3CE1BFABB0DBB44C628E752E1E3908 /* Pods-AnchorageTests-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AnchorageTests-iOS-frameworks.sh"; sourceTree = ""; }; - CDD0BE9C8F7E341DA5FDCCF7E2C3C70A /* Pods-Anchorage-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Anchorage-tvOS-dummy.m"; sourceTree = ""; }; + CA91571F576305E6D186E29313D9A95B /* Pods_AnchorageTests_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AnchorageTests_iOS.framework; path = "Pods-AnchorageTests-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + CEA44A7BD67F4C48F8D90BEF5B12A4C4 /* Pods-AnchorageTests-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AnchorageTests-macOS-dummy.m"; sourceTree = ""; }; D14471B7C10690FD7AF60B7B40C22FFE /* SnapshotTesting-iOS-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapshotTesting-iOS-Info.plist"; sourceTree = ""; }; D73BDB20EB2800BA1B82510954B58D89 /* Then-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Then-macOS-dummy.m"; path = "../Then-macOS/Then-macOS-dummy.m"; sourceTree = ""; }; D986863111671CA6884EC9DA424EB0BF /* SnapshotTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SnapshotTestCase.swift; path = Sources/SnapshotTesting/SnapshotTestCase.swift; sourceTree = ""; }; - DA456BF0BBD9819DA43F59A378C4B2C4 /* Pods-Anchorage-tvOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Anchorage-tvOS-acknowledgements.plist"; sourceTree = ""; }; DEAD4FE56B631DE55CE14FF9D7994217 /* Then-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Then-tvOS.xcconfig"; path = "../Then-tvOS/Then-tvOS.xcconfig"; sourceTree = ""; }; + DF60C75F53B1DF779EBCFA169C21A723 /* Pods-AnchorageTests-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-tvOS.debug.xcconfig"; sourceTree = ""; }; + E1018C30BF3F80E4B51ABCD4F0A385BC /* Pods-AnchorageTests-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-macOS.debug.xcconfig"; sourceTree = ""; }; E42D84516C7E460DF149D03FD68A2E88 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Sources/SnapshotTesting/Snapshotting/Description.swift; sourceTree = ""; }; - E4492EA781AF58C9A6113423DE2C116B /* Pods-AnchorageTests-macOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AnchorageTests-macOS-frameworks.sh"; sourceTree = ""; }; E5D1AFC9A083FEB4541905EAEBB51F9E /* Then-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Then-iOS.xcconfig"; sourceTree = ""; }; - E7173700C2FA5626CEB9C8C2A931A985 /* Pods-AnchorageTests-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AnchorageTests-iOS.modulemap"; sourceTree = ""; }; + E7A7C6688DF9DD23B6C1AF07E4BBCD16 /* Pods-AnchorageDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageDemo-acknowledgements.plist"; sourceTree = ""; }; + E7BD47C521D4D9D87A2C8B7C0570C895 /* Pods-AnchorageDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageDemo.debug.xcconfig"; sourceTree = ""; }; E88E76831E592E0A8751BDC86A2B46B4 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - E8AA5EA59DCC099639598C34598EC6A5 /* Pods-AnchorageTests-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-iOS.debug.xcconfig"; sourceTree = ""; }; - EB18A04AC54E6FC73DFEDA3A0EDD8165 /* Pods_Anchorage_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Anchorage_tvOS.framework; path = "Pods-Anchorage-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - ED15469099B9295DB5F98439DFA06E20 /* Pods-AnchorageTests-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AnchorageTests-macOS.modulemap"; sourceTree = ""; }; - EE01089483F81A13D6A5A57C7D31CD18 /* Pods-AnchorageDemo-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AnchorageDemo-Info.plist"; sourceTree = ""; }; + EBB0FA4011D44253CFD495B36489319D /* Then.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Then.framework; path = "Then-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + EC2763CAEFF1FC26E772E2A666B8ADF8 /* SnapshotTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapshotTesting.framework; path = "SnapshotTesting-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + ED5AC2AF4A2773047EB542F2CC71435B /* Pods-AnchorageTests-tvOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AnchorageTests-tvOS-acknowledgements.markdown"; sourceTree = ""; }; + EDD6584865283009A6703C17C1E53460 /* Pods-AnchorageTests-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AnchorageTests-tvOS-umbrella.h"; sourceTree = ""; }; F10CCB58C8F43ADAFAFFF42808571276 /* SnapshotTesting-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "SnapshotTesting-iOS.modulemap"; sourceTree = ""; }; + F208638250E7BDF95223A95EBB009379 /* Pods-AnchorageTests-macOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AnchorageTests-macOS-acknowledgements.markdown"; sourceTree = ""; }; F30C7E11FF73DCBE6EABF21AD9625F7C /* NSView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSView.swift; path = Sources/SnapshotTesting/Snapshotting/NSView.swift; sourceTree = ""; }; - F654D012E5B3A2D665F9D09ECC34FC4C /* Pods-Anchorage-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Anchorage-tvOS.release.xcconfig"; sourceTree = ""; }; + F3CE3E637D010E33E9B5F55906924B9B /* SnapshotTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapshotTesting.framework; path = "SnapshotTesting-macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; F951F364A03C68B8F8F74B13397CE018 /* URLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLRequest.swift; path = Sources/SnapshotTesting/Snapshotting/URLRequest.swift; sourceTree = ""; }; F9651997ADB0A2E4F8B0A940BBB85835 /* NSImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSImage.swift; path = Sources/SnapshotTesting/Snapshotting/NSImage.swift; sourceTree = ""; }; + FA0C078E796794334DB0B45942B84D28 /* Pods-AnchorageTests-macOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AnchorageTests-macOS-frameworks.sh"; sourceTree = ""; }; FB58D3C73E2F40CB06D1F775F714E6DC /* SnapshotTesting-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapshotTesting-iOS-umbrella.h"; sourceTree = ""; }; FBD3ECC8E00D0CD8AC2BFC2AC06D2DBD /* Then-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Then-iOS-umbrella.h"; sourceTree = ""; }; FDB6064E946A29292DAFEFF2E4D10AAC /* SnapshotTesting-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SnapshotTesting-macOS-prefix.pch"; path = "../SnapshotTesting-macOS/SnapshotTesting-macOS-prefix.pch"; sourceTree = ""; }; + FE3816F35938419CB96E6AF3B535B3C2 /* Pods-AnchorageTests-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AnchorageTests-iOS.debug.xcconfig"; sourceTree = ""; }; FE835AAFEC39ECF4A8D8484C66A00A86 /* Then-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Then-macOS-umbrella.h"; path = "../Then-macOS/Then-macOS-umbrella.h"; sourceTree = ""; }; + FF891A880C492C690CA8055AC9B539AB /* Pods_AnchorageDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AnchorageDemo.framework; path = "Pods-AnchorageDemo.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 1AE9591E6C6D265E0339D14D6631473A /* Frameworks */ = { + 0C1F0C3C5AEDCF92D4C34B328AD0A22F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5E10C13E4334C89D15F8585757F39CF9 /* Foundation.framework in Frameworks */, + E204BC44C9531B5DFF1B2AEB1688CE49 /* Foundation.framework in Frameworks */, + 25021F6939648F201BBB05161A41D022 /* XCTest.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4431F18EAC5E2A958A2C12D21C29E10F /* Frameworks */ = { + 434E4EC0177CAD47BC2092B7695291F4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FDFB80325A63DF5F36A558B4CD13353D /* Foundation.framework in Frameworks */, + 71816AB8852A16BFC1FBDF65434D40E1 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8109A18D1253773049A7E748C428F5F3 /* Frameworks */ = { + 4431F18EAC5E2A958A2C12D21C29E10F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5458252ACE68EE4A795624BB4FE41F7A /* Foundation.framework in Frameworks */, - 28BACDA624B71A7101AB724F95568946 /* XCTest.framework in Frameworks */, + FDFB80325A63DF5F36A558B4CD13353D /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - A9B2AAA596DD87B21909D8A1E003C471 /* Frameworks */ = { + B2E6CAC0D83B2E762631446CF14413C5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 514979C6B7AF0D7BEB5BD0AA9061E05C /* Foundation.framework in Frameworks */, + CA5AEC6E7196BDBA5E52C9158F1BDACA /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B2E6CAC0D83B2E762631446CF14413C5 /* Frameworks */ = { + C6F694979E05E8B8A2C5BA64BD98E38F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CA5AEC6E7196BDBA5E52C9158F1BDACA /* Cocoa.framework in Frameworks */, + BFC0246962C462CF7251B278FBBC8566 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C6F694979E05E8B8A2C5BA64BD98E38F /* Frameworks */ = { + CA97E0DD1462EB2E0B6779A153A4F606 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BFC0246962C462CF7251B278FBBC8566 /* Foundation.framework in Frameworks */, + 712F798FD87366330E22F396D9CE4E36 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -408,39 +409,6 @@ path = Then; sourceTree = ""; }; - 64DBCB6F5562C0471E906F7910F66AC5 /* Products */ = { - isa = PBXGroup; - children = ( - EB18A04AC54E6FC73DFEDA3A0EDD8165 /* Pods_Anchorage_tvOS.framework */, - 9E3917A586ED6E688A514C13D065F3A8 /* Pods_AnchorageDemo.framework */, - 521331738ADCCE09C000DCFAB7B338CB /* Pods_AnchorageTests_iOS.framework */, - 530541043EF3145DE0D91D08B09580BB /* Pods_AnchorageTests_macOS.framework */, - BDEEE3256B39A05705D8A231852F77D1 /* SnapshotTesting.framework */, - 72353BF82CC9BB789E674FD2351C2983 /* SnapshotTesting.framework */, - 8DC173513BC803B3D44E843509FD343B /* SnapshotTesting.framework */, - 6DA66D97F4F4ECE35A9040B4A51F9077 /* Then.framework */, - 4DEED31A1B1DC815815B119DB1E99415 /* Then.framework */, - 6A63DDBF270441261A469396FDD801C4 /* Then.framework */, - ); - name = Products; - sourceTree = ""; - }; - 90D1BA9A932F1D656D6FE6BE3AF749FB /* Pods-AnchorageDemo */ = { - isa = PBXGroup; - children = ( - 93CC40A804F9ED3FF7297AA15A7D1F96 /* Pods-AnchorageDemo.modulemap */, - 1CDA287600F0EC775621573243AED92F /* Pods-AnchorageDemo-acknowledgements.markdown */, - C12CA39317AD120E26F585F4163BACE8 /* Pods-AnchorageDemo-acknowledgements.plist */, - 98E05442D9EBD2A1062AEE2576AB7E5B /* Pods-AnchorageDemo-dummy.m */, - EE01089483F81A13D6A5A57C7D31CD18 /* Pods-AnchorageDemo-Info.plist */, - 9E6B04326391F81046FD2666FEC98FA5 /* Pods-AnchorageDemo-umbrella.h */, - 57364CC62A5FF52A48E22A44537F7644 /* Pods-AnchorageDemo.debug.xcconfig */, - 0FC955AA8B2C7C53E6C3B0D1E7933206 /* Pods-AnchorageDemo.release.xcconfig */, - ); - name = "Pods-AnchorageDemo"; - path = "Target Support Files/Pods-AnchorageDemo"; - sourceTree = ""; - }; 938E161FF1BA21B965951411BC7AB597 /* iOS */ = { isa = PBXGroup; children = ( @@ -459,41 +427,42 @@ name = tvOS; sourceTree = ""; }; - 9BC4803E4CDA94E7E1E278EBA0AA1305 /* Frameworks */ = { + 9A65275835E8F2986CF702363A204CFB /* Targets Support Files */ = { isa = PBXGroup; children = ( - 938E161FF1BA21B965951411BC7AB597 /* iOS */, - E9EDB2EAD17FA52AE8FBEB8488C39B1F /* OS X */, - 973E9A23C1C74733B19D32FAE8AC8B41 /* tvOS */, + D7A5A81F92F24D442703218981475DFA /* Pods-AnchorageDemo */, + 9AA12733F1089AEE3A3863DA141A7E20 /* Pods-AnchorageTests-iOS */, + BA221B786A9A68075B75B6528ABFF82A /* Pods-AnchorageTests-macOS */, + FE4003B710432749C557B76EB45B5FC5 /* Pods-AnchorageTests-tvOS */, ); - name = Frameworks; + name = "Targets Support Files"; sourceTree = ""; }; - A1DF9EC1E282B66B80E6ABA1416D0CC9 /* Pods-Anchorage-tvOS */ = { + 9AA12733F1089AEE3A3863DA141A7E20 /* Pods-AnchorageTests-iOS */ = { isa = PBXGroup; children = ( - 345B52A04C7D86A10C16E97C5B04806F /* Pods-Anchorage-tvOS.modulemap */, - 6ED7B055CE587655FDFA735EB338A17E /* Pods-Anchorage-tvOS-acknowledgements.markdown */, - DA456BF0BBD9819DA43F59A378C4B2C4 /* Pods-Anchorage-tvOS-acknowledgements.plist */, - CDD0BE9C8F7E341DA5FDCCF7E2C3C70A /* Pods-Anchorage-tvOS-dummy.m */, - 7E0E7CE462515112D0F01EDA7A30C9F9 /* Pods-Anchorage-tvOS-Info.plist */, - 3E5FB2229AACB26E0AF5A48B9A815393 /* Pods-Anchorage-tvOS-umbrella.h */, - 874F07DD58B171606A8661D56E60D4E2 /* Pods-Anchorage-tvOS.debug.xcconfig */, - F654D012E5B3A2D665F9D09ECC34FC4C /* Pods-Anchorage-tvOS.release.xcconfig */, - ); - name = "Pods-Anchorage-tvOS"; - path = "Target Support Files/Pods-Anchorage-tvOS"; + A4E857C6356ED20B5BFD71B41CF9778A /* Pods-AnchorageTests-iOS.modulemap */, + 082255E98CE9825D9B4691D8B627CB36 /* Pods-AnchorageTests-iOS-acknowledgements.markdown */, + 1DE98549818568D25C0DB6CE80F48592 /* Pods-AnchorageTests-iOS-acknowledgements.plist */, + 7439E1930B47E0CD5A8D7AFEDCBD89F0 /* Pods-AnchorageTests-iOS-dummy.m */, + C542C03A631581C76C9DE28767BE7752 /* Pods-AnchorageTests-iOS-frameworks.sh */, + B67AC476DC60D199DA1F36C2525346B2 /* Pods-AnchorageTests-iOS-Info.plist */, + 726BD043C3FE28C8C25915325EF3F801 /* Pods-AnchorageTests-iOS-umbrella.h */, + FE3816F35938419CB96E6AF3B535B3C2 /* Pods-AnchorageTests-iOS.debug.xcconfig */, + 4EE85B74BD13DEAC728908878E180A01 /* Pods-AnchorageTests-iOS.release.xcconfig */, + ); + name = "Pods-AnchorageTests-iOS"; + path = "Target Support Files/Pods-AnchorageTests-iOS"; sourceTree = ""; }; - A27CC0C45581D3FAA5E81959AEE95464 /* Targets Support Files */ = { + 9BC4803E4CDA94E7E1E278EBA0AA1305 /* Frameworks */ = { isa = PBXGroup; children = ( - A1DF9EC1E282B66B80E6ABA1416D0CC9 /* Pods-Anchorage-tvOS */, - 90D1BA9A932F1D656D6FE6BE3AF749FB /* Pods-AnchorageDemo */, - D95A8F4343ABB2662593B178D51F3D6C /* Pods-AnchorageTests-iOS */, - EBE22D491018BFE7D87C4565BD064503 /* Pods-AnchorageTests-macOS */, + 938E161FF1BA21B965951411BC7AB597 /* iOS */, + E9EDB2EAD17FA52AE8FBEB8488C39B1F /* OS X */, + 973E9A23C1C74733B19D32FAE8AC8B41 /* tvOS */, ); - name = "Targets Support Files"; + name = Frameworks; sourceTree = ""; }; A588AAA207969D589574AB25A7653491 /* Pods */ = { @@ -540,14 +509,31 @@ path = SnapshotTesting; sourceTree = ""; }; + BA221B786A9A68075B75B6528ABFF82A /* Pods-AnchorageTests-macOS */ = { + isa = PBXGroup; + children = ( + 88BC1EB58015AEC523B6E74DD07393C4 /* Pods-AnchorageTests-macOS.modulemap */, + F208638250E7BDF95223A95EBB009379 /* Pods-AnchorageTests-macOS-acknowledgements.markdown */, + 09E3D4AAD98AD01FF0EB2197945CD787 /* Pods-AnchorageTests-macOS-acknowledgements.plist */, + CEA44A7BD67F4C48F8D90BEF5B12A4C4 /* Pods-AnchorageTests-macOS-dummy.m */, + FA0C078E796794334DB0B45942B84D28 /* Pods-AnchorageTests-macOS-frameworks.sh */, + 1AAE3EA478FB4EA3B32F2DA8A603C0CA /* Pods-AnchorageTests-macOS-Info.plist */, + 01C6C7064B856700F1EC102FAB9EA0EA /* Pods-AnchorageTests-macOS-umbrella.h */, + E1018C30BF3F80E4B51ABCD4F0A385BC /* Pods-AnchorageTests-macOS.debug.xcconfig */, + 8EF2A35F45FBD59C9FD8D500338B5E33 /* Pods-AnchorageTests-macOS.release.xcconfig */, + ); + name = "Pods-AnchorageTests-macOS"; + path = "Target Support Files/Pods-AnchorageTests-macOS"; + sourceTree = ""; + }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 9BC4803E4CDA94E7E1E278EBA0AA1305 /* Frameworks */, A588AAA207969D589574AB25A7653491 /* Pods */, - 64DBCB6F5562C0471E906F7910F66AC5 /* Products */, - A27CC0C45581D3FAA5E81959AEE95464 /* Targets Support Files */, + FC4814063660C09F229468A715ED3F80 /* Products */, + 9A65275835E8F2986CF702363A204CFB /* Targets Support Files */, ); sourceTree = ""; }; @@ -577,21 +563,20 @@ path = "../Target Support Files/SnapshotTesting-iOS"; sourceTree = ""; }; - D95A8F4343ABB2662593B178D51F3D6C /* Pods-AnchorageTests-iOS */ = { + D7A5A81F92F24D442703218981475DFA /* Pods-AnchorageDemo */ = { isa = PBXGroup; children = ( - E7173700C2FA5626CEB9C8C2A931A985 /* Pods-AnchorageTests-iOS.modulemap */, - 173958FAB88D2F72A0F340CB2917FBA7 /* Pods-AnchorageTests-iOS-acknowledgements.markdown */, - 9CAC26450F66035389598418664255C9 /* Pods-AnchorageTests-iOS-acknowledgements.plist */, - C1B3B13F1EBD4A8E375BD1BD4DFDCF8B /* Pods-AnchorageTests-iOS-dummy.m */, - CA3CE1BFABB0DBB44C628E752E1E3908 /* Pods-AnchorageTests-iOS-frameworks.sh */, - 1D23AE667D560763AA87134430AD30B2 /* Pods-AnchorageTests-iOS-Info.plist */, - 709C480196A6206E1347DCF42BDAFA30 /* Pods-AnchorageTests-iOS-umbrella.h */, - E8AA5EA59DCC099639598C34598EC6A5 /* Pods-AnchorageTests-iOS.debug.xcconfig */, - C21F7BEB8D545C8A168013EA143C9DEB /* Pods-AnchorageTests-iOS.release.xcconfig */, + 888A10BB1F7335395FA3868BDAA8B646 /* Pods-AnchorageDemo.modulemap */, + 94C8272317AE815056CE72C256E63E61 /* Pods-AnchorageDemo-acknowledgements.markdown */, + E7A7C6688DF9DD23B6C1AF07E4BBCD16 /* Pods-AnchorageDemo-acknowledgements.plist */, + 89292A765BE3EC48439AA52333991451 /* Pods-AnchorageDemo-dummy.m */, + 4484D17F976A0FD28B9A2B9FF1AA734F /* Pods-AnchorageDemo-Info.plist */, + C8B7AB88CDB3116B3C86CBE7544E1FCA /* Pods-AnchorageDemo-umbrella.h */, + E7BD47C521D4D9D87A2C8B7C0570C895 /* Pods-AnchorageDemo.debug.xcconfig */, + 258D051971A0E9F254C7C8B47EBA3142 /* Pods-AnchorageDemo.release.xcconfig */, ); - name = "Pods-AnchorageTests-iOS"; - path = "Target Support Files/Pods-AnchorageTests-iOS"; + name = "Pods-AnchorageDemo"; + path = "Target Support Files/Pods-AnchorageDemo"; sourceTree = ""; }; E9EDB2EAD17FA52AE8FBEB8488C39B1F /* OS X */ = { @@ -603,26 +588,51 @@ name = "OS X"; sourceTree = ""; }; - EBE22D491018BFE7D87C4565BD064503 /* Pods-AnchorageTests-macOS */ = { + FC4814063660C09F229468A715ED3F80 /* Products */ = { isa = PBXGroup; children = ( - ED15469099B9295DB5F98439DFA06E20 /* Pods-AnchorageTests-macOS.modulemap */, - 1E41CA265D891A900DF76602033ACB01 /* Pods-AnchorageTests-macOS-acknowledgements.markdown */, - 99E1E5E14AF4C4AB0F648F9813C597F2 /* Pods-AnchorageTests-macOS-acknowledgements.plist */, - 7200517E4D704CFBA46453819558ABD5 /* Pods-AnchorageTests-macOS-dummy.m */, - E4492EA781AF58C9A6113423DE2C116B /* Pods-AnchorageTests-macOS-frameworks.sh */, - 9E2F1FF0D46D83EF65DB3D40C767F470 /* Pods-AnchorageTests-macOS-Info.plist */, - 130E3C1BFE52064305520F10086F4CD7 /* Pods-AnchorageTests-macOS-umbrella.h */, - C8D7B07BF8D79D1EE3E47061DE3605C7 /* Pods-AnchorageTests-macOS.debug.xcconfig */, - 0ABFDBB7A06BB1EE9B5007814E2DEE33 /* Pods-AnchorageTests-macOS.release.xcconfig */, + FF891A880C492C690CA8055AC9B539AB /* Pods_AnchorageDemo.framework */, + CA91571F576305E6D186E29313D9A95B /* Pods_AnchorageTests_iOS.framework */, + 73B818AC6ADBB093DD46BE79F3D894A5 /* Pods_AnchorageTests_macOS.framework */, + 5A7DF8E08A7E675148D27A0ECA683410 /* Pods_AnchorageTests_tvOS.framework */, + F3CE3E637D010E33E9B5F55906924B9B /* SnapshotTesting.framework */, + 9DCE5D68EE802EF41B8152273D19889B /* SnapshotTesting.framework */, + EC2763CAEFF1FC26E772E2A666B8ADF8 /* SnapshotTesting.framework */, + EBB0FA4011D44253CFD495B36489319D /* Then.framework */, + 176D3235F9B7915357F05C02E1772B8F /* Then.framework */, + 1D25F24DD1B1570592E7DB20FF480654 /* Then.framework */, ); - name = "Pods-AnchorageTests-macOS"; - path = "Target Support Files/Pods-AnchorageTests-macOS"; + name = Products; + sourceTree = ""; + }; + FE4003B710432749C557B76EB45B5FC5 /* Pods-AnchorageTests-tvOS */ = { + isa = PBXGroup; + children = ( + 937C6362D44D158854C86F03E114705B /* Pods-AnchorageTests-tvOS.modulemap */, + ED5AC2AF4A2773047EB542F2CC71435B /* Pods-AnchorageTests-tvOS-acknowledgements.markdown */, + A20CC67D0E1C99D9536CB8820E29D2A3 /* Pods-AnchorageTests-tvOS-acknowledgements.plist */, + 53391F6468B47D5F84AC340250C41F86 /* Pods-AnchorageTests-tvOS-dummy.m */, + 6854C709072D3DC2814A1CFB2517EE41 /* Pods-AnchorageTests-tvOS-frameworks.sh */, + 414B2CC14BD2827CA08852B12C994BCE /* Pods-AnchorageTests-tvOS-Info.plist */, + EDD6584865283009A6703C17C1E53460 /* Pods-AnchorageTests-tvOS-umbrella.h */, + DF60C75F53B1DF779EBCFA169C21A723 /* Pods-AnchorageTests-tvOS.debug.xcconfig */, + 1D76B345DC9F88D9FF04868768118A7D /* Pods-AnchorageTests-tvOS.release.xcconfig */, + ); + name = "Pods-AnchorageTests-tvOS"; + path = "Target Support Files/Pods-AnchorageTests-tvOS"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 1AAFB79CD4E064334E20B21E1558AF57 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CC110C769F87211FF3D4B8AD4260BC86 /* SnapshotTesting-tvOS-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 1C91BB318EE2BD00F3F4C720DDDE46CD /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -631,27 +641,27 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4151C4E4F4BB3296D186379E24D6BC9E /* Headers */ = { + 4036605C03EE1F78EB63AE2432220CCA /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 8C71714EA481D233D7E342D599024D7E /* Pods-AnchorageTests-iOS-umbrella.h in Headers */, + FF7D071DD5172CEFB422ED2AF5B0A5F2 /* Then-tvOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5B3CADAD0BD8A745C9773A98A0DC9FF4 /* Headers */ = { + 4151C4E4F4BB3296D186379E24D6BC9E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - F7E53D5FFD347FAE2E7BB14C06FF1411 /* Then-macOS-umbrella.h in Headers */, + 8C71714EA481D233D7E342D599024D7E /* Pods-AnchorageTests-iOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 78C278DB7E53292E7C3222A58C1CD253 /* Headers */ = { + 5B3CADAD0BD8A745C9773A98A0DC9FF4 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 819223C0027E07056B4F3BAE30E0BA23 /* Then-tvOS-umbrella.h in Headers */, + F7E53D5FFD347FAE2E7BB14C06FF1411 /* Then-macOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -679,19 +689,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - CAD9EFE45564A6A5C20761C8E9A3B1E1 /* Headers */ = { + E96FD7DC95CCE352AFE2BEC5361DD454 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5A2362F4A5884F616FE8F6655D604AF5 /* Pods-Anchorage-tvOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ED3C4A57B2769BDCD8E9909C8760114E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - CCC86ECA5CBBD1D97A536380C603097C /* SnapshotTesting-tvOS-umbrella.h in Headers */, + 169C9B3CB02AEB4063FDB2DE8D7E9E56 /* Pods-AnchorageTests-tvOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -706,22 +708,22 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 1100484FD281C00F225FC545EDD53E2D /* SnapshotTesting-tvOS */ = { + 120353CCD0748F91F290AA5CC8967F1C /* Then-tvOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 0490C11DCFFB81CB01368158A1F2EDEA /* Build configuration list for PBXNativeTarget "SnapshotTesting-tvOS" */; + buildConfigurationList = 82A1D83DCF9CC3CE9FF2D00213EE78C3 /* Build configuration list for PBXNativeTarget "Then-tvOS" */; buildPhases = ( - ED3C4A57B2769BDCD8E9909C8760114E /* Headers */, - AE7A66B4B2F917D39321939B3E149630 /* Sources */, - 8109A18D1253773049A7E748C428F5F3 /* Frameworks */, - F6D38DA405A7151DA0AADEE201168006 /* Resources */, + 4036605C03EE1F78EB63AE2432220CCA /* Headers */, + 242A601C906ACFAE6C845A2BE9DDF585 /* Sources */, + CA97E0DD1462EB2E0B6779A153A4F606 /* Frameworks */, + CAFB983E6F80796917CCDC9DA9F2B3D4 /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = "SnapshotTesting-tvOS"; - productName = "SnapshotTesting-tvOS"; - productReference = 8DC173513BC803B3D44E843509FD343B /* SnapshotTesting.framework */; + name = "Then-tvOS"; + productName = "Then-tvOS"; + productReference = EBB0FA4011D44253CFD495B36489319D /* Then.framework */; productType = "com.apple.product-type.framework"; }; 144D04ED7C59D7E3B95AE2B3CBDD4784 /* Pods-AnchorageTests-macOS */ = { @@ -741,7 +743,7 @@ ); name = "Pods-AnchorageTests-macOS"; productName = "Pods-AnchorageTests-macOS"; - productReference = 530541043EF3145DE0D91D08B09580BB /* Pods_AnchorageTests_macOS.framework */; + productReference = 73B818AC6ADBB093DD46BE79F3D894A5 /* Pods_AnchorageTests_macOS.framework */; productType = "com.apple.product-type.framework"; }; 52C1AFA5B3F0135A5A8DC1FDCFCE5628 /* Then-macOS */ = { @@ -759,7 +761,7 @@ ); name = "Then-macOS"; productName = "Then-macOS"; - productReference = 4DEED31A1B1DC815815B119DB1E99415 /* Then.framework */; + productReference = 176D3235F9B7915357F05C02E1772B8F /* Then.framework */; productType = "com.apple.product-type.framework"; }; 67A76AF2DBC1A83F1EF622B59C7F1777 /* Pods-AnchorageTests-iOS */ = { @@ -779,7 +781,7 @@ ); name = "Pods-AnchorageTests-iOS"; productName = "Pods-AnchorageTests-iOS"; - productReference = 521331738ADCCE09C000DCFAB7B338CB /* Pods_AnchorageTests_iOS.framework */; + productReference = CA91571F576305E6D186E29313D9A95B /* Pods_AnchorageTests_iOS.framework */; productType = "com.apple.product-type.framework"; }; 6D0A0A256C98D01A3A3D00616C05A47A /* Then-iOS */ = { @@ -797,7 +799,7 @@ ); name = "Then-iOS"; productName = "Then-iOS"; - productReference = 6A63DDBF270441261A469396FDD801C4 /* Then.framework */; + productReference = 1D25F24DD1B1570592E7DB20FF480654 /* Then.framework */; productType = "com.apple.product-type.framework"; }; 7610167605D0B897E54BAD036DCEA5AC /* SnapshotTesting-macOS */ = { @@ -815,25 +817,7 @@ ); name = "SnapshotTesting-macOS"; productName = "SnapshotTesting-macOS"; - productReference = BDEEE3256B39A05705D8A231852F77D1 /* SnapshotTesting.framework */; - productType = "com.apple.product-type.framework"; - }; - 8956971230A66A9091D771C679C4D504 /* Then-tvOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 300EB7003C2358EC6D5ACCAAC111E72D /* Build configuration list for PBXNativeTarget "Then-tvOS" */; - buildPhases = ( - 78C278DB7E53292E7C3222A58C1CD253 /* Headers */, - A49CB7A4A91CD09435EC3A84871841FC /* Sources */, - A9B2AAA596DD87B21909D8A1E003C471 /* Frameworks */, - E0D85CD6977B6886A9BC8488DEC1384C /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Then-tvOS"; - productName = "Then-tvOS"; - productReference = 6DA66D97F4F4ECE35A9040B4A51F9077 /* Then.framework */; + productReference = F3CE3E637D010E33E9B5F55906924B9B /* SnapshotTesting.framework */; productType = "com.apple.product-type.framework"; }; 8C5D2EB560C5B04EFF9E9263EE044EB5 /* Pods-AnchorageDemo */ = { @@ -851,7 +835,7 @@ ); name = "Pods-AnchorageDemo"; productName = "Pods-AnchorageDemo"; - productReference = 9E3917A586ED6E688A514C13D065F3A8 /* Pods_AnchorageDemo.framework */; + productReference = FF891A880C492C690CA8055AC9B539AB /* Pods_AnchorageDemo.framework */; productType = "com.apple.product-type.framework"; }; B9F261CD35E95C218DA0E191B7F960C0 /* SnapshotTesting-iOS */ = { @@ -869,27 +853,45 @@ ); name = "SnapshotTesting-iOS"; productName = "SnapshotTesting-iOS"; - productReference = 72353BF82CC9BB789E674FD2351C2983 /* SnapshotTesting.framework */; + productReference = 9DCE5D68EE802EF41B8152273D19889B /* SnapshotTesting.framework */; productType = "com.apple.product-type.framework"; }; - DB71652937123BBEF6EB6E23CE920276 /* Pods-Anchorage-tvOS */ = { + DA7528F2A0C8496583FB2F480FF3362A /* SnapshotTesting-tvOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 5BA47F71E207AD9DB8CF000D11556019 /* Build configuration list for PBXNativeTarget "Pods-Anchorage-tvOS" */; + buildConfigurationList = F3DC1272C62DC8645DA446ADE99F26E9 /* Build configuration list for PBXNativeTarget "SnapshotTesting-tvOS" */; buildPhases = ( - CAD9EFE45564A6A5C20761C8E9A3B1E1 /* Headers */, - 4704FFB771FF4AA57457E080B9FF02AD /* Sources */, - 1AE9591E6C6D265E0339D14D6631473A /* Frameworks */, - 6CDBEB74853E98C15052250944D180E5 /* Resources */, + 1AAFB79CD4E064334E20B21E1558AF57 /* Headers */, + CF259BAA5D6059B228ADE6BAA6883ED5 /* Sources */, + 0C1F0C3C5AEDCF92D4C34B328AD0A22F /* Frameworks */, + CA01DD2A021EAC24AF7D4212A5B857DC /* Resources */, ); buildRules = ( ); dependencies = ( - CAF97EA5F740911357DA4A1CD3003E74 /* PBXTargetDependency */, - EAEA4D4FEF9278AE7735CB7EB8ED51BB /* PBXTargetDependency */, ); - name = "Pods-Anchorage-tvOS"; - productName = "Pods-Anchorage-tvOS"; - productReference = EB18A04AC54E6FC73DFEDA3A0EDD8165 /* Pods_Anchorage_tvOS.framework */; + name = "SnapshotTesting-tvOS"; + productName = "SnapshotTesting-tvOS"; + productReference = EC2763CAEFF1FC26E772E2A666B8ADF8 /* SnapshotTesting.framework */; + productType = "com.apple.product-type.framework"; + }; + FF2F93C368C072FCFA44AF0888F91217 /* Pods-AnchorageTests-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = A68420585FAEA259BC140ABE9735E498 /* Build configuration list for PBXNativeTarget "Pods-AnchorageTests-tvOS" */; + buildPhases = ( + E96FD7DC95CCE352AFE2BEC5361DD454 /* Headers */, + B00C080F8D067943344E9D1E02B77D80 /* Sources */, + 434E4EC0177CAD47BC2092B7695291F4 /* Frameworks */, + 0C8AC6764EB29D0B7DC359B18FC5FA23 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 3B66A80CBAD621970CF43B70DB18ACD3 /* PBXTargetDependency */, + C04D9C1F555E1AC697D2BD3DA0DEEE79 /* PBXTargetDependency */, + ); + name = "Pods-AnchorageTests-tvOS"; + productName = "Pods-AnchorageTests-tvOS"; + productReference = 5A7DF8E08A7E675148D27A0ECA683410 /* Pods_AnchorageTests_tvOS.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -909,20 +911,20 @@ en, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 64DBCB6F5562C0471E906F7910F66AC5 /* Products */; + productRefGroup = FC4814063660C09F229468A715ED3F80 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - DB71652937123BBEF6EB6E23CE920276 /* Pods-Anchorage-tvOS */, 8C5D2EB560C5B04EFF9E9263EE044EB5 /* Pods-AnchorageDemo */, 67A76AF2DBC1A83F1EF622B59C7F1777 /* Pods-AnchorageTests-iOS */, 144D04ED7C59D7E3B95AE2B3CBDD4784 /* Pods-AnchorageTests-macOS */, + FF2F93C368C072FCFA44AF0888F91217 /* Pods-AnchorageTests-tvOS */, B9F261CD35E95C218DA0E191B7F960C0 /* SnapshotTesting-iOS */, 7610167605D0B897E54BAD036DCEA5AC /* SnapshotTesting-macOS */, - 1100484FD281C00F225FC545EDD53E2D /* SnapshotTesting-tvOS */, + DA7528F2A0C8496583FB2F480FF3362A /* SnapshotTesting-tvOS */, 6D0A0A256C98D01A3A3D00616C05A47A /* Then-iOS */, 52C1AFA5B3F0135A5A8DC1FDCFCE5628 /* Then-macOS */, - 8956971230A66A9091D771C679C4D504 /* Then-tvOS */, + 120353CCD0748F91F290AA5CC8967F1C /* Then-tvOS */, ); }; /* End PBXProject section */ @@ -949,7 +951,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6CDBEB74853E98C15052250944D180E5 /* Resources */ = { + 0C8AC6764EB29D0B7DC359B18FC5FA23 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -977,21 +979,21 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - E0D85CD6977B6886A9BC8488DEC1384C /* Resources */ = { + CA01DD2A021EAC24AF7D4212A5B857DC /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - EEC83C42E74D63DD7BC7D38E6FFAF62D /* Resources */ = { + CAFB983E6F80796917CCDC9DA9F2B3D4 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - F6D38DA405A7151DA0AADEE201168006 /* Resources */ = { + EEC83C42E74D63DD7BC7D38E6FFAF62D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -1043,11 +1045,12 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4704FFB771FF4AA57457E080B9FF02AD /* Sources */ = { + 242A601C906ACFAE6C845A2BE9DDF585 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 261E1BEA39479A79A992976B5828C7D2 /* Pods-Anchorage-tvOS-dummy.m in Sources */, + B023231416B9A937DAE7556062AB66B4 /* Then-tvOS-dummy.m in Sources */, + 958D84CA1A743F9A6E686F9B2501627E /* Then.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1101,55 +1104,54 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A49CB7A4A91CD09435EC3A84871841FC /* Sources */ = { + B00C080F8D067943344E9D1E02B77D80 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8D7DF72EEAB0E3396F20406198792526 /* Then-tvOS-dummy.m in Sources */, - 3ACAC45C1C50B53299D0C7FA3D35FF14 /* Then.swift in Sources */, + F8D5235C4D3CC7501FACBD137659D5D2 /* Pods-AnchorageTests-tvOS-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - AE7A66B4B2F917D39321939B3E149630 /* Sources */ = { + CB99BA7BC9727BD32916FFAB9EE1DB5C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DAA9D4579E50771252D2FDF4A485CE5A /* Any.swift in Sources */, - AACC9E6E5C62B9E2EEE5C4E6D76AE869 /* AssertSnapshot.swift in Sources */, - F7822DE8E57DFE31F4C7A416357B540A /* Async.swift in Sources */, - 9FCF899E356F2D2D00D6E86B71C2DA31 /* CALayer.swift in Sources */, - E210E40512B1AE1D8338D2EB6A15D3EC /* CaseIterable.swift in Sources */, - DAAB0822D509F85E1A46568F46E5D2C4 /* Codable.swift in Sources */, - CB0DAA9A3EA654BA70A2CDD11219909E /* Data.swift in Sources */, - 498595196417EA09CD71138787A76BCC /* Description.swift in Sources */, - B6B529300AB69D23E49A7879C3FB8CE0 /* Diff.swift in Sources */, - F24817F2D634138EB247EAAFF7EEA1DF /* Diffing.swift in Sources */, - 074F049A26BEB9F82D00F9CCAE375143 /* Internal.swift in Sources */, - 93A1C33D6AF733FB3677DBBF65C36F1C /* NSImage.swift in Sources */, - A2030B6E9CE7E0397E83CF9B37D24133 /* NSView.swift in Sources */, - F3FE7803F9443ABC3EAFDF7E82894922 /* NSViewController.swift in Sources */, - B25FF0C07A8FE1AAC975C181B584BEB9 /* PlistEncoder.swift in Sources */, - 30F5A7D54BFB5161E03976BFFFF13694 /* SceneKit.swift in Sources */, - EEF6DA19C881270B3F994D7E8BE77478 /* SnapshotTestCase.swift in Sources */, - 7DE63442C5279D3D4429316B3BCDBF94 /* SnapshotTesting-tvOS-dummy.m in Sources */, - E014AB41C2F82355F2128AB660FEEECF /* Snapshotting.swift in Sources */, - 727E53967147F8A5D7895383AC0200DA /* SpriteKit.swift in Sources */, - 92D7D122B07334F3CFC536E3F328FAF0 /* String.swift in Sources */, - D2A04E02CB46939D980309D3E92DF249 /* UIImage.swift in Sources */, - 46F47C30C5CB99BE7AD7183468FFE607 /* UIView.swift in Sources */, - C57D94158B6171642C216402F60E06E5 /* UIViewController.swift in Sources */, - ADCA53869A50FF60EF1C544F5026F079 /* URLRequest.swift in Sources */, - 2B1008B2802CEB8ABA0FC87FAA19177D /* View.swift in Sources */, - 37720C4945A34122A3E8F265AFF8FC86 /* XCTAttachment.swift in Sources */, + 792AC7A288B65A0BFC5F05C09F7D3F0A /* Then-macOS-dummy.m in Sources */, + 8966646261D5CEEA92C8B78F51B39467 /* Then.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - CB99BA7BC9727BD32916FFAB9EE1DB5C /* Sources */ = { + CF259BAA5D6059B228ADE6BAA6883ED5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 792AC7A288B65A0BFC5F05C09F7D3F0A /* Then-macOS-dummy.m in Sources */, - 8966646261D5CEEA92C8B78F51B39467 /* Then.swift in Sources */, + F78DABBA61E88DDE03A927FD0E077530 /* Any.swift in Sources */, + A59148B7780A118FD12EFB068628A188 /* AssertSnapshot.swift in Sources */, + A0EDD4BEA21F20719EF6928DC94400BB /* Async.swift in Sources */, + F53A49E3ECEF1546872A68ED645F4236 /* CALayer.swift in Sources */, + E92C8AE9EC00FB039B5B831246B58FFF /* CaseIterable.swift in Sources */, + 265B42BC272F57B89B4866CE17063D8E /* Codable.swift in Sources */, + 76752BF832E8531AA182596881329030 /* Data.swift in Sources */, + 74AF3CAA3D36AD9D12803BE075A06491 /* Description.swift in Sources */, + CDDF751CE0CEFCB85E98440E8D1669D2 /* Diff.swift in Sources */, + D940A41A89FFC516C109DD1AF38F6155 /* Diffing.swift in Sources */, + 91FFFA8F1F9BE4FAC2F51ABF14AE3323 /* Internal.swift in Sources */, + A4622CE5B6B66300FDEAECD04F915823 /* NSImage.swift in Sources */, + 7F77966945145CFAD7F0D6DC51D14CBC /* NSView.swift in Sources */, + 7018B88A9A4F9D3226BCACAB0A51088B /* NSViewController.swift in Sources */, + 34CB5F80E664F7681A1F5B529DA6F2A8 /* PlistEncoder.swift in Sources */, + CA553432EEDB86CBE2E26A319F2DBE39 /* SceneKit.swift in Sources */, + 2C28C24F97EA71FDE43655697411C2DD /* SnapshotTestCase.swift in Sources */, + 5FFF1D012CCE4B39AF2DDA5247F20018 /* SnapshotTesting-tvOS-dummy.m in Sources */, + AB7984A7FF33E1387FA4944954FD7562 /* Snapshotting.swift in Sources */, + 03DDAC8AB1CE26A98E055618B5C4F049 /* SpriteKit.swift in Sources */, + 0A7278AE7FAC55D3BFD4E867F0627BF6 /* String.swift in Sources */, + B4D03096D484C032618AF91F79C55BA2 /* UIImage.swift in Sources */, + 2B32A44CB3CBB47FEBD5078CF2AFD3FF /* UIView.swift in Sources */, + 1E74EC7BEF8B021F360813B72D71795E /* UIViewController.swift in Sources */, + D151DCA1ADC7DC7F95FBD34781B6D318 /* URLRequest.swift in Sources */, + 60A5A1D80EECB43C54AC8F34920530B8 /* View.swift in Sources */, + F4DAAD7D4836625B632794025EEF4FB9 /* XCTAttachment.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1165,6 +1167,12 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 3B66A80CBAD621970CF43B70DB18ACD3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "SnapshotTesting-tvOS"; + target = DA7528F2A0C8496583FB2F480FF3362A /* SnapshotTesting-tvOS */; + targetProxy = C2162746D3A3777C0EF4CE5F6E82B5C7 /* PBXContainerItemProxy */; + }; 6E8F5F30F3D69E771F3FB8635BC009A1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Then-iOS"; @@ -1183,11 +1191,11 @@ target = B9F261CD35E95C218DA0E191B7F960C0 /* SnapshotTesting-iOS */; targetProxy = 78E9433360485B8F3D9945EDD2ED8919 /* PBXContainerItemProxy */; }; - CAF97EA5F740911357DA4A1CD3003E74 /* PBXTargetDependency */ = { + C04D9C1F555E1AC697D2BD3DA0DEEE79 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "SnapshotTesting-tvOS"; - target = 1100484FD281C00F225FC545EDD53E2D /* SnapshotTesting-tvOS */; - targetProxy = E289DB4820AEED901323EA08A6822308 /* PBXContainerItemProxy */; + name = "Then-tvOS"; + target = 120353CCD0748F91F290AA5CC8967F1C /* Then-tvOS */; + targetProxy = 17C1272EB2CCE162034A98B36D7FAB4A /* PBXContainerItemProxy */; }; D465AEF207C54CC507B0C90241B357D3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -1195,76 +1203,69 @@ target = 7610167605D0B897E54BAD036DCEA5AC /* SnapshotTesting-macOS */; targetProxy = 5BCB232BC9DD74D037F4ADED82BBA55F /* PBXContainerItemProxy */; }; - EAEA4D4FEF9278AE7735CB7EB8ED51BB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Then-tvOS"; - target = 8956971230A66A9091D771C679C4D504 /* Then-tvOS */; - targetProxy = 075E5410F22770033A17F6274315C000 /* PBXContainerItemProxy */; - }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 077272E82785B970E3D1F9342C22617E /* Release */ = { + 0E1F57C532A9E8AB8E6E47AECEC08A70 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C2B3D54BEFB82791E10C2BF6C0BE4934 /* SnapshotTesting-tvOS.xcconfig */; + baseConfigurationReference = 6A54EB1B11DA3CF0C926BE4411FE6906 /* SnapshotTesting-macOS.xcconfig */; buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-Info.plist"; + FRAMEWORK_VERSION = A; + GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.modulemap"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS.modulemap"; PRODUCT_MODULE_NAME = SnapshotTesting; PRODUCT_NAME = SnapshotTesting; - SDKROOT = appletvos; + SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 4.2; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 0E1F57C532A9E8AB8E6E47AECEC08A70 /* Debug */ = { + 232FB190822BCD5B7172838B94B5394C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6A54EB1B11DA3CF0C926BE4411FE6906 /* SnapshotTesting-macOS.xcconfig */; + baseConfigurationReference = C2B3D54BEFB82791E10C2BF6C0BE4934 /* SnapshotTesting-tvOS.xcconfig */; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MODULEMAP_FILE = "Target Support Files/SnapshotTesting-macOS/SnapshotTesting-macOS.modulemap"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.modulemap"; PRODUCT_MODULE_NAME = SnapshotTesting; PRODUCT_NAME = SnapshotTesting; - SDKROOT = macosx; + SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -1398,10 +1399,11 @@ }; name = Release; }; - 66289DBB5AC998DCB610B41823326F03 /* Debug */ = { + 5FA829E7203A66EB853A3896A7EB82AB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DEAD4FE56B631DE55CE14FF9D7994217 /* Then-tvOS.xcconfig */; + baseConfigurationReference = 1D76B345DC9F88D9FF04868768118A7D /* Pods-AnchorageTests-tvOS.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1411,19 +1413,54 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Then-tvOS/Then-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Then-tvOS/Then-tvOS-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Then-tvOS/Then-tvOS.modulemap"; - PRODUCT_MODULE_NAME = Then; - PRODUCT_NAME = Then; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = appletvos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.2; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 10.0; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 64534EDC46F69EF744F33EC56D459126 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DF60C75F53B1DF779EBCFA169C21A723 /* Pods-AnchorageTests-tvOS.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -1464,7 +1501,7 @@ }; 6FD6826467DFC2B1D36E647C7FC81612 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57364CC62A5FF52A48E22A44537F7644 /* Pods-AnchorageDemo.debug.xcconfig */; + baseConfigurationReference = E7BD47C521D4D9D87A2C8B7C0570C895 /* Pods-AnchorageDemo.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; @@ -1495,38 +1532,6 @@ }; name = Debug; }; - 7BFCE3D2D2466D67BD2BEA053B1130FB /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DEAD4FE56B631DE55CE14FF9D7994217 /* Then-tvOS.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Then-tvOS/Then-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Then-tvOS/Then-tvOS-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Then-tvOS/Then-tvOS.modulemap"; - PRODUCT_MODULE_NAME = Then; - PRODUCT_NAME = Then; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.2; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; 89348A0E7CAFE9FFD11CB4FFB308FE01 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 85F49DB9CEEACD346E1D3983763D701A /* Then-macOS.xcconfig */; @@ -1562,7 +1567,7 @@ }; 8C20EF66C4BBB77B4741B7DD9DD31006 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0ABFDBB7A06BB1EE9B5007814E2DEE33 /* Pods-AnchorageTests-macOS.release.xcconfig */; + baseConfigurationReference = 8EF2A35F45FBD59C9FD8D500338B5E33 /* Pods-AnchorageTests-macOS.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; @@ -1598,7 +1603,7 @@ }; A119CDD62AD731805DD6D6265AE6B70B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C8D7B07BF8D79D1EE3E47061DE3605C7 /* Pods-AnchorageTests-macOS.debug.xcconfig */; + baseConfigurationReference = E1018C30BF3F80E4B51ABCD4F0A385BC /* Pods-AnchorageTests-macOS.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; @@ -1665,6 +1670,37 @@ }; name = Release; }; + BB2A6D3BD373DCB45EE4B4F721670747 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DEAD4FE56B631DE55CE14FF9D7994217 /* Then-tvOS.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Then-tvOS/Then-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Then-tvOS/Then-tvOS-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Then-tvOS/Then-tvOS.modulemap"; + PRODUCT_MODULE_NAME = Then; + PRODUCT_NAME = Then; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; BC27D7FA38819BCF94292270EF11B1BC /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1731,9 +1767,9 @@ }; name = Debug; }; - C10292C222B4240ECF92A50E3D345733 /* Debug */ = { + D1FAA84F3A1136CA33855DDFC5893786 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C2B3D54BEFB82791E10C2BF6C0BE4934 /* SnapshotTesting-tvOS.xcconfig */; + baseConfigurationReference = E5D1AFC9A083FEB4541905EAEBB51F9E /* Then-iOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1744,61 +1780,27 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Then-iOS/Then-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Then-iOS/Then-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.modulemap"; - PRODUCT_MODULE_NAME = SnapshotTesting; - PRODUCT_NAME = SnapshotTesting; - SDKROOT = appletvos; + MODULEMAP_FILE = "Target Support Files/Then-iOS/Then-iOS.modulemap"; + PRODUCT_MODULE_NAME = Then; + PRODUCT_NAME = Then; + SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 4.2; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - CE045BDD8957449796D395D5E71BDB5F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F654D012E5B3A2D665F9D09ECC34FC4C /* Pods-Anchorage-tvOS.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - D1FAA84F3A1136CA33855DDFC5893786 /* Debug */ = { + D44BFBEFC1D59FC6B59562DF1B3BB33D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E5D1AFC9A083FEB4541905EAEBB51F9E /* Then-iOS.xcconfig */; + baseConfigurationReference = DEAD4FE56B631DE55CE14FF9D7994217 /* Then-tvOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1809,27 +1811,28 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Then-iOS/Then-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Then-iOS/Then-iOS-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Then-tvOS/Then-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Then-tvOS/Then-tvOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Then-iOS/Then-iOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/Then-tvOS/Then-tvOS.modulemap"; PRODUCT_MODULE_NAME = Then; PRODUCT_NAME = Then; - SDKROOT = iphoneos; + SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 4.2; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; D4A1100690AE39CB57CE2890C2CD98DF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E8AA5EA59DCC099639598C34598EC6A5 /* Pods-AnchorageTests-iOS.debug.xcconfig */; + baseConfigurationReference = FE3816F35938419CB96E6AF3B535B3C2 /* Pods-AnchorageTests-iOS.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; @@ -1893,11 +1896,10 @@ }; name = Debug; }; - D93AC901EA9DF937EF371495B10FDA7C /* Release */ = { + D7E84157AA7C2AC1D0D4D0B3AEC60A69 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FC955AA8B2C7C53E6C3B0D1E7933206 /* Pods-AnchorageDemo.release.xcconfig */; + baseConfigurationReference = C2B3D54BEFB82791E10C2BF6C0BE4934 /* SnapshotTesting-tvOS.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1907,32 +1909,30 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; + MODULEMAP_FILE = "Target Support Files/SnapshotTesting-tvOS/SnapshotTesting-tvOS.modulemap"; + PRODUCT_MODULE_NAME = SnapshotTesting; + PRODUCT_NAME = SnapshotTesting; + SDKROOT = appletvos; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - DF56CED98C79C6C46AAE670348F4AF9F /* Release */ = { + D93AC901EA9DF937EF371495B10FDA7C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C21F7BEB8D545C8A168013EA143C9DEB /* Pods-AnchorageTests-iOS.release.xcconfig */; + baseConfigurationReference = 258D051971A0E9F254C7C8B47EBA3142 /* Pods-AnchorageDemo.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1942,12 +1942,12 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -1962,11 +1962,12 @@ }; name = Release; }; - E05BB949050323CBCEBA0675858620E9 /* Debug */ = { + DF56CED98C79C6C46AAE670348F4AF9F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 874F07DD58B171606A8661D56E60D4E2 /* Pods-Anchorage-tvOS.debug.xcconfig */; + baseConfigurationReference = 4EE85B74BD13DEAC728908878E180A01 /* Pods-AnchorageTests-iOS.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1976,37 +1977,29 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = appletvos; + SDKROOT = iphoneos; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0490C11DCFFB81CB01368158A1F2EDEA /* Build configuration list for PBXNativeTarget "SnapshotTesting-tvOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C10292C222B4240ECF92A50E3D345733 /* Debug */, - 077272E82785B970E3D1F9342C22617E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 0ECA114058DA1C5E9E41F61E9C7DFE9B /* Build configuration list for PBXNativeTarget "Then-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -2025,15 +2018,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 300EB7003C2358EC6D5ACCAAC111E72D /* Build configuration list for PBXNativeTarget "Then-tvOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 66289DBB5AC998DCB610B41823326F03 /* Debug */, - 7BFCE3D2D2466D67BD2BEA053B1130FB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 42B1D356F68F550AD737F7A7D9CAE18A /* Build configuration list for PBXNativeTarget "Pods-AnchorageTests-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -2061,15 +2045,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5BA47F71E207AD9DB8CF000D11556019 /* Build configuration list for PBXNativeTarget "Pods-Anchorage-tvOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - E05BB949050323CBCEBA0675858620E9 /* Debug */, - CE045BDD8957449796D395D5E71BDB5F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 5EF7E32B342BA6801B12BC51F1861649 /* Build configuration list for PBXNativeTarget "Pods-AnchorageTests-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -2097,6 +2072,33 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 82A1D83DCF9CC3CE9FF2D00213EE78C3 /* Build configuration list for PBXNativeTarget "Then-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BB2A6D3BD373DCB45EE4B4F721670747 /* Debug */, + D44BFBEFC1D59FC6B59562DF1B3BB33D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A68420585FAEA259BC140ABE9735E498 /* Build configuration list for PBXNativeTarget "Pods-AnchorageTests-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 64534EDC46F69EF744F33EC56D459126 /* Debug */, + 5FA829E7203A66EB853A3896A7EB82AB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F3DC1272C62DC8645DA446ADE99F26E9 /* Build configuration list for PBXNativeTarget "SnapshotTesting-tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 232FB190822BCD5B7172838B94B5394C /* Debug */, + D7E84157AA7C2AC1D0D4D0B3AEC60A69 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-dummy.m b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-dummy.m deleted file mode 100644 index cc71a14..0000000 --- a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_Anchorage_tvOS : NSObject -@end -@implementation PodsDummy_Pods_Anchorage_tvOS -@end diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.modulemap b/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.modulemap deleted file mode 100644 index 8fd5a35..0000000 --- a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_Anchorage_tvOS { - umbrella header "Pods-Anchorage-tvOS-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-Info.plist b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-Info.plist similarity index 100% rename from Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-Info.plist rename to Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-Info.plist diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.markdown b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-acknowledgements.markdown similarity index 100% rename from Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.markdown rename to Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-acknowledgements.markdown diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.plist b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-acknowledgements.plist similarity index 100% rename from Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-acknowledgements.plist rename to Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-acknowledgements.plist diff --git a/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-dummy.m b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-dummy.m new file mode 100644 index 0000000..b0c7981 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_AnchorageTests_tvOS : NSObject +@end +@implementation PodsDummy_Pods_AnchorageTests_tvOS +@end diff --git a/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-frameworks.sh b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-frameworks.sh new file mode 100755 index 0000000..40cbbf7 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-frameworks.sh @@ -0,0 +1,165 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=1 +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SnapshotTesting-tvOS/SnapshotTesting.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Then-tvOS/Then.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/SnapshotTesting-tvOS/SnapshotTesting.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Then-tvOS/Then.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-umbrella.h b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-umbrella.h similarity index 57% rename from Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-umbrella.h rename to Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-umbrella.h index 1eb130c..1580d7a 100644 --- a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS-umbrella.h +++ b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS-umbrella.h @@ -11,6 +11,6 @@ #endif -FOUNDATION_EXPORT double Pods_Anchorage_tvOSVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_Anchorage_tvOSVersionString[]; +FOUNDATION_EXPORT double Pods_AnchorageTests_tvOSVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_AnchorageTests_tvOSVersionString[]; diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.release.xcconfig b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.debug.xcconfig similarity index 91% rename from Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.release.xcconfig rename to Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.debug.xcconfig index 8bdaddd..56041d1 100644 --- a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.release.xcconfig +++ b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.debug.xcconfig @@ -1,7 +1,8 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/Then-tvOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-tvOS/SnapshotTesting.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Then-tvOS/Then.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks' +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' OTHER_LDFLAGS = $(inherited) -framework "SnapshotTesting" -framework "Then" -framework "XCTest" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} diff --git a/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.modulemap b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.modulemap new file mode 100644 index 0000000..345a3a0 --- /dev/null +++ b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.modulemap @@ -0,0 +1,6 @@ +framework module Pods_AnchorageTests_tvOS { + umbrella header "Pods-AnchorageTests-tvOS-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.debug.xcconfig b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.release.xcconfig similarity index 91% rename from Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.debug.xcconfig rename to Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.release.xcconfig index 8bdaddd..56041d1 100644 --- a/Pods/Target Support Files/Pods-Anchorage-tvOS/Pods-Anchorage-tvOS.debug.xcconfig +++ b/Pods/Target Support Files/Pods-AnchorageTests-tvOS/Pods-AnchorageTests-tvOS.release.xcconfig @@ -1,7 +1,8 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/Then-tvOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting-tvOS/SnapshotTesting.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Then-tvOS/Then.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' '@executable_path/../../Frameworks' +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' OTHER_LDFLAGS = $(inherited) -framework "SnapshotTesting" -framework "Then" -framework "XCTest" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} From 570ae7d6e952779e9a174b22082f04088e4bdcb2 Mon Sep 17 00:00:00 2001 From: Brian Semiglia Date: Fri, 15 Feb 2019 13:43:58 -0500 Subject: [PATCH 4/6] Enables MacOS tests. --- Anchorage.xcodeproj/project.pbxproj | 2 + AnchorageTests/AnchorageTests.swift | 215 +++++++++++++++++----------- 2 files changed, 133 insertions(+), 84 deletions(-) diff --git a/Anchorage.xcodeproj/project.pbxproj b/Anchorage.xcodeproj/project.pbxproj index 3c8aea1..50b05cd 100644 --- a/Anchorage.xcodeproj/project.pbxproj +++ b/Anchorage.xcodeproj/project.pbxproj @@ -116,6 +116,7 @@ 4471E81EED984DA2A5AB656F /* Pods_AnchorageTests_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AnchorageTests_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4A621F436D7AC1F311660FAA /* Pods-AnchorageDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageDemo.debug.xcconfig"; path = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.debug.xcconfig"; sourceTree = ""; }; 54C143946A2174E4D55E7431 /* Pods-AnchorageTests-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageTests-iOS.debug.xcconfig"; path = "Target Support Files/Pods-AnchorageTests-iOS/Pods-AnchorageTests-iOS.debug.xcconfig"; sourceTree = ""; }; + 5BD0245C22173CA9009E5C14 /* __Snapshots__ */ = {isa = PBXFileReference; lastKnownFileType = folder; path = __Snapshots__; sourceTree = ""; }; 6571D2D39B6C49930B877172 /* Pods-AnchorageDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AnchorageDemo.release.xcconfig"; path = "Target Support Files/Pods-AnchorageDemo/Pods-AnchorageDemo.release.xcconfig"; sourceTree = ""; }; 7A39D62E1EB53E1100BDE9C0 /* AnchorageTests-iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "AnchorageTests-iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 7A39D6301EB53E1100BDE9C0 /* AnchorageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnchorageTests.swift; sourceTree = ""; }; @@ -268,6 +269,7 @@ 7A39D62F1EB53E1100BDE9C0 /* AnchorageTests */ = { isa = PBXGroup; children = ( + 5BD0245C22173CA9009E5C14 /* __Snapshots__ */, 7A39D6301EB53E1100BDE9C0 /* AnchorageTests.swift */, 7A39D6321EB53E1100BDE9C0 /* Info.plist */, ); diff --git a/AnchorageTests/AnchorageTests.swift b/AnchorageTests/AnchorageTests.swift index 932380d..846f02f 100644 --- a/AnchorageTests/AnchorageTests.swift +++ b/AnchorageTests/AnchorageTests.swift @@ -35,7 +35,8 @@ import XCTest #if os(macOS) typealias TestView = NSView - typealias TestWindow = NSWindow + typealias TestWindow = HomogenizedWindow + typealias TestColor = NSColor #if swift(>=4.0) let TestPriorityRequired = NSLayoutConstraint.Priority.required @@ -49,7 +50,8 @@ import XCTest #else typealias TestView = UIView - typealias TestWindow = UIWindow + typealias TestWindow = HomogenizedWindow + typealias TestColor = UIColor #if swift(>=4.0) let TestPriorityRequired = UILayoutPriority.required @@ -66,6 +68,51 @@ let cgEpsilon: CGFloat = 0.00001 let fEpsilon: Float = 0.00001 let dEpsilon: Double = 0.00001 +protocol Colorable { + var backgroundColor: TestColor? { get set } +} + +#if os(macOS) +extension NSView: Colorable { + var backgroundColor: TestColor? { + get { + return layer?.backgroundColor.flatMap(NSColor.init) + } + set { + wantsLayer = true + layer?.backgroundColor = newValue?.cgColor + } + } +} +final class HomogenizedWindow: NSWindow { + override var frame: NSRect { + get { return super.frame } + set { setFrame(newValue, display: true) } + } + var isHidden = false +} +extension Snapshotting where Value == NSWindow, Format == NSImage { + public static let image: Snapshotting = + Snapshotting.image.pullback { window in + window.contentView! + } +} +#elseif os(iOS) || os(tvOS) +extension UIView: Colorable {} +final class HomogenizedWindow: UIWindow { + let contentView: UIView! = UIView() + override init(frame: CGRect) { + super.init(frame: frame) + addSubview(contentView) + contentView.frame = bounds + contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + } + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} +#endif + class AnchorageTests: XCTestCase { let view1 = TestView().then { @@ -98,7 +145,7 @@ class AnchorageTests: XCTestCase { } func testBasicEqualitySnapshot() { - view1.edgeAnchors == window.edgeAnchors + view1.edgeAnchors == window.contentView!.edgeAnchors assertSnapshot( matching: window, as: .image, @@ -120,10 +167,10 @@ class AnchorageTests: XCTestCase { } func testBasicLessThanSnapshot() { - view1.topAnchor == window.topAnchor - view1.leadingAnchor == window.leadingAnchor - view1.trailingAnchor == window.trailingAnchor - view1.bottomAnchor <= window.bottomAnchor + view1.topAnchor == window.contentView!.topAnchor + view1.leadingAnchor == window.contentView!.leadingAnchor + view1.trailingAnchor == window.contentView!.trailingAnchor + view1.bottomAnchor <= window.contentView!.bottomAnchor assertSnapshot( matching: window, as: .image, @@ -147,7 +194,7 @@ class AnchorageTests: XCTestCase { func testBasicGreaterThanSnapshot() { view1.widthAnchor == 50 view1.heightAnchor == 50 - view1.edgeAnchors >= window.edgeAnchors + view1.edgeAnchors >= window.contentView!.edgeAnchors assertSnapshot( matching: window, as: .image, @@ -171,10 +218,10 @@ class AnchorageTests: XCTestCase { func testEqualityWithOffsetSnapshot() { view2.widthAnchor == 50 view2.heightAnchor == 50 - view2.centerAnchors == window.centerAnchors + view2.centerAnchors == window.contentView!.centerAnchors view1.widthAnchor == view2.widthAnchor + 50 view1.heightAnchor == view2.heightAnchor + 50 - view1.centerAnchors == window.centerAnchors + view1.centerAnchors == window.contentView!.centerAnchors assertSnapshot( matching: window, as: .image, @@ -198,10 +245,10 @@ class AnchorageTests: XCTestCase { func testEqualityWithMultiplierSnapshot() { view2.widthAnchor == 50 view2.heightAnchor == 50 - view2.centerAnchors == window.centerAnchors + view2.centerAnchors == window.contentView!.centerAnchors view1.widthAnchor == view2.widthAnchor * 2 view1.heightAnchor == view2.heightAnchor * 2 - view1.centerAnchors == window.centerAnchors + view1.centerAnchors == window.contentView!.centerAnchors assertSnapshot( matching: window, as: .image, @@ -223,10 +270,10 @@ class AnchorageTests: XCTestCase { } func testAxisAnchorEqualityWithMultiplierSnapshot() { - view1.topAnchor == window.topAnchor - view1.bottomAnchor == window.bottomAnchor - view1.leadingAnchor == window.leadingAnchor - view1.trailingAnchor == window.trailingAnchor * 0.5 + view1.topAnchor == window.contentView!.topAnchor + view1.bottomAnchor == window.contentView!.bottomAnchor + view1.leadingAnchor == window.contentView!.leadingAnchor + view1.trailingAnchor == window.contentView!.trailingAnchor * 0.5 assertSnapshot( matching: window, as: .image, @@ -261,10 +308,10 @@ class AnchorageTests: XCTestCase { } func testAxisAnchorEqualityWithOffsetAndMultiplierSnapshot() { - view1.topAnchor == window.topAnchor - view1.bottomAnchor == window.bottomAnchor - view1.leadingAnchor == window.leadingAnchor - view1.trailingAnchor == (window.trailingAnchor + 50) * 0.25 + view1.topAnchor == window.contentView!.topAnchor + view1.bottomAnchor == window.contentView!.bottomAnchor + view1.leadingAnchor == window.contentView!.leadingAnchor + view1.trailingAnchor == (window.contentView!.trailingAnchor + 50) * 0.25 assertSnapshot( matching: window, as: .image, @@ -286,14 +333,14 @@ class AnchorageTests: XCTestCase { } func testEqualityWithPriorityConstantSnapshot() { - view1.topAnchor == window.topAnchor - view1.leadingAnchor == window.leadingAnchor - view1.bottomAnchor == window.bottomAnchor - view1.widthAnchor == window.widthAnchor ~ .high - view2.topAnchor == window.topAnchor - view2.trailingAnchor == window.trailingAnchor - view2.bottomAnchor == window.bottomAnchor - view2.widthAnchor == window.widthAnchor ~ .low + view1.topAnchor == window.contentView!.topAnchor + view1.leadingAnchor == window.contentView!.leadingAnchor + view1.bottomAnchor == window.contentView!.bottomAnchor + view1.widthAnchor == window.contentView!.widthAnchor ~ .high + view2.topAnchor == window.contentView!.topAnchor + view2.trailingAnchor == window.contentView!.trailingAnchor + view2.bottomAnchor == window.contentView!.bottomAnchor + view2.widthAnchor == window.contentView!.widthAnchor ~ .low view1.trailingAnchor == view2.leadingAnchor assertSnapshot( matching: window, @@ -316,14 +363,14 @@ class AnchorageTests: XCTestCase { } func testEqualityWithPriorityLiteralSnapshot() { - view1.topAnchor == window.topAnchor - view1.leadingAnchor == window.leadingAnchor - view1.bottomAnchor == window.bottomAnchor - view1.widthAnchor == window.widthAnchor ~ 750 - view2.topAnchor == window.topAnchor - view2.trailingAnchor == window.trailingAnchor - view2.bottomAnchor == window.bottomAnchor - view2.widthAnchor == window.widthAnchor ~ 250 + view1.topAnchor == window.contentView!.topAnchor + view1.leadingAnchor == window.contentView!.leadingAnchor + view1.bottomAnchor == window.contentView!.bottomAnchor + view1.widthAnchor == window.contentView!.widthAnchor ~ 750 + view2.topAnchor == window.contentView!.topAnchor + view2.trailingAnchor == window.contentView!.trailingAnchor + view2.bottomAnchor == window.contentView!.bottomAnchor + view2.widthAnchor == window.contentView!.widthAnchor ~ 250 view1.trailingAnchor == view2.leadingAnchor assertSnapshot( matching: window, @@ -346,14 +393,14 @@ class AnchorageTests: XCTestCase { } func testEqualityWithPriorityConstantMathSnapshot() { - view1.topAnchor == window.topAnchor - view1.leadingAnchor == window.leadingAnchor - view1.bottomAnchor == window.bottomAnchor - view1.widthAnchor == window.widthAnchor ~ .high - view2.topAnchor == window.topAnchor - view2.trailingAnchor == window.trailingAnchor - view2.bottomAnchor == window.bottomAnchor - view2.widthAnchor == window.widthAnchor ~ .high - 1 + view1.topAnchor == window.contentView!.topAnchor + view1.leadingAnchor == window.contentView!.leadingAnchor + view1.bottomAnchor == window.contentView!.bottomAnchor + view1.widthAnchor == window.contentView!.widthAnchor ~ .high + view2.topAnchor == window.contentView!.topAnchor + view2.trailingAnchor == window.contentView!.trailingAnchor + view2.bottomAnchor == window.contentView!.bottomAnchor + view2.widthAnchor == window.contentView!.widthAnchor ~ .high - 1 view1.trailingAnchor == view2.leadingAnchor assertSnapshot( matching: window, @@ -376,14 +423,14 @@ class AnchorageTests: XCTestCase { } func testEqualityWithPriorityLiteralMathSnapshot() { - view1.topAnchor == window.topAnchor - view1.leadingAnchor == window.leadingAnchor - view1.bottomAnchor == window.bottomAnchor - view1.widthAnchor == window.widthAnchor ~ .high - view2.topAnchor == window.topAnchor - view2.trailingAnchor == window.trailingAnchor - view2.bottomAnchor == window.bottomAnchor - view2.widthAnchor == window.widthAnchor ~ Priority(750 - 1) + view1.topAnchor == window.contentView!.topAnchor + view1.leadingAnchor == window.contentView!.leadingAnchor + view1.bottomAnchor == window.contentView!.bottomAnchor + view1.widthAnchor == window.contentView!.widthAnchor ~ .high + view2.topAnchor == window.contentView!.topAnchor + view2.trailingAnchor == window.contentView!.trailingAnchor + view2.bottomAnchor == window.contentView!.bottomAnchor + view2.widthAnchor == window.contentView!.widthAnchor ~ Priority(750 - 1) view1.trailingAnchor == view2.leadingAnchor assertSnapshot( matching: window, @@ -406,14 +453,14 @@ class AnchorageTests: XCTestCase { } func testEqualityWithOffsetAndPriorityMathSnapshot() { - view1.topAnchor == window.topAnchor - view1.leadingAnchor == window.leadingAnchor - view1.bottomAnchor == window.bottomAnchor - view1.widthAnchor == window.widthAnchor - 100 ~ .high + 1 - view2.topAnchor == window.topAnchor - view2.trailingAnchor == window.trailingAnchor - view2.bottomAnchor == window.bottomAnchor - view2.widthAnchor == window.widthAnchor ~ .high + view1.topAnchor == window.contentView!.topAnchor + view1.leadingAnchor == window.contentView!.leadingAnchor + view1.bottomAnchor == window.contentView!.bottomAnchor + view1.widthAnchor == window.contentView!.widthAnchor - 100 ~ .high + 1 + view2.topAnchor == window.contentView!.topAnchor + view2.trailingAnchor == window.contentView!.trailingAnchor + view2.bottomAnchor == window.contentView!.bottomAnchor + view2.widthAnchor == window.contentView!.widthAnchor ~ .high view1.trailingAnchor == view2.leadingAnchor assertSnapshot( matching: window, @@ -436,14 +483,14 @@ class AnchorageTests: XCTestCase { } func testEqualityWithOffsetAndMultiplierAndPriorityMathSnapshot() { - view1.topAnchor == window.topAnchor - view1.leadingAnchor == window.leadingAnchor - view1.bottomAnchor == window.bottomAnchor - view1.widthAnchor == (window.widthAnchor + 50) / 4 ~ .high + 1 - view2.topAnchor == window.topAnchor - view2.trailingAnchor == window.trailingAnchor - view2.bottomAnchor == window.bottomAnchor - view2.widthAnchor == window.widthAnchor ~ .high + view1.topAnchor == window.contentView!.topAnchor + view1.leadingAnchor == window.contentView!.leadingAnchor + view1.bottomAnchor == window.contentView!.bottomAnchor + view1.widthAnchor == (window.contentView!.widthAnchor + 50) / 4 ~ .high + 1 + view2.topAnchor == window.contentView!.topAnchor + view2.trailingAnchor == window.contentView!.trailingAnchor + view2.bottomAnchor == window.contentView!.bottomAnchor + view2.widthAnchor == window.contentView!.widthAnchor ~ .high view1.trailingAnchor == view2.leadingAnchor assertSnapshot( matching: window, @@ -468,7 +515,7 @@ class AnchorageTests: XCTestCase { func testCenterAnchorsSnapshot() { view2.widthAnchor == 50 view2.heightAnchor == 50 - view2.centerAnchors == window.centerAnchors + view2.centerAnchors == window.contentView!.centerAnchors view1.widthAnchor == view2.widthAnchor * 2 view1.heightAnchor == view2.heightAnchor * 2 view1.centerAnchors == view2.centerAnchors @@ -508,7 +555,7 @@ class AnchorageTests: XCTestCase { func testCenterAnchorsWithOffsetSnapshot() { view2.widthAnchor == 50 view2.heightAnchor == 50 - view2.centerAnchors == window.centerAnchors + view2.centerAnchors == window.contentView!.centerAnchors view1.widthAnchor == view2.widthAnchor * 2 view1.heightAnchor == view2.heightAnchor * 2 view1.centerAnchors == view2.centerAnchors + 25 @@ -522,10 +569,10 @@ class AnchorageTests: XCTestCase { func testCenterAnchorsWithOffsetAndPrioritySnapshot() { view2.widthAnchor == 50 view2.heightAnchor == 50 - view2.centerAnchors == window.centerAnchors + view2.centerAnchors == window.contentView!.centerAnchors view1.widthAnchor == view2.widthAnchor * 2 view1.heightAnchor == view2.heightAnchor * 2 - view1.bottomAnchor == window.bottomAnchor ~ .low + view1.bottomAnchor == window.contentView!.bottomAnchor ~ .low view1.centerAnchors == view2.centerAnchors + 25 ~ .low + 1 assertSnapshot( matching: window, @@ -562,7 +609,7 @@ class AnchorageTests: XCTestCase { func testHorizontalAnchorsSnapshot() { view1.heightAnchor == 50 - view1.horizontalAnchors == window.horizontalAnchors + view1.horizontalAnchors == window.contentView!.horizontalAnchors assertSnapshot( matching: window, as: .image, @@ -598,7 +645,7 @@ class AnchorageTests: XCTestCase { func testVerticalAnchorsSnapshot() { view1.widthAnchor == 50 - view1.verticalAnchors == window.verticalAnchors + view1.verticalAnchors == window.contentView!.verticalAnchors assertSnapshot( matching: window, as: .image, @@ -633,7 +680,7 @@ class AnchorageTests: XCTestCase { } func testSizeAnchorsSnapshot() { - view1.sizeAnchors == window.sizeAnchors + view1.sizeAnchors == window.contentView!.sizeAnchors assertSnapshot( matching: window, as: .image, @@ -703,7 +750,7 @@ class AnchorageTests: XCTestCase { } func testEdgeAnchorsSnapshot() { - view1.edgeAnchors == window.edgeAnchors + view1.edgeAnchors == window.contentView!.edgeAnchors assertSnapshot( matching: window, as: .image, @@ -777,7 +824,7 @@ class AnchorageTests: XCTestCase { } func testEdgeAnchorsWithInsetsSnapshot() { - view1.edgeAnchors == window.edgeAnchors + 50 + view1.edgeAnchors == window.contentView!.edgeAnchors + 50 assertSnapshot( matching: window, as: .image, @@ -836,9 +883,9 @@ class AnchorageTests: XCTestCase { } func testInactiveBatchConstraintsSnapshot() { - view1.sizeAnchors == window.sizeAnchors - 100 + view1.sizeAnchors == window.contentView!.sizeAnchors - 100 _ = Anchorage.batch(active: false) { - view2.sizeAnchors == window.sizeAnchors + view2.sizeAnchors == window.contentView!.sizeAnchors } assertSnapshot( matching: window, @@ -879,7 +926,7 @@ class AnchorageTests: XCTestCase { func testActiveBatchConstraintsSnapshot() { _ = Anchorage.batch(active: true) { - view1.sizeAnchors == window.sizeAnchors - 100 + view1.sizeAnchors == window.contentView!.sizeAnchors - 100 } assertSnapshot( matching: window, @@ -920,11 +967,11 @@ class AnchorageTests: XCTestCase { func testNestedBatchConstraintsSnapshots() { _ = Anchorage.batch(active: true) { - view1.sizeAnchors == window.sizeAnchors - 100 - view1.centerAnchors == window.centerAnchors + view1.sizeAnchors == window.contentView!.sizeAnchors - 100 + view1.centerAnchors == window.contentView!.centerAnchors _ = Anchorage.batch(active: true) { - view2.sizeAnchors == window.sizeAnchors - 150 - view2.centerAnchors == window.centerAnchors + view2.sizeAnchors == window.contentView!.sizeAnchors - 150 + view2.centerAnchors == window.contentView!.centerAnchors } } assertSnapshot( From 2c4f8be209e5ded479a4dd5e8dc4e3b8fdcd2875 Mon Sep 17 00:00:00 2001 From: Brian Semiglia Date: Fri, 15 Feb 2019 13:50:15 -0500 Subject: [PATCH 5/6] Uses content view on non-macOS. --- AnchorageTests/AnchorageTests.swift | 5 ----- 1 file changed, 5 deletions(-) diff --git a/AnchorageTests/AnchorageTests.swift b/AnchorageTests/AnchorageTests.swift index 846f02f..db81673 100644 --- a/AnchorageTests/AnchorageTests.swift +++ b/AnchorageTests/AnchorageTests.swift @@ -135,13 +135,8 @@ class AnchorageTests: XCTestCase { } override func setUp() { -#if os(macOS) window.contentView!.addSubview(view1) window.contentView!.addSubview(view2) -#else - window.addSubview(view1) - window.addSubview(view2) -#endif } func testBasicEqualitySnapshot() { From 953fc11825775dac9c9d57ca2ad3968391841e74 Mon Sep 17 00:00:00 2001 From: Brian Semiglia Date: Fri, 15 Feb 2019 13:51:21 -0500 Subject: [PATCH 6/6] Removes record parameter in favor of default. --- AnchorageTests/AnchorageTests.swift | 75 ++++++++++------------------- 1 file changed, 25 insertions(+), 50 deletions(-) diff --git a/AnchorageTests/AnchorageTests.swift b/AnchorageTests/AnchorageTests.swift index db81673..5794d81 100644 --- a/AnchorageTests/AnchorageTests.swift +++ b/AnchorageTests/AnchorageTests.swift @@ -143,8 +143,7 @@ class AnchorageTests: XCTestCase { view1.edgeAnchors == window.contentView!.edgeAnchors assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -168,8 +167,7 @@ class AnchorageTests: XCTestCase { view1.bottomAnchor <= window.contentView!.bottomAnchor assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -192,8 +190,7 @@ class AnchorageTests: XCTestCase { view1.edgeAnchors >= window.contentView!.edgeAnchors assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -219,8 +216,7 @@ class AnchorageTests: XCTestCase { view1.centerAnchors == window.contentView!.centerAnchors assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -246,8 +242,7 @@ class AnchorageTests: XCTestCase { view1.centerAnchors == window.contentView!.centerAnchors assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -271,8 +266,7 @@ class AnchorageTests: XCTestCase { view1.trailingAnchor == window.contentView!.trailingAnchor * 0.5 assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -309,8 +303,7 @@ class AnchorageTests: XCTestCase { view1.trailingAnchor == (window.contentView!.trailingAnchor + 50) * 0.25 assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -339,8 +332,7 @@ class AnchorageTests: XCTestCase { view1.trailingAnchor == view2.leadingAnchor assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -369,8 +361,7 @@ class AnchorageTests: XCTestCase { view1.trailingAnchor == view2.leadingAnchor assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -399,8 +390,7 @@ class AnchorageTests: XCTestCase { view1.trailingAnchor == view2.leadingAnchor assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -429,8 +419,7 @@ class AnchorageTests: XCTestCase { view1.trailingAnchor == view2.leadingAnchor assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -459,8 +448,7 @@ class AnchorageTests: XCTestCase { view1.trailingAnchor == view2.leadingAnchor assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -489,8 +477,7 @@ class AnchorageTests: XCTestCase { view1.trailingAnchor == view2.leadingAnchor assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -516,8 +503,7 @@ class AnchorageTests: XCTestCase { view1.centerAnchors == view2.centerAnchors assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -556,8 +542,7 @@ class AnchorageTests: XCTestCase { view1.centerAnchors == view2.centerAnchors + 25 assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -571,8 +556,7 @@ class AnchorageTests: XCTestCase { view1.centerAnchors == view2.centerAnchors + 25 ~ .low + 1 assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -607,8 +591,7 @@ class AnchorageTests: XCTestCase { view1.horizontalAnchors == window.contentView!.horizontalAnchors assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -643,8 +626,7 @@ class AnchorageTests: XCTestCase { view1.verticalAnchors == window.contentView!.verticalAnchors assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -678,8 +660,7 @@ class AnchorageTests: XCTestCase { view1.sizeAnchors == window.contentView!.sizeAnchors assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -713,8 +694,7 @@ class AnchorageTests: XCTestCase { view1.sizeAnchors == CGSize(width: 100, height: 100) assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -748,8 +728,7 @@ class AnchorageTests: XCTestCase { view1.edgeAnchors == window.contentView!.edgeAnchors assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -822,8 +801,7 @@ class AnchorageTests: XCTestCase { view1.edgeAnchors == window.contentView!.edgeAnchors + 50 assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -884,8 +862,7 @@ class AnchorageTests: XCTestCase { } assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -925,8 +902,7 @@ class AnchorageTests: XCTestCase { } assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) } @@ -971,8 +947,7 @@ class AnchorageTests: XCTestCase { } assertSnapshot( matching: window, - as: .image, - record: false + as: .image ) }