⬆️ :: Update dev-dependencies

This commit is contained in:
Felix Mau
2020-07-23 22:22:34 +02:00
parent 75593d9d14
commit 6378fbda2b
24 changed files with 880 additions and 424 deletions
+1 -1
View File
@@ -18,7 +18,7 @@ target 'GradientLoadingBar_Example' do
inherit! :search_paths
# Pods for snapshot testing.
pod 'SnapshotTesting', '~> 1.6'
pod 'SnapshotTesting', '~> 1.7', :inhibit_warnings => true
end
post_install do |installer|
+6 -6
View File
@@ -2,13 +2,13 @@ PODS:
- GradientLoadingBar (2.1.0):
- LightweightObservable (~> 2.1)
- LightweightObservable (2.1.1)
- SnapshotTesting (1.7.2)
- SwiftFormat/CLI (0.44.9)
- SnapshotTesting (1.8.1)
- SwiftFormat/CLI (0.44.17)
- SwiftLint (0.39.2)
DEPENDENCIES:
- GradientLoadingBar (from `../`)
- SnapshotTesting (~> 1.6)
- SnapshotTesting (~> 1.7)
- SwiftFormat/CLI (~> 0.40)
- SwiftLint (~> 0.36)
@@ -26,10 +26,10 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
GradientLoadingBar: 9992888de03a77c1e9364c087aefa1d9c3860ef7
LightweightObservable: 52abe2a01c8273921b1f66cd66526eb3328ca35a
SnapshotTesting: 8caa6661fea7c8019d5b46de77c16bab99c36c5c
SwiftFormat: e415b539c50e7a956a44b023544c9846c0c037d7
SnapshotTesting: 0bf562bd74d3e9d053cd8f1123bd7b8913304df4
SwiftFormat: 3b5caa6389b2b9adbc00e133b3ccc8c6e687a6a4
SwiftLint: 22ccbbe3b8008684be5955693bab135e0ed6a447
PODFILE CHECKSUM: f56a08d884831d712155be32578b7364270d0af0
PODFILE CHECKSUM: b55c1a12e9b2403a48a53c11f3f8659e36a20449
COCOAPODS: 1.9.3
+6 -6
View File
@@ -2,13 +2,13 @@ PODS:
- GradientLoadingBar (2.1.0):
- LightweightObservable (~> 2.1)
- LightweightObservable (2.1.1)
- SnapshotTesting (1.7.2)
- SwiftFormat/CLI (0.44.9)
- SnapshotTesting (1.8.1)
- SwiftFormat/CLI (0.44.17)
- SwiftLint (0.39.2)
DEPENDENCIES:
- GradientLoadingBar (from `../`)
- SnapshotTesting (~> 1.6)
- SnapshotTesting (~> 1.7)
- SwiftFormat/CLI (~> 0.40)
- SwiftLint (~> 0.36)
@@ -26,10 +26,10 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
GradientLoadingBar: 9992888de03a77c1e9364c087aefa1d9c3860ef7
LightweightObservable: 52abe2a01c8273921b1f66cd66526eb3328ca35a
SnapshotTesting: 8caa6661fea7c8019d5b46de77c16bab99c36c5c
SwiftFormat: e415b539c50e7a956a44b023544c9846c0c037d7
SnapshotTesting: 0bf562bd74d3e9d053cd8f1123bd7b8913304df4
SwiftFormat: 3b5caa6389b2b9adbc00e133b3ccc8c6e687a6a4
SwiftLint: 22ccbbe3b8008684be5955693bab135e0ed6a447
PODFILE CHECKSUM: f56a08d884831d712155be32578b7364270d0af0
PODFILE CHECKSUM: b55c1a12e9b2403a48a53c11f3f8659e36a20449
COCOAPODS: 1.9.3
+359 -343
View File
@@ -28,66 +28,70 @@
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
01757E29DF92738C1D5D0528F1EB4824 /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC1FD5A53165BF4293473D170AD9995E /* View.swift */; };
0FB8760A1D5B307CF301AD647F301823 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648F93ECED9C2684CDB6A60E6BE8DEDF /* Disposable.swift */; };
10A212D203E4E77F85BF70F9B14BAA19 /* LightweightObservable-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CE49E78400E3A6E986194452C2A1611 /* LightweightObservable-dummy.m */; };
11F2134521037184F745C9010217B501 /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C7044ABF6219E06138EBA038827408 /* Description.swift */; };
14CC16A84D0558FF9DC6927E1BA82F02 /* Any.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7497F950FEA4E6B772B2F6042432723A /* Any.swift */; };
02EEAFC471B5BFF3DA9CA724B77ADAD2 /* SpriteKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2F50C5C54E7399F17909BE225B4138 /* SpriteKit.swift */; };
07BCE427364C14A3924FA6E5821BDFE9 /* CALayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB9F808A784ECD647D041584F3BAA5CE /* CALayer.swift */; };
0CA33262BEBA6D7236BAC24028199D0E /* CaseIterable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CF7FC13E714D014C72F1F9E6DE7D638 /* CaseIterable.swift */; };
0FB8760A1D5B307CF301AD647F301823 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C79828C9BB99118F3A15AA46899BB2C /* Disposable.swift */; };
10A212D203E4E77F85BF70F9B14BAA19 /* LightweightObservable-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 263236C693550DBBEF6397B3FDA0D45E /* LightweightObservable-dummy.m */; };
10B99D1C93DD69D92FE05AAC7CB287F8 /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16BF13A00E8108482D617C075B3D818E /* UIView.swift */; };
10D5D6DB215978A01F67896D0FFF68A2 /* SnapshotTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19955C276F98759888D7BDA3A77853F6 /* SnapshotTestCase.swift */; };
186A5E5FEDE8A21A9ED58AFC7FF9F447 /* GradientLoadingBar-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ED406C1723EE2AB785C72BF3A291751 /* GradientLoadingBar-dummy.m */; };
18ED84EFAF015095FCCF61A8E494F325 /* AssertSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E46234BCB7A6CF5AE3ECC8C30C3786B /* AssertSnapshot.swift */; };
1A1F20E176923FF03A0EAEA886703719 /* NSView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 743840C93216AFDAE6E14647264F5538 /* NSView.swift */; };
2371CFDF095282B1D6935C36C81E46FC /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4748F84A87672B2B8A2332EBFAB30E20 /* UIImage.swift */; };
23B3D1B39D273F7B43BA45F255EDE5C5 /* CaseIterable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5F5BFF05569BBDD6EF0224F0E21090A /* CaseIterable.swift */; };
21E34ED04696645D47BC124C8457D643 /* SnapshotTesting-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C056D069A391AAB52B9DE80ACAC9A16A /* SnapshotTesting-dummy.m */; };
23ED8630B019A004BC2A54C98AB1399C /* Pods-GradientLoadingBar_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8194C4CB9E683FC366F48513ED1B1A9A /* Pods-GradientLoadingBar_Example-dummy.m */; };
29F37DB8A1899894CA87E8E8381E2C11 /* NSViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88FB982EE7911E38255A291A79DB742F /* NSViewController.swift */; };
3042C7F54B8C405DC85737D720333314 /* Observable+Equatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2D95A77154276FCFD49025721CF9191 /* Observable+Equatable.swift */; };
33432CD4B8F83F0C678B5C67CAF13414 /* String+SpecialCharacters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71B174D68683E03CEB909A118CABC01E /* String+SpecialCharacters.swift */; };
2569FB9BC55B0028DB8A0217666BD384 /* UIBezierPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C062ECECBEBFE0A98DCEB165BD9E3B7 /* UIBezierPath.swift */; };
2617BFC93AAED6FFAC6C298D2F4D97AE /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6C72CD77EA1E1E09526DAF3BF9031B /* UIViewController.swift */; };
2D0C0DD04AA4F9C170A4FBF0D3FD9626 /* Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FF123D0A3E653F02DCEB06FFA07E753 /* Wait.swift */; };
2DF2678C2AACDF82CB67532E7737AFA6 /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC7DE873CD81C2A6FE42262C00452A04 /* Diff.swift */; };
3042C7F54B8C405DC85737D720333314 /* Observable+Equatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 490274B00B3D32108B7DE40C5ACA9AAC /* Observable+Equatable.swift */; };
3995CE4B1EB94A759B5B4E8C4BEEFC67 /* GradientLoadingBar-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B57292CF383AEF209D4710AC1B19FF4 /* GradientLoadingBar-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
399CC742C4114C01FD1C883B9F6EC7D3 /* GradientActivityIndicatorViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D25A3B900085A32A5C7D3F385452EF0 /* GradientActivityIndicatorViewModel.swift */; };
3CB9028E156C3D9B3D83045793C3C39B /* NotchGradientLoadingBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F160F9FC6E13D4D1784FAAF102A897 /* NotchGradientLoadingBarController.swift */; };
440314FEC8EC90F865D8D20910989A69 /* Diffing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 485FFC9380094A5DB42D7366AEBF4780 /* Diffing.swift */; };
45E08C558558663C5FD79ABFF093501C /* Observable+KeyPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE3F100C4CDD54473EA2C6C753CE3F8 /* Observable+KeyPath.swift */; };
40AAD537046D8467746A0306A7D7DF94 /* SceneKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9917FE3936F34E3EF7BC9DA0C3761B65 /* SceneKit.swift */; };
45B49E668D4E0DF1D905F71246A30121 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AEC5FCC695B6A6E608B8371AA56C0CA /* Async.swift */; };
45E08C558558663C5FD79ABFF093501C /* Observable+KeyPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62FE7DCB58464A147A5F3106011B6B3D /* Observable+KeyPath.swift */; };
467861AB1D5B059E9FF3610407ECCED4 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F17E189033503650D8A495ADF1F369D /* Constants.swift */; };
46B2A4686C72C29C24576FC6FF56A7BE /* AssertInlineSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5FB89A60C9EF49D259A87FD0D200D3 /* AssertInlineSnapshot.swift */; };
4B5A5EBA97A912894C10D040B5A1225D /* Pods-GradientLoadingBar_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 132C18988D60EF85736C043D43C19E57 /* Pods-GradientLoadingBar_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
4CDC105622C39458E5795C079A7DA4ED /* Pods-GradientLoadingBar_SnapshotTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 172DF8516EF6D5757C3FBEF1C0CB52DC /* Pods-GradientLoadingBar_SnapshotTests-dummy.m */; };
4E5AA162D02372A80FABE033AD6BFFE6 /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0D466687F25CFEC98F95EC624033C2F /* Diff.swift */; };
4F03BBCA0FCF5903B46F72BE0BADDF34 /* SceneKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = E508BF65994F167606FC9180BE8059FC /* SceneKit.swift */; };
509FAAD85506B9E1BCCA50505B8C93DB /* SpriteKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = A70E7C9947EB80BF9BB160DBD905E4D1 /* SpriteKit.swift */; };
56B2D76BD27EAA69A1BED0113B7F9F51 /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B23DE3822DAC1D50D1BB94E49D51CAC1 /* UIView.swift */; };
57244463125C60529B7391F9FA3052AD /* Snapshotting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A0AC5F9D0359F62D9B6CFA7E28C270C /* Snapshotting.swift */; };
5C646D4C61F7CDC27DBCBD7960C48BB4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E59CE2F9522AE21F97AA29799051F00E /* Foundation.framework */; };
51D28EADB4924A8096EDCEFC3D74CAB8 /* Snapshotting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 839E953D87FD49848D29CC63C8C5F825 /* Snapshotting.swift */; };
56BC6C7B5E248296BAA214504F2AC607 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0965FCF94C6751E5F873995C0CC05032 /* XCTest.framework */; };
56CD2FF07A0AFE121A7512FB49FCEDE7 /* Diffing.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1079CC494384561174A3C21ABA81E55 /* Diffing.swift */; };
59B265CDC0345DA9D541A2D6A1A81361 /* Any.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9059C2290087AA23773A107EEAF2780C /* Any.swift */; };
604C51928D4CFDAE15A6CAB6327B68D6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E59CE2F9522AE21F97AA29799051F00E /* Foundation.framework */; };
6466CB6250CBD3F61D35E1132618C759 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0965FCF94C6751E5F873995C0CC05032 /* XCTest.framework */; };
6658F9FE5EEFD579907F946DD9FDD8E3 /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 655D196DB461A65E1D8D6C38F3ACF62D /* URLRequest.swift */; };
67C39A754A360A5EFC7FE0037CECE5C3 /* CALayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FAFAFBF669302034A4D6BEDD683F06D /* CALayer.swift */; };
62C4188A8DB5CA43231DE8D64E72BD1D /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54DAB11E00E3D63CC2A323A3CE988E73 /* View.swift */; };
681130A53798D8143A2C972C3351D165 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E59CE2F9522AE21F97AA29799051F00E /* Foundation.framework */; };
6A5C798F3DC6B29E72E741AC83C7203D /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D90321BBF367FE8F8B64CF43974858 /* URLRequest.swift */; };
6AFC185192FD16011F63776037110EED /* SnapshotTesting-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C0357289574364DE36EC0534E47D210B /* SnapshotTesting-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
74463B44B8B2D754F999098ED76E55ED /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4D91BC6888831D2E13620306E2CD9E9 /* Description.swift */; };
757352462D522BDB0B228DE9880106ED /* Pods-GradientLoadingBar_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A9107CAA27BA0679345F24910903133 /* Pods-GradientLoadingBar_Tests-dummy.m */; };
8003323F07F7A6F822902979CE092B88 /* Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = F952B84395F604678559569DA34F74D2 /* Wait.swift */; };
84432746DEB076256002FB7BABDAAAA5 /* SnapshotTesting-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E503602B2F6C5B0D3DD0B08982C1E017 /* SnapshotTesting-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
8CD5CB3FDF05526DBF034B61F696BA93 /* PlistEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87FA564458DD7C259A55CC2F083CBF97 /* PlistEncoder.swift */; };
8E1FBD13A74F689CFC06054841BFC596 /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5557B095A3BB320B3238CBA59402742 /* UIViewController.swift */; };
7A910B1EE5D070CB301AC51C2E035C91 /* NSImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF2204C430A0BC52D7FCF4FFFD07515D /* NSImage.swift */; };
7F496FC075C99F8B35BB6A2B2991BE4A /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0426AE1E75E69C5BDA20A5964A116F57 /* Data.swift */; };
8A01A0DEFA212DCAA14250DF50293363 /* NSView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75B25DC9DFF59BF10729E579A6798933 /* NSView.swift */; };
952DF5160B7A5F339C603FCFBC7BA3ED /* AssertInlineSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA242BBF8BBEB7323622998228D907E /* AssertInlineSnapshot.swift */; };
97D4B62D9EEEFE2B493AA25E7E1764A3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E59CE2F9522AE21F97AA29799051F00E /* Foundation.framework */; };
9E0237BBCDF5E22C8C70CA299BA989B3 /* AssertSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD44150088F0B1519DDF518A23D5F74A /* AssertSnapshot.swift */; };
A32DD5DF0D5C9A1DF6A45C34ABE16FB2 /* GradientActivityIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 838FFB89D1674B1F662F419BA3E5EA91 /* GradientActivityIndicatorView.swift */; };
A455E5B77A019CEAEEA0F9D26B1B74E6 /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B6436CA49E05FD0F26235D5008843F3 /* Codable.swift */; };
A46F1CB493251F84297943B5B60C8D5C /* Pods-GradientLoadingBar_SnapshotTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4371A74F9A6D74628527A30E755EFF25 /* Pods-GradientLoadingBar_SnapshotTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
AA6612CD34134596239652A299AC0F76 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9C3128EB6965EA592CD63B38170D57B /* Async.swift */; };
AB5489F67B851092ABABCF65190015A0 /* LightweightObservable-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D5B2A1C4D6360C6D91F1483048511530 /* LightweightObservable-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
B04CA17471143BEDA50779BE9660BD2A /* SnapshotTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1224C54074A146D75B2762DEE7B60CE /* SnapshotTestCase.swift */; };
A7911111D9E22FFCEB046C48BD26CD03 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5869027FA34D756BF5705CE123E78403 /* String.swift */; };
AA8458701AD53DA38ECC607024FD4286 /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04F8C07BB2BD290285C29C757B0C156 /* Codable.swift */; };
AB5489F67B851092ABABCF65190015A0 /* LightweightObservable-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BE38892FFE579C6B8915FCB274BDF6F /* LightweightObservable-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
B1B3C3B19CBD78FB949FDAB120FAFA81 /* String+SpecialCharacters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110FBB49DC08278A7EE52562088F5563 /* String+SpecialCharacters.swift */; };
B2224D30919A1849CCB2F495EC1EC6CE /* PlistEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B6F42E17D889A7841E21B372D54662C /* PlistEncoder.swift */; };
B35254B6E48761D71D1F0217E7361ABF /* GradientActivityIndicatorView+AnimateIsHidden.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CBA867972D9A24CB4A3459B60E3AF14 /* GradientActivityIndicatorView+AnimateIsHidden.swift */; };
B4A0E7DE8263B28AC4D433D2AB0BD101 /* CGPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = E49466D561F51DB58D30D2DE137407F4 /* CGPath.swift */; };
BC0737141F5186D65C436B7CABC5C0F7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E59CE2F9522AE21F97AA29799051F00E /* Foundation.framework */; };
BDFAF00F9FE360EAFD864F290030A2D0 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABB33081F3543E93409B82653F5C8999 /* Data.swift */; };
BE068F001E2344449F6E193DFB12B1D1 /* NSImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 622DE03EE214A93E48D3A4CC05B88A2C /* NSImage.swift */; };
C2B818BE2E57EF9A8CE51775FCB33C2B /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0DE2DCC80295626C430F2B47550ECE5 /* Internal.swift */; };
BEDA3BD4A21DD52829573D6AB7E3887A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E59CE2F9522AE21F97AA29799051F00E /* Foundation.framework */; };
C2E28779774BF76EBD7492257160E727 /* NSViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA67DBC6A3A9B1FAE0A77E1AF1D70C5D /* NSViewController.swift */; };
C5B200336D2113D3C9081DF38FA71EFD /* NSBezierPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87C182D91D03AEAFB62DEEDE3CEB9A13 /* NSBezierPath.swift */; };
C903A253A697DCF3ABA3EE46B5DCD105 /* Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4834CAC48D838D6B238E27BF7BFB747F /* Internal.swift */; };
CA1FEEEDF0E737D2B3BB0E90C749A3E5 /* GradientLoadingBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07D86CBFE6D514D79D74AB257CD5408 /* GradientLoadingBarController.swift */; };
CF4330020B5DE2F6AD592D7B836396A0 /* LightweightObservable.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 834918404C77B6D44D53C01B3D12C581 /* LightweightObservable.framework */; };
D56563764E24224FB95BC77EC18F7D9E /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FE4FE8F00C724C9593C6DEFB4CE2286 /* String.swift */; };
D6A43851802E3E81CF23D65CA9A81E4E /* SnapshotTesting-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D1B84171C66B510644D7EFFDC5B3E475 /* SnapshotTesting-dummy.m */; };
DCB4C8B6FACCEA4F92EAD1DF41AFA20E /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79AF6D809DE93FF8CDFAEFD4AF8B2C76 /* Observable.swift */; };
D5CF78CD0117EBB47C0F4CF5B69F021A /* XCTAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = E112B09F960A755C3152A1612E3AF37B /* XCTAttachment.swift */; };
D858C353CC2F564E42446D4E6E360668 /* SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BFF42E97B209FD50665E080953499DA /* SwiftUIView.swift */; };
DCB4C8B6FACCEA4F92EAD1DF41AFA20E /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ACED4FA1FA9DD8A07DB99BEFDAF743B /* Observable.swift */; };
E04AD5B984CAB8F2421274F5366446E7 /* GradientLoadingBarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8224E37407CEAAEBC6A6BF5B09960E84 /* GradientLoadingBarViewModel.swift */; };
E8945D07A466F2FA6A965D3AA13F41EF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E59CE2F9522AE21F97AA29799051F00E /* Foundation.framework */; };
F56FA75EA015F922C46B949B40394B3E /* Pods-GradientLoadingBar_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A900E1CFF1D76CF61DDF7358F5C8863 /* Pods-GradientLoadingBar_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
FDAD70506FFFD578C1327E64876A08E3 /* XCTAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6C45FD2B6DBF67E9CA08571D980F9C7 /* XCTAttachment.swift */; };
F58CC71DED68C325B5EF5EAC30C8070F /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C947E6F38D8D0A3257589741B61C1E9 /* UIImage.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -150,110 +154,114 @@
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
0426AE1E75E69C5BDA20A5964A116F57 /* Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Data.swift; path = Sources/SnapshotTesting/Snapshotting/Data.swift; sourceTree = "<group>"; };
08CF014A05CEBA3625CDE9DA9129B9A8 /* GradientLoadingBar-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GradientLoadingBar-prefix.pch"; sourceTree = "<group>"; };
0965FCF94C6751E5F873995C0CC05032 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
0AC379D97F2A93184FF0C394113C0A62 /* SwiftLint.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftLint.debug.xcconfig; sourceTree = "<group>"; };
0B57292CF383AEF209D4710AC1B19FF4 /* GradientLoadingBar-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GradientLoadingBar-umbrella.h"; sourceTree = "<group>"; };
108AACC96F7DBC089B0840E09F19C698 /* Pods-GradientLoadingBar_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GradientLoadingBar_Example.release.xcconfig"; sourceTree = "<group>"; };
110FBB49DC08278A7EE52562088F5563 /* String+SpecialCharacters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+SpecialCharacters.swift"; path = "Sources/SnapshotTesting/Common/String+SpecialCharacters.swift"; sourceTree = "<group>"; };
132C18988D60EF85736C043D43C19E57 /* Pods-GradientLoadingBar_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-GradientLoadingBar_Tests-umbrella.h"; sourceTree = "<group>"; };
13520AB8B3790CE3CEDCBBEEE1EF237A /* Pods_GradientLoadingBar_SnapshotTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_GradientLoadingBar_SnapshotTests.framework; path = "Pods-GradientLoadingBar_SnapshotTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
1679A4CF92D4ADFB15F8200201EC3AE5 /* Pods-GradientLoadingBar_SnapshotTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GradientLoadingBar_SnapshotTests-frameworks.sh"; sourceTree = "<group>"; };
16BF13A00E8108482D617C075B3D818E /* UIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIView.swift; path = Sources/SnapshotTesting/Snapshotting/UIView.swift; sourceTree = "<group>"; };
1711FC18263D47D46851F0433A93F110 /* Pods_GradientLoadingBar_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_GradientLoadingBar_Tests.framework; path = "Pods-GradientLoadingBar_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
172DF8516EF6D5757C3FBEF1C0CB52DC /* Pods-GradientLoadingBar_SnapshotTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-GradientLoadingBar_SnapshotTests-dummy.m"; sourceTree = "<group>"; };
19955C276F98759888D7BDA3A77853F6 /* SnapshotTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SnapshotTestCase.swift; path = Sources/SnapshotTesting/SnapshotTestCase.swift; sourceTree = "<group>"; };
1A9107CAA27BA0679345F24910903133 /* Pods-GradientLoadingBar_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-GradientLoadingBar_Tests-dummy.m"; sourceTree = "<group>"; };
1ACED4FA1FA9DD8A07DB99BEFDAF743B /* Observable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Observable.swift; path = LightweightObservable/Classes/Observable.swift; sourceTree = "<group>"; };
1B664F0A7F5E59140F761C16069995E9 /* Pods-GradientLoadingBar_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GradientLoadingBar_Tests.release.xcconfig"; sourceTree = "<group>"; };
1B6F42E17D889A7841E21B372D54662C /* PlistEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlistEncoder.swift; path = Sources/SnapshotTesting/Common/PlistEncoder.swift; sourceTree = "<group>"; };
1BE38892FFE579C6B8915FCB274BDF6F /* LightweightObservable-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LightweightObservable-umbrella.h"; sourceTree = "<group>"; };
1CA5ADE67427DB590BC5414E8E4498BA /* Pods-GradientLoadingBar_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-GradientLoadingBar_Tests-acknowledgements.plist"; sourceTree = "<group>"; };
1ED406C1723EE2AB785C72BF3A291751 /* GradientLoadingBar-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GradientLoadingBar-dummy.m"; sourceTree = "<group>"; };
1FE4FE8F00C724C9593C6DEFB4CE2286 /* String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = String.swift; path = Sources/SnapshotTesting/Snapshotting/String.swift; sourceTree = "<group>"; };
219D91F90F2D4E48019FF8920700C17F /* Pods-GradientLoadingBar_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-GradientLoadingBar_Tests-acknowledgements.markdown"; sourceTree = "<group>"; };
2B6436CA49E05FD0F26235D5008843F3 /* Codable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Codable.swift; path = Sources/SnapshotTesting/Snapshotting/Codable.swift; sourceTree = "<group>"; };
263236C693550DBBEF6397B3FDA0D45E /* LightweightObservable-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LightweightObservable-dummy.m"; sourceTree = "<group>"; };
2CBA867972D9A24CB4A3459B60E3AF14 /* GradientActivityIndicatorView+AnimateIsHidden.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "GradientActivityIndicatorView+AnimateIsHidden.swift"; sourceTree = "<group>"; };
2CF7FC13E714D014C72F1F9E6DE7D638 /* CaseIterable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CaseIterable.swift; path = Sources/SnapshotTesting/Snapshotting/CaseIterable.swift; sourceTree = "<group>"; };
2D246858B1E28690CC1921F1EC8328E1 /* Pods-GradientLoadingBar_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-GradientLoadingBar_Example-frameworks.sh"; sourceTree = "<group>"; };
2E16A843354D5BC8D4DA54D9AEFEAAB2 /* Pods-GradientLoadingBar_SnapshotTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-GradientLoadingBar_SnapshotTests-acknowledgements.plist"; sourceTree = "<group>"; };
393A2EB9C57F6740D90A63725B4539AB /* SnapshotTesting.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapshotTesting.release.xcconfig; sourceTree = "<group>"; };
3A900E1CFF1D76CF61DDF7358F5C8863 /* Pods-GradientLoadingBar_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-GradientLoadingBar_Example-umbrella.h"; sourceTree = "<group>"; };
3B644D77B6DA2AE767C93222955C0195 /* SnapshotTesting.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapshotTesting.release.xcconfig; sourceTree = "<group>"; };
3C062ECECBEBFE0A98DCEB165BD9E3B7 /* UIBezierPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIBezierPath.swift; path = Sources/SnapshotTesting/Snapshotting/UIBezierPath.swift; sourceTree = "<group>"; };
3C6A379C135C84644F189B8056CCBA04 /* Pods_GradientLoadingBar_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_GradientLoadingBar_Example.framework; path = "Pods-GradientLoadingBar_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
3CE49E78400E3A6E986194452C2A1611 /* LightweightObservable-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LightweightObservable-dummy.m"; sourceTree = "<group>"; };
3C79828C9BB99118F3A15AA46899BB2C /* Disposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disposable.swift; path = LightweightObservable/Classes/Disposable.swift; sourceTree = "<group>"; };
3D25A3B900085A32A5C7D3F385452EF0 /* GradientActivityIndicatorViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GradientActivityIndicatorViewModel.swift; sourceTree = "<group>"; };
3FF123D0A3E653F02DCEB06FFA07E753 /* Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Wait.swift; path = Sources/SnapshotTesting/Extensions/Wait.swift; sourceTree = "<group>"; };
42D87AB9459267458201EBFBB68848C1 /* readme.md */ = {isa = PBXFileReference; includeInIndex = 1; path = readme.md; sourceTree = "<group>"; };
4371A74F9A6D74628527A30E755EFF25 /* Pods-GradientLoadingBar_SnapshotTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-GradientLoadingBar_SnapshotTests-umbrella.h"; sourceTree = "<group>"; };
4748F84A87672B2B8A2332EBFAB30E20 /* UIImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIImage.swift; path = Sources/SnapshotTesting/Snapshotting/UIImage.swift; sourceTree = "<group>"; };
47AF808C977A1F54C41301EE10EFED69 /* SwiftFormat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftFormat.release.xcconfig; sourceTree = "<group>"; };
485FFC9380094A5DB42D7366AEBF4780 /* Diffing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diffing.swift; path = Sources/SnapshotTesting/Diffing.swift; sourceTree = "<group>"; };
51265E01B15BDF30B0C2CBDF6A151BC4 /* LightweightObservable.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LightweightObservable.debug.xcconfig; sourceTree = "<group>"; };
5E0ED20F03F3062DB47BF2E306FF9049 /* LightweightObservable-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "LightweightObservable-Info.plist"; sourceTree = "<group>"; };
622DE03EE214A93E48D3A4CC05B88A2C /* NSImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSImage.swift; path = Sources/SnapshotTesting/Snapshotting/NSImage.swift; sourceTree = "<group>"; };
62B150B8D8FC0F8D9D80F21F33BA2B6B /* SnapshotTesting-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapshotTesting-prefix.pch"; sourceTree = "<group>"; };
648F93ECED9C2684CDB6A60E6BE8DEDF /* Disposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disposable.swift; path = LightweightObservable/Classes/Disposable.swift; sourceTree = "<group>"; };
4834CAC48D838D6B238E27BF7BFB747F /* Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Internal.swift; path = Sources/SnapshotTesting/Common/Internal.swift; sourceTree = "<group>"; };
490274B00B3D32108B7DE40C5ACA9AAC /* Observable+Equatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Equatable.swift"; path = "LightweightObservable/Classes/Extensions/Observable+Equatable.swift"; sourceTree = "<group>"; };
5257A01502362763E1F6E250104CB1EA /* SwiftLint.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftLint.release.xcconfig; sourceTree = "<group>"; };
54DAB11E00E3D63CC2A323A3CE988E73 /* View.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = View.swift; path = Sources/SnapshotTesting/Common/View.swift; sourceTree = "<group>"; };
5869027FA34D756BF5705CE123E78403 /* String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = String.swift; path = Sources/SnapshotTesting/Snapshotting/String.swift; sourceTree = "<group>"; };
5C2F50C5C54E7399F17909BE225B4138 /* SpriteKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpriteKit.swift; path = Sources/SnapshotTesting/Snapshotting/SpriteKit.swift; sourceTree = "<group>"; };
613007635DAC9F649E5D50030E081A62 /* SnapshotTesting.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapshotTesting.modulemap; sourceTree = "<group>"; };
620E7B2310D43EF3013A90BE1D624B3D /* LightweightObservable.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = LightweightObservable.modulemap; sourceTree = "<group>"; };
62FE7DCB58464A147A5F3106011B6B3D /* Observable+KeyPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+KeyPath.swift"; path = "LightweightObservable/Classes/Extensions/Observable+KeyPath.swift"; sourceTree = "<group>"; };
652D9AA358DBDB2DBA1CFB02CCBA8DC4 /* Pods-GradientLoadingBar_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-GradientLoadingBar_Tests-Info.plist"; sourceTree = "<group>"; };
655D196DB461A65E1D8D6C38F3ACF62D /* URLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLRequest.swift; path = Sources/SnapshotTesting/Snapshotting/URLRequest.swift; sourceTree = "<group>"; };
66C7044ABF6219E06138EBA038827408 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Sources/SnapshotTesting/Snapshotting/Description.swift; sourceTree = "<group>"; };
67873E92210DD4E777C49C6E8AEDC108 /* GradientLoadingBar.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GradientLoadingBar.framework; path = GradientLoadingBar.framework; sourceTree = BUILT_PRODUCTS_DIR; };
69838A921E83418B945E72EB342809F5 /* Pods-GradientLoadingBar_SnapshotTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GradientLoadingBar_SnapshotTests.debug.xcconfig"; sourceTree = "<group>"; };
6A0AC5F9D0359F62D9B6CFA7E28C270C /* Snapshotting.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Snapshotting.swift; path = Sources/SnapshotTesting/Snapshotting.swift; sourceTree = "<group>"; };
6BFF42E97B209FD50665E080953499DA /* SwiftUIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftUIView.swift; path = Sources/SnapshotTesting/Snapshotting/SwiftUIView.swift; sourceTree = "<group>"; };
6CB3BE93AA36A67000795C17C2D94032 /* LightweightObservable-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "LightweightObservable-Info.plist"; sourceTree = "<group>"; };
6FFACAC9C12AF6B7E1E6144C8EDE02A4 /* GradientLoadingBar-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "GradientLoadingBar-Info.plist"; sourceTree = "<group>"; };
71B174D68683E03CEB909A118CABC01E /* String+SpecialCharacters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+SpecialCharacters.swift"; path = "Sources/SnapshotTesting/Common/String+SpecialCharacters.swift"; sourceTree = "<group>"; };
743840C93216AFDAE6E14647264F5538 /* NSView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSView.swift; path = Sources/SnapshotTesting/Snapshotting/NSView.swift; sourceTree = "<group>"; };
7497F950FEA4E6B772B2F6042432723A /* Any.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Any.swift; path = Sources/SnapshotTesting/Snapshotting/Any.swift; sourceTree = "<group>"; };
7019702436A62794D49920AA204E3FA8 /* SwiftFormat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftFormat.release.xcconfig; sourceTree = "<group>"; };
75B25DC9DFF59BF10729E579A6798933 /* NSView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSView.swift; path = Sources/SnapshotTesting/Snapshotting/NSView.swift; sourceTree = "<group>"; };
75F160F9FC6E13D4D1784FAAF102A897 /* NotchGradientLoadingBarController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NotchGradientLoadingBarController.swift; path = GradientLoadingBar/Classes/NotchGradientLoadingBarController.swift; sourceTree = "<group>"; };
77B5CE7191F5B0B041149F2190ECF5EA /* GradientLoadingBar.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GradientLoadingBar.release.xcconfig; sourceTree = "<group>"; };
79AF6D809DE93FF8CDFAEFD4AF8B2C76 /* Observable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Observable.swift; path = LightweightObservable/Classes/Observable.swift; sourceTree = "<group>"; };
7D3DDA4D26F734FE0934A65A9DF701DF /* LightweightObservable.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = LightweightObservable.modulemap; sourceTree = "<group>"; };
8194C4CB9E683FC366F48513ED1B1A9A /* Pods-GradientLoadingBar_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-GradientLoadingBar_Example-dummy.m"; sourceTree = "<group>"; };
8224E37407CEAAEBC6A6BF5B09960E84 /* GradientLoadingBarViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GradientLoadingBarViewModel.swift; sourceTree = "<group>"; };
831F8084AF52F32E37D95A4C19E85D26 /* GradientLoadingBar.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GradientLoadingBar.debug.xcconfig; sourceTree = "<group>"; };
834918404C77B6D44D53C01B3D12C581 /* LightweightObservable.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LightweightObservable.framework; sourceTree = BUILT_PRODUCTS_DIR; };
838FFB89D1674B1F662F419BA3E5EA91 /* GradientActivityIndicatorView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GradientActivityIndicatorView.swift; sourceTree = "<group>"; };
87FA564458DD7C259A55CC2F083CBF97 /* PlistEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PlistEncoder.swift; path = Sources/SnapshotTesting/Common/PlistEncoder.swift; sourceTree = "<group>"; };
88FB982EE7911E38255A291A79DB742F /* NSViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSViewController.swift; path = Sources/SnapshotTesting/Snapshotting/NSViewController.swift; sourceTree = "<group>"; };
839E953D87FD49848D29CC63C8C5F825 /* Snapshotting.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Snapshotting.swift; path = Sources/SnapshotTesting/Snapshotting.swift; sourceTree = "<group>"; };
8473B7101AE244EEF7BEDCED20A9BA92 /* LightweightObservable.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LightweightObservable.debug.xcconfig; sourceTree = "<group>"; };
8578E96FEC106136644EA07C96AA109E /* LightweightObservable-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LightweightObservable-prefix.pch"; sourceTree = "<group>"; };
87C182D91D03AEAFB62DEEDE3CEB9A13 /* NSBezierPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSBezierPath.swift; path = Sources/SnapshotTesting/Snapshotting/NSBezierPath.swift; sourceTree = "<group>"; };
8AEC5FCC695B6A6E608B8371AA56C0CA /* Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Sources/SnapshotTesting/Async.swift; sourceTree = "<group>"; };
8F17E189033503650D8A495ADF1F369D /* Constants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
93233819B16746A4C1D1A32DFCEC1752 /* LightweightObservable-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LightweightObservable-prefix.pch"; sourceTree = "<group>"; };
9059C2290087AA23773A107EEAF2780C /* Any.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Any.swift; path = Sources/SnapshotTesting/Snapshotting/Any.swift; sourceTree = "<group>"; };
91D90321BBF367FE8F8B64CF43974858 /* URLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLRequest.swift; path = Sources/SnapshotTesting/Snapshotting/URLRequest.swift; sourceTree = "<group>"; };
95A4CD5CAEDCA57994965B76430C1FBE /* GradientLoadingBar.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = GradientLoadingBar.podspec; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
9917FE3936F34E3EF7BC9DA0C3761B65 /* SceneKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SceneKit.swift; path = Sources/SnapshotTesting/Snapshotting/SceneKit.swift; sourceTree = "<group>"; };
9C947E6F38D8D0A3257589741B61C1E9 /* UIImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIImage.swift; path = Sources/SnapshotTesting/Snapshotting/UIImage.swift; sourceTree = "<group>"; };
9D184645A643B40E94DA5BC70B5C6F2B /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = "<group>"; };
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; };
9DD32929B122D2561D1E99468EECDBF7 /* Pods-GradientLoadingBar_SnapshotTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GradientLoadingBar_SnapshotTests.release.xcconfig"; sourceTree = "<group>"; };
9E46234BCB7A6CF5AE3ECC8C30C3786B /* AssertSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertSnapshot.swift; path = Sources/SnapshotTesting/AssertSnapshot.swift; sourceTree = "<group>"; };
9EFE8B971DF98A48094E8121DA5F22BE /* LightweightObservable.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LightweightObservable.release.xcconfig; sourceTree = "<group>"; };
9FAFAFBF669302034A4D6BEDD683F06D /* CALayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CALayer.swift; path = Sources/SnapshotTesting/Snapshotting/CALayer.swift; sourceTree = "<group>"; };
A037DBBCCACBFACB5C39A80B1C273043 /* SnapshotTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapshotTesting.framework; path = SnapshotTesting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A1224C54074A146D75B2762DEE7B60CE /* SnapshotTestCase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SnapshotTestCase.swift; path = Sources/SnapshotTesting/SnapshotTestCase.swift; sourceTree = "<group>"; };
A2BEFE77478CF65195FEA6A6C36027C2 /* SwiftLint.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftLint.release.xcconfig; sourceTree = "<group>"; };
A37D5195BA402F028C3765D44BB0A28D /* LightweightObservable.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LightweightObservable.release.xcconfig; sourceTree = "<group>"; };
A652F20CE7EE44E64565C2120B651665 /* Pods-GradientLoadingBar_SnapshotTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-GradientLoadingBar_SnapshotTests.modulemap"; sourceTree = "<group>"; };
A6C45FD2B6DBF67E9CA08571D980F9C7 /* XCTAttachment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XCTAttachment.swift; path = Sources/SnapshotTesting/Common/XCTAttachment.swift; sourceTree = "<group>"; };
A6F9A1BAFFBBC246C94565120C2B671A /* GradientLoadingBar.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GradientLoadingBar.modulemap; sourceTree = "<group>"; };
A70E7C9947EB80BF9BB160DBD905E4D1 /* SpriteKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SpriteKit.swift; path = Sources/SnapshotTesting/Snapshotting/SpriteKit.swift; sourceTree = "<group>"; };
A95E7032DE35DF972EF7FEC8A884303B /* Pods-GradientLoadingBar_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GradientLoadingBar_Example.debug.xcconfig"; sourceTree = "<group>"; };
ABB33081F3543E93409B82653F5C8999 /* Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Data.swift; path = Sources/SnapshotTesting/Snapshotting/Data.swift; sourceTree = "<group>"; };
AC5FB89A60C9EF49D259A87FD0D200D3 /* AssertInlineSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertInlineSnapshot.swift; path = Sources/SnapshotTesting/AssertInlineSnapshot.swift; sourceTree = "<group>"; };
B0D466687F25CFEC98F95EC624033C2F /* Diff.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diff.swift; path = Sources/SnapshotTesting/Diff.swift; sourceTree = "<group>"; };
B0DE2DCC80295626C430F2B47550ECE5 /* Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Internal.swift; path = Sources/SnapshotTesting/Common/Internal.swift; sourceTree = "<group>"; };
B1079CC494384561174A3C21ABA81E55 /* Diffing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diffing.swift; path = Sources/SnapshotTesting/Diffing.swift; sourceTree = "<group>"; };
B1518F0564D9405495037F4713C4F143 /* Pods-GradientLoadingBar_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-GradientLoadingBar_Tests.modulemap"; sourceTree = "<group>"; };
B23DE3822DAC1D50D1BB94E49D51CAC1 /* UIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIView.swift; path = Sources/SnapshotTesting/Snapshotting/UIView.swift; sourceTree = "<group>"; };
B27AAA41B1DEF56C8059867126A15A38 /* Pods-GradientLoadingBar_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-GradientLoadingBar_Example-Info.plist"; sourceTree = "<group>"; };
B29B2057FFAA955F4F8223BDAAAF8B56 /* SwiftFormat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftFormat.debug.xcconfig; sourceTree = "<group>"; };
B4D91BC6888831D2E13620306E2CD9E9 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Sources/SnapshotTesting/Snapshotting/Description.swift; sourceTree = "<group>"; };
B533ECCC769063846CEC71B060C04EAF /* SnapshotTesting-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapshotTesting-prefix.pch"; sourceTree = "<group>"; };
B7FF35F32E5C06204CAF8183AC101D53 /* Pods-GradientLoadingBar_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-GradientLoadingBar_Example-acknowledgements.plist"; sourceTree = "<group>"; };
BC7DE873CD81C2A6FE42262C00452A04 /* Diff.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diff.swift; path = Sources/SnapshotTesting/Diff.swift; sourceTree = "<group>"; };
BD44150088F0B1519DDF518A23D5F74A /* AssertSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertSnapshot.swift; path = Sources/SnapshotTesting/AssertSnapshot.swift; sourceTree = "<group>"; };
BEBA37204701F79F631433A8EEF190E7 /* Pods-GradientLoadingBar_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-GradientLoadingBar_Example-acknowledgements.markdown"; sourceTree = "<group>"; };
C478F41E1D29E73C340C46510C963758 /* SnapshotTesting.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapshotTesting.modulemap; sourceTree = "<group>"; };
CEE3F100C4CDD54473EA2C6C753CE3F8 /* Observable+KeyPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+KeyPath.swift"; path = "LightweightObservable/Classes/Extensions/Observable+KeyPath.swift"; sourceTree = "<group>"; };
C0357289574364DE36EC0534E47D210B /* SnapshotTesting-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapshotTesting-umbrella.h"; sourceTree = "<group>"; };
C056D069A391AAB52B9DE80ACAC9A16A /* SnapshotTesting-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapshotTesting-dummy.m"; sourceTree = "<group>"; };
CC661FA820380145669722D4895E8BA6 /* SnapshotTesting.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapshotTesting.debug.xcconfig; sourceTree = "<group>"; };
CF8CDB1CDD05B1C5C47641B6250FC75A /* SnapshotTesting-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapshotTesting-Info.plist"; sourceTree = "<group>"; };
D04F8C07BB2BD290285C29C757B0C156 /* Codable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Codable.swift; path = Sources/SnapshotTesting/Snapshotting/Codable.swift; sourceTree = "<group>"; };
D07D86CBFE6D514D79D74AB257CD5408 /* GradientLoadingBarController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientLoadingBarController.swift; path = GradientLoadingBar/Classes/GradientLoadingBarController.swift; sourceTree = "<group>"; };
D1B84171C66B510644D7EFFDC5B3E475 /* SnapshotTesting-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapshotTesting-dummy.m"; sourceTree = "<group>"; };
D20C54CBF964A3FE43CE7FE20719F6AD /* SwiftLint.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftLint.debug.xcconfig; sourceTree = "<group>"; };
D5B2A1C4D6360C6D91F1483048511530 /* LightweightObservable-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LightweightObservable-umbrella.h"; sourceTree = "<group>"; };
DC1FD5A53165BF4293473D170AD9995E /* View.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = View.swift; path = Sources/SnapshotTesting/Common/View.swift; sourceTree = "<group>"; };
E06A1816AB01D090FDC9EEC02261A14E /* SnapshotTesting-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapshotTesting-Info.plist"; sourceTree = "<group>"; };
DDA242BBF8BBEB7323622998228D907E /* AssertInlineSnapshot.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertInlineSnapshot.swift; path = Sources/SnapshotTesting/AssertInlineSnapshot.swift; sourceTree = "<group>"; };
E0D90990792D653F523A884442305989 /* Pods-GradientLoadingBar_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-GradientLoadingBar_Example.modulemap"; sourceTree = "<group>"; };
E503602B2F6C5B0D3DD0B08982C1E017 /* SnapshotTesting-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapshotTesting-umbrella.h"; sourceTree = "<group>"; };
E508BF65994F167606FC9180BE8059FC /* SceneKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SceneKit.swift; path = Sources/SnapshotTesting/Snapshotting/SceneKit.swift; sourceTree = "<group>"; };
E5557B095A3BB320B3238CBA59402742 /* UIViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewController.swift; path = Sources/SnapshotTesting/Snapshotting/UIViewController.swift; sourceTree = "<group>"; };
E112B09F960A755C3152A1612E3AF37B /* XCTAttachment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XCTAttachment.swift; path = Sources/SnapshotTesting/Common/XCTAttachment.swift; sourceTree = "<group>"; };
E49466D561F51DB58D30D2DE137407F4 /* CGPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CGPath.swift; path = Sources/SnapshotTesting/Snapshotting/CGPath.swift; sourceTree = "<group>"; };
E59CE2F9522AE21F97AA29799051F00E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
E5F5BFF05569BBDD6EF0224F0E21090A /* CaseIterable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CaseIterable.swift; path = Sources/SnapshotTesting/Snapshotting/CaseIterable.swift; sourceTree = "<group>"; };
E9C3128EB6965EA592CD63B38170D57B /* Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Sources/SnapshotTesting/Async.swift; sourceTree = "<group>"; };
ED80020D57E60A2BDBE6BE1EB9333D0A /* SwiftFormat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftFormat.debug.xcconfig; sourceTree = "<group>"; };
EA6C72CD77EA1E1E09526DAF3BF9031B /* UIViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewController.swift; path = Sources/SnapshotTesting/Snapshotting/UIViewController.swift; sourceTree = "<group>"; };
F196AAA163469B17170E99B82C7C4C0A /* LightweightObservable.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = LightweightObservable.framework; path = LightweightObservable.framework; sourceTree = BUILT_PRODUCTS_DIR; };
F2B4FFBC82EA6CAE84B65AE1835AF25A /* SnapshotTesting.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapshotTesting.debug.xcconfig; sourceTree = "<group>"; };
F2D95A77154276FCFD49025721CF9191 /* Observable+Equatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Equatable.swift"; path = "LightweightObservable/Classes/Extensions/Observable+Equatable.swift"; sourceTree = "<group>"; };
F7B1750DE470F045803DE2094D5F7264 /* Pods-GradientLoadingBar_SnapshotTests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-GradientLoadingBar_SnapshotTests-Info.plist"; sourceTree = "<group>"; };
F952B84395F604678559569DA34F74D2 /* Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Wait.swift; path = Sources/SnapshotTesting/Extensions/Wait.swift; sourceTree = "<group>"; };
FA67DBC6A3A9B1FAE0A77E1AF1D70C5D /* NSViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSViewController.swift; path = Sources/SnapshotTesting/Snapshotting/NSViewController.swift; sourceTree = "<group>"; };
FB9F808A784ECD647D041584F3BAA5CE /* CALayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CALayer.swift; path = Sources/SnapshotTesting/Snapshotting/CALayer.swift; sourceTree = "<group>"; };
FBAEAE91BB9B77006558E537894C33C5 /* Pods-GradientLoadingBar_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-GradientLoadingBar_Tests.debug.xcconfig"; sourceTree = "<group>"; };
FF135E1D23F08BE7F1D7FFC86260EF9B /* Pods-GradientLoadingBar_SnapshotTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-GradientLoadingBar_SnapshotTests-acknowledgements.markdown"; sourceTree = "<group>"; };
FF2204C430A0BC52D7FCF4FFFD07515D /* NSImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSImage.swift; path = Sources/SnapshotTesting/Snapshotting/NSImage.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -281,15 +289,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
A3753966D6558AC3D7EB88C394F87259 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
5C646D4C61F7CDC27DBCBD7960C48BB4 /* Foundation.framework in Frameworks */,
6466CB6250CBD3F61D35E1132618C759 /* XCTest.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
B5CF0D7BDF3DB308D262F74EA1829D66 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -299,6 +298,15 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
C623AFDACDDFAF3DA4E8AA5F997EE889 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
BEDA3BD4A21DD52829573D6AB7E3887A /* Foundation.framework in Frameworks */,
56BC6C7B5E248296BAA214504F2AC607 /* XCTest.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
E7729C4FB021E464F1BB3C7B3AAFC13D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -325,6 +333,19 @@
path = "Example/Pods/Target Support Files/GradientLoadingBar";
sourceTree = "<group>";
};
0C9122EDC083344F050F55D841C534AC /* LightweightObservable */ = {
isa = PBXGroup;
children = (
3C79828C9BB99118F3A15AA46899BB2C /* Disposable.swift */,
1ACED4FA1FA9DD8A07DB99BEFDAF743B /* Observable.swift */,
490274B00B3D32108B7DE40C5ACA9AAC /* Observable+Equatable.swift */,
62FE7DCB58464A147A5F3106011B6B3D /* Observable+KeyPath.swift */,
9E4258F5F77E219E243535CE9F2C2D37 /* Support Files */,
);
name = LightweightObservable;
path = LightweightObservable;
sourceTree = "<group>";
};
182051F58B71F1C24E92C50B91E729E9 /* Pods-GradientLoadingBar_Tests */ = {
isa = PBXGroup;
children = (
@@ -341,31 +362,6 @@
path = "Target Support Files/Pods-GradientLoadingBar_Tests";
sourceTree = "<group>";
};
2CE89AADFFFE95E8003FB250177B1CD1 /* Support Files */ = {
isa = PBXGroup;
children = (
ED80020D57E60A2BDBE6BE1EB9333D0A /* SwiftFormat.debug.xcconfig */,
47AF808C977A1F54C41301EE10EFED69 /* SwiftFormat.release.xcconfig */,
);
name = "Support Files";
path = "../Target Support Files/SwiftFormat";
sourceTree = "<group>";
};
434289011F6712E755970F1074781EA5 /* Support Files */ = {
isa = PBXGroup;
children = (
C478F41E1D29E73C340C46510C963758 /* SnapshotTesting.modulemap */,
D1B84171C66B510644D7EFFDC5B3E475 /* SnapshotTesting-dummy.m */,
E06A1816AB01D090FDC9EEC02261A14E /* SnapshotTesting-Info.plist */,
62B150B8D8FC0F8D9D80F21F33BA2B6B /* SnapshotTesting-prefix.pch */,
E503602B2F6C5B0D3DD0B08982C1E017 /* SnapshotTesting-umbrella.h */,
F2B4FFBC82EA6CAE84B65AE1835AF25A /* SnapshotTesting.debug.xcconfig */,
3B644D77B6DA2AE767C93222955C0195 /* SnapshotTesting.release.xcconfig */,
);
name = "Support Files";
path = "../Target Support Files/SnapshotTesting";
sourceTree = "<group>";
};
43B10757738539C40D5ED2A1ECDB8ADE /* Products */ = {
isa = PBXGroup;
children = (
@@ -379,26 +375,29 @@
name = Products;
sourceTree = "<group>";
};
4458C6A8A7D0FCBBF849801F48D81D88 /* LightweightObservable */ = {
49DEFA1CB55B8209421AA4E4171272D0 /* Support Files */ = {
isa = PBXGroup;
children = (
648F93ECED9C2684CDB6A60E6BE8DEDF /* Disposable.swift */,
79AF6D809DE93FF8CDFAEFD4AF8B2C76 /* Observable.swift */,
F2D95A77154276FCFD49025721CF9191 /* Observable+Equatable.swift */,
CEE3F100C4CDD54473EA2C6C753CE3F8 /* Observable+KeyPath.swift */,
7A7C6C3CD90BB6F1A79FCFA9E9F6C9F5 /* Support Files */,
613007635DAC9F649E5D50030E081A62 /* SnapshotTesting.modulemap */,
C056D069A391AAB52B9DE80ACAC9A16A /* SnapshotTesting-dummy.m */,
CF8CDB1CDD05B1C5C47641B6250FC75A /* SnapshotTesting-Info.plist */,
B533ECCC769063846CEC71B060C04EAF /* SnapshotTesting-prefix.pch */,
C0357289574364DE36EC0534E47D210B /* SnapshotTesting-umbrella.h */,
CC661FA820380145669722D4895E8BA6 /* SnapshotTesting.debug.xcconfig */,
393A2EB9C57F6740D90A63725B4539AB /* SnapshotTesting.release.xcconfig */,
);
name = LightweightObservable;
path = LightweightObservable;
name = "Support Files";
path = "../Target Support Files/SnapshotTesting";
sourceTree = "<group>";
};
526CBF44DE280D803C90DB47909A5AA3 /* SwiftLint */ = {
56F64175C0B26ABB2C429260A44D7879 /* Support Files */ = {
isa = PBXGroup;
children = (
E2CCD1A55C9A485E976F71F7C7CF3366 /* Support Files */,
B29B2057FFAA955F4F8223BDAAAF8B56 /* SwiftFormat.debug.xcconfig */,
7019702436A62794D49920AA204E3FA8 /* SwiftFormat.release.xcconfig */,
);
name = SwiftLint;
path = SwiftLint;
name = "Support Files";
path = "../Target Support Files/SwiftFormat";
sourceTree = "<group>";
};
62272D672011B46F4728E4A5536D444F /* Views */ = {
@@ -411,19 +410,13 @@
path = GradientLoadingBar/Classes/Views;
sourceTree = "<group>";
};
7A7C6C3CD90BB6F1A79FCFA9E9F6C9F5 /* Support Files */ = {
7C55C62C3F1789A0071466AA2D2BD385 /* SwiftLint */ = {
isa = PBXGroup;
children = (
7D3DDA4D26F734FE0934A65A9DF701DF /* LightweightObservable.modulemap */,
3CE49E78400E3A6E986194452C2A1611 /* LightweightObservable-dummy.m */,
5E0ED20F03F3062DB47BF2E306FF9049 /* LightweightObservable-Info.plist */,
93233819B16746A4C1D1A32DFCEC1752 /* LightweightObservable-prefix.pch */,
D5B2A1C4D6360C6D91F1483048511530 /* LightweightObservable-umbrella.h */,
51265E01B15BDF30B0C2CBDF6A151BC4 /* LightweightObservable.debug.xcconfig */,
9EFE8B971DF98A48094E8121DA5F22BE /* LightweightObservable.release.xcconfig */,
8B1EE0BC4468C4A98CA7BE8538B7ECB0 /* Support Files */,
);
name = "Support Files";
path = "../Target Support Files/LightweightObservable";
name = SwiftLint;
path = SwiftLint;
sourceTree = "<group>";
};
810FDB3212C2E1BF5CEB60C53A119039 /* Pods-GradientLoadingBar_SnapshotTests */ = {
@@ -453,6 +446,25 @@
path = GradientLoadingBar/Classes/ViewModel;
sourceTree = "<group>";
};
8B1EE0BC4468C4A98CA7BE8538B7ECB0 /* Support Files */ = {
isa = PBXGroup;
children = (
0AC379D97F2A93184FF0C394113C0A62 /* SwiftLint.debug.xcconfig */,
5257A01502362763E1F6E250104CB1EA /* SwiftLint.release.xcconfig */,
);
name = "Support Files";
path = "../Target Support Files/SwiftLint";
sourceTree = "<group>";
};
93A36387CFAF0A0EA680A9CB330B016C /* SwiftFormat */ = {
isa = PBXGroup;
children = (
56F64175C0B26ABB2C429260A44D7879 /* Support Files */,
);
name = SwiftFormat;
path = SwiftFormat;
sourceTree = "<group>";
};
9DA2A07C8C5316172DA2CA4B59E1C82A /* Pod */ = {
isa = PBXGroup;
children = (
@@ -463,6 +475,21 @@
name = Pod;
sourceTree = "<group>";
};
9E4258F5F77E219E243535CE9F2C2D37 /* Support Files */ = {
isa = PBXGroup;
children = (
620E7B2310D43EF3013A90BE1D624B3D /* LightweightObservable.modulemap */,
263236C693550DBBEF6397B3FDA0D45E /* LightweightObservable-dummy.m */,
6CB3BE93AA36A67000795C17C2D94032 /* LightweightObservable-Info.plist */,
8578E96FEC106136644EA07C96AA109E /* LightweightObservable-prefix.pch */,
1BE38892FFE579C6B8915FCB274BDF6F /* LightweightObservable-umbrella.h */,
8473B7101AE244EEF7BEDCED20A9BA92 /* LightweightObservable.debug.xcconfig */,
A37D5195BA402F028C3765D44BB0A28D /* LightweightObservable.release.xcconfig */,
);
name = "Support Files";
path = "../Target Support Files/LightweightObservable";
sourceTree = "<group>";
};
AD9DAFA98C524BF76082D2B10AEC6E6E /* Misc */ = {
isa = PBXGroup;
children = (
@@ -489,44 +516,6 @@
path = "Target Support Files/Pods-GradientLoadingBar_Example";
sourceTree = "<group>";
};
B86CB465A3A251813B55AF621083BA18 /* SnapshotTesting */ = {
isa = PBXGroup;
children = (
7497F950FEA4E6B772B2F6042432723A /* Any.swift */,
AC5FB89A60C9EF49D259A87FD0D200D3 /* AssertInlineSnapshot.swift */,
9E46234BCB7A6CF5AE3ECC8C30C3786B /* AssertSnapshot.swift */,
E9C3128EB6965EA592CD63B38170D57B /* Async.swift */,
9FAFAFBF669302034A4D6BEDD683F06D /* CALayer.swift */,
E5F5BFF05569BBDD6EF0224F0E21090A /* CaseIterable.swift */,
2B6436CA49E05FD0F26235D5008843F3 /* Codable.swift */,
ABB33081F3543E93409B82653F5C8999 /* Data.swift */,
66C7044ABF6219E06138EBA038827408 /* Description.swift */,
B0D466687F25CFEC98F95EC624033C2F /* Diff.swift */,
485FFC9380094A5DB42D7366AEBF4780 /* Diffing.swift */,
B0DE2DCC80295626C430F2B47550ECE5 /* Internal.swift */,
622DE03EE214A93E48D3A4CC05B88A2C /* NSImage.swift */,
743840C93216AFDAE6E14647264F5538 /* NSView.swift */,
88FB982EE7911E38255A291A79DB742F /* NSViewController.swift */,
87FA564458DD7C259A55CC2F083CBF97 /* PlistEncoder.swift */,
E508BF65994F167606FC9180BE8059FC /* SceneKit.swift */,
A1224C54074A146D75B2762DEE7B60CE /* SnapshotTestCase.swift */,
6A0AC5F9D0359F62D9B6CFA7E28C270C /* Snapshotting.swift */,
A70E7C9947EB80BF9BB160DBD905E4D1 /* SpriteKit.swift */,
1FE4FE8F00C724C9593C6DEFB4CE2286 /* String.swift */,
71B174D68683E03CEB909A118CABC01E /* String+SpecialCharacters.swift */,
4748F84A87672B2B8A2332EBFAB30E20 /* UIImage.swift */,
B23DE3822DAC1D50D1BB94E49D51CAC1 /* UIView.swift */,
E5557B095A3BB320B3238CBA59402742 /* UIViewController.swift */,
655D196DB461A65E1D8D6C38F3ACF62D /* URLRequest.swift */,
DC1FD5A53165BF4293473D170AD9995E /* View.swift */,
F952B84395F604678559569DA34F74D2 /* Wait.swift */,
A6C45FD2B6DBF67E9CA08571D980F9C7 /* XCTAttachment.swift */,
434289011F6712E755970F1074781EA5 /* Support Files */,
);
name = SnapshotTesting;
path = SnapshotTesting;
sourceTree = "<group>";
};
BA25E9C542CB3AA3EFD012ED3933A9C9 /* iOS */ = {
isa = PBXGroup;
children = (
@@ -536,6 +525,17 @@
name = iOS;
sourceTree = "<group>";
};
C8B2230A747DDE259145DDF4A41E3CF9 /* Pods */ = {
isa = PBXGroup;
children = (
0C9122EDC083344F050F55D841C534AC /* LightweightObservable */,
E579E6770CDAEFA7E6CF09E88C1A7AB8 /* SnapshotTesting */,
93A36387CFAF0A0EA680A9CB330B016C /* SwiftFormat */,
7C55C62C3F1789A0071466AA2D2BD385 /* SwiftLint */,
);
name = Pods;
sourceTree = "<group>";
};
CE6272E67A33588A9F25C079BF5BB051 /* Development Pods */ = {
isa = PBXGroup;
children = (
@@ -550,29 +550,52 @@
9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
CE6272E67A33588A9F25C079BF5BB051 /* Development Pods */,
ED635EACC8572F31376B6F8762793E86 /* Frameworks */,
FE5B5656A9C615AEA4FA2FD452F27E0B /* Pods */,
C8B2230A747DDE259145DDF4A41E3CF9 /* Pods */,
43B10757738539C40D5ED2A1ECDB8ADE /* Products */,
F35D8C7C6DA5C631C17C6CAC2AECDFEA /* Targets Support Files */,
);
sourceTree = "<group>";
};
E2CCD1A55C9A485E976F71F7C7CF3366 /* Support Files */ = {
E579E6770CDAEFA7E6CF09E88C1A7AB8 /* SnapshotTesting */ = {
isa = PBXGroup;
children = (
D20C54CBF964A3FE43CE7FE20719F6AD /* SwiftLint.debug.xcconfig */,
A2BEFE77478CF65195FEA6A6C36027C2 /* SwiftLint.release.xcconfig */,
9059C2290087AA23773A107EEAF2780C /* Any.swift */,
DDA242BBF8BBEB7323622998228D907E /* AssertInlineSnapshot.swift */,
BD44150088F0B1519DDF518A23D5F74A /* AssertSnapshot.swift */,
8AEC5FCC695B6A6E608B8371AA56C0CA /* Async.swift */,
FB9F808A784ECD647D041584F3BAA5CE /* CALayer.swift */,
2CF7FC13E714D014C72F1F9E6DE7D638 /* CaseIterable.swift */,
E49466D561F51DB58D30D2DE137407F4 /* CGPath.swift */,
D04F8C07BB2BD290285C29C757B0C156 /* Codable.swift */,
0426AE1E75E69C5BDA20A5964A116F57 /* Data.swift */,
B4D91BC6888831D2E13620306E2CD9E9 /* Description.swift */,
BC7DE873CD81C2A6FE42262C00452A04 /* Diff.swift */,
B1079CC494384561174A3C21ABA81E55 /* Diffing.swift */,
4834CAC48D838D6B238E27BF7BFB747F /* Internal.swift */,
87C182D91D03AEAFB62DEEDE3CEB9A13 /* NSBezierPath.swift */,
FF2204C430A0BC52D7FCF4FFFD07515D /* NSImage.swift */,
75B25DC9DFF59BF10729E579A6798933 /* NSView.swift */,
FA67DBC6A3A9B1FAE0A77E1AF1D70C5D /* NSViewController.swift */,
1B6F42E17D889A7841E21B372D54662C /* PlistEncoder.swift */,
9917FE3936F34E3EF7BC9DA0C3761B65 /* SceneKit.swift */,
19955C276F98759888D7BDA3A77853F6 /* SnapshotTestCase.swift */,
839E953D87FD49848D29CC63C8C5F825 /* Snapshotting.swift */,
5C2F50C5C54E7399F17909BE225B4138 /* SpriteKit.swift */,
5869027FA34D756BF5705CE123E78403 /* String.swift */,
110FBB49DC08278A7EE52562088F5563 /* String+SpecialCharacters.swift */,
6BFF42E97B209FD50665E080953499DA /* SwiftUIView.swift */,
3C062ECECBEBFE0A98DCEB165BD9E3B7 /* UIBezierPath.swift */,
9C947E6F38D8D0A3257589741B61C1E9 /* UIImage.swift */,
16BF13A00E8108482D617C075B3D818E /* UIView.swift */,
EA6C72CD77EA1E1E09526DAF3BF9031B /* UIViewController.swift */,
91D90321BBF367FE8F8B64CF43974858 /* URLRequest.swift */,
54DAB11E00E3D63CC2A323A3CE988E73 /* View.swift */,
3FF123D0A3E653F02DCEB06FFA07E753 /* Wait.swift */,
E112B09F960A755C3152A1612E3AF37B /* XCTAttachment.swift */,
49DEFA1CB55B8209421AA4E4171272D0 /* Support Files */,
);
name = "Support Files";
path = "../Target Support Files/SwiftLint";
sourceTree = "<group>";
};
E753B32551AFA44D4355DCEE19413F17 /* SwiftFormat */ = {
isa = PBXGroup;
children = (
2CE89AADFFFE95E8003FB250177B1CD1 /* Support Files */,
);
name = SwiftFormat;
path = SwiftFormat;
name = SnapshotTesting;
path = SnapshotTesting;
sourceTree = "<group>";
};
ED635EACC8572F31376B6F8762793E86 /* Frameworks */ = {
@@ -609,20 +632,17 @@
path = ../..;
sourceTree = "<group>";
};
FE5B5656A9C615AEA4FA2FD452F27E0B /* Pods */ = {
isa = PBXGroup;
children = (
4458C6A8A7D0FCBBF849801F48D81D88 /* LightweightObservable */,
B86CB465A3A251813B55AF621083BA18 /* SnapshotTesting */,
E753B32551AFA44D4355DCEE19413F17 /* SwiftFormat */,
526CBF44DE280D803C90DB47909A5AA3 /* SwiftLint */,
);
name = Pods;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
08C742623912B7A2D85724F893919627 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
6AFC185192FD16011F63776037110EED /* SnapshotTesting-umbrella.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
2EC41A99D64F1B8CCBE55541BA49C39B /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
@@ -647,14 +667,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
7C4D551FBC1B918D4E57BE13BD42B087 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
84432746DEB076256002FB7BABDAAAA5 /* SnapshotTesting-umbrella.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
B574F28AEC902F5DF903621F9079B43A /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
@@ -752,12 +764,12 @@
};
ADEAE7CDD604DE4F3072E6021A314487 /* SnapshotTesting */ = {
isa = PBXNativeTarget;
buildConfigurationList = 32867542F50A9BE9FCBEA5DBF1117399 /* Build configuration list for PBXNativeTarget "SnapshotTesting" */;
buildConfigurationList = 7F9B732C8F399A22A0B629A8BFFB52D5 /* Build configuration list for PBXNativeTarget "SnapshotTesting" */;
buildPhases = (
7C4D551FBC1B918D4E57BE13BD42B087 /* Headers */,
986B2299F460A09ADA1304C267ED03D8 /* Sources */,
A3753966D6558AC3D7EB88C394F87259 /* Frameworks */,
1905CD6CFCB44CBB91511667E74D0AFB /* Resources */,
08C742623912B7A2D85724F893919627 /* Headers */,
9C880811BAF460ED87BEA333DBB5C7D6 /* Sources */,
C623AFDACDDFAF3DA4E8AA5F997EE889 /* Frameworks */,
A8F2D5EB06EDA23EAA9B2EF353782A4A /* Resources */,
);
buildRules = (
);
@@ -825,13 +837,6 @@
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
1905CD6CFCB44CBB91511667E74D0AFB /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
2D7C6EBC51117D967BAA7B346494F9B0 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -867,6 +872,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
A8F2D5EB06EDA23EAA9B2EF353782A4A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -906,40 +918,44 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
986B2299F460A09ADA1304C267ED03D8 /* Sources */ = {
9C880811BAF460ED87BEA333DBB5C7D6 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
14CC16A84D0558FF9DC6927E1BA82F02 /* Any.swift in Sources */,
46B2A4686C72C29C24576FC6FF56A7BE /* AssertInlineSnapshot.swift in Sources */,
18ED84EFAF015095FCCF61A8E494F325 /* AssertSnapshot.swift in Sources */,
AA6612CD34134596239652A299AC0F76 /* Async.swift in Sources */,
67C39A754A360A5EFC7FE0037CECE5C3 /* CALayer.swift in Sources */,
23B3D1B39D273F7B43BA45F255EDE5C5 /* CaseIterable.swift in Sources */,
A455E5B77A019CEAEEA0F9D26B1B74E6 /* Codable.swift in Sources */,
BDFAF00F9FE360EAFD864F290030A2D0 /* Data.swift in Sources */,
11F2134521037184F745C9010217B501 /* Description.swift in Sources */,
4E5AA162D02372A80FABE033AD6BFFE6 /* Diff.swift in Sources */,
440314FEC8EC90F865D8D20910989A69 /* Diffing.swift in Sources */,
C2B818BE2E57EF9A8CE51775FCB33C2B /* Internal.swift in Sources */,
BE068F001E2344449F6E193DFB12B1D1 /* NSImage.swift in Sources */,
1A1F20E176923FF03A0EAEA886703719 /* NSView.swift in Sources */,
29F37DB8A1899894CA87E8E8381E2C11 /* NSViewController.swift in Sources */,
8CD5CB3FDF05526DBF034B61F696BA93 /* PlistEncoder.swift in Sources */,
4F03BBCA0FCF5903B46F72BE0BADDF34 /* SceneKit.swift in Sources */,
B04CA17471143BEDA50779BE9660BD2A /* SnapshotTestCase.swift in Sources */,
D6A43851802E3E81CF23D65CA9A81E4E /* SnapshotTesting-dummy.m in Sources */,
57244463125C60529B7391F9FA3052AD /* Snapshotting.swift in Sources */,
509FAAD85506B9E1BCCA50505B8C93DB /* SpriteKit.swift in Sources */,
33432CD4B8F83F0C678B5C67CAF13414 /* String+SpecialCharacters.swift in Sources */,
D56563764E24224FB95BC77EC18F7D9E /* String.swift in Sources */,
2371CFDF095282B1D6935C36C81E46FC /* UIImage.swift in Sources */,
56B2D76BD27EAA69A1BED0113B7F9F51 /* UIView.swift in Sources */,
8E1FBD13A74F689CFC06054841BFC596 /* UIViewController.swift in Sources */,
6658F9FE5EEFD579907F946DD9FDD8E3 /* URLRequest.swift in Sources */,
01757E29DF92738C1D5D0528F1EB4824 /* View.swift in Sources */,
8003323F07F7A6F822902979CE092B88 /* Wait.swift in Sources */,
FDAD70506FFFD578C1327E64876A08E3 /* XCTAttachment.swift in Sources */,
59B265CDC0345DA9D541A2D6A1A81361 /* Any.swift in Sources */,
952DF5160B7A5F339C603FCFBC7BA3ED /* AssertInlineSnapshot.swift in Sources */,
9E0237BBCDF5E22C8C70CA299BA989B3 /* AssertSnapshot.swift in Sources */,
45B49E668D4E0DF1D905F71246A30121 /* Async.swift in Sources */,
07BCE427364C14A3924FA6E5821BDFE9 /* CALayer.swift in Sources */,
0CA33262BEBA6D7236BAC24028199D0E /* CaseIterable.swift in Sources */,
B4A0E7DE8263B28AC4D433D2AB0BD101 /* CGPath.swift in Sources */,
AA8458701AD53DA38ECC607024FD4286 /* Codable.swift in Sources */,
7F496FC075C99F8B35BB6A2B2991BE4A /* Data.swift in Sources */,
74463B44B8B2D754F999098ED76E55ED /* Description.swift in Sources */,
2DF2678C2AACDF82CB67532E7737AFA6 /* Diff.swift in Sources */,
56CD2FF07A0AFE121A7512FB49FCEDE7 /* Diffing.swift in Sources */,
C903A253A697DCF3ABA3EE46B5DCD105 /* Internal.swift in Sources */,
C5B200336D2113D3C9081DF38FA71EFD /* NSBezierPath.swift in Sources */,
7A910B1EE5D070CB301AC51C2E035C91 /* NSImage.swift in Sources */,
8A01A0DEFA212DCAA14250DF50293363 /* NSView.swift in Sources */,
C2E28779774BF76EBD7492257160E727 /* NSViewController.swift in Sources */,
B2224D30919A1849CCB2F495EC1EC6CE /* PlistEncoder.swift in Sources */,
40AAD537046D8467746A0306A7D7DF94 /* SceneKit.swift in Sources */,
10D5D6DB215978A01F67896D0FFF68A2 /* SnapshotTestCase.swift in Sources */,
21E34ED04696645D47BC124C8457D643 /* SnapshotTesting-dummy.m in Sources */,
51D28EADB4924A8096EDCEFC3D74CAB8 /* Snapshotting.swift in Sources */,
02EEAFC471B5BFF3DA9CA724B77ADAD2 /* SpriteKit.swift in Sources */,
B1B3C3B19CBD78FB949FDAB120FAFA81 /* String+SpecialCharacters.swift in Sources */,
A7911111D9E22FFCEB046C48BD26CD03 /* String.swift in Sources */,
D858C353CC2F564E42446D4E6E360668 /* SwiftUIView.swift in Sources */,
2569FB9BC55B0028DB8A0217666BD384 /* UIBezierPath.swift in Sources */,
F58CC71DED68C325B5EF5EAC30C8070F /* UIImage.swift in Sources */,
10B99D1C93DD69D92FE05AAC7CB287F8 /* UIView.swift in Sources */,
2617BFC93AAED6FFAC6C298D2F4D97AE /* UIViewController.swift in Sources */,
6A5C798F3DC6B29E72E741AC83C7203D /* URLRequest.swift in Sources */,
62C4188A8DB5CA43231DE8D64E72BD1D /* View.swift in Sources */,
2D0C0DD04AA4F9C170A4FBF0D3FD9626 /* Wait.swift in Sources */,
D5CF78CD0117EBB47C0F4CF5B69F021A /* XCTAttachment.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1146,7 +1162,7 @@
};
17CA3FA3AE34431A344A39057819E5E7 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = D20C54CBF964A3FE43CE7FE20719F6AD /* SwiftLint.debug.xcconfig */;
baseConfigurationReference = 0AC379D97F2A93184FF0C394113C0A62 /* SwiftLint.debug.xcconfig */;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@@ -1196,7 +1212,7 @@
};
1FCC4085AE75E6EE6949867655DABCA3 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9EFE8B971DF98A48094E8121DA5F22BE /* LightweightObservable.release.xcconfig */;
baseConfigurationReference = A37D5195BA402F028C3765D44BB0A28D /* LightweightObservable.release.xcconfig */;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
CODE_SIGN_IDENTITY = "";
@@ -1294,39 +1310,6 @@
};
name = Debug;
};
5DCF0058EDB786290640C7E69AC788CD /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = F2B4FFBC82EA6CAE84B65AE1835AF25A /* SnapshotTesting.debug.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*]" = "";
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/SnapshotTesting-prefix.pch";
INFOPLIST_FILE = "Target Support Files/SnapshotTesting/SnapshotTesting-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/SnapshotTesting.modulemap";
PRODUCT_MODULE_NAME = SnapshotTesting;
PRODUCT_NAME = SnapshotTesting;
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
SWIFT_VERSION = 5.1.2;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Debug;
};
80E22FC8391D193F17430BF26FFFB242 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = A95E7032DE35DF972EF7FEC8A884303B /* Pods-GradientLoadingBar_Example.debug.xcconfig */;
@@ -1362,9 +1345,42 @@
};
name = Debug;
};
8125FC061B36D7D28B8B294171D9725B /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = CC661FA820380145669722D4895E8BA6 /* SnapshotTesting.debug.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*]" = "";
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/SnapshotTesting-prefix.pch";
INFOPLIST_FILE = "Target Support Files/SnapshotTesting/SnapshotTesting-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MODULEMAP_FILE = "Target Support Files/SnapshotTesting/SnapshotTesting.modulemap";
PRODUCT_MODULE_NAME = SnapshotTesting;
PRODUCT_NAME = SnapshotTesting;
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
SWIFT_VERSION = 5.2;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Debug;
};
9327269EFED6EE74812D299A62B1A903 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 47AF808C977A1F54C41301EE10EFED69 /* SwiftFormat.release.xcconfig */;
baseConfigurationReference = 7019702436A62794D49920AA204E3FA8 /* SwiftFormat.release.xcconfig */;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@@ -1377,9 +1393,43 @@
};
name = Release;
};
A1CB03FC2AAE37182BFDFB359F8D1815 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 393A2EB9C57F6740D90A63725B4539AB /* SnapshotTesting.release.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*]" = "";
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/SnapshotTesting-prefix.pch";
INFOPLIST_FILE = "Target Support Files/SnapshotTesting/SnapshotTesting-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MODULEMAP_FILE = "Target Support Files/SnapshotTesting/SnapshotTesting.modulemap";
PRODUCT_MODULE_NAME = SnapshotTesting;
PRODUCT_NAME = SnapshotTesting;
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
SWIFT_VERSION = 5.2;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Release;
};
BC39C4F2B46BAA1105315ED909AD59A5 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 51265E01B15BDF30B0C2CBDF6A151BC4 /* LightweightObservable.debug.xcconfig */;
baseConfigurationReference = 8473B7101AE244EEF7BEDCED20A9BA92 /* LightweightObservable.debug.xcconfig */;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
CODE_SIGN_IDENTITY = "";
@@ -1409,43 +1459,9 @@
};
name = Debug;
};
C6D05A2DD3815BA9E9944D4A6774FA2B /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 3B644D77B6DA2AE767C93222955C0195 /* SnapshotTesting.release.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*]" = "";
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/SnapshotTesting-prefix.pch";
INFOPLIST_FILE = "Target Support Files/SnapshotTesting/SnapshotTesting-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/SnapshotTesting.modulemap";
PRODUCT_MODULE_NAME = SnapshotTesting;
PRODUCT_NAME = SnapshotTesting;
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
SWIFT_VERSION = 5.1.2;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Release;
};
CD1EFF489191A6C2906F500586741B2A /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = A2BEFE77478CF65195FEA6A6C36027C2 /* SwiftLint.release.xcconfig */;
baseConfigurationReference = 5257A01502362763E1F6E250104CB1EA /* SwiftLint.release.xcconfig */;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@@ -1593,7 +1609,7 @@
};
FAD77FF0D4D14006175039F7BFA6150B /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = ED80020D57E60A2BDBE6BE1EB9333D0A /* SwiftFormat.debug.xcconfig */;
baseConfigurationReference = B29B2057FFAA955F4F8223BDAAAF8B56 /* SwiftFormat.debug.xcconfig */;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@@ -1608,15 +1624,6 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
32867542F50A9BE9FCBEA5DBF1117399 /* Build configuration list for PBXNativeTarget "SnapshotTesting" */ = {
isa = XCConfigurationList;
buildConfigurations = (
5DCF0058EDB786290640C7E69AC788CD /* Debug */,
C6D05A2DD3815BA9E9944D4A6774FA2B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -1662,6 +1669,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
7F9B732C8F399A22A0B629A8BFFB52D5 /* Build configuration list for PBXNativeTarget "SnapshotTesting" */ = {
isa = XCConfigurationList;
buildConfigurations = (
8125FC061B36D7D28B8B294171D9725B /* Debug */,
A1CB03FC2AAE37182BFDFB359F8D1815 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
AE7B4FB01588B9E6DF09CB79FC7CE7BD /* Build configuration list for PBXAggregateTarget "SwiftLint" */ = {
isa = XCConfigurationList;
buildConfigurations = (
+11 -9
View File
@@ -1,7 +1,7 @@
# 📸 SnapshotTesting
[![Swift 5.1](https://img.shields.io/badge/swift-5.1-ED523F.svg?style=flat)](https://swift.org/download/)
[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fpointfreeco%2Fswift-snapshot-testing%2Fbadge&style=flat)](https://actions-badge.atrox.dev/pointfreeco/swift-snapshot-testing/goto)
[![CI](https://github.com/pointfreeco/swift-snapshot-testing/workflows/CI/badge.svg)](https://actions-badge.atrox.dev/pointfreeco/swift-snapshot-testing/goto)
[![@pointfreeco](https://img.shields.io/badge/contact-@pointfreeco-5AA9E7.svg?style=flat)](https://twitter.com/pointfreeco)
Delightful Swift snapshot testing.
@@ -35,7 +35,7 @@ When an assertion first runs, a snapshot is automatically recorded to disk and t
>
> 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.
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. Failures can be inspected from Xcode's Report Navigator or by inspecting the file URLs of the failure.
You can record a new reference by setting the `record` mode to `true` on the assertion or globally.
@@ -130,12 +130,12 @@ If your data can be represented as an image, text, or data, you can write a snap
### Xcode 11
> ⚠️ Warning: By default, Xcode will try to add the SnapshotTesting package to your project's targets. Please _uncheck_ SnapshotTesting in the final step of adding a Swift package to your target, as documented below.
> ⚠️ Warning: By default, Xcode will try to add the SnapshotTesting package to your project's main application/framework target. Please ensure that SnapshotTesting is added to a _test_ target instead, as documented in the last step, below.
1. From the **File** menu, navigate through **Swift Packages** and select **Add Package Dependency…**.
2. Enter package respository URL: `https://github.com/pointfreeco/swift-snapshot-testing.git`
2. Enter package repository URL: `https://github.com/pointfreeco/swift-snapshot-testing.git`
3. Confirm the version and let Xcode resolve the package
4. On the final dialog, _uncheck_ any box that adds the SnapshotTesting package to any target
4. On the final dialog, update SnapshotTesting's **Add to Target** column to a test target that will contain snapshot tests (if you have more than one test target, you can later add SnapshotTesting to them by manually linking the library in its build phase)
### Swift Package Manager
@@ -143,7 +143,7 @@ If you want to use SnapshotTesting in any other project that uses [SwiftPM](http
```swift
dependencies: [
.package(url: "https://github.com/pointfreeco/swift-snapshot-testing.git", from: "1.7.2"),
.package(name: "SnapshotTesting", url: "https://github.com/pointfreeco/swift-snapshot-testing.git", from: "1.8.0"),
]
```
@@ -161,7 +161,7 @@ targets: [
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.7.2
github "pointfreeco/swift-snapshot-testing" ~> 1.8.0
```
> ⚠️ 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:
@@ -179,7 +179,7 @@ If your project uses [CocoaPods](https://cocoapods.org), add the pod to any appl
```ruby
target 'MyAppTests' do
pod 'SnapshotTesting', '~> 1.7.2'
pod 'SnapshotTesting', '~> 1.8.0'
end
```
@@ -204,6 +204,8 @@ end
- [swift-html](https://github.com/pointfreeco/swift-html) is a Swift DSL for type-safe, extensible, and transformable HTML documents and includes an `HtmlSnapshotTesting` module to snapshot test its HTML documents.
- [GRDBSnapshotTesting](https://github.com/SebastianOsinski/GRDBSnapshotTesting) adds snapshot strategy for testing SQLite database migrations made with [GRDB](https://github.com/groue/GRDB.swift).
- [AccessibilitySnapshot+SnapshotTesting](https://github.com/Sherlouk/AccessibilitySnapshot-SnapshotTesting) adds [AccessibilitySnapshot](https://github.com/cashapp/AccessibilitySnapshot) support for SnapshotTesting.
Have you written your own SnapshotTesting plug-in? [Add it here](https://github.com/pointfreeco/swift-snapshot-testing/edit/master/README.md) and submit a pull request!
@@ -217,7 +219,7 @@ Have you written your own SnapshotTesting plug-in? [Add it here](https://github.
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).
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://twitter.com/mbrandonw) and [Stephen Celis](https://twitter.com/stephencelis).
Witness-oriented programming and the design of this library was explored in the following [Point-Free](https://www.pointfree.co) episodes:
@@ -83,7 +83,14 @@ public func _verifyInlineSnapshot<Value>(
case .completed:
break
case .timedOut:
return "Exceeded timeout of \(timeout) seconds waiting for snapshot"
return """
Exceeded timeout of \(timeout) seconds waiting for snapshot.
This can happen when an asynchronously rendered view (like a web view) has not loaded. \
Ensure that every subview of the view hierarchy has loaded to avoid timeouts, or, if a \
timeout is unavoidable, consider setting the "timeout" parameter of "assertSnapshot" to \
a higher value.
"""
case .incorrectOrder, .invertedFulfillment, .interrupted:
return "Couldn't snapshot value"
@unknown default:
@@ -48,7 +48,7 @@ public func assertSnapshot<Value, Format>(
///
/// - Parameters:
/// - value: A value to compare against a reference.
/// - snapshotting: An dictionnay of names and strategies for serializing, deserializing, and comparing values.
/// - snapshotting: A dictionary of names and strategies for serializing, deserializing, and comparing values.
/// - 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.
@@ -207,17 +207,24 @@ public func verifySnapshot<Value, Format>(
case .completed:
break
case .timedOut:
return "Exceeded timeout of \(timeout) seconds waiting for snapshot"
return """
Exceeded timeout of \(timeout) seconds waiting for snapshot.
This can happen when an asynchronously rendered view (like a web view) has not loaded. \
Ensure that every subview of the view hierarchy has loaded to avoid timeouts, or, if a \
timeout is unavoidable, consider setting the "timeout" parameter of "assertSnapshot" to \
a higher value.
"""
case .incorrectOrder, .invertedFulfillment, .interrupted:
return "Couldn't snapshot value"
@unknown default:
return "Couldn't snapshot value"
}
guard let diffable = optionalDiffable else {
guard var diffable = optionalDiffable else {
return "Couldn't snapshot value"
}
guard !recording, fileManager.fileExists(atPath: snapshotFileUrl.path) else {
try snapshotting.diffing.toData(diffable).write(to: snapshotFileUrl)
return recording
@@ -240,6 +247,13 @@ public func verifySnapshot<Value, Format>(
let data = try Data(contentsOf: snapshotFileUrl)
let reference = snapshotting.diffing.fromData(data)
#if os(iOS) || os(tvOS)
// If the image generation fails for the diffable part use the reference
if let localDiff = diffable as? UIImage, localDiff.size == .zero {
diffable = reference
}
#endif
guard let (failure, attachments) = snapshotting.diffing.diff(reference, diffable) else {
return nil
}
@@ -337,6 +337,11 @@ public struct ViewImageConfig {
size: .init(width: 1920, height: 1080),
traits: .init()
)
public static let tv4K = ViewImageConfig(
safeArea: .init(top: 120, left: 180, bottom: 120, right: 180),
size: .init(width: 3840, height: 2160),
traits: .init()
)
#endif
}
@@ -576,7 +581,7 @@ extension View {
#endif
return perform()
}
#if os(iOS) || os(tvOS)
#if (os(iOS) && !targetEnvironment(macCatalyst)) || os(tvOS)
if let glkView = self as? GLKView {
return Async(value: inWindow { glkView.snapshot })
}
@@ -603,6 +608,10 @@ extension View {
let work = {
if #available(iOS 11.0, macOS 10.13, *) {
inWindow {
guard wkWebView.frame.width != 0, wkWebView.frame.height != 0 else {
callback(Image())
return
}
wkWebView.takeSnapshot(with: nil) { image, _ in
_ = delegate
callback(image!)
@@ -628,6 +637,14 @@ extension View {
#endif
return nil
}
#if os(iOS) || os(tvOS)
func asImage() -> Image {
let renderer = UIGraphicsImageRenderer(bounds: bounds)
return renderer.image { rendererContext in
layer.render(in: rendererContext.cgContext)
}
}
#endif
}
#if os(iOS) || os(macOS)
@@ -647,13 +664,25 @@ private final class NavigationDelegate: NSObject, WKNavigationDelegate {
#endif
#if os(iOS) || os(tvOS)
extension UIApplication {
static var sharedIfAvailable: UIApplication? {
let sharedSelector = NSSelectorFromString("shared")
guard UIApplication.responds(to: sharedSelector) else {
return nil
}
let shared = UIApplication.perform(sharedSelector)
return shared?.takeUnretainedValue() as! UIApplication?
}
}
func prepareView(
config: ViewImageConfig,
drawHierarchyInKeyWindow: Bool,
traits: UITraitCollection,
view: UIView,
viewController: UIViewController
) {
) -> () -> Void {
let size = config.size ?? viewController.view.frame.size
view.frame.size = size
if view != viewController.view {
@@ -663,7 +692,7 @@ func prepareView(
let traits = UITraitCollection(traitsFrom: [config.traits, traits])
let window: UIWindow
if drawHierarchyInKeyWindow {
guard let keyWindow = UIApplication.shared.keyWindow else {
guard let keyWindow = UIApplication.sharedIfAvailable?.keyWindow else {
fatalError("'drawHierarchyInKeyWindow' requires tests to be run in a host application")
}
window = keyWindow
@@ -674,7 +703,7 @@ func prepareView(
viewController: viewController
)
}
add(traits: traits, viewController: viewController, to: window)
let dispose = add(traits: traits, viewController: viewController, to: window)
if size.width == 0 || size.height == 0 {
// Try to call sizeToFit() if the view still has invalid size
@@ -683,9 +712,7 @@ func prepareView(
view.layoutIfNeeded()
}
guard view.frame.size.width > 0, view.frame.size.height > 0 else {
fatalError("View not renderable to image at size \(size)")
}
return dispose
}
func snapshotView(
@@ -697,7 +724,7 @@ func snapshotView(
)
-> Async<UIImage> {
let initialFrame = view.frame
prepareView(
let dispose = prepareView(
config: config,
drawHierarchyInKeyWindow: drawHierarchyInKeyWindow,
traits: traits,
@@ -706,7 +733,8 @@ func snapshotView(
)
// NB: Avoid safe area influence.
if config.safeArea == .zero { view.frame.origin = .init(x: offscreen, y: offscreen) }
return view.snapshot ?? Async { callback in
return (view.snapshot ?? Async { callback in
addImagesForRenderedViews(view).sequence().run { views in
callback(
renderer(bounds: view.bounds, for: traits).image { ctx in
@@ -720,7 +748,7 @@ func snapshotView(
views.forEach { $0.removeFromSuperview() }
view.frame = initialFrame
}
}
}).map { dispose(); return $0 }
}
private let offscreen: CGFloat = 10_000
@@ -735,30 +763,34 @@ func renderer(bounds: CGRect, for traits: UITraitCollection) -> UIGraphicsImageR
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
rootViewController.addChild(viewController)
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),
private func add(traits: UITraitCollection, viewController: UIViewController, to window: UIWindow) -> () -> Void {
let rootViewController: UIViewController
if viewController != window.rootViewController {
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)
} else {
rootViewController = viewController
}
rootViewController.setOverrideTraitCollection(traits, forChild: viewController)
viewController.didMove(toParent: rootViewController)
window.rootViewController = rootViewController
rootViewController.beginAppearanceTransition(true, animated: false)
@@ -769,6 +801,12 @@ private func add(traits: UITraitCollection, viewController: UIViewController, to
viewController.view.setNeedsLayout()
viewController.view.layoutIfNeeded()
return {
rootViewController.beginAppearanceTransition(false, animated: false)
rootViewController.endAppearanceTransition()
window.rootViewController = nil
}
}
private final class Window: UIWindow {
@@ -48,7 +48,7 @@ public struct Snapshotting<Value, Format> {
/// Transforms a strategy on `Value`s into a strategy on `NewValue`s through a function `(NewValue) -> Value`.
///
/// This is the most important operation for transforming existing strategies into new strategies. It allows you to transform a `Snapshotting<Value, Format>` into a `Snapshotting<NewValue, Format>` by pulling it back along a function `(NewValue) -> Value`. Notice that the function must go in in the direction `(NewValue) -> Value` even though we are transforming in the other direction `(Snapshotting<Value, Format>) -> Snapshotting<NewValue, Format>`.
/// This is the most important operation for transforming existing strategies into new strategies. It allows you to transform a `Snapshotting<Value, Format>` into a `Snapshotting<NewValue, Format>` by pulling it back along a function `(NewValue) -> Value`. Notice that the function must go in the direction `(NewValue) -> Value` even though we are transforming in the other direction `(Snapshotting<Value, Format>) -> Snapshotting<NewValue, Format>`.
///
/// A simple example of this is to `pullback` the snapshot strategy on `UIView`s to work on `UIViewController`s:
///
@@ -0,0 +1,126 @@
#if os(macOS)
import Cocoa
extension Snapshotting where Value == CGPath, Format == NSImage {
/// A snapshot strategy for comparing bezier paths based on pixel equality.
public static var image: Snapshotting {
return .image()
}
/// A snapshot strategy for comparing bezier paths based on pixel equality.
///
/// - Parameter precision: The percentage of pixels that must match.
public static func image(precision: Float = 1, drawingMode: CGPathDrawingMode = .eoFill) -> Snapshotting {
return SimplySnapshotting.image(precision: precision).pullback { path in
let bounds = path.boundingBoxOfPath
var transform = CGAffineTransform(translationX: -bounds.origin.x, y: -bounds.origin.y)
let path = path.copy(using: &transform)!
let image = NSImage(size: bounds.size)
image.lockFocus()
let context = NSGraphicsContext.current!.cgContext
context.addPath(path)
context.drawPath(using: drawingMode)
image.unlockFocus()
return image
}
}
}
#elseif os(iOS) || os(tvOS)
import UIKit
extension Snapshotting where Value == CGPath, Format == UIImage {
/// A snapshot strategy for comparing bezier paths based on pixel equality.
public static var image: Snapshotting {
return .image()
}
/// A snapshot strategy for comparing bezier paths based on pixel equality.
///
/// - Parameter precision: The percentage of pixels that must match.
public static func image(precision: Float = 1, scale: CGFloat = 1, drawingMode: CGPathDrawingMode = .eoFill) -> Snapshotting {
return SimplySnapshotting.image(precision: precision).pullback { path in
let bounds = path.boundingBoxOfPath
let format: UIGraphicsImageRendererFormat
if #available(iOS 11.0, tvOS 11.0, *) {
format = UIGraphicsImageRendererFormat.preferred()
} else {
format = UIGraphicsImageRendererFormat.default()
}
format.scale = scale
return UIGraphicsImageRenderer(bounds: bounds, format: format).image { ctx in
let cgContext = ctx.cgContext
cgContext.addPath(path)
cgContext.drawPath(using: drawingMode)
}
}
}
}
#endif
#if os(macOS) || os(iOS) || os(tvOS)
@available(iOS 11.0, OSX 10.13, tvOS 11.0, *)
extension Snapshotting where Value == CGPath, Format == String {
/// A snapshot strategy for comparing bezier paths based on element descriptions.
public static var elementsDescription: Snapshotting {
return .elementsDescription(numberFormatter: defaultNumberFormatter)
}
/// A snapshot strategy for comparing bezier paths based on element descriptions.
///
/// - Parameter numberFormatter: The number formatter used for formatting points.
public static func elementsDescription(numberFormatter: NumberFormatter) -> Snapshotting {
let namesByType: [CGPathElementType: String] = [
.moveToPoint: "MoveTo",
.addLineToPoint: "LineTo",
.addQuadCurveToPoint: "QuadCurveTo",
.addCurveToPoint: "CurveTo",
.closeSubpath: "Close",
]
let numberOfPointsByType: [CGPathElementType: Int] = [
.moveToPoint: 1,
.addLineToPoint: 1,
.addQuadCurveToPoint: 2,
.addCurveToPoint: 3,
.closeSubpath: 0,
]
return SimplySnapshotting.lines.pullback { path in
var string: String = ""
path.applyWithBlock { elementPointer in
let element = elementPointer.pointee
let name = namesByType[element.type] ?? "Unknown"
if element.type == .moveToPoint && !string.isEmpty {
string += "\n"
}
string += name
if let numberOfPoints = numberOfPointsByType[element.type] {
let points = UnsafeBufferPointer(start: element.points, count: numberOfPoints)
string += " " + points.map { point in
let x = numberFormatter.string(from: point.x as NSNumber)!
let y = numberFormatter.string(from: point.y as NSNumber)!
return "(\(x), \(y))"
}.joined(separator: " ")
}
string += "\n"
}
return string
}
}
}
private let defaultNumberFormatter: NumberFormatter = {
let numberFormatter = NumberFormatter()
numberFormatter.minimumFractionDigits = 1
numberFormatter.maximumFractionDigits = 3
return numberFormatter
}()
#endif
@@ -0,0 +1,93 @@
#if os(macOS)
import Cocoa
extension Snapshotting where Value == NSBezierPath, Format == NSImage {
/// A snapshot strategy for comparing bezier paths based on pixel equality.
public static var image: Snapshotting {
return .image()
}
/// A snapshot strategy for comparing bezier paths based on pixel equality.
///
/// - Parameter precision: The percentage of pixels that must match.
public static func image(precision: Float = 1) -> Snapshotting {
return SimplySnapshotting.image(precision: precision).pullback { path in
// Move path info frame:
let bounds = path.bounds
let transform = AffineTransform(translationByX: -bounds.origin.x, byY: -bounds.origin.y)
path.transform(using: transform)
let image = NSImage(size: path.bounds.size)
image.lockFocus()
path.fill()
image.unlockFocus()
return image
}
}
}
extension Snapshotting where Value == NSBezierPath, Format == String {
/// A snapshot strategy for comparing bezier paths based on pixel equality.
@available(iOS 11.0, *)
public static var elementsDescription: Snapshotting {
return .elementsDescription(numberFormatter: defaultNumberFormatter)
}
/// A snapshot strategy for comparing bezier paths based on pixel equality.
///
/// - Parameter numberFormatter: The number formatter used for formatting points.
@available(iOS 11.0, *)
public static func elementsDescription(numberFormatter: NumberFormatter) -> Snapshotting {
let namesByType: [NSBezierPath.ElementType: String] = [
.moveTo: "MoveTo",
.lineTo: "LineTo",
.curveTo: "CurveTo",
.closePath: "Close",
]
let numberOfPointsByType: [NSBezierPath.ElementType: Int] = [
.moveTo: 1,
.lineTo: 1,
.curveTo: 3,
.closePath: 0,
]
return SimplySnapshotting.lines.pullback { path in
var string: String = ""
var elementPoints = [CGPoint](repeating: .zero, count: 3)
for elementIndex in 0..<path.elementCount {
let elementType = path.element(at: elementIndex, associatedPoints: &elementPoints)
let name = namesByType[elementType] ?? "Unknown"
if elementType == .moveTo && !string.isEmpty {
string += "\n"
}
string += name
if let numberOfPoints = numberOfPointsByType[elementType] {
let points = elementPoints[0..<numberOfPoints]
string += " " + points.map { point in
let x = numberFormatter.string(from: point.x as NSNumber)!
let y = numberFormatter.string(from: point.y as NSNumber)!
return "(\(x), \(y))"
}.joined(separator: " ")
}
string += "\n"
}
return string
}
}
}
private let defaultNumberFormatter: NumberFormatter = {
let numberFormatter = NumberFormatter()
numberFormatter.minimumFractionDigits = 1
numberFormatter.maximumFractionDigits = 3
return numberFormatter
}()
#endif
@@ -0,0 +1,83 @@
#if canImport(SwiftUI)
import Foundation
import SwiftUI
/// The size constraint for a snapshot (similar to `PreviewLayout`).
public enum SwiftUISnapshotLayout {
#if os(iOS) || os(tvOS)
/// Center the view in a device container described by`config`.
case device(config: ViewImageConfig)
#endif
/// Center the view in a fixed size container.
case fixed(width: CGFloat, height: CGFloat)
/// Fit the view to the ideal size that fits its content.
case sizeThatFits
}
#if os(iOS) || os(tvOS)
@available(iOS 13.0, tvOS 13.0, *)
extension Snapshotting where Value: SwiftUI.View, Format == UIImage {
/// A snapshot strategy for comparing SwiftUI Views based on pixel equality.
public static var image: Snapshotting {
return .image()
}
/// A snapshot strategy for comparing SwiftUI 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,
layout: SwiftUISnapshotLayout = .sizeThatFits,
traits: UITraitCollection = .init()
)
-> Snapshotting {
let config: ViewImageConfig
switch layout {
#if os(iOS) || os(tvOS)
case let .device(config: deviceConfig):
config = deviceConfig
#endif
case .sizeThatFits:
config = .init(safeArea: .zero, size: nil, traits: traits)
case let .fixed(width: width, height: height):
let size = CGSize(width: width, height: height)
config = .init(safeArea: .zero, size: size, traits: traits)
}
return SimplySnapshotting.image(precision: precision).asyncPullback { view in
var config = config
let controller: UIViewController
if config.size != nil {
controller = UIHostingController.init(
rootView: view
)
} else {
let hostingController = UIHostingController.init(rootView: view)
let maxSize = CGSize(width: 0.0, height: 0.0)
config.size = hostingController.sizeThatFits(in: maxSize)
controller = hostingController
}
return snapshotView(
config: config,
drawHierarchyInKeyWindow: drawHierarchyInKeyWindow,
traits: traits,
view: controller.view,
viewController: controller
)
}
}
}
#endif
#endif
@@ -0,0 +1,46 @@
#if os(iOS) || os(tvOS)
import UIKit
extension Snapshotting where Value == UIBezierPath, Format == UIImage {
/// A snapshot strategy for comparing bezier paths based on pixel equality.
public static var image: Snapshotting {
return .image()
}
/// A snapshot strategy for comparing bezier paths based on pixel equality.
///
/// - Parameter precision: The percentage of pixels that must match.
public static func image(precision: Float = 1, scale: CGFloat = 1) -> Snapshotting {
return SimplySnapshotting.image(precision: precision).pullback { path in
let bounds = path.bounds
let format: UIGraphicsImageRendererFormat
if #available(iOS 11.0, tvOS 11.0, *) {
format = UIGraphicsImageRendererFormat.preferred()
} else {
format = UIGraphicsImageRendererFormat.default()
}
format.scale = scale
return UIGraphicsImageRenderer(bounds: bounds, format: format).image { ctx in
path.fill()
}
}
}
}
@available(iOS 11.0, tvOS 11.0, *)
extension Snapshotting where Value == UIBezierPath, Format == String {
/// A snapshot strategy for comparing bezier paths based on pixel equality.
public static var elementsDescription: Snapshotting {
Snapshotting<CGPath, String>.elementsDescription.pullback { path in path.cgPath }
}
/// A snapshot strategy for comparing bezier paths based on pixel equality.
///
/// - Parameter numberFormatter: The number formatter used for formatting points.
public static func elementsDescription(numberFormatter: NumberFormatter) -> Snapshotting {
Snapshotting<CGPath, String>.elementsDescription(
numberFormatter: numberFormatter
).pullback { path in path.cgPath }
}
}
#endif
@@ -12,7 +12,7 @@ extension Diffing where Value == UIImage {
/// - Returns: A new diffing strategy.
public static func image(precision: Float) -> Diffing {
return Diffing(
toData: { $0.pngData()! },
toData: { $0.pngData() ?? emptyImage().pngData()! },
fromData: { UIImage(data: $0, scale: UIScreen.main.scale)! }
) { old, new in
guard !compare(old, new, precision: precision) else { return nil }
@@ -32,6 +32,17 @@ extension Diffing where Value == UIImage {
)
}
}
/// Used when the image size has no width or no height to generated the default empty image
private static func emptyImage() -> UIImage {
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 400, height: 80))
label.backgroundColor = .red
label.text = "Error: No image could be generated for this view as its size was zero. Please set an explicit size in the test."
label.textAlignment = .center
label.numberOfLines = 3
return label.asImage()
}
}
extension Snapshotting where Value == UIImage, Format == UIImage {
@@ -47,13 +47,14 @@ extension Snapshotting where Value == UIView, Format == String {
)
-> Snapshotting<UIView, String> {
return SimplySnapshotting.lines.pullback { view in
prepareView(
let dispose = prepareView(
config: .init(safeArea: .zero, size: size ?? view.frame.size, traits: traits),
drawHierarchyInKeyWindow: false,
traits: .init(),
view: view,
viewController: .init()
)
defer { dispose() }
return purgePointers(
view.perform(Selector(("recursiveDescription"))).retain().takeUnretainedValue()
as! String
@@ -64,13 +64,14 @@ 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<String, String>.lines.pullback { viewController in
prepareView(
let dispose = prepareView(
config: .init(),
drawHierarchyInKeyWindow: false,
traits: .init(),
view: viewController.view,
viewController: viewController
)
defer { dispose() }
return purgePointers(
viewController.perform(Selector(("_printHierarchy"))).retain().takeUnretainedValue() as! String
)
@@ -95,13 +96,14 @@ extension Snapshotting where Value == UIViewController, Format == String {
)
-> Snapshotting<UIViewController, String> {
return SimplySnapshotting.lines.pullback { viewController in
prepareView(
let dispose = prepareView(
config: .init(safeArea: config.safeArea, size: size ?? config.size, traits: config.traits),
drawHierarchyInKeyWindow: false,
traits: .init(),
traits: traits,
view: viewController.view,
viewController: viewController
)
defer { dispose() }
return purgePointers(
viewController.view.perform(Selector(("recursiveDescription"))).retain().takeUnretainedValue()
as! String
Binary file not shown.
+29 -14
View File
@@ -1,3 +1,5 @@
![](EditorExtension/Application/Assets.xcassets/AppIcon.appiconset/AppIcon256.png)
[![PayPal](https://img.shields.io/badge/paypal-donate-blue.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9ZGWNK5FEZFF6&source=url)
[![Travis](https://api.travis-ci.org/nicklockwood/SwiftFormat.svg?branch=master)](https://travis-ci.org/nicklockwood/SwiftFormat)
[![Coveralls](https://coveralls.io/repos/github/nicklockwood/SwiftFormat/badge.svg)](https://coveralls.io/github/nicklockwood/SwiftFormat)
@@ -156,7 +158,13 @@ If you prefer, you can use unix pipes to include SwiftFormat as part of a comman
$ cat /path/to/file.swift | swiftformat --output /path/to/file.swift
```
Omitting the `--output /path/to/file.swift` will print the formatted file to Standard Output (stdout). You can also use `>` to specify the output path as follows:
Omitting the `--output /path/to/file.swift` will print the formatted file to Standard Output (stdout). You can also pass "stdout" explicitly as the output path:
```bash
$ cat /path/to/file.swift | swiftformat --output stdout
```
Or you can use `>` to specify the output path as follows:
```bash
$ cat /path/to/file.swift | swiftformat > /path/to/file.swift
@@ -314,19 +322,20 @@ Git pre-commit hook
1. Follow the instructions for installing the SwiftFormat command-line tool.
2. Edit or create a `.git/hooks/pre-commit` file in your project folder. The .git folder is hidden but should already exist if you are using Git with your project, so open it with the terminal, or the Finder's `Go > Go to Folder...` menu.
2. Install [git-format-staged](https://github.com/hallettj/git-format-staged).
3. Add the following line in the pre-commit file (unlike the Xcode build phase approach, this uses your locally installed version of SwiftFormat, not a separate copy in your project repository)
3. Edit or create a `.git/hooks/pre-commit` file in your project folder. The .git folder is hidden but should already exist if you are using Git with your project, so open it with the terminal, or the Finder's `Go > Go to Folder...` menu.
4. Add the following line in the pre-commit file. The `{}` will be replaced automatically by the path to the Swift file being formatted:
```bash
#!/bin/bash
git diff --diff-filter=d --staged --name-only | grep -e '\.swift$' | while read line; do
swiftformat "${line}";
git add "$line";
done
git-format-staged --formatter "swiftformat stdin --stdinpath {}" "*.swift"
```
4. enable the hook by typing `chmod +x .git/hooks/pre-commit` in the terminal
(Note that this example uses your locally installed version of SwiftFormat, not a separate copy in your project repository. You can replace `swiftformat` with the path to a copy inside your project if you prefer.)
5. enable the hook by typing `chmod +x .git/hooks/pre-commit` in the terminal.
The pre-commit hook will now run whenever you run `git commit`. Running `git commit --no-verify` will skip the pre-commit hook.
@@ -635,12 +644,12 @@ FAQ
*Q. What platforms does SwiftFormat support?*
> A. SwiftFormat works on macOS 10.12 (Sierra) and above, and also runs on Ubuntu Linux.
> A. SwiftFormat works on macOS 10.13 (High Sierra) and above, and also runs on Ubuntu Linux.
*Q. What versions of Swift are supported?*
> A. The SwiftFormat framework and command-line tool can be compiled using Swift 4.0 and above, and can format programs written in Swift 3.x, 4.x or 5. Swift 2.x is no longer actively supported. If you are still using Swift 2.x, and find that SwiftFormat breaks your code, the best solution is probably to revert to an earlier SwiftFormat release, or enable only a small subset of rules.
> A. The SwiftFormat framework and command-line tool can be compiled using Swift 4.2 and above, and can format programs written in Swift 4.x or 5. Swift 3.x is no longer actively supported. If you are still using Swift 3.x or earlier and find that SwiftFormat breaks your code, the best solution is probably to revert to an earlier SwiftFormat release, or enable only a small subset of rules. Use the `--swiftversion` argument to enable additional rules specific to later Swift versions.
*Q. SwiftFormat made changes I didn't want it to. How can I find out which rules to disable?*
@@ -648,6 +657,11 @@ FAQ
> A. If you run SwiftFormat using the `--verbose` option, it will tell you which rules were applied to each file. You can then selectively disable certain rules using the `--disable` argument (see below).
*Q. People on my team have different SwiftFormat versions installed. How can we ensure consistent formatting?
> A. You can specify a `--minversion` argument in your project's .swiftformat` file to fail the build if developers attempt to use an older SwiftFormat version.
*Q. How can I modify the formatting rules?*
> A. Many configuration options are exposed in the command-line interface or `.swiftformat` configuration file. You can either set these manually, or use the `--inferoptions` argument to automatically generate the configuration from your existing project.
@@ -719,11 +733,12 @@ SwiftFormat is not a commercially-funded product, it's a labour of love given fr
Credits
------------
* [Tony Arnold](https://github.com/tonyarnold) - Xcode source editor extension
* [Vincent Bernier](https://github.com/vinceburn) - Xcode extension settings UI
* [Tony Arnold](https://github.com/tonyarnold) - SwiftFormat for Xcode
* [Vincent Bernier](https://github.com/vinceburn) - SwiftFormat for Xcode settings UI
* [Vikram Kriplaney](https://github.com/markiv) - SwiftFormat for Xcode icon
* [Maxime Marinel](https://github.com/bourvill) - Git pre-commit hook script
* [Romain Pouclet](https://github.com/palleas) - Homebrew formula
* [Aerobounce](https://github.com/aerobounce) - Homebrew cask for source editor extension
* [Aerobounce](https://github.com/aerobounce) - Homebrew cask for SwiftFormat for Xcode
* [Ali Akhtarzada](https://github.com/aliak00) - Several path-related CLI enhancements
* [Yonas Kolb](https://github.com/yonaskolb) - Swift Package Manager integration
* [Wolfgang Lutz](https://github.com/Lutzifer) - AppleScript integration instructions
@@ -3,6 +3,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Framewo
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GradientLoadingBar/GradientLoadingBar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LightweightObservable/LightweightObservable.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting/SnapshotTesting.framework/Headers"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting/SnapshotTesting.framework/Headers" -iframework "$(PLATFORM_DIR)/Developer/Library/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting"
OTHER_LDFLAGS = $(inherited) -framework "GradientLoadingBar" -framework "LightweightObservable" -framework "SnapshotTesting" -framework "XCTest"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
@@ -3,6 +3,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Framewo
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/GradientLoadingBar/GradientLoadingBar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LightweightObservable/LightweightObservable.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting/SnapshotTesting.framework/Headers"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting/SnapshotTesting.framework/Headers" -iframework "$(PLATFORM_DIR)/Developer/Library/Frameworks" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SnapshotTesting"
OTHER_LDFLAGS = $(inherited) -framework "GradientLoadingBar" -framework "LightweightObservable" -framework "SnapshotTesting" -framework "XCTest"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR}
@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.7.2</string>
<string>1.8.1</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
@@ -4,7 +4,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Framewo
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
LIBRARY_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/usr/lib"
OTHER_LDFLAGS = $(inherited) -framework "XCTest"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_ROOT = ${SRCROOT}
@@ -4,7 +4,7 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Framewo
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
LIBRARY_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/usr/lib"
OTHER_LDFLAGS = $(inherited) -framework "XCTest"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_ROOT = ${SRCROOT}
@@ -57,7 +57,7 @@ public extension GradientActivityIndicatorView {
self.isHidden = isFinished
completion?(isFinished)
})
})
}
/// Fade in the current view by setting the `isHidden` flag to `false` and animating the `alpha` to one.