diff --git a/Example/Podfile b/Example/Podfile new file mode 100644 index 00000000..0f2aa9b2 --- /dev/null +++ b/Example/Podfile @@ -0,0 +1,12 @@ +target 'TSMessages', :exclusive => true do + pod "TSMessages", :path => "../" +end + +target 'Tests', :exclusive => true do + pod "TSMessages", :path => "../" + + pod 'Specta', '~> 0.2.1' + pod 'Expecta' + pod 'FBSnapshotTestCase' + pod 'Expecta+Snapshots' +end diff --git a/Example/Podfile.lock b/Example/Podfile.lock new file mode 100644 index 00000000..03668710 --- /dev/null +++ b/Example/Podfile.lock @@ -0,0 +1,31 @@ +PODS: + - Expecta (0.3.1) + - Expecta+Snapshots (1.2.1): + - Expecta + - FBSnapshotTestCase + - FBSnapshotTestCase (1.1) + - HexColors (2.2.1) + - Specta (0.2.1) + - TSMessages (0.9.10): + - HexColors + +DEPENDENCIES: + - Expecta + - Expecta+Snapshots + - FBSnapshotTestCase + - Specta (~> 0.2.1) + - TSMessages (from `../`) + +EXTERNAL SOURCES: + TSMessages: + :path: ../ + +SPEC CHECKSUMS: + Expecta: 03aabd0a89d8dea843baecb19a7fd7466a69a31d + Expecta+Snapshots: 30c28e3d8104665ee70e32df1cfc030bb37a8a6c + FBSnapshotTestCase: 9053afee1d66b4c7c313fcb0ae582a5e47bea9d0 + HexColors: 01384d2bbe8dc4ffa43c3b4135db6e976952d153 + Specta: 9141310f46b1f68b676650ff2854e1ed0b74163a + TSMessages: 26a59c8a43cc80e1f918d9e7cbab527f4097d4d1 + +COCOAPODS: 0.33.1 diff --git a/Example/Pods/BuildHeaders/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h b/Example/Pods/BuildHeaders/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h new file mode 120000 index 00000000..88b3253b --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h @@ -0,0 +1 @@ +../../Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPBackwardCompatibility.h b/Example/Pods/BuildHeaders/Expecta/EXPBackwardCompatibility.h new file mode 120000 index 00000000..fc512575 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPBackwardCompatibility.h @@ -0,0 +1 @@ +../../Expecta/src/EXPBackwardCompatibility.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPBlockDefinedMatcher.h b/Example/Pods/BuildHeaders/Expecta/EXPBlockDefinedMatcher.h new file mode 120000 index 00000000..95335fa1 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPBlockDefinedMatcher.h @@ -0,0 +1 @@ +../../Expecta/src/EXPBlockDefinedMatcher.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPDefines.h b/Example/Pods/BuildHeaders/Expecta/EXPDefines.h new file mode 120000 index 00000000..2638e94d --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPDefines.h @@ -0,0 +1 @@ +../../Expecta/src/EXPDefines.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPDoubleTuple.h b/Example/Pods/BuildHeaders/Expecta/EXPDoubleTuple.h new file mode 120000 index 00000000..0921aa0f --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPDoubleTuple.h @@ -0,0 +1 @@ +../../Expecta/src/EXPDoubleTuple.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPExpect.h b/Example/Pods/BuildHeaders/Expecta/EXPExpect.h new file mode 120000 index 00000000..6d723600 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPExpect.h @@ -0,0 +1 @@ +../../Expecta/src/EXPExpect.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPFloatTuple.h b/Example/Pods/BuildHeaders/Expecta/EXPFloatTuple.h new file mode 120000 index 00000000..ece45732 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPFloatTuple.h @@ -0,0 +1 @@ +../../Expecta/src/EXPFloatTuple.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatcher.h b/Example/Pods/BuildHeaders/Expecta/EXPMatcher.h new file mode 120000 index 00000000..c79be902 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatcher.h @@ -0,0 +1 @@ +../../Expecta/src/EXPMatcher.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatcherHelpers.h b/Example/Pods/BuildHeaders/Expecta/EXPMatcherHelpers.h new file mode 120000 index 00000000..2b564af6 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatcherHelpers.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatcherHelpers.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beCloseTo.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beCloseTo.h new file mode 120000 index 00000000..c12bc7a5 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beCloseTo.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beCloseTo.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beFalsy.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beFalsy.h new file mode 120000 index 00000000..52efa658 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beFalsy.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beFalsy.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beGreaterThan.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beGreaterThan.h new file mode 120000 index 00000000..83514d74 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beGreaterThan.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beGreaterThan.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beGreaterThanOrEqualTo.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beGreaterThanOrEqualTo.h new file mode 120000 index 00000000..f1ff2c97 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beGreaterThanOrEqualTo.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beIdenticalTo.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beIdenticalTo.h new file mode 120000 index 00000000..c601f2e2 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beIdenticalTo.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beIdenticalTo.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beInTheRangeOf.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beInTheRangeOf.h new file mode 120000 index 00000000..c0b31eb4 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beInTheRangeOf.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beInTheRangeOf.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beInstanceOf.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beInstanceOf.h new file mode 120000 index 00000000..1a608464 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beInstanceOf.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beInstanceOf.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beKindOf.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beKindOf.h new file mode 120000 index 00000000..fa76c024 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beKindOf.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beKindOf.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beLessThan.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beLessThan.h new file mode 120000 index 00000000..c3245f45 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beLessThan.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beLessThan.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beLessThanOrEqualTo.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beLessThanOrEqualTo.h new file mode 120000 index 00000000..3b01c3eb --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beLessThanOrEqualTo.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beNil.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beNil.h new file mode 120000 index 00000000..12a7e3f1 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beNil.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beNil.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beSubclassOf.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beSubclassOf.h new file mode 120000 index 00000000..6a5deb86 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beSubclassOf.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beSubclassOf.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beSupersetOf.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beSupersetOf.h new file mode 120000 index 00000000..11686b12 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beSupersetOf.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beSupersetOf.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beTruthy.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beTruthy.h new file mode 120000 index 00000000..54c68cae --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beTruthy.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beTruthy.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beginWith.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beginWith.h new file mode 120000 index 00000000..ac38844e --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+beginWith.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beginWith.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+conformTo.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+conformTo.h new file mode 120000 index 00000000..1065cbba --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+conformTo.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+conformTo.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+contain.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+contain.h new file mode 120000 index 00000000..acc77a1d --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+contain.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+contain.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+endWith.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+endWith.h new file mode 120000 index 00000000..96994ee5 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+endWith.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+endWith.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+equal.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+equal.h new file mode 120000 index 00000000..5899cd0e --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+equal.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+equal.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+haveCountOf.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+haveCountOf.h new file mode 120000 index 00000000..3980491e --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+haveCountOf.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+haveCountOf.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+notify.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+notify.h new file mode 120000 index 00000000..2fd138df --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+notify.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+notify.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+raise.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+raise.h new file mode 120000 index 00000000..cba1bb04 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+raise.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+raise.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+raiseWithReason.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+raiseWithReason.h new file mode 120000 index 00000000..a2fcd871 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+raiseWithReason.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+raiseWithReason.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers+respondTo.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+respondTo.h new file mode 120000 index 00000000..5fc06399 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers+respondTo.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+respondTo.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPMatchers.h b/Example/Pods/BuildHeaders/Expecta/EXPMatchers.h new file mode 120000 index 00000000..60a6f9c1 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPMatchers.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/EXPUnsupportedObject.h b/Example/Pods/BuildHeaders/Expecta/EXPUnsupportedObject.h new file mode 120000 index 00000000..c16ffb8b --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/EXPUnsupportedObject.h @@ -0,0 +1 @@ +../../Expecta/src/EXPUnsupportedObject.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/Expecta.h b/Example/Pods/BuildHeaders/Expecta/Expecta.h new file mode 120000 index 00000000..b8fc5651 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/Expecta.h @@ -0,0 +1 @@ +../../Expecta/src/Expecta.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/ExpectaSupport.h b/Example/Pods/BuildHeaders/Expecta/ExpectaSupport.h new file mode 120000 index 00000000..b3e83b37 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/ExpectaSupport.h @@ -0,0 +1 @@ +../../Expecta/src/ExpectaSupport.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/NSObject+Expecta.h b/Example/Pods/BuildHeaders/Expecta/NSObject+Expecta.h new file mode 120000 index 00000000..6e1bf5e7 --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/NSObject+Expecta.h @@ -0,0 +1 @@ +../../Expecta/src/NSObject+Expecta.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Expecta/NSValue+Expecta.h b/Example/Pods/BuildHeaders/Expecta/NSValue+Expecta.h new file mode 120000 index 00000000..cfbc364d --- /dev/null +++ b/Example/Pods/BuildHeaders/Expecta/NSValue+Expecta.h @@ -0,0 +1 @@ +../../Expecta/src/NSValue+Expecta.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/FBSnapshotTestCase/FBSnapshotTestCase.h b/Example/Pods/BuildHeaders/FBSnapshotTestCase/FBSnapshotTestCase.h new file mode 120000 index 00000000..9a54bb78 --- /dev/null +++ b/Example/Pods/BuildHeaders/FBSnapshotTestCase/FBSnapshotTestCase.h @@ -0,0 +1 @@ +../../FBSnapshotTestCase/FBSnapshotTestCase.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/FBSnapshotTestCase/FBSnapshotTestController.h b/Example/Pods/BuildHeaders/FBSnapshotTestCase/FBSnapshotTestController.h new file mode 120000 index 00000000..89747d16 --- /dev/null +++ b/Example/Pods/BuildHeaders/FBSnapshotTestCase/FBSnapshotTestController.h @@ -0,0 +1 @@ +../../FBSnapshotTestCase/FBSnapshotTestController.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/FBSnapshotTestCase/UIImage+Compare.h b/Example/Pods/BuildHeaders/FBSnapshotTestCase/UIImage+Compare.h new file mode 120000 index 00000000..6f5df5c3 --- /dev/null +++ b/Example/Pods/BuildHeaders/FBSnapshotTestCase/UIImage+Compare.h @@ -0,0 +1 @@ +../../FBSnapshotTestCase/UIImage+Compare.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/FBSnapshotTestCase/UIImage+Diff.h b/Example/Pods/BuildHeaders/FBSnapshotTestCase/UIImage+Diff.h new file mode 120000 index 00000000..d7fc4733 --- /dev/null +++ b/Example/Pods/BuildHeaders/FBSnapshotTestCase/UIImage+Diff.h @@ -0,0 +1 @@ +../../FBSnapshotTestCase/UIImage+Diff.h \ No newline at end of file diff --git a/ExampleProject/Pods/BuildHeaders/HexColors/HexColor.h b/Example/Pods/BuildHeaders/HexColors/HexColor.h similarity index 100% rename from ExampleProject/Pods/BuildHeaders/HexColors/HexColor.h rename to Example/Pods/BuildHeaders/HexColors/HexColor.h diff --git a/Example/Pods/BuildHeaders/Specta/SPTExample.h b/Example/Pods/BuildHeaders/Specta/SPTExample.h new file mode 120000 index 00000000..421898bb --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/SPTExample.h @@ -0,0 +1 @@ +../../Specta/src/SPTExample.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/SPTExampleGroup.h b/Example/Pods/BuildHeaders/Specta/SPTExampleGroup.h new file mode 120000 index 00000000..769748e8 --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/SPTExampleGroup.h @@ -0,0 +1 @@ +../../Specta/src/SPTExampleGroup.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/SPTNestedReporter.h b/Example/Pods/BuildHeaders/Specta/SPTNestedReporter.h new file mode 120000 index 00000000..172992ec --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/SPTNestedReporter.h @@ -0,0 +1 @@ +../../Specta/src/SPTNestedReporter.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/SPTReporter.h b/Example/Pods/BuildHeaders/Specta/SPTReporter.h new file mode 120000 index 00000000..670e5d4e --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/SPTReporter.h @@ -0,0 +1 @@ +../../Specta/src/SPTReporter.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/SPTSharedExampleGroups.h b/Example/Pods/BuildHeaders/Specta/SPTSharedExampleGroups.h new file mode 120000 index 00000000..d4cd80aa --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/SPTSharedExampleGroups.h @@ -0,0 +1 @@ +../../Specta/src/SPTSharedExampleGroups.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/SPTSpec.h b/Example/Pods/BuildHeaders/Specta/SPTSpec.h new file mode 120000 index 00000000..a67403ec --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/SPTSpec.h @@ -0,0 +1 @@ +../../Specta/src/SPTSpec.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/SPTXCTestCase.h b/Example/Pods/BuildHeaders/Specta/SPTXCTestCase.h new file mode 120000 index 00000000..b8ed7931 --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/SPTXCTestCase.h @@ -0,0 +1 @@ +../../Specta/src/SPTXCTestCase.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/SPTXCTestReporter.h b/Example/Pods/BuildHeaders/Specta/SPTXCTestReporter.h new file mode 120000 index 00000000..d4cde9c7 --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/SPTXCTestReporter.h @@ -0,0 +1 @@ +../../Specta/src/SPTXCTestReporter.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/Specta.h b/Example/Pods/BuildHeaders/Specta/Specta.h new file mode 120000 index 00000000..c0835e84 --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/Specta.h @@ -0,0 +1 @@ +../../Specta/src/Specta.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/SpectaSupport.h b/Example/Pods/BuildHeaders/Specta/SpectaSupport.h new file mode 120000 index 00000000..13503046 --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/SpectaSupport.h @@ -0,0 +1 @@ +../../Specta/src/SpectaSupport.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/SpectaTypes.h b/Example/Pods/BuildHeaders/Specta/SpectaTypes.h new file mode 120000 index 00000000..83983c30 --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/SpectaTypes.h @@ -0,0 +1 @@ +../../Specta/src/SpectaTypes.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/SpectaUtility.h b/Example/Pods/BuildHeaders/Specta/SpectaUtility.h new file mode 120000 index 00000000..6491285a --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/SpectaUtility.h @@ -0,0 +1 @@ +../../Specta/src/SpectaUtility.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/XCTestCase+Specta.h b/Example/Pods/BuildHeaders/Specta/XCTestCase+Specta.h new file mode 120000 index 00000000..d2f567ed --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/XCTestCase+Specta.h @@ -0,0 +1 @@ +../../Specta/src/XCTestCase+Specta.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/XCTestLog+Specta.h b/Example/Pods/BuildHeaders/Specta/XCTestLog+Specta.h new file mode 120000 index 00000000..5e8c650b --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/XCTestLog+Specta.h @@ -0,0 +1 @@ +../../Specta/src/XCTestLog+Specta.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/Specta/XCTestRun+Specta.h b/Example/Pods/BuildHeaders/Specta/XCTestRun+Specta.h new file mode 120000 index 00000000..58583942 --- /dev/null +++ b/Example/Pods/BuildHeaders/Specta/XCTestRun+Specta.h @@ -0,0 +1 @@ +../../Specta/src/XCTestRun+Specta.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/TSMessages/TSBlurView.h b/Example/Pods/BuildHeaders/TSMessages/TSBlurView.h new file mode 120000 index 00000000..3358658d --- /dev/null +++ b/Example/Pods/BuildHeaders/TSMessages/TSBlurView.h @@ -0,0 +1 @@ +../../../../Pod/Classes/TSBlurView.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/TSMessages/TSMessage.h b/Example/Pods/BuildHeaders/TSMessages/TSMessage.h new file mode 120000 index 00000000..033e30a5 --- /dev/null +++ b/Example/Pods/BuildHeaders/TSMessages/TSMessage.h @@ -0,0 +1 @@ +../../../../Pod/Classes/TSMessage.h \ No newline at end of file diff --git a/Example/Pods/BuildHeaders/TSMessages/TSMessageView.h b/Example/Pods/BuildHeaders/TSMessages/TSMessageView.h new file mode 120000 index 00000000..88ac4c19 --- /dev/null +++ b/Example/Pods/BuildHeaders/TSMessages/TSMessageView.h @@ -0,0 +1 @@ +../../../../Pod/Classes/TSMessageView.h \ No newline at end of file diff --git a/Example/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h b/Example/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h new file mode 100644 index 00000000..37466e4d --- /dev/null +++ b/Example/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h @@ -0,0 +1,21 @@ +// +// EXPMatchers+FBSnapshotTest.h +// Artsy +// +// Created by Daniel Doubrovkine on 1/14/14. +// Copyright (c) 2014 Artsy Inc. All rights reserved. +// + +#import + +@interface EXPExpectFBSnapshotTest : NSObject +@end + +/// Set the default folder for image tests to run in +extern void setGlobalReferenceImageDir(char *reference); + +EXPMatcherInterface(haveValidSnapshot, (void)); +EXPMatcherInterface(recordSnapshot, (void)); + +EXPMatcherInterface(haveValidSnapshotNamed, (NSString *snapshot)); +EXPMatcherInterface(recordSnapshotNamed, (NSString *snapshot)); diff --git a/Example/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.m b/Example/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.m new file mode 100644 index 00000000..42282fad --- /dev/null +++ b/Example/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.m @@ -0,0 +1,314 @@ +// +// EXPMatchers+FBSnapshotTest.h +// Artsy +// +// Created by Daniel Doubrovkine on 1/14/14. +// Copyright (c) 2014 Artsy Inc. All rights reserved. +// + +#import "EXPMatchers+FBSnapshotTest.h" +#import +#import + +@interface EXPExpectFBSnapshotTest() +@property (nonatomic, strong) NSString *referenceImagesDirectory; +@end + +@implementation EXPExpectFBSnapshotTest + ++ (id)instance +{ + static EXPExpectFBSnapshotTest *instance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + instance = [[self alloc] init]; + }); + return instance; +} + ++ (BOOL)compareSnapshotOfViewOrLayer:(id)viewOrLayer snapshot:(NSString *)snapshot testCase:(id)testCase record:(BOOL)record referenceDirectory:(NSString *)referenceDirectory error:(NSError **)error + +{ + FBSnapshotTestController *snapshotController = [[FBSnapshotTestController alloc] initWithTestClass:[testCase class]]; + snapshotController.recordMode = record; + snapshotController.referenceImagesDirectory = referenceDirectory; + + if (! snapshotController.referenceImagesDirectory) { + [NSException raise:@"Missing value for referenceImagesDirectory" format:@"Call [[EXPExpectFBSnapshotTest instance] setReferenceImagesDirectory"]; + } + + return [snapshotController compareSnapshotOfViewOrLayer:viewOrLayer + selector:NSSelectorFromString(snapshot) + identifier:nil + error:error]; +} + ++ (NSString *)combinedError:(NSString *)message test:(NSString *)test error:(NSError *)error +{ + NSAssert(message, @"missing message"); + NSAssert(test, @"missing test name"); + + NSMutableArray *ary = [NSMutableArray array]; + + [ary addObject:[NSString stringWithFormat:@"%@ %@", message, test]]; + + for(NSString *key in error.userInfo.keyEnumerator) { + [ary addObject:[NSString stringWithFormat:@" %@: %@", key, [error.userInfo valueForKey:key]]]; + } + + return [ary componentsJoinedByString:@"\n"]; +} + +@end + +void setGlobalReferenceImageDir(char *reference) { + NSString *referenceImagesDirectory = [NSString stringWithFormat:@"%s", reference]; + [[EXPExpectFBSnapshotTest instance] setReferenceImagesDirectory:referenceImagesDirectory]; +}; + +@interface EXPExpect(ReferenceDirExtension) +- (NSString *)_getDefaultReferenceDirectory; +@end + +@implementation EXPExpect(ReferenceDirExtension) + +- (NSString *)_getDefaultReferenceDirectory +{ + NSString *globalReference = [[EXPExpectFBSnapshotTest instance] referenceImagesDirectory]; + if (globalReference) { + return globalReference; + } + + // Search the test file's path to find the first folder with the substring "tests" + // then append "/ReferenceImages" and use that + + NSString *testFileName = [NSString stringWithCString:self.fileName encoding:NSUTF8StringEncoding]; + NSArray *pathComponents = [testFileName pathComponents]; + + for (NSString *folder in pathComponents) { + if ([folder.lowercaseString rangeOfString:@"tests"].location != NSNotFound) { + + NSArray *folderPathComponents = [pathComponents subarrayWithRange:NSMakeRange(0, [pathComponents indexOfObject:folder] + 1)]; + return [NSString stringWithFormat:@"%@/ReferenceImages", [folderPathComponents componentsJoinedByString:@"/"]]; + + } + } + + [NSException raise:@"Could not infer reference image folder" format:@"You should provide a reference dir using setGlobalReferenceImageDir(FB_REFERENCE_IMAGE_DIR);"]; + return nil; +} +@end + + + +// If you're bringing in Speca via CocoaPods +// use the test path to get the test's image file URL + +#ifdef COCOAPODS_POD_AVAILABLE_Specta +#import +#import +#import + +NSString *sanitizedTestPath(); + +NSString *sanitizedTestPath(){ + SPTXCTestCase *test = [[NSThread currentThread] threadDictionary][SPTCurrentTestCaseKey]; + + SPTExample *compiledExample = [test spt_getCurrentExample]; + NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"]; + NSString *currentTestName = [[compiledExample.name componentsSeparatedByCharactersInSet:[charSet invertedSet]] componentsJoinedByString:@"_"]; + + return [NSString stringWithFormat:@"%@", currentTestName]; +} + +EXPMatcherImplementationBegin(haveValidSnapshot, (void)){ + __block NSError *error = nil; + + match(^BOOL{ + NSString *referenceImageDir = [self _getDefaultReferenceDirectory]; + NSString *name = sanitizedTestPath(); + if ([actual isKindOfClass:UIViewController.class]) { + [actual beginAppearanceTransition:YES animated:NO]; + [actual endAppearanceTransition]; + + actual = [actual view]; + } + + return [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:name testCase:[self testCase] record:NO referenceDirectory:referenceImageDir error:&error]; + }); + + failureMessageForTo(^NSString *{ + return [EXPExpectFBSnapshotTest combinedError:@"expected a matching snapshot in" test:sanitizedTestPath() error:error]; + }); + + failureMessageForNotTo(^NSString *{ + return [EXPExpectFBSnapshotTest combinedError:@"expected to not have a matching snapshot in" test:sanitizedTestPath() error:error]; + }); +} +EXPMatcherImplementationEnd + +EXPMatcherImplementationBegin(recordSnapshot, (void)) { + __block NSError *error = nil; + + BOOL actualIsViewLayerOrViewController = ([actual isKindOfClass:UIView.class] || [actual isKindOfClass:CALayer.class] || [actual isKindOfClass:UIViewController.class]); + + prerequisite(^BOOL{ + return actualIsViewLayerOrViewController; + }); + + match(^BOOL{ + NSString *referenceImageDir = [self _getDefaultReferenceDirectory]; + + // For view controllers do the viewWill/viewDid dance, then pass view through + if ([actual isKindOfClass:UIViewController.class]) { + + [actual beginAppearanceTransition:YES animated:NO]; + [actual endAppearanceTransition]; + actual = [actual view]; + } + + [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:sanitizedTestPath() testCase:[self testCase] record:YES referenceDirectory:referenceImageDir error:&error]; + return NO; + }); + + failureMessageForTo(^NSString *{ + if (!actualIsViewLayerOrViewController) { + return [EXPExpectFBSnapshotTest combinedError:@"Expected a View, Layer or View Controller." test:sanitizedTestPath() error:nil]; + } + if (error) { + return [EXPExpectFBSnapshotTest combinedError:@"expected to record a snapshot in" test:sanitizedTestPath() error:error]; + } else { + return [NSString stringWithFormat:@"snapshot %@ successfully recorded, replace recordSnapshot with a check", sanitizedTestPath()]; + } + }); + + failureMessageForNotTo(^NSString *{ + if (error) { + return [EXPExpectFBSnapshotTest combinedError:@"expected to record a snapshot in" test:sanitizedTestPath() error:error]; + } else { + return [NSString stringWithFormat:@"snapshot %@ successfully recorded, replace recordSnapshot with a check", sanitizedTestPath()]; + } + }); +} +EXPMatcherImplementationEnd + +#else + +// If you don't have Speca stub the functions + +EXPMatcherImplementationBegin(haveValidSnapshot, (void)){ + + prerequisite(^BOOL{ + return NO; + }); + + failureMessageForTo(^NSString *{ + return @"you need Specta installed via CocoaPods to use haveValidSnapshot, use haveValidSnapshotNamed instead"; + }); + + failureMessageForNotTo(^NSString *{ + return @"you need Specta installed via CocoaPods to use haveValidSnapshot, use haveValidSnapshotNamed instead"; + }); +} +EXPMatcherImplementationEnd + + +EXPMatcherImplementationBegin(recordSnapshot, (void)) { + __block NSError *error = nil; + + prerequisite(^BOOL{ + return NO; + }); + + failureMessageForTo(^NSString *{ + return @"you need Specta installed via CocoaPods to use recordSnapshot, use recordSnapshotNamed instead"; + }); + + failureMessageForNotTo(^NSString *{ + return @"you need Specta installed via CocoaPods to use recordSnapshot, use recordSnapshotNamed instead"; + }); +} +EXPMatcherImplementationEnd + + +#endif + + + +EXPMatcherImplementationBegin(haveValidSnapshotNamed, (NSString *snapshot)){ + BOOL snapshotIsNil = (snapshot == nil); + __block NSError *error = nil; + + prerequisite(^BOOL{ + return !(snapshotIsNil); + }); + + match(^BOOL{ + NSString *referenceImageDir = [self _getDefaultReferenceDirectory]; + if ([actual isKindOfClass:UIViewController.class]) { + [actual beginAppearanceTransition:YES animated:NO]; + [actual endAppearanceTransition]; + + actual = [actual view]; + } + return [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:snapshot testCase:[self testCase] record:NO referenceDirectory:referenceImageDir error:&error]; + }); + + failureMessageForTo(^NSString *{ + return [EXPExpectFBSnapshotTest combinedError:@"expected a matching snapshot named" test:snapshot error:error]; + + }); + + failureMessageForNotTo(^NSString *{ + return [EXPExpectFBSnapshotTest combinedError:@"expected not to have a matching snapshot named" test:snapshot error:error]; + }); +} +EXPMatcherImplementationEnd + +EXPMatcherImplementationBegin(recordSnapshotNamed, (NSString *snapshot)) { + BOOL snapshotExists = (snapshot != nil); + BOOL actualIsViewLayerOrViewController = ([actual isKindOfClass:UIView.class] || [actual isKindOfClass:CALayer.class] || [actual isKindOfClass:UIViewController.class]); + __block NSError *error = nil; + id actualRef = actual; + + prerequisite(^BOOL{ + return actualRef && snapshotExists && actualIsViewLayerOrViewController; + }); + + match(^BOOL{ + NSString *referenceImageDir = [self _getDefaultReferenceDirectory]; + + // For view controllers do the viewWill/viewDid dance, then pass view through + if ([actual isKindOfClass:UIViewController.class]) { + [actual beginAppearanceTransition:YES animated:NO]; + [actual endAppearanceTransition]; + actual = [actual view]; + } + + [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:snapshot testCase:[self testCase] record:YES referenceDirectory:referenceImageDir error:&error]; + return NO; + }); + + failureMessageForTo(^NSString *{ + if (!actualIsViewLayerOrViewController) { + return [EXPExpectFBSnapshotTest combinedError:@"Expected a View, Layer or View Controller." test:snapshot error:nil]; + } + if (error) { + return [EXPExpectFBSnapshotTest combinedError:@"expected to record a matching snapshot named" test:snapshot error:error]; + } else { + return [NSString stringWithFormat:@"snapshot %@ successfully recorded, replace recordSnapshot with a check", snapshot]; + } + }); + + failureMessageForNotTo(^NSString *{ + if (!actualIsViewLayerOrViewController) { + return [EXPExpectFBSnapshotTest combinedError:@"Expected a View, Layer or View Controller." test:snapshot error:nil]; + } + if (error) { + return [EXPExpectFBSnapshotTest combinedError:@"expected to record a matching snapshot named" test:snapshot error:error]; + } else { + return [NSString stringWithFormat:@"snapshot %@ successfully recorded, replace recordSnapshot with a check", snapshot]; + } + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta+Snapshots/LICENSE.md b/Example/Pods/Expecta+Snapshots/LICENSE.md new file mode 100644 index 00000000..47c9a3d6 --- /dev/null +++ b/Example/Pods/Expecta+Snapshots/LICENSE.md @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2014 Daniel Doubrovkine, Artsy Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Example/Pods/Expecta+Snapshots/README.md b/Example/Pods/Expecta+Snapshots/README.md new file mode 100644 index 00000000..5db32f1d --- /dev/null +++ b/Example/Pods/Expecta+Snapshots/README.md @@ -0,0 +1,85 @@ +Expecta Matchers for FBSnapshotTestCase +============================== + +[Expecta](https://github.com/specta/expecta) matchers for [ios-snapshot-test-case](https://github.com/facebook/ios-snapshot-test-case). + +[![Build Status](https://travis-ci.org/dblock/ios-snapshot-test-case-expecta.png)](https://travis-ci.org/dblock/ios-snapshot-test-case-expecta) + +### Usage + +Add `EXPMatchers+FBSnapshotTest` to your Podfile, the latest `FBSnapshotTestCase` will come in as a dependency. + +``` ruby +pod 'Expecta+Snapshots', '~> 1.0' +``` + +### App setup + +Use `expect(view).to.recordSnapshotNamed(@"unique snapshot name")` to record a snapshot and `expect(view).to.haveValidSnapshotNamed(@"unique snapshot name")` to check it. + +If you project was compiled with Specta included, you have two extra methods that use the spec hierarchy to generate the snapshot name for you: `recordSnapshot()` and `haveValidSnapshot()`. You should only call these once per `it()` block. + +``` Objective-C +#define EXP_SHORTHAND +#include +#include +#include +#include "FBExampleView.h" + +SpecBegin(FBExampleView) + +describe(@"manual matching", ^{ + + it(@"matches view", ^{ + FBExampleView *view = [[FBExampleView alloc] initWithFrame:CGRectMake(0, 0, 64, 64)]; + expect(view).to.recordSnapshotNamed(@"FBExampleView"); + expect(view).to.haveValidSnapshotNamed(@"FBExampleView"); + }); + + it(@"doesn't match a view", ^{ + FBExampleView *view = [[FBExampleView alloc] initWithFrame:CGRectMake(0, 0, 64, 64)]; + expect(view).toNot.haveValidSnapshotNamed(@"FBExampleViewDoesNotExist"); + }); + +}); + +describe(@"test name derived matching", ^{ + + it(@"matches view", ^{ + FBExampleView *view = [[FBExampleView alloc] initWithFrame:CGRectMake(0, 0, 64, 64)]; + expect(view).to.recordSnapshot(); + expect(view).to.haveValidSnapshot(); + }); + + it(@"doesn't match a view", ^{ + FBExampleView *view = [[FBExampleView alloc] initWithFrame:CGRectMake(0, 0, 64, 64)]; + expect(view).toNot.haveValidSnapshot(); + }); + +}); + +SpecEnd +``` + +### Sane defaults + +`EXPMatchers+FBSnapshotTest` will automatically figure out the tests folder, and [add a reference image](https://github.com/dblock/ios-snapshot-test-case-expecta/blob/master/EXPMatchers%2BFBSnapshotTest.m#L84-L85) directory, if you'd like to override this, you should include a `beforeAll` block setting the `setGlobalReferenceImageDir` in each file containing tests. + +``` +beforeAll(^{ + setGlobalReferenceImageDir(FB_REFERENCE_IMAGE_DIR); +}); +``` + + +### Example + +A complete project can be found in [FBSnapshotTestCaseDemo](FBSnapshotTestCaseDemo). + +Notably, take a look at [FBSnapshotTestCaseDemoSpecs.m](FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemoTests/FBSnapshotTestCaseDemoSpecs.m) for a complete example, which is an expanded Specta version version of [FBSnapshotTestCaseDemoTests.m](https://github.com/facebook/ios-snapshot-test-case/blob/master/FBSnapshotTestCaseDemo/FBSnapshotTestCaseDemoTests/FBSnapshotTestCaseDemoTests.m). + +Finally you can consult the tests for [ARTiledImageView](https://github.com/dblock/ARTiledImageView/tree/master/Demo/DemoTests) or [NAMapKit](https://github.com/neilang/NAMapKit/tree/master/Demo/DemoTests). + +### License + +MIT, see [LICENSE](LICENSE.md) diff --git a/Example/Pods/Expecta/LICENSE b/Example/Pods/Expecta/LICENSE new file mode 100644 index 00000000..cdac711f --- /dev/null +++ b/Example/Pods/Expecta/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011-2012 Specta Team - https://github.com/specta + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Example/Pods/Expecta/README.md b/Example/Pods/Expecta/README.md new file mode 100644 index 00000000..88192bd2 --- /dev/null +++ b/Example/Pods/Expecta/README.md @@ -0,0 +1,308 @@ +#Expecta + +[![Build Status](http://img.shields.io/travis/specta/expecta/master.svg?style=flat)](https://travis-ci.org/specta/expecta) +[![Pod Version](http://img.shields.io/cocoapods/v/Expecta.svg?style=flat)](http://cocoadocs.org/docsets/Expecta/) +[![Pod Platform](http://img.shields.io/cocoapods/p/Expecta.svg?style=flat)](http://cocoadocs.org/docsets/Expecta/) +[![Pod License](http://img.shields.io/cocoapods/l/Expecta.svg?style=flat)](https://www.apache.org/licenses/LICENSE-2.0.html) + +A Matcher Framework for Objective-C/Cocoa + +## NOTICE + +Expecta 0.3.x removes support for Garbage Collected targets, as support for these has been removed from Xcode 5.1 and greater. If you need Garbage Collection support, please continue to use Expecta 0.2.4. The minimum deployment targets have also been raised to iOS 5.x and OS X 10.7 or greater. + +Expecta 0.2.x and later has a new syntax that is slightly different from Expecta 0.1.x. For example `expect(x).toEqual(y)` should now be written as `expect(x).to.equal(y)`. You can do `#define EXP_OLD_SYNTAX` before importing `Expecta.h` to enable backward-compatiblity mode, but keep in mind that the old syntax is deprecated. + +## INTRODUCTION + +The main advantage of using Expecta over other matcher frameworks is that you do not have to specify the data types. Also, the syntax of Expecta matchers is much more readable and does not suffer from parenthesitis. + +**OCHamcrest** + +```objective-c +assertThat(@"foo", is(equalTo(@"foo"))); +assertThatUnsignedInteger(foo, isNot(equalToUnsignedInteger(1))); +assertThatBool([bar isBar], is(equalToBool(YES))); +assertThatDouble(baz, is(equalToDouble(3.14159))); +``` + +vs. **Expecta** + +```objective-c +expect(@"foo").to.equal(@"foo"); // `to` is a syntatic sugar and can be safely omitted. +expect(foo).notTo.equal(1); +expect([bar isBar]).to.equal(YES); +expect(baz).to.equal(3.14159); +``` + +## SETUP + +Use [CocoaPods](https://github.com/CocoaPods/CocoaPods) + +```ruby +target :MyApp do +#your app dependencies +end + +target :MyAppTests do + pod 'Expecta', '~> 0.2.4' # expecta matchers +#pod 'Specta', '~> 0.1.11' #specta bdd framework +end +``` + +or + +1. Clone from Github. +2. Run `rake` in project root to build. +3. Copy and add all header files in `products` folder to the Spec/Test target in your Xcode project. +4. For **OS X projects**, copy and add `libExpecta-macosx.a` in `products` folder to the Spec/Test target in your Xcode project. + For **iOS projects**, copy and add `libExpecta-ios-universal.a` in `products` folder to the Spec/Test target in your Xcode project. +5. Add `-ObjC` to the "Other Linker Flags" build setting for the Spec/Test target in your Xcode project. +6. Add the following to your test code. + +```objective-c +// #define EXP_OLD_SYNTAX // enable backward-compatibility +#define EXP_SHORTHAND +#import "Expecta.h" +``` + +If `EXP_SHORTHAND` is not defined, expectations must be written with `EXP_expect` instead of `expect`. + +Expecta is framework-agnostic. It works well with XCTest, OCUnit (SenTestingKit) and OCUnit-compatible test frameworks such as [Specta](http://github.com/petejkim/specta/), [GHUnit](http://github.com/gabriel/gh-unit/) and [GTMUnit](http://code.google.com/p/google-toolbox-for-mac/). Expecta also supports [Cedar](http://pivotal.github.com/cedar/). + +## BUILT-IN MATCHERS + +>`expect(x).to.equal(y);` compares objects or primitives x and y and passes if they are identical (==) or equivalent (isEqual:). +> +>`expect(x).to.beIdenticalTo(y);` compares objects x and y and passes if they are identical and have the same memory address. +> +>`expect(x).to.beNil();` passes if x is nil. +> +>`expect(x).to.beTruthy();` passes if x evaluates to true (non-zero). +> +>`expect(x).to.beFalsy();` passes if x evaluates to false (zero). +> +>`expect(x).to.contain(y);` passes if an instance of NSArray or NSString x contains y. +> +>`expect(x).to.beSupersetOf(y);` passes if an instance of NSArray, NSSet, NSDictionary or NSOrderedSet x contains all elements of y. +> +>`expect(x).to.haveCountOf(y);` passes if an instance of NSArray, NSSet, NSDictionary or NSString x has a count or length of y. +> +>`expect(x).to.beEmpty();` passes if an instance of NSArray, NSSet, NSDictionary or NSString x has a count or length of 0. +> +>`expect(x).to.beInstanceOf([Foo class]);` passes if x is an instance of a class Foo. +> +>`expect(x).to.beKindOf([Foo class]);` passes if x is an instance of a class Foo or if x is an instance of any class that inherits from the class Foo. +> +>`expect([Foo class]).to.beSubclassOf([Bar class]);` passes if the class Foo is a subclass of the class Bar or if it is identical to the class Bar. Use beKindOf() for class clusters. +> +>`expect(x).to.beLessThan(y);` passes if `x` is less than `y`. +> +>`expect(x).to.beLessThanOrEqualTo(y);` passes if `x` is less than or equal to `y`. +> +>`expect(x).to.beGreaterThan(y);` passes if `x` is greater than `y`. +> +>`expect(x).to.beGreaterThanOrEqualTo(y);` passes if `x` is greater than or equal to `y`. +> +>`expect(x).to.beInTheRangeOf(y,z);` passes if `x` is in the range of `y` and `z`. +> +>`expect(x).to.beCloseTo(y);` passes if `x` is close to `y`. +> +>`expect(x).to.beCloseToWithin(y, z);` passes if `x` is close to `y` within `z`. +> +>`expect(^{ /* code */ }).to.raise(@"ExceptionName");` passes if a given block of code raises an exception named `ExceptionName`. +> +>`expect(^{ /* code */ }).to.raiseAny();` passes if a given block of code raises any exception. +> +>`expect(x).to.conformTo(y);` passes if `x` conforms to the protocol `y`. +> +>`expect(x).to.respondTo(y);` passes if `x` responds to the selector `y`. +> +>`expect(^{ /* code */ }).to.notify(@"NotificationName");` passes if a given block of code generates an NSNotification named `NotificationName`. +> +>`expect(^{ /* code */ }).to.notify(notification);` passes if a given block of code generates an NSNotification equal to the passed `notification`. +> +>`expect(x).to.beginWith(y);` passes if an instance of NSString, NSArray, or NSOrderedSet `x` begins with `y`. Also aliased by `startWith` +> +>`expect(x).to.endWith(y);` passes if an instance of NSString, NSArray, or NSOrderedSet `x` ends with `y`. + +**Please contribute more matchers.** + +## INVERTING MATCHERS + +Every matcher's criteria can be inverted by prepending `.notTo` or `.toNot`: + +>`expect(x).notTo.equal(y);` compares objects or primitives x and y and passes if they are *not* equivalent. + +## ASYNCHRONOUS TESTING + +Every matcher can be made to perform asynchronous testing by prepending `.will`, `.willNot` or `after(...)`: + +>`expect(x).will.beNil();` passes if x becomes nil before the default timeout. +> +>`expect(x).willNot.beNil();` passes if x becomes non-nil before the default timeout. +> +>`expect(x).after(3).to.beNil();` passes if x becoms nil after 3.0 seconds. +> +>`expect(x).after(2.5).notTo.equal(42);` passes if x doesn't equal 42 after 2.5 seconds. + +Default timeout is 1.0 second and it's used for all matchers if not specified otherwise. This setting can be changed by calling `[Expecta setAsynchronousTestTimeout:x]`, where x is the desired timeout. + +```objective-c +describe(@"Foo", ^{ + beforeAll(^{ + // All asynchronous matching using `will` and `willNot` + // will have a timeout of 2.0 seconds + [Expecta setAsynchronousTestTimeout:2]; + }); + + it(@"will not be nil", ^{ + // Test case where default timeout is used + expect(foo).willNot.beNil(); + }); + + it(@"should equal 42 after 3 seconds", ^{ + // Signle case where timeout differs from the default + expect(foo).after(3).to.equal(42); + }); +}); +``` + +## WRITING NEW MATCHERS + +Writing a new matcher is easy with special macros provided by Expecta. Take a look at how `.beKindOf()` matcher is defined: + +`EXPMatchers+beKindOf.h` + +```objective-c +#import "Expecta.h" + +EXPMatcherInterface(beKindOf, (Class expected)); +// 1st argument is the name of the matcher function +// 2nd argument is the list of arguments that may be passed in the function +// call. +// Multiple arguments are fine. (e.g. (int foo, float bar)) + +#define beAKindOf beKindOf +``` + +`EXPMatchers+beKindOf.m` + +```objective-c +#import "EXPMatchers+beKindOf.h" + +EXPMatcherImplementationBegin(beKindOf, (Class expected)) { + BOOL actualIsNil = (actual == nil); + BOOL expectedIsNil = (expected == nil); + + prerequisite(^BOOL { + return !(actualIsNil || expectedIsNil); + // Return `NO` if matcher should fail whether or not the result is inverted + // using `.Not`. + }); + + match(^BOOL { + return [actual isKindOfClass:expected]; + // Return `YES` if the matcher should pass, `NO` if it should not. + // The actual value/object is passed as `actual`. + // Please note that primitive values will be wrapped in NSNumber/NSValue. + }); + + failureMessageForTo(^NSString * { + if (actualIsNil) + return @"the actual value is nil/null"; + if (expectedIsNil) + return @"the expected value is nil/null"; + return [NSString + stringWithFormat:@"expected: a kind of %@, " + "got: an instance of %@, which is not a kind of %@", + [expected class], [actual class], [expected class]]; + // Return the message to be displayed when the match function returns `YES`. + }); + + failureMessageForNotTo(^NSString * { + if (actualIsNil) + return @"the actual value is nil/null"; + if (expectedIsNil) + return @"the expected value is nil/null"; + return [NSString + stringWithFormat:@"expected: not a kind of %@, " + "got: an instance of %@, which is a kind of %@", + [expected class], [actual class], [expected class]]; + // Return the message to be displayed when the match function returns `NO`. + }); +} +EXPMatcherImplementationEnd +``` + +## DYNAMIC PREDICATE MATCHERS + +It is possible to add predicate matchers by simply defining the matcher interface, with the matcher implementation being handled at runtime by delegating to the predicate method on your object. + +For instance, if you have the following class: + +```objc +@interface LightSwitch : NSObject +@property (nonatomic, assign, getter=isTurnedOn) BOOL turnedOn; +@end + +@implementation LightSwitch +@synthesize turnedOn; +@end +``` + +The normal way to write an assertion that the switch is turned on would be: + +```objc +expect([lightSwitch isTurnedOn]).to.beTruthy(); +``` + +However, if we define a custom predicate matcher: + +```objc +EXPMatcherInterface(isTurnedOn, (void)); +``` + +(Note: we haven't defined the matcher implementation, just it's interface) + +You can now write your assertion as follows: + +```objc +expect(lightSwitch).isTurnedOn(); +``` + +## CONTRIBUTION + +You can find the public Tracker project [here](https://www.pivotaltracker.com/projects/323267). + +### CONTRIBUTION GUIDELINES + +* Please use only spaces and indent 2 spaces at a time. +* Please prefix instance variable names with a single underscore (`_`). +* Please prefix custom classes and functions defined in the global scope with `EXP`. + +## CREDITS + +Expecta is brought to you by [Peter Jihoon Kim](http://github.com/petejkim) and the [Specta team](https://github.com/specta?tab=members). + +### CONTRIBUTORS + +* [Alan Rogers](https://github.com/alanjrogers) +* [Andrew Kitchen](https://github.com/akitchen) +* [Blake Watters](https://github.com/blakewatters) +* [Christopher Pickslay](https://github.com/twobitlabs) +* [Chris Devereux](https://github.com/chrisdevereux) +* [David Hart](https://github.com/TrahDivad) +* [Jacob Gorban](https://github.com/apparentsoft) +* [Jon Cooper](https://github.com/joncooper) +* [Justin Spahr-Summers](https://github.com/jspahrsummers) +* [Kurtis Seebaldt](https://github.com/kseebaldt) +* [Luke Redpath](https://github.com/lukeredpath) +* [Nicholas Hutchinson](https://github.com/nickhutchinson) +* [Rob Rix](https://github.com/robrix) +* [Samuel Giddins](https://github.com/segiddins) +* [Zack Waugh](https://github.com/zachwaugh) + +## LICENSE + +Expecta is licensed under the [MIT License](http://github.com/petejkim/expecta/raw/master/LICENSE). diff --git a/Example/Pods/Expecta/src/EXPBackwardCompatibility.h b/Example/Pods/Expecta/src/EXPBackwardCompatibility.h new file mode 100644 index 00000000..36d0d391 --- /dev/null +++ b/Example/Pods/Expecta/src/EXPBackwardCompatibility.h @@ -0,0 +1,42 @@ +#import "EXPExpect.h" + +@interface EXPExpect (BackwardCompatiblity) + +@property(nonatomic, readonly) EXPExpect *Not; +@property(nonatomic, readonly) EXPExpect *isGoing; +@property(nonatomic, readonly) EXPExpect *isNotGoing; + +@end + +#define toBeFalsy beFalsy +#define toBeGreaterThan beGreaterThan +#define toBeGreaterThanOrEqualTo beGreaterThanOrEqualTo +#define toBeIdenticalTo beIdenticalTo +#define toBeInTheRangeOf beInTheRangeOf +#define toBeInstanceOf beInstanceOf +#define toBeAnInstanceOf beInstanceOf +#define toBeMemberOf beInstanceOf +#define toBeAMemberOf beInstanceOf +#define toBeKindOf beKindOf +#define toBeAKindOf beKindOf +#define toBeLessThan beLessThan +#define toBeLessThanOrEqualTo beLessThanOrEqualTo +#define toBeNil beNil +#define toBeNull beNil +#define toBeSubclassOf beSubclassOf +#define toBeASubclassOf beSubclassOf +#define toBeTruthy beTruthy +#define toBeFalsy beFalsy +#define toContain contain +#define toEqual equal +#define toBeCloseTo beCloseTo +#define toBeCloseToWithin beCloseToWithin +#define toHaveCount haveCountOf +#define toHaveCountOf haveCountOf +#define toHaveACountOf haveCountOf +#define toHaveLength haveCountOf +#define toHaveLengthOf haveCountOf +#define toHaveALengthOf haveCountOf +#define toBeEmpty beEmpty +#define toRaise raise +#define toRaiseAny raiseAny diff --git a/Example/Pods/Expecta/src/EXPBackwardCompatibility.m b/Example/Pods/Expecta/src/EXPBackwardCompatibility.m new file mode 100644 index 00000000..87a059bb --- /dev/null +++ b/Example/Pods/Expecta/src/EXPBackwardCompatibility.m @@ -0,0 +1,17 @@ +#import "EXPBackwardCompatibility.h" + +@implementation EXPExpect (BackwardCompatiblity) + +- (EXPExpect *)Not { + return self.toNot; +} + +- (EXPExpect *)isGoing { + return self.will; +} + +- (EXPExpect *)isNotGoing { + return self.willNot; +} + +@end diff --git a/Example/Pods/Expecta/src/EXPBlockDefinedMatcher.h b/Example/Pods/Expecta/src/EXPBlockDefinedMatcher.h new file mode 100644 index 00000000..58b12828 --- /dev/null +++ b/Example/Pods/Expecta/src/EXPBlockDefinedMatcher.h @@ -0,0 +1,25 @@ +// +// EXPRuntimeMatcher.h +// Expecta +// +// Created by Luke Redpath on 26/03/2012. +// Copyright (c) 2012 Peter Jihoon Kim. All rights reserved. +// + +#import +#import "EXPMatcher.h" +#import "EXPDefines.h" + +@interface EXPBlockDefinedMatcher : NSObject { + EXPBoolBlock prerequisiteBlock; + EXPBoolBlock matchBlock; + EXPStringBlock failureMessageForToBlock; + EXPStringBlock failureMessageForNotToBlock; +} + +@property(nonatomic, copy) EXPBoolBlock prerequisiteBlock; +@property(nonatomic, copy) EXPBoolBlock matchBlock; +@property(nonatomic, copy) EXPStringBlock failureMessageForToBlock; +@property(nonatomic, copy) EXPStringBlock failureMessageForNotToBlock; + +@end diff --git a/Example/Pods/Expecta/src/EXPBlockDefinedMatcher.m b/Example/Pods/Expecta/src/EXPBlockDefinedMatcher.m new file mode 100644 index 00000000..89bba377 --- /dev/null +++ b/Example/Pods/Expecta/src/EXPBlockDefinedMatcher.m @@ -0,0 +1,60 @@ +// +// EXPRuntimeMatcher.m +// Expecta +// +// Created by Luke Redpath on 26/03/2012. +// Copyright (c) 2012 Peter Jihoon Kim. All rights reserved. +// + +#import "EXPBlockDefinedMatcher.h" + +@implementation EXPBlockDefinedMatcher + +- (void)dealloc +{ + self.prerequisiteBlock = nil; + self.matchBlock = nil; + self.failureMessageForToBlock = nil; + self.failureMessageForNotToBlock = nil; + + [super dealloc]; +} + +@synthesize prerequisiteBlock; +@synthesize matchBlock; +@synthesize failureMessageForToBlock; +@synthesize failureMessageForNotToBlock; + +- (BOOL)meetsPrerequesiteFor:(id)actual +{ + if (self.prerequisiteBlock) { + return self.prerequisiteBlock(); + } + return YES; +} + +- (BOOL)matches:(id)actual +{ + if (self.matchBlock) { + return self.matchBlock(); + } + return YES; +} + +- (NSString *)failureMessageForTo:(id)actual +{ + if (self.failureMessageForToBlock) { + return self.failureMessageForToBlock(); + } + return nil; +} + +- (NSString *)failureMessageForNotTo:(id)actual +{ + if (self.failureMessageForNotToBlock) { + return self.failureMessageForNotToBlock(); + } + return nil; +} + +@end diff --git a/Example/Pods/Expecta/src/EXPDefines.h b/Example/Pods/Expecta/src/EXPDefines.h new file mode 100644 index 00000000..52af7219 --- /dev/null +++ b/Example/Pods/Expecta/src/EXPDefines.h @@ -0,0 +1,17 @@ +// +// EXPDefines.h +// Expecta +// +// Created by Luke Redpath on 26/03/2012. +// Copyright (c) 2012 Peter Jihoon Kim. All rights reserved. +// + +#ifndef Expecta_EXPDefines_h +#define Expecta_EXPDefines_h + +typedef void (^EXPBasicBlock)(); +typedef id (^EXPIdBlock)(); +typedef BOOL (^EXPBoolBlock)(); +typedef NSString *(^EXPStringBlock)(); + +#endif diff --git a/Example/Pods/Expecta/src/EXPDoubleTuple.h b/Example/Pods/Expecta/src/EXPDoubleTuple.h new file mode 100644 index 00000000..33409f1d --- /dev/null +++ b/Example/Pods/Expecta/src/EXPDoubleTuple.h @@ -0,0 +1,13 @@ +#import + +@interface EXPDoubleTuple : NSObject { + double *_values; + size_t _size; +} + +@property (nonatomic, assign) double *values; +@property (nonatomic, assign) size_t size; + +- (id)initWithDoubleValues:(double *)values size:(size_t)size; + +@end diff --git a/Example/Pods/Expecta/src/EXPDoubleTuple.m b/Example/Pods/Expecta/src/EXPDoubleTuple.m new file mode 100644 index 00000000..49d4ba85 --- /dev/null +++ b/Example/Pods/Expecta/src/EXPDoubleTuple.m @@ -0,0 +1,42 @@ +#import "EXPDoubleTuple.h" + +@implementation EXPDoubleTuple + +@synthesize values = _values, size = _size; + +- (id)initWithDoubleValues:(double *)values size:(size_t)size { + if ((self = [super init])) { + self.values = malloc(sizeof(double) * size); + memcpy(self.values, values, sizeof(double) * size); + self.size = size; + } + return self; +} + +- (void)dealloc { + free(self.values); + [super dealloc]; +} + +- (BOOL)isEqual:(id)object { + if (![object isKindOfClass:[EXPDoubleTuple class]]) return NO; + EXPDoubleTuple *other = (EXPDoubleTuple *)object; + if (self.size == other.size) { + for (int i = 0; i < self.size; ++i) { + if (self.values[i] != other.values[i]) return NO; + } + return YES; + } + return NO; +} + +- (NSString *)description { + if (self.size == 2) { + return [NSString stringWithFormat:@"Double tuple: {%f, %f}", self.values[0], self.values[1]]; + } else if (self.size == 4) { + return [NSString stringWithFormat:@"Double tuple: {%f, %f, %f, %f}", self.values[0], self.values[1], self.values[2], self.values[3]]; + } + return [NSString stringWithFormat:@"Double tuple of unexpected size %zd, sadly", self.size]; +} + +@end diff --git a/Example/Pods/Expecta/src/EXPExpect.h b/Example/Pods/Expecta/src/EXPExpect.h new file mode 100644 index 00000000..52f171fb --- /dev/null +++ b/Example/Pods/Expecta/src/EXPExpect.h @@ -0,0 +1,45 @@ +#import +#import "EXPMatcher.h" +#import "EXPDefines.h" + +@interface EXPExpect : NSObject { + EXPIdBlock _actualBlock; + id _testCase; + int _lineNumber; + char *_fileName; + BOOL _negative; + BOOL _asynchronous; + NSTimeInterval _timeout; +} + +@property(nonatomic, copy) EXPIdBlock actualBlock; +@property(nonatomic, readonly) id actual; +@property(nonatomic, assign) id testCase; +@property(nonatomic) int lineNumber; +@property(nonatomic) const char *fileName; +@property(nonatomic) BOOL negative; +@property(nonatomic) BOOL asynchronous; +@property(nonatomic) NSTimeInterval timeout; + +@property(nonatomic, readonly) EXPExpect *to; +@property(nonatomic, readonly) EXPExpect *toNot; +@property(nonatomic, readonly) EXPExpect *notTo; +@property(nonatomic, readonly) EXPExpect *will; +@property(nonatomic, readonly) EXPExpect *willNot; +@property(nonatomic, readonly) EXPExpect *(^after)(NSTimeInterval timeInterval); + +- (id)initWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName; ++ (EXPExpect *)expectWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName; + +- (void)applyMatcher:(id)matcher; +- (void)applyMatcher:(id)matcher to:(NSObject **)actual; + +@end + +@interface EXPDynamicPredicateMatcher : NSObject { + EXPExpect *_expectation; + SEL _selector; +} +- (id)initWithExpectation:(EXPExpect *)expectation selector:(SEL)selector; +- (void (^)(void))dispatch; +@end diff --git a/Example/Pods/Expecta/src/EXPExpect.m b/Example/Pods/Expecta/src/EXPExpect.m new file mode 100644 index 00000000..73a00e67 --- /dev/null +++ b/Example/Pods/Expecta/src/EXPExpect.m @@ -0,0 +1,214 @@ +#import "EXPExpect.h" +#import "NSObject+Expecta.h" +#import "Expecta.h" +#import "EXPUnsupportedObject.h" +#import "EXPMatcher.h" +#import "EXPBlockDefinedMatcher.h" +#import + +@implementation EXPExpect + +@dynamic + actual, + to, + toNot, + notTo, + will, + willNot, + after; + +@synthesize + actualBlock=_actualBlock, + testCase=_testCase, + negative=_negative, + asynchronous=_asynchronous, + timeout=_timeout, + lineNumber=_lineNumber, + fileName=_fileName; + +- (id)initWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName { + self = [super init]; + if(self) { + self.actualBlock = actualBlock; + self.testCase = testCase; + self.negative = NO; + self.asynchronous = NO; + self.timeout = [Expecta asynchronousTestTimeout]; + self.lineNumber = lineNumber; + self.fileName = fileName; + } + return self; +} + +- (void)dealloc +{ + self.actualBlock = nil; + [super dealloc]; +} + ++ (EXPExpect *)expectWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName { + return [[[EXPExpect alloc] initWithActualBlock:actualBlock testCase:(id)testCase lineNumber:lineNumber fileName:fileName] autorelease]; +} + +#pragma mark - + +- (EXPExpect *)to { + return self; +} + +- (EXPExpect *)toNot { + self.negative = !self.negative; + return self; +} + +- (EXPExpect *)notTo { + return [self toNot]; +} + +- (EXPExpect *)will { + self.asynchronous = YES; + return self; +} + +- (EXPExpect *)willNot { + return self.will.toNot; +} + +- (EXPExpect *(^)(NSTimeInterval))after +{ + EXPExpect * (^block)(NSTimeInterval) = [^EXPExpect *(NSTimeInterval timeout) { + self.asynchronous = YES; + self.timeout = timeout; + return self; + } copy]; + + return [block autorelease]; +} + +#pragma mark - + +- (id)actual { + if(self.actualBlock) { + return self.actualBlock(); + } + return nil; +} + +- (void)applyMatcher:(id)matcher +{ + id actual = [self actual]; + [self applyMatcher:matcher to:&actual]; +} + +- (void)applyMatcher:(id)matcher to:(NSObject **)actual { + if([*actual isKindOfClass:[EXPUnsupportedObject class]]) { + EXPFail(self.testCase, self.lineNumber, self.fileName, + [NSString stringWithFormat:@"expecting a %@ is not supported", ((EXPUnsupportedObject *)*actual).type]); + } else { + BOOL failed = NO; + if([matcher respondsToSelector:@selector(meetsPrerequesiteFor:)] && + ![matcher meetsPrerequesiteFor:*actual]) { + failed = YES; + } else { + BOOL matchResult = NO; + if(self.asynchronous) { + NSTimeInterval timeOut = self.timeout; + NSDate *expiryDate = [NSDate dateWithTimeIntervalSinceNow:timeOut]; + while(1) { + matchResult = [matcher matches:*actual]; + failed = self.negative ? matchResult : !matchResult; + if(!failed || ([(NSDate *)[NSDate date] compare:expiryDate] == NSOrderedDescending)) { + break; + } + [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; + OSMemoryBarrier(); + *actual = self.actual; + } + } else { + matchResult = [matcher matches:*actual]; + } + failed = self.negative ? matchResult : !matchResult; + } + if(failed) { + NSString *message = nil; + + if(self.negative) { + if ([matcher respondsToSelector:@selector(failureMessageForNotTo:)]) { + message = [matcher failureMessageForNotTo:*actual]; + } + } else { + if ([matcher respondsToSelector:@selector(failureMessageForTo:)]) { + message = [matcher failureMessageForTo:*actual]; + } + } + if (message == nil) { + message = @"Match Failed."; + } + + EXPFail(self.testCase, self.lineNumber, self.fileName, message); + } + } + self.negative = NO; +} + +#pragma mark - Dynamic predicate dispatch + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector +{ + if ([self.actual respondsToSelector:aSelector]) { + return [self.actual methodSignatureForSelector:aSelector]; + } + return [super methodSignatureForSelector:aSelector]; +} + +- (void)forwardInvocation:(NSInvocation *)anInvocation +{ + if ([self.actual respondsToSelector:anInvocation.selector]) { + EXPDynamicPredicateMatcher *matcher = [[EXPDynamicPredicateMatcher alloc] initWithExpectation:self selector:anInvocation.selector]; + [anInvocation setSelector:@selector(dispatch)]; + [anInvocation invokeWithTarget:matcher]; + [matcher release]; + } + else { + [super forwardInvocation:anInvocation]; + } +} + +@end + +@implementation EXPDynamicPredicateMatcher + +- (id)initWithExpectation:(EXPExpect *)expectation selector:(SEL)selector +{ + if ((self = [super init])) { + _expectation = expectation; + _selector = selector; + } + return self; +} + +- (BOOL)matches:(id)actual +{ + return (BOOL)[actual performSelector:_selector]; +} + +- (NSString *)failureMessageForTo:(id)actual +{ + return [NSString stringWithFormat:@"expected %@ to be true", NSStringFromSelector(_selector)]; +} + +- (NSString *)failureMessageForNotTo:(id)actual +{ + return [NSString stringWithFormat:@"expected %@ to be false", NSStringFromSelector(_selector)]; +} + +- (void (^)(void))dispatch +{ + __block id blockExpectation = _expectation; + + return [[^{ + [blockExpectation applyMatcher:self]; + } copy] autorelease]; +} + +@end diff --git a/Example/Pods/Expecta/src/EXPFloatTuple.h b/Example/Pods/Expecta/src/EXPFloatTuple.h new file mode 100644 index 00000000..bdb2685c --- /dev/null +++ b/Example/Pods/Expecta/src/EXPFloatTuple.h @@ -0,0 +1,13 @@ +#import + +@interface EXPFloatTuple : NSObject { + float *_values; + size_t _size; +} + +@property (nonatomic, assign) float *values; +@property (nonatomic, assign) size_t size; + +- (id)initWithFloatValues:(float *)values size:(size_t)size; + +@end diff --git a/Example/Pods/Expecta/src/EXPFloatTuple.m b/Example/Pods/Expecta/src/EXPFloatTuple.m new file mode 100644 index 00000000..8b19ea1e --- /dev/null +++ b/Example/Pods/Expecta/src/EXPFloatTuple.m @@ -0,0 +1,42 @@ +#import "EXPFloatTuple.h" + +@implementation EXPFloatTuple + +@synthesize values = _values, size = _size; + +- (id)initWithFloatValues:(float *)values size:(size_t)size { + if ((self = [super init])) { + self.values = malloc(sizeof(float) * size); + memcpy(self.values, values, sizeof(float) * size); + self.size = size; + } + return self; +} + +- (void)dealloc { + free(self.values); + [super dealloc]; +} + +- (BOOL)isEqual:(id)object { + if (![object isKindOfClass:[EXPFloatTuple class]]) return NO; + EXPFloatTuple *other = (EXPFloatTuple *)object; + if (self.size == other.size) { + for (int i = 0; i < self.size; ++i) { + if (self.values[i] != other.values[i]) return NO; + } + return YES; + } + return NO; +} + +- (NSString *)description { + if (self.size == 2) { + return [NSString stringWithFormat:@"Float tuple: {%f, %f}", self.values[0], self.values[1]]; + } else if (self.size == 4) { + return [NSString stringWithFormat:@"Float tuple: {%f, %f, %f, %f}", self.values[0], self.values[1], self.values[2], self.values[3]]; + } + return [NSString stringWithFormat:@"Float tuple of unexpected size %zd, sadly", self.size]; +} + +@end diff --git a/Example/Pods/Expecta/src/EXPMatcher.h b/Example/Pods/Expecta/src/EXPMatcher.h new file mode 100644 index 00000000..b207a842 --- /dev/null +++ b/Example/Pods/Expecta/src/EXPMatcher.h @@ -0,0 +1,20 @@ +// +// EXPMatcher.h +// Expecta +// +// Created by Luke Redpath on 26/03/2012. +// Copyright (c) 2012 Peter Jihoon Kim. All rights reserved. +// + +#import + +@protocol EXPMatcher + +- (BOOL)matches:(id)actual; + +@optional +- (BOOL)meetsPrerequesiteFor:(id)actual; +- (NSString *)failureMessageForTo:(id)actual; +- (NSString *)failureMessageForNotTo:(id)actual; + +@end diff --git a/Example/Pods/Expecta/src/EXPUnsupportedObject.h b/Example/Pods/Expecta/src/EXPUnsupportedObject.h new file mode 100644 index 00000000..bea746b4 --- /dev/null +++ b/Example/Pods/Expecta/src/EXPUnsupportedObject.h @@ -0,0 +1,11 @@ +#import + +@interface EXPUnsupportedObject : NSObject { + NSString *_type; +} + +@property (nonatomic, retain) NSString *type; + +- (id)initWithType:(NSString *)type; + +@end diff --git a/Example/Pods/Expecta/src/EXPUnsupportedObject.m b/Example/Pods/Expecta/src/EXPUnsupportedObject.m new file mode 100644 index 00000000..bfea0dac --- /dev/null +++ b/Example/Pods/Expecta/src/EXPUnsupportedObject.m @@ -0,0 +1,20 @@ +#import "EXPUnsupportedObject.h" + +@implementation EXPUnsupportedObject + +@synthesize type=_type; + +- (id)initWithType:(NSString *)type { + self = [super init]; + if(self) { + self.type = type; + } + return self; +} + +- (void)dealloc { + self.type = nil; + [super dealloc]; +} + +@end diff --git a/Example/Pods/Expecta/src/Expecta.h b/Example/Pods/Expecta/src/Expecta.h new file mode 100644 index 00000000..1049903f --- /dev/null +++ b/Example/Pods/Expecta/src/Expecta.h @@ -0,0 +1,27 @@ +#import +#import "ExpectaSupport.h" + +#define EXPObjectify(value) _EXPObjectify(@encode(__typeof__((value))), (value)) + +#define EXP_expect(actual) _EXP_expect(self, __LINE__, __FILE__, ^id{ return EXPObjectify((actual)); }) + +#define EXPMatcherInterface(matcherName, matcherArguments) _EXPMatcherInterface(matcherName, matcherArguments) +#define EXPMatcherImplementationBegin(matcherName, matcherArguments) _EXPMatcherImplementationBegin(matcherName, matcherArguments) +#define EXPMatcherImplementationEnd _EXPMatcherImplementationEnd + +#import "EXPMatchers.h" + +#ifdef EXP_SHORTHAND +# define expect(...) EXP_expect((__VA_ARGS__)) +#endif + +#ifdef EXP_OLD_SYNTAX +# import "EXPBackwardCompatibility.h" +#endif + +@interface Expecta : NSObject + ++ (NSTimeInterval)asynchronousTestTimeout; ++ (void)setAsynchronousTestTimeout:(NSTimeInterval)timeout; + +@end diff --git a/Example/Pods/Expecta/src/Expecta.m b/Example/Pods/Expecta/src/Expecta.m new file mode 100644 index 00000000..00d22809 --- /dev/null +++ b/Example/Pods/Expecta/src/Expecta.m @@ -0,0 +1,15 @@ +#import "Expecta.h" + +@implementation Expecta + +static NSTimeInterval _asynchronousTestTimeout = 1.0; + ++ (NSTimeInterval)asynchronousTestTimeout { + return _asynchronousTestTimeout; +} + ++ (void)setAsynchronousTestTimeout:(NSTimeInterval)timeout { + _asynchronousTestTimeout = timeout; +} + +@end \ No newline at end of file diff --git a/Example/Pods/Expecta/src/ExpectaSupport.h b/Example/Pods/Expecta/src/ExpectaSupport.h new file mode 100644 index 00000000..e843ff93 --- /dev/null +++ b/Example/Pods/Expecta/src/ExpectaSupport.h @@ -0,0 +1,64 @@ +#import "EXPExpect.h" +#import "EXPBlockDefinedMatcher.h" + +#ifdef __cplusplus +extern "C" { +#endif + +id _EXPObjectify(const char *type, ...); +EXPExpect *_EXP_expect(id testCase, int lineNumber, const char *fileName, EXPIdBlock actualBlock); + +void EXPFail(id testCase, int lineNumber, const char *fileName, NSString *message); +NSString *EXPDescribeObject(id obj); + +void EXP_prerequisite(EXPBoolBlock block); +void EXP_match(EXPBoolBlock block); +void EXP_failureMessageForTo(EXPStringBlock block); +void EXP_failureMessageForNotTo(EXPStringBlock block); + +#if __has_feature(objc_arc) +#define _EXP_release(x) +#define _EXP_autorelease(x) (x) + +#else +#define _EXP_release(x) [x release] +#define _EXP_autorelease(x) [x autorelease] +#endif + +// workaround for the categories bug: http://developer.apple.com/library/mac/#qa/qa1490/_index.html +#define EXPFixCategoriesBug(name) \ +__attribute__((constructor)) static void EXPFixCategoriesBug##name() {} + +#define _EXPMatcherInterface(matcherName, matcherArguments) \ +@interface EXPExpect (matcherName##Matcher) \ +@property (nonatomic, readonly) void(^ matcherName) matcherArguments; \ +@end + +#define _EXPMatcherImplementationBegin(matcherName, matcherArguments) \ +EXPFixCategoriesBug(EXPMatcher##matcherName##Matcher); \ +@implementation EXPExpect (matcherName##Matcher) \ +@dynamic matcherName;\ +- (void(^) matcherArguments) matcherName { \ + EXPBlockDefinedMatcher *matcher = [[EXPBlockDefinedMatcher alloc] init]; \ + [[[NSThread currentThread] threadDictionary] setObject:matcher forKey:@"EXP_currentMatcher"]; \ + __block id actual = self.actual; \ + __block void (^prerequisite)(EXPBoolBlock block) = ^(EXPBoolBlock block) { EXP_prerequisite(block); }; \ + __block void (^match)(EXPBoolBlock block) = ^(EXPBoolBlock block) { EXP_match(block); }; \ + __block void (^failureMessageForTo)(EXPStringBlock block) = ^(EXPStringBlock block) { EXP_failureMessageForTo(block); }; \ + __block void (^failureMessageForNotTo)(EXPStringBlock block) = ^(EXPStringBlock block) { EXP_failureMessageForNotTo(block); }; \ + prerequisite(nil); match(nil); failureMessageForTo(nil); failureMessageForNotTo(nil); \ + void (^matcherBlock) matcherArguments = [^ matcherArguments { \ + { + +#define _EXPMatcherImplementationEnd \ + } \ + [self applyMatcher:matcher to:&actual]; \ + } copy]; \ + _EXP_release(matcher); \ + return _EXP_autorelease(matcherBlock); \ +} \ +@end + +#ifdef __cplusplus +} +#endif diff --git a/Example/Pods/Expecta/src/ExpectaSupport.m b/Example/Pods/Expecta/src/ExpectaSupport.m new file mode 100644 index 00000000..bb3df655 --- /dev/null +++ b/Example/Pods/Expecta/src/ExpectaSupport.m @@ -0,0 +1,187 @@ +#import "ExpectaSupport.h" +#import "NSValue+Expecta.h" +#import "NSObject+Expecta.h" +#import "EXPUnsupportedObject.h" +#import "EXPFloatTuple.h" +#import "EXPDoubleTuple.h" +#import "EXPDefines.h" +#import + +@interface NSException (ExpectaSenTestFailure) + ++ (NSException *)failureInFile:(NSString *)filename atLine:(int)lineNumber withDescription:(NSString *)formatString, ...; + +@end + +@interface NSObject (ExpectaXCTestRecordFailure) + +// suppress warning +- (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filename atLine:(NSUInteger)lineNumber expected:(BOOL)expected; + +@end + +id _EXPObjectify(const char *type, ...) { + va_list v; + va_start(v, type); + id obj = nil; + if(strcmp(type, @encode(char)) == 0) { + char actual = (char)va_arg(v, int); + obj = [NSNumber numberWithChar:actual]; + } else if(strcmp(type, @encode(_Bool)) == 0) { + _Static_assert(sizeof(_Bool) <= sizeof(int), "Expected _Bool to be subject to vararg type promotion"); + _Bool actual = (_Bool)va_arg(v, int); + obj = [NSNumber numberWithBool:actual]; + } else if(strcmp(type, @encode(double)) == 0) { + double actual = (double)va_arg(v, double); + obj = [NSNumber numberWithDouble:actual]; + } else if(strcmp(type, @encode(float)) == 0) { + float actual = (float)va_arg(v, double); + obj = [NSNumber numberWithFloat:actual]; + } else if(strcmp(type, @encode(int)) == 0) { + int actual = (int)va_arg(v, int); + obj = [NSNumber numberWithInt:actual]; + } else if(strcmp(type, @encode(long)) == 0) { + long actual = (long)va_arg(v, long); + obj = [NSNumber numberWithLong:actual]; + } else if(strcmp(type, @encode(long long)) == 0) { + long long actual = (long long)va_arg(v, long long); + obj = [NSNumber numberWithLongLong:actual]; + } else if(strcmp(type, @encode(short)) == 0) { + short actual = (short)va_arg(v, int); + obj = [NSNumber numberWithShort:actual]; + } else if(strcmp(type, @encode(unsigned char)) == 0) { + unsigned char actual = (unsigned char)va_arg(v, unsigned int); + obj = [NSNumber numberWithUnsignedChar:actual]; + } else if(strcmp(type, @encode(unsigned int)) == 0) { + unsigned int actual = (int)va_arg(v, unsigned int); + obj = [NSNumber numberWithUnsignedInt:actual]; + } else if(strcmp(type, @encode(unsigned long)) == 0) { + unsigned long actual = (unsigned long)va_arg(v, unsigned long); + obj = [NSNumber numberWithUnsignedLong:actual]; + } else if(strcmp(type, @encode(unsigned long long)) == 0) { + unsigned long long actual = (unsigned long long)va_arg(v, unsigned long long); + obj = [NSNumber numberWithUnsignedLongLong:actual]; + } else if(strcmp(type, @encode(unsigned short)) == 0) { + unsigned short actual = (unsigned short)va_arg(v, unsigned int); + obj = [NSNumber numberWithUnsignedShort:actual]; + } else if(strstr(type, @encode(EXPBasicBlock)) != NULL) { + // @encode(EXPBasicBlock) returns @? as of clang 4.1. + // This condition must occur before the test for id/class type, + // otherwise blocks will be treated as vanilla objects. + id actual = va_arg(v, EXPBasicBlock); + obj = [[actual copy] autorelease]; + } else if((strstr(type, @encode(id)) != NULL) || (strstr(type, @encode(Class)) != 0)) { + id actual = va_arg(v, id); + obj = actual; + } else if(strcmp(type, @encode(__typeof__(nil))) == 0) { + obj = nil; + } else if(strstr(type, "ff}{") != NULL) { //TODO: of course this only works for a 2x2 e.g. CGRect + obj = [[[EXPFloatTuple alloc] initWithFloatValues:(float *)va_arg(v, float[4]) size:4] autorelease]; + } else if(strstr(type, "=ff}") != NULL) { + obj = [[[EXPFloatTuple alloc] initWithFloatValues:(float *)va_arg(v, float[2]) size:2] autorelease]; + } else if(strstr(type, "=ffff}") != NULL) { + obj = [[[EXPFloatTuple alloc] initWithFloatValues:(float *)va_arg(v, float[4]) size:4] autorelease]; + } else if(strstr(type, "dd}{") != NULL) { //TODO: same here + obj = [[[EXPDoubleTuple alloc] initWithDoubleValues:(double *)va_arg(v, double[4]) size:4] autorelease]; + } else if(strstr(type, "=dd}") != NULL) { + obj = [[[EXPDoubleTuple alloc] initWithDoubleValues:(double *)va_arg(v, double[2]) size:2] autorelease]; + } else if(strstr(type, "=dddd}") != NULL) { + obj = [[[EXPDoubleTuple alloc] initWithDoubleValues:(double *)va_arg(v, double[4]) size:4] autorelease]; + } else if(type[0] == '{') { + EXPUnsupportedObject *actual = [[[EXPUnsupportedObject alloc] initWithType:@"struct"] autorelease]; + obj = actual; + } else if(type[0] == '(') { + EXPUnsupportedObject *actual = [[[EXPUnsupportedObject alloc] initWithType:@"union"] autorelease]; + obj = actual; + } else { + void *actual = va_arg(v, void *); + obj = (actual == NULL ? nil :[NSValue valueWithPointer:actual]); + } + if([obj isKindOfClass:[NSValue class]] && ![obj isKindOfClass:[NSNumber class]]) { + [(NSValue *)obj set_EXP_objCType:type]; + } + va_end(v); + return obj; +} + +EXPExpect *_EXP_expect(id testCase, int lineNumber, const char *fileName, EXPIdBlock actualBlock) { + return [EXPExpect expectWithActualBlock:actualBlock testCase:testCase lineNumber:lineNumber fileName:fileName]; +} + +void EXPFail(id testCase, int lineNumber, const char *fileName, NSString *message) { + NSLog(@"%s:%d %@", fileName, lineNumber, message); + NSString *reason = [NSString stringWithFormat:@"%s:%d %@", fileName, lineNumber, message]; + NSException *exception = [NSException exceptionWithName:@"Expecta Error" reason:reason userInfo:nil]; + + if(testCase && [testCase respondsToSelector:@selector(failWithException:)]) { + if([[(Class)objc_getMetaClass("NSException") class] instancesRespondToSelector:@selector(failureInFile:atLine:withDescription:)]) { + exception = [NSException failureInFile:[NSString stringWithUTF8String:fileName] atLine:lineNumber withDescription:message]; + } + [testCase failWithException:exception]; + } else if(testCase && [testCase respondsToSelector:@selector(recordFailureWithDescription:inFile:atLine:expected:)]){ + [testCase recordFailureWithDescription:message + inFile:[NSString stringWithUTF8String:fileName] + atLine:lineNumber + expected:NO]; + } else { + [exception raise]; + } +} + +NSString *EXPDescribeObject(id obj) { + if(obj == nil) { + return @"nil/null"; + } else if([obj isKindOfClass:[NSValue class]] && ![obj isKindOfClass:[NSNumber class]]) { + const char *type = [(NSValue *)obj _EXP_objCType]; + if(type) { + if(strcmp(type, @encode(SEL)) == 0) { + return [NSString stringWithFormat:@"@selector(%@)", NSStringFromSelector([obj pointerValue])]; + } else if(strcmp(type, @encode(Class)) == 0) { + return NSStringFromClass([obj pointerValue]); + } + } + } + NSString *description = [obj description]; + if([obj isKindOfClass:[NSArray class]]) { + NSMutableArray *arr = [NSMutableArray arrayWithCapacity:[obj count]]; + for(id o in obj) { + [arr addObject:EXPDescribeObject(o)]; + } + description = [NSString stringWithFormat:@"(%@)", [arr componentsJoinedByString:@", "]]; + } else if([obj isKindOfClass:[NSSet class]] || [obj isKindOfClass:[NSOrderedSet class]]) { + NSMutableArray *arr = [NSMutableArray arrayWithCapacity:[obj count]]; + for(id o in obj) { + [arr addObject:EXPDescribeObject(o)]; + } + description = [NSString stringWithFormat:@"{(%@)}", [arr componentsJoinedByString:@", "]]; + } else if([obj isKindOfClass:[NSDictionary class]]) { + NSMutableArray *arr = [NSMutableArray arrayWithCapacity:[obj count]]; + for(id k in obj) { + id v = [obj objectForKey:k]; + [arr addObject:[NSString stringWithFormat:@"%@ = %@;",EXPDescribeObject(k), EXPDescribeObject(v)]]; + } + description = [NSString stringWithFormat:@"{%@}", [arr componentsJoinedByString:@" "]]; + } else if([obj isKindOfClass:[NSAttributedString class]]) { + description = [obj string]; + } else { + description = [description stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"]; + } + return description; +} + +void EXP_prerequisite(EXPBoolBlock block) { + [[[[NSThread currentThread] threadDictionary] objectForKey:@"EXP_currentMatcher"] setPrerequisiteBlock:block]; +} + +void EXP_match(EXPBoolBlock block) { + [[[[NSThread currentThread] threadDictionary] objectForKey:@"EXP_currentMatcher"] setMatchBlock:block]; +} + +void EXP_failureMessageForTo(EXPStringBlock block) { + [[[[NSThread currentThread] threadDictionary] objectForKey:@"EXP_currentMatcher"] setFailureMessageForToBlock:block]; +} + +void EXP_failureMessageForNotTo(EXPStringBlock block) { + [[[[NSThread currentThread] threadDictionary] objectForKey:@"EXP_currentMatcher"] setFailureMessageForNotToBlock:block]; +} + diff --git a/Example/Pods/Expecta/src/NSObject+Expecta.h b/Example/Pods/Expecta/src/NSObject+Expecta.h new file mode 100644 index 00000000..e0e881a4 --- /dev/null +++ b/Example/Pods/Expecta/src/NSObject+Expecta.h @@ -0,0 +1,14 @@ +#import + +@interface NSObject (Expecta) + +#ifdef USE_XCTEST +- (void)recordFailureWithDescription:(NSString *)description + inFile:(NSString *)filename + atLine:(NSUInteger)lineNumber + expected:(BOOL)expected; +#else +- (void)failWithException:(NSException *)exception; +#endif + +@end diff --git a/Example/Pods/Expecta/src/NSValue+Expecta.h b/Example/Pods/Expecta/src/NSValue+Expecta.h new file mode 100644 index 00000000..4b7dfe7f --- /dev/null +++ b/Example/Pods/Expecta/src/NSValue+Expecta.h @@ -0,0 +1,8 @@ +#import + +@interface NSValue (Expecta) + +- (const char *)_EXP_objCType; +- (void)set_EXP_objCType:(const char *)_EXP_objCType; + +@end diff --git a/Example/Pods/Expecta/src/NSValue+Expecta.m b/Example/Pods/Expecta/src/NSValue+Expecta.m new file mode 100644 index 00000000..331a234d --- /dev/null +++ b/Example/Pods/Expecta/src/NSValue+Expecta.m @@ -0,0 +1,21 @@ +#import "NSValue+Expecta.h" +#import +#import "Expecta.h" + +EXPFixCategoriesBug(NSValue_Expecta); + +@implementation NSValue (Expecta) + +static char _EXP_typeKey; + +- (const char *)_EXP_objCType { + return [(NSString *)objc_getAssociatedObject(self, &_EXP_typeKey) cStringUsingEncoding:NSASCIIStringEncoding]; +} + +- (void)set_EXP_objCType:(const char *)_EXP_objCType { + objc_setAssociatedObject(self, &_EXP_typeKey, + [NSString stringWithCString:_EXP_objCType encoding:NSASCIIStringEncoding], + OBJC_ASSOCIATION_COPY_NONATOMIC); +} + +@end diff --git a/Example/Pods/Expecta/src/matchers/EXPMatcherHelpers.h b/Example/Pods/Expecta/src/matchers/EXPMatcherHelpers.h new file mode 100644 index 00000000..5780ff63 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatcherHelpers.h @@ -0,0 +1,4 @@ +#import + +BOOL EXPIsValuePointer(NSValue *value); +BOOL EXPIsNumberFloat(NSNumber *number); diff --git a/Example/Pods/Expecta/src/matchers/EXPMatcherHelpers.m b/Example/Pods/Expecta/src/matchers/EXPMatcherHelpers.m new file mode 100644 index 00000000..cec03434 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatcherHelpers.m @@ -0,0 +1,9 @@ +#import "EXPMatcherHelpers.h" + +BOOL EXPIsValuePointer(NSValue *value) { + return [value objCType][0] == @encode(void *)[0]; +} + +BOOL EXPIsNumberFloat(NSNumber *number) { + return strcmp([number objCType], @encode(float)) == 0; +} diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beCloseTo.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beCloseTo.h new file mode 100644 index 00000000..f683d6b0 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beCloseTo.h @@ -0,0 +1,7 @@ +#import "Expecta.h" + +EXPMatcherInterface(_beCloseToWithin, (id expected, id within)); +EXPMatcherInterface(beCloseToWithin, (id expected, id within)); + +#define beCloseTo(expected) _beCloseToWithin(EXPObjectify((expected)), nil) +#define beCloseToWithin(expected, range) _beCloseToWithin(EXPObjectify((expected)), EXPObjectify((range))) diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beCloseTo.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beCloseTo.m new file mode 100644 index 00000000..c55431aa --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beCloseTo.m @@ -0,0 +1,49 @@ +#import "EXPMatchers+beCloseTo.h" +#import "EXPMatcherHelpers.h" + +EXPMatcherImplementationBegin(_beCloseToWithin, (id expected, id within)) { + prerequisite(^BOOL{ + return [actual isKindOfClass:[NSNumber class]] && + [expected isKindOfClass:[NSNumber class]] && + ([within isKindOfClass:[NSNumber class]] || (within == nil)); + }); + + match(^BOOL{ + double actualValue = [actual doubleValue]; + double expectedValue = [expected doubleValue]; + + if (within != nil) { + double withinValue = [within doubleValue]; + double lowerBound = expectedValue - withinValue; + double upperBound = expectedValue + withinValue; + return (actualValue >= lowerBound) && (actualValue <= upperBound); + } else { + double diff = fabs(actualValue - expectedValue); + actualValue = fabs(actualValue); + expectedValue = fabs(expectedValue); + double largest = (expectedValue > actualValue) ? expectedValue : actualValue; + return (diff <= largest * FLT_EPSILON); + } + }); + + failureMessageForTo(^NSString *{ + if (within) { + return [NSString stringWithFormat:@"expected %@ to be close to %@ within %@", + EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)]; + } else { + return [NSString stringWithFormat:@"expected %@ to be close to %@", + EXPDescribeObject(actual), EXPDescribeObject(expected)]; + } + }); + + failureMessageForNotTo(^NSString *{ + if (within) { + return [NSString stringWithFormat:@"expected %@ not to be close to %@ within %@", + EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)]; + } else { + return [NSString stringWithFormat:@"expected %@ not to be close to %@", + EXPDescribeObject(actual), EXPDescribeObject(expected)]; + } + }); +} +EXPMatcherImplementationEnd \ No newline at end of file diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beFalsy.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beFalsy.h new file mode 100644 index 00000000..89c8e003 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beFalsy.h @@ -0,0 +1,3 @@ +#import "Expecta.h" + +EXPMatcherInterface(beFalsy, (void)); diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beFalsy.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beFalsy.m new file mode 100644 index 00000000..382cab8b --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beFalsy.m @@ -0,0 +1,24 @@ +#import "EXPMatchers+beFalsy.h" +#import "EXPMatcherHelpers.h" + +EXPMatcherImplementationBegin(beFalsy, (void)) { + match(^BOOL{ + if([actual isKindOfClass:[NSNumber class]]) { + return ![(NSNumber *)actual boolValue]; + } else if([actual isKindOfClass:[NSValue class]]) { + if(EXPIsValuePointer((NSValue *)actual)) { + return ![(NSValue *)actual pointerValue]; + } + } + return !actual; + }); + + failureMessageForTo(^NSString *{ + return [NSString stringWithFormat:@"expected: a falsy value, got: %@, which is truthy", EXPDescribeObject(actual)]; + }); + + failureMessageForNotTo(^NSString *{ + return [NSString stringWithFormat:@"expected: a non-falsy value, got: %@, which is falsy", EXPDescribeObject(actual)]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThan.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThan.h new file mode 100644 index 00000000..a2f9fbac --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThan.h @@ -0,0 +1,6 @@ +#import "Expecta.h" + +EXPMatcherInterface(_beGreaterThan, (id expected)); +EXPMatcherInterface(beGreaterThan, (id expected)); + +#define beGreaterThan(expected) _beGreaterThan(EXPObjectify((expected))) diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThan.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThan.m new file mode 100644 index 00000000..d7253878 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThan.m @@ -0,0 +1,20 @@ +#import "EXPMatchers+beGreaterThan.h" +#import "EXPMatcherHelpers.h" + +EXPMatcherImplementationBegin(_beGreaterThan, (id expected)) { + match(^BOOL{ + if ([actual respondsToSelector:@selector(compare:)]) { + return [actual compare:expected] == NSOrderedDescending; + } + return NO; + }); + + failureMessageForTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@ to be greater than %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); + + failureMessageForNotTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@ not to be greater than %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); +} +EXPMatcherImplementationEnd \ No newline at end of file diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.h new file mode 100644 index 00000000..3e91c64c --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.h @@ -0,0 +1,6 @@ +#import "Expecta.h" + +EXPMatcherInterface(_beGreaterThanOrEqualTo, (id expected)); +EXPMatcherInterface(beGreaterThanOrEqualTo, (id expected)); + +#define beGreaterThanOrEqualTo(expected) _beGreaterThanOrEqualTo(EXPObjectify((expected))) diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.m new file mode 100644 index 00000000..32763449 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.m @@ -0,0 +1,20 @@ +#import "EXPMatchers+beGreaterThanOrEqualTo.h" +#import "EXPMatcherHelpers.h" + +EXPMatcherImplementationBegin(_beGreaterThanOrEqualTo, (id expected)) { + match(^BOOL{ + if ([actual respondsToSelector:@selector(compare:)]) { + return [actual compare:expected] != NSOrderedAscending; + } + return NO; + }); + + failureMessageForTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@ to be greater than or equal to %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); + + failureMessageForNotTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@ not to be greater than or equal to %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); +} +EXPMatcherImplementationEnd \ No newline at end of file diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beIdenticalTo.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beIdenticalTo.h new file mode 100644 index 00000000..06b96900 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beIdenticalTo.h @@ -0,0 +1,10 @@ +#import "Expecta.h" + +EXPMatcherInterface(_beIdenticalTo, (void *expected)); +EXPMatcherInterface(beIdenticalTo, (void *expected)); // to aid code completion + +#if __has_feature(objc_arc) +#define beIdenticalTo(expected) _beIdenticalTo((__bridge void*)expected) +#else +#define beIdenticalTo _beIdenticalTo +#endif diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beIdenticalTo.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beIdenticalTo.m new file mode 100644 index 00000000..f5ec33a2 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beIdenticalTo.m @@ -0,0 +1,24 @@ +#import "EXPMatchers+equal.h" +#import "EXPMatcherHelpers.h" + +EXPMatcherImplementationBegin(beIdenticalTo, (void *expected)) { + match(^BOOL{ + if(actual == expected) { + return YES; + } else if([actual isKindOfClass:[NSValue class]] && EXPIsValuePointer((NSValue *)actual)) { + if([(NSValue *)actual pointerValue] == expected) { + return YES; + } + } + return NO; + }); + + failureMessageForTo(^NSString *{ + return [NSString stringWithFormat:@"expected: <%p>, got: <%p>", expected, actual]; + }); + + failureMessageForNotTo(^NSString *{ + return [NSString stringWithFormat:@"expected: not <%p>, got: <%p>", expected, actual]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beInTheRangeOf.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beInTheRangeOf.h new file mode 100644 index 00000000..8ea990e2 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beInTheRangeOf.h @@ -0,0 +1,6 @@ +#import "Expecta.h" + +EXPMatcherInterface(_beInTheRangeOf, (id expectedLowerBound, id expectedUpperBound)); +EXPMatcherInterface(beInTheRangeOf, (id expectedLowerBound, id expectedUpperBound)); + +#define beInTheRangeOf(expectedLowerBound, expectedUpperBound) _beInTheRangeOf(EXPObjectify((expectedLowerBound)), EXPObjectify((expectedUpperBound))) diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beInTheRangeOf.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beInTheRangeOf.m new file mode 100644 index 00000000..1631f248 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beInTheRangeOf.m @@ -0,0 +1,30 @@ +#import "EXPMatchers+beInTheRangeOf.h" +#import "EXPMatcherHelpers.h" + +EXPMatcherImplementationBegin(_beInTheRangeOf, (id expectedLowerBound, id expectedUpperBound)) { + match(^BOOL{ + if ([actual respondsToSelector:@selector(compare:)]) { + NSComparisonResult compareLowerBound = [expectedLowerBound compare: actual]; + NSComparisonResult compareUpperBound = [expectedUpperBound compare: actual]; + if (compareLowerBound == NSOrderedSame) { + return YES; + } + if (compareUpperBound == NSOrderedSame) { + return YES; + } + if ((compareLowerBound == NSOrderedAscending) && (compareUpperBound == NSOrderedDescending)) { + return YES; + } + } + return NO; + }); + + failureMessageForTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@ to be in the range [%@, %@] (inclusive)", EXPDescribeObject(actual), EXPDescribeObject(expectedLowerBound), EXPDescribeObject(expectedUpperBound)]; + }); + + failureMessageForNotTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@ not to be in the range [%@, %@] (inclusive)", EXPDescribeObject(actual), EXPDescribeObject(expectedLowerBound), EXPDescribeObject(expectedUpperBound)]; + }); +} +EXPMatcherImplementationEnd \ No newline at end of file diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beInstanceOf.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beInstanceOf.h new file mode 100644 index 00000000..e3c213dc --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beInstanceOf.h @@ -0,0 +1,7 @@ +#import "Expecta.h" + +EXPMatcherInterface(beInstanceOf, (Class expected)); + +#define beAnInstanceOf beInstanceOf +#define beMemberOf beInstanceOf +#define beAMemberOf beInstanceOf diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beInstanceOf.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beInstanceOf.m new file mode 100644 index 00000000..415b564e --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beInstanceOf.m @@ -0,0 +1,27 @@ +#import "EXPMatchers+beInstanceOf.h" + +EXPMatcherImplementationBegin(beInstanceOf, (Class expected)) { + BOOL actualIsNil = (actual == nil); + BOOL expectedIsNil = (expected == nil); + + prerequisite(^BOOL{ + return !(actualIsNil || expectedIsNil); + }); + + match(^BOOL{ + return [actual isMemberOfClass:expected]; + }); + + failureMessageForTo(^NSString *{ + if(actualIsNil) return @"the actual value is nil/null"; + if(expectedIsNil) return @"the expected value is nil/null"; + return [NSString stringWithFormat:@"expected: an instance of %@, got: an instance of %@", [expected class], [actual class]]; + }); + + failureMessageForNotTo(^NSString *{ + if(actualIsNil) return @"the actual value is nil/null"; + if(expectedIsNil) return @"the expected value is nil/null"; + return [NSString stringWithFormat:@"expected: not an instance of %@, got: an instance of %@", [expected class], [actual class]]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beKindOf.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beKindOf.h new file mode 100644 index 00000000..2774f91a --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beKindOf.h @@ -0,0 +1,5 @@ +#import "Expecta.h" + +EXPMatcherInterface(beKindOf, (Class expected)); + +#define beAKindOf beKindOf diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beKindOf.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beKindOf.m new file mode 100644 index 00000000..a61d37d5 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beKindOf.m @@ -0,0 +1,27 @@ +#import "EXPMatchers+beKindOf.h" + +EXPMatcherImplementationBegin(beKindOf, (Class expected)) { + BOOL actualIsNil = (actual == nil); + BOOL expectedIsNil = (expected == nil); + + prerequisite(^BOOL{ + return !(actualIsNil || expectedIsNil); + }); + + match(^BOOL{ + return [actual isKindOfClass:expected]; + }); + + failureMessageForTo(^NSString *{ + if(actualIsNil) return @"the actual value is nil/null"; + if(expectedIsNil) return @"the expected value is nil/null"; + return [NSString stringWithFormat:@"expected: a kind of %@, got: an instance of %@, which is not a kind of %@", [expected class], [actual class], [expected class]]; + }); + + failureMessageForNotTo(^NSString *{ + if(actualIsNil) return @"the actual value is nil/null"; + if(expectedIsNil) return @"the expected value is nil/null"; + return [NSString stringWithFormat:@"expected: not a kind of %@, got: an instance of %@, which is a kind of %@", [expected class], [actual class], [expected class]]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThan.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThan.h new file mode 100644 index 00000000..5ed0a24c --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThan.h @@ -0,0 +1,6 @@ +#import "Expecta.h" + +EXPMatcherInterface(_beLessThan, (id expected)); +EXPMatcherInterface(beLessThan, (id expected)); + +#define beLessThan(expected) _beLessThan(EXPObjectify((expected))) diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThan.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThan.m new file mode 100644 index 00000000..39b68830 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThan.m @@ -0,0 +1,20 @@ +#import "EXPMatchers+beLessThan.h" +#import "EXPMatcherHelpers.h" + +EXPMatcherImplementationBegin(_beLessThan, (id expected)) { + match(^BOOL{ + if ([actual respondsToSelector:@selector(compare:)]) { + return [actual compare:expected] == NSOrderedAscending; + } + return NO; + }); + + failureMessageForTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@ to be less than %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); + + failureMessageForNotTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@ not to be less than %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); +} +EXPMatcherImplementationEnd \ No newline at end of file diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.h new file mode 100644 index 00000000..2c313415 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.h @@ -0,0 +1,6 @@ +#import "Expecta.h" + +EXPMatcherInterface(_beLessThanOrEqualTo, (id expected)); +EXPMatcherInterface(beLessThanOrEqualTo, (id expected)); + +#define beLessThanOrEqualTo(expected) _beLessThanOrEqualTo(EXPObjectify((expected))) diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.m new file mode 100644 index 00000000..401c194b --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.m @@ -0,0 +1,20 @@ +#import "EXPMatchers+beLessThanOrEqualTo.h" +#import "EXPMatcherHelpers.h" + +EXPMatcherImplementationBegin(_beLessThanOrEqualTo, (id expected)) { + match(^BOOL{ + if ([actual respondsToSelector:@selector(compare:)]) { + return [actual compare:expected] != NSOrderedDescending; + } + return NO; + }); + + failureMessageForTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@ to be less than or equal to %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); + + failureMessageForNotTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@ not to be less than or equal to %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); +} +EXPMatcherImplementationEnd \ No newline at end of file diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beNil.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beNil.h new file mode 100644 index 00000000..e64e8cf3 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beNil.h @@ -0,0 +1,5 @@ +#import "Expecta.h" + +EXPMatcherInterface(beNil, (void)); + +#define beNull beNil diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beNil.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beNil.m new file mode 100644 index 00000000..73ea1d6e --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beNil.m @@ -0,0 +1,16 @@ +#import "EXPMatchers+beNil.h" + +EXPMatcherImplementationBegin(beNil, (void)) { + match(^BOOL{ + return actual == nil; + }); + + failureMessageForTo(^NSString *{ + return [NSString stringWithFormat:@"expected: nil/null, got: %@", EXPDescribeObject(actual)]; + }); + + failureMessageForNotTo(^NSString *{ + return [NSString stringWithFormat:@"expected: not nil/null, got: %@", EXPDescribeObject(actual)]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beSubclassOf.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beSubclassOf.h new file mode 100644 index 00000000..f06e5da3 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beSubclassOf.h @@ -0,0 +1,5 @@ +#import "Expecta.h" + +EXPMatcherInterface(beSubclassOf, (Class expected)); + +#define beASubclassOf beSubclassOf diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beSubclassOf.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beSubclassOf.m new file mode 100644 index 00000000..dd7daf56 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beSubclassOf.m @@ -0,0 +1,27 @@ +#import "EXPMatchers+beSubclassOf.h" +#import "NSValue+Expecta.h" +#import + +EXPMatcherImplementationBegin(beSubclassOf, (Class expected)) { + __block BOOL actualIsClass = YES; + + prerequisite(^BOOL { + actualIsClass = class_isMetaClass(object_getClass(actual)); + return actualIsClass; + }); + + match(^BOOL{ + return [actual isSubclassOfClass:expected]; + }); + + failureMessageForTo(^NSString *{ + if(!actualIsClass) return @"the actual value is not a Class"; + return [NSString stringWithFormat:@"expected: a subclass of %@, got: a class %@, which is not a subclass of %@", [expected class], actual, [expected class]]; + }); + + failureMessageForNotTo(^NSString *{ + if(!actualIsClass) return @"the actual value is not a Class"; + return [NSString stringWithFormat:@"expected: not a subclass of %@, got: a class %@, which is a subclass of %@", [expected class], actual, [expected class]]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beSupersetOf.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beSupersetOf.h new file mode 100644 index 00000000..f9a47ba6 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beSupersetOf.h @@ -0,0 +1,4 @@ +#import "Expecta.h" + +EXPMatcherInterface(beSupersetOf, (id subset)); + diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beSupersetOf.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beSupersetOf.m new file mode 100644 index 00000000..604a3bd5 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beSupersetOf.m @@ -0,0 +1,57 @@ +#import "EXPMatchers+contain.h" + +EXPMatcherImplementationBegin(beSupersetOf, (id subset)) { + BOOL actualIsCompatible = [actual isKindOfClass:[NSDictionary class]] || [actual respondsToSelector:@selector(containsObject:)]; + BOOL subsetIsNil = (subset == nil); + + // For some instances the isKindOfClass: method returns false, even though + // they are both actually dictionaries. e.g. Comparing a NSCFDictionary and a + // NSDictionary. + BOOL bothAreDictionaries = [actual isKindOfClass:[NSDictionary class]] && [subset isKindOfClass:[NSDictionary class]]; + + BOOL classMatches = bothAreDictionaries || [subset isKindOfClass:[actual class]]; + + prerequisite(^BOOL{ + return actualIsCompatible && !subsetIsNil && classMatches; + }); + + match(^BOOL{ + if(!actualIsCompatible) return NO; + + if([actual isKindOfClass:[NSDictionary class]]) { + for (id key in subset) { + id actualValue = [actual valueForKey:key]; + id subsetValue = [subset valueForKey:key]; + + if (![subsetValue isEqual:actualValue]) return NO; + } + } else { + for (id object in subset) { + if (![actual containsObject:object]) return NO; + } + } + + return YES; + }); + + failureMessageForTo(^NSString *{ + if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSDictionary and does not implement -containsObject:", EXPDescribeObject(actual)]; + + if(subsetIsNil) return @"the expected value is nil/null"; + + if(!classMatches) return [NSString stringWithFormat:@"%@ does not match the class of %@", EXPDescribeObject(subset), EXPDescribeObject(actual)]; + + return [NSString stringWithFormat:@"expected %@ to be a superset of %@", EXPDescribeObject(actual), EXPDescribeObject(subset)]; + }); + + failureMessageForNotTo(^NSString *{ + if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSDictionary and does not implement -containsObject:", EXPDescribeObject(actual)]; + + if(subsetIsNil) return @"the expected value is nil/null"; + + if(!classMatches) return [NSString stringWithFormat:@"%@ does not match the class of %@", EXPDescribeObject(subset), EXPDescribeObject(actual)]; + + return [NSString stringWithFormat:@"expected %@ not to be a superset of %@", EXPDescribeObject(actual), EXPDescribeObject(subset)]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beTruthy.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beTruthy.h new file mode 100644 index 00000000..1e4e78f9 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beTruthy.h @@ -0,0 +1,3 @@ +#import "Expecta.h" + +EXPMatcherInterface(beTruthy, (void)); diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beTruthy.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beTruthy.m new file mode 100644 index 00000000..02fa6e79 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beTruthy.m @@ -0,0 +1,24 @@ +#import "EXPMatchers+beTruthy.h" +#import "EXPMatcherHelpers.h" + +EXPMatcherImplementationBegin(beTruthy, (void)) { + match(^BOOL{ + if([actual isKindOfClass:[NSNumber class]]) { + return !![(NSNumber *)actual boolValue]; + } else if([actual isKindOfClass:[NSValue class]]) { + if(EXPIsValuePointer((NSValue *)actual)) { + return !![(NSValue *)actual pointerValue]; + } + } + return !!actual; + }); + + failureMessageForTo(^NSString *{ + return [NSString stringWithFormat:@"expected: a truthy value, got: %@, which is falsy", EXPDescribeObject(actual)]; + }); + + failureMessageForNotTo(^NSString *{ + return [NSString stringWithFormat:@"expected: a non-truthy value, got: %@, which is truthy", EXPDescribeObject(actual)]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beginWith.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+beginWith.h new file mode 100644 index 00000000..4ebd6d2e --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beginWith.h @@ -0,0 +1,5 @@ +#import "Expecta.h" + +EXPMatcherInterface(beginWith, (id expected)); + +#define startWith beginWith diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+beginWith.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+beginWith.m new file mode 100644 index 00000000..2f636354 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+beginWith.m @@ -0,0 +1,49 @@ +#import "EXPMatchers+beginWith.h" + +EXPMatcherImplementationBegin(beginWith, (id expected)) { + BOOL actualIsNil = (actual == nil); + BOOL expectedIsNil = (expected == nil); + //This condition allows the comparison of an immutable string or ordered collection to the mutable type of the same + BOOL actualAndExpectedAreCompatible = (([actual isKindOfClass:[NSString class]] && [expected isKindOfClass:[NSString class]]) + || ([actual isKindOfClass:[NSArray class]] && [expected isKindOfClass:[NSArray class]]) + || ([actual isKindOfClass:[NSOrderedSet class]] && [expected isKindOfClass:[NSOrderedSet class]])); + + prerequisite(^BOOL { + return actualAndExpectedAreCompatible; + }); + + match(^BOOL { + if ([actual isKindOfClass:[NSString class]]) { + return [actual hasPrefix:expected]; + } else if ([actual isKindOfClass:[NSArray class]]) { + if ([expected count] > [actual count] || [expected count] == 0) { + return NO; + } + NSArray *subArray = [actual subarrayWithRange:NSMakeRange(0, [expected count])]; + return [subArray isEqualToArray:expected]; + } else { + if ([expected count] > [actual count] || [expected count] == 0) { + return NO; + } + + NSOrderedSet *subset = [NSOrderedSet orderedSetWithOrderedSet:actual range:NSMakeRange(0, [expected count]) copyItems:NO]; + return [subset isEqualToOrderedSet:expected]; + } + }); + + failureMessageForTo(^NSString *{ + if (actualIsNil) return @"the object is nil/null"; + if (expectedIsNil) return @"the expected value is nil/null"; + if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@"%@ and %@ are not instances of one of %@, %@, or %@", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]]; + return [NSString stringWithFormat:@"expected: %@ to begin with %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); + + failureMessageForNotTo(^NSString *{ + if (actualIsNil) return @"the object is nil/null"; + if (expectedIsNil) return @"the expected value is nil/null"; + if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@"%@ and %@ are not instances of one of %@, %@, or %@", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]]; + + return [NSString stringWithFormat:@"expected: %@ not to begin with %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+conformTo.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+conformTo.h new file mode 100644 index 00000000..efc7b982 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+conformTo.h @@ -0,0 +1,3 @@ +#import "Expecta.h" + +EXPMatcherInterface(conformTo, (Protocol *expected)); diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+conformTo.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+conformTo.m new file mode 100644 index 00000000..b88014d6 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+conformTo.m @@ -0,0 +1,33 @@ +#import "EXPMatchers+conformTo.h" +#import "NSValue+Expecta.h" +#import + +EXPMatcherImplementationBegin(conformTo, (Protocol *expected)) { + BOOL actualIsNil = (actual == nil); + BOOL expectedIsNil = (expected == nil); + + prerequisite(^BOOL{ + return !(actualIsNil || expectedIsNil); + }); + + match(^BOOL{ + return [actual conformsToProtocol:expected]; + }); + + failureMessageForTo(^NSString *{ + if(actualIsNil) return @"the object is nil/null"; + if(expectedIsNil) return @"the protocol is nil/null"; + + NSString *name = NSStringFromProtocol(expected); + return [NSString stringWithFormat:@"expected: %@ to conform to %@", actual, name]; + }); + + failureMessageForNotTo(^NSString *{ + if(actualIsNil) return @"the object is nil/null"; + if(expectedIsNil) return @"the protocol is nil/null"; + + NSString *name = NSStringFromProtocol(expected); + return [NSString stringWithFormat:@"expected: %@ not to conform to %@", actual, name]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+contain.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+contain.h new file mode 100644 index 00000000..58031461 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+contain.h @@ -0,0 +1,5 @@ +#import "Expecta.h" + +EXPMatcherInterface(_contain, (id expected)); +EXPMatcherInterface(contain, (id expected)); // to aid code completion +#define contain(expected) _contain(EXPObjectify((expected))) diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+contain.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+contain.m new file mode 100644 index 00000000..b8a6f869 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+contain.m @@ -0,0 +1,38 @@ +#import "EXPMatchers+contain.h" + +EXPMatcherImplementationBegin(_contain, (id expected)) { + BOOL actualIsCompatible = [actual isKindOfClass:[NSString class]] || [actual conformsToProtocol:@protocol(NSFastEnumeration)]; + BOOL expectedIsNil = (expected == nil); + + prerequisite(^BOOL{ + return actualIsCompatible && !expectedIsNil; + }); + + match(^BOOL{ + if(actualIsCompatible) { + if([actual isKindOfClass:[NSString class]]) { + return [(NSString *)actual rangeOfString:[expected description]].location != NSNotFound; + } else { + for (id object in actual) { + if ([object isEqual:expected]) { + return YES; + } + } + } + } + return NO; + }); + + failureMessageForTo(^NSString *{ + if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSString or NSFastEnumeration", EXPDescribeObject(actual)]; + if(expectedIsNil) return @"the expected value is nil/null"; + return [NSString stringWithFormat:@"expected %@ to contain %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); + + failureMessageForNotTo(^NSString *{ + if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSString or NSFastEnumeration", EXPDescribeObject(actual)]; + if(expectedIsNil) return @"the expected value is nil/null"; + return [NSString stringWithFormat:@"expected %@ not to contain %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+endWith.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+endWith.h new file mode 100644 index 00000000..228cea95 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+endWith.h @@ -0,0 +1,3 @@ +#import "Expecta.h" + +EXPMatcherInterface(endWith, (id expected)); diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+endWith.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+endWith.m new file mode 100644 index 00000000..f34bd900 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+endWith.m @@ -0,0 +1,49 @@ +#import "EXPMatchers+endWith.h" + +EXPMatcherImplementationBegin(endWith, (id expected)) { + BOOL actualIsNil = (actual == nil); + BOOL expectedIsNil = (expected == nil); + //This condition allows the comparison of an immutable string or ordered collection to the mutable type of the same + BOOL actualAndExpectedAreCompatible = (([actual isKindOfClass:[NSString class]] && [expected isKindOfClass:[NSString class]]) + || ([actual isKindOfClass:[NSArray class]] && [expected isKindOfClass:[NSArray class]]) + || ([actual isKindOfClass:[NSOrderedSet class]] && [expected isKindOfClass:[NSOrderedSet class]])); + + prerequisite(^BOOL { + return actualAndExpectedAreCompatible; + }); + + match(^BOOL { + if ([actual isKindOfClass:[NSString class]]) { + return [actual hasSuffix:expected]; + } else if ([actual isKindOfClass:[NSArray class]]) { + if ([expected count] > [actual count] || [expected count] == 0) { + return NO; + } + NSArray *subArray = [actual subarrayWithRange:NSMakeRange([actual count] - [expected count], [expected count])]; + return [subArray isEqualToArray:expected]; + } else { + if ([expected count] > [actual count] || [expected count] == 0) { + return NO; + } + + NSOrderedSet *subset = [NSOrderedSet orderedSetWithOrderedSet:actual range:NSMakeRange([actual count] - [expected count], [expected count]) copyItems:NO]; + return [subset isEqualToOrderedSet:expected]; + } + }); + + failureMessageForTo(^NSString *{ + if (actualIsNil) return @"the object is nil/null"; + if (expectedIsNil) return @"the expected value is nil/null"; + if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@"%@ and %@ are not instances of one of %@, %@, or %@", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]]; + return [NSString stringWithFormat:@"expected: %@ to end with %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); + + failureMessageForNotTo(^NSString *{ + if (actualIsNil) return @"the object is nil/null"; + if (expectedIsNil) return @"the expected value is nil/null"; + if (!actualAndExpectedAreCompatible) return [NSString stringWithFormat:@"%@ and %@ are not instances of one of %@, %@, or %@", EXPDescribeObject(actual), EXPDescribeObject(expected), [NSString class], [NSArray class], [NSOrderedSet class]]; + + return [NSString stringWithFormat:@"expected: %@ not to end with %@", EXPDescribeObject(actual), EXPDescribeObject(expected)]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+equal.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+equal.h new file mode 100644 index 00000000..b4047c0e --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+equal.h @@ -0,0 +1,5 @@ +#import "Expecta.h" + +EXPMatcherInterface(_equal, (id expected)); +EXPMatcherInterface(equal, (id expected)); // to aid code completion +#define equal(...) _equal(EXPObjectify((__VA_ARGS__))) diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+equal.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+equal.m new file mode 100644 index 00000000..bcf96edf --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+equal.m @@ -0,0 +1,24 @@ +#import "EXPMatchers+equal.h" +#import "EXPMatcherHelpers.h" + +EXPMatcherImplementationBegin(_equal, (id expected)) { + match(^BOOL{ + if((actual == expected) || [actual isEqual:expected]) { + return YES; + } else if([actual isKindOfClass:[NSNumber class]] && [expected isKindOfClass:[NSNumber class]]) { + if(EXPIsNumberFloat((NSNumber *)actual) || EXPIsNumberFloat((NSNumber *)expected)) { + return [(NSNumber *)actual floatValue] == [(NSNumber *)expected floatValue]; + } + } + return NO; + }); + + failureMessageForTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@, got: %@", EXPDescribeObject(expected), EXPDescribeObject(actual)]; + }); + + failureMessageForNotTo(^NSString *{ + return [NSString stringWithFormat:@"expected: not %@, got: %@", EXPDescribeObject(expected), EXPDescribeObject(actual)]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+haveCountOf.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+haveCountOf.h new file mode 100644 index 00000000..1f70f942 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+haveCountOf.h @@ -0,0 +1,10 @@ +#import "Expecta.h" + +EXPMatcherInterface(haveCountOf, (NSUInteger expected)); + +#define haveCount haveCountOf +#define haveACountOf haveCountOf +#define haveLength haveCountOf +#define haveLengthOf haveCountOf +#define haveALengthOf haveCountOf +#define beEmpty() haveCountOf(0) diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+haveCountOf.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+haveCountOf.m new file mode 100644 index 00000000..04c09d58 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+haveCountOf.m @@ -0,0 +1,36 @@ +#import "EXPMatchers+haveCountOf.h" + +EXPMatcherImplementationBegin(haveCountOf, (NSUInteger expected)) { + BOOL actualIsStringy = [actual isKindOfClass:[NSString class]] || [actual isKindOfClass:[NSAttributedString class]]; + BOOL actualIsCompatible = actualIsStringy || [actual respondsToSelector:@selector(count)]; + + prerequisite(^BOOL{ + return actualIsCompatible; + }); + + NSUInteger (^count)(id) = ^(id actual) { + if(actualIsStringy) { + return [actual length]; + } else { + return [actual count]; + } + }; + + match(^BOOL{ + if(actualIsCompatible) { + return count(actual) == expected; + } + return NO; + }); + + failureMessageForTo(^NSString *{ + if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSString, NSAttributedString, NSArray, NSSet, NSOrderedSet, or NSDictionary", EXPDescribeObject(actual)]; + return [NSString stringWithFormat:@"expected %@ to have a count of %zi but got %zi", EXPDescribeObject(actual), expected, count(actual)]; + }); + + failureMessageForNotTo(^NSString *{ + if(!actualIsCompatible) return [NSString stringWithFormat:@"%@ is not an instance of NSString, NSAttributedString, NSArray, NSSet, NSOrderedSet, or NSDictionary", EXPDescribeObject(actual)]; + return [NSString stringWithFormat:@"expected %@ not to have a count of %zi", EXPDescribeObject(actual), expected]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+notify.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+notify.h new file mode 100644 index 00000000..2487d6f6 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+notify.h @@ -0,0 +1,4 @@ +#import "Expecta.h" + +EXPMatcherInterface(notify, (id expectedNotification)); + diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+notify.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+notify.m new file mode 100644 index 00000000..5dda3bf1 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+notify.m @@ -0,0 +1,63 @@ +#import "EXPMatchers+notify.h" + +EXPMatcherImplementationBegin(notify, (id expected)){ + BOOL actualIsNil = (actual == nil); + BOOL expectedIsNil = (expected == nil); + BOOL isNotification = [expected isKindOfClass:[NSNotification class]]; + BOOL isName = [expected isKindOfClass:[NSString class]]; + + __block NSString *expectedName; + __block BOOL expectedNotificationOccurred = NO; + __block id observer; + + prerequisite(^BOOL{ + expectedNotificationOccurred = NO; + if (actualIsNil || expectedIsNil) return NO; + if (isNotification) { + expectedName = [expected name]; + }else if(isName) { + expectedName = expected; + }else{ + return NO; + } + + observer = [[NSNotificationCenter defaultCenter] addObserverForName:expectedName object:nil queue:nil usingBlock:^(NSNotification *note){ + if (isNotification) { + expectedNotificationOccurred |= [expected isEqual:note]; + }else{ + expectedNotificationOccurred = YES; + } + }]; + ((EXPBasicBlock)actual)(); + return YES; + }); + + match(^BOOL{ + if(expectedNotificationOccurred) { + [[NSNotificationCenter defaultCenter] removeObserver:observer]; + } + return expectedNotificationOccurred; + }); + + failureMessageForTo(^NSString *{ + if (observer) { + [[NSNotificationCenter defaultCenter] removeObserver:observer]; + } + if(actualIsNil) return @"the actual value is nil/null"; + if(expectedIsNil) return @"the expected value is nil/null"; + if(!(isNotification || isName)) return @"the actual value is not a notification or string"; + return [NSString stringWithFormat:@"expected: %@, got: none",expectedName]; + }); + + failureMessageForNotTo(^NSString *{ + if (observer) { + [[NSNotificationCenter defaultCenter] removeObserver:observer]; + } + if(actualIsNil) return @"the actual value is nil/null"; + if(expectedIsNil) return @"the expected value is nil/null"; + if(!(isNotification || isName)) return @"the actual value is not a notification or string"; + return [NSString stringWithFormat:@"expected: none, got: %@", expectedName]; + }); +} + +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+raise.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+raise.h new file mode 100644 index 00000000..1f7fae02 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+raise.h @@ -0,0 +1,4 @@ +#import "Expecta.h" + +EXPMatcherInterface(raise, (NSString *expectedExceptionName)); +#define raiseAny() raise(nil) diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+raise.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+raise.m new file mode 100644 index 00000000..26f3c55f --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+raise.m @@ -0,0 +1,30 @@ +#import "EXPMatchers+raise.h" +#import "EXPDefines.h" + +EXPMatcherImplementationBegin(raise, (NSString *expectedExceptionName)) { + __block NSException *exceptionCaught = nil; + + match(^BOOL{ + BOOL expectedExceptionCaught = NO; + @try { + ((EXPBasicBlock)actual)(); + } @catch(NSException *e) { + exceptionCaught = e; + expectedExceptionCaught = (expectedExceptionName == nil) || [[exceptionCaught name] isEqualToString:expectedExceptionName]; + } + return expectedExceptionCaught; + }); + + failureMessageForTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@, got: %@", + expectedExceptionName ? expectedExceptionName : @"any exception", + exceptionCaught ? [exceptionCaught name] : @"no exception"]; + }); + + failureMessageForNotTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@, got: %@", + expectedExceptionName ? [NSString stringWithFormat:@"not %@", expectedExceptionName] : @"no exception", + exceptionCaught ? [exceptionCaught name] : @"no exception"]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+raiseWithReason.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+raiseWithReason.h new file mode 100644 index 00000000..2cf5a5d2 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+raiseWithReason.h @@ -0,0 +1,3 @@ +#import "Expecta.h" + +EXPMatcherInterface(raiseWithReason, (NSString *expectedExceptionName, NSString *expectedReason)); diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+raiseWithReason.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+raiseWithReason.m new file mode 100644 index 00000000..3943d383 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+raiseWithReason.m @@ -0,0 +1,35 @@ +#import "EXPMatchers+raiseWithReason.h" +#import "EXPDefines.h" + +EXPMatcherImplementationBegin(raiseWithReason, (NSString *expectedExceptionName, NSString *expectedReason)) { + __block NSException *exceptionCaught = nil; + + match(^BOOL{ + BOOL expectedExceptionCaught = NO; + @try { + ((EXPBasicBlock)actual)(); + } @catch(NSException *e) { + exceptionCaught = e; + expectedExceptionCaught = (((expectedExceptionName == nil) || [[exceptionCaught name] isEqualToString:expectedExceptionName]) && + ((expectedReason == nil) || ([[exceptionCaught reason] isEqualToString:expectedReason]))); + } + return expectedExceptionCaught; + }); + + failureMessageForTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@ (%@), got: %@ (%@)", + expectedExceptionName ?: @"any exception", + expectedReason ?: @"any reason", + exceptionCaught ? [exceptionCaught name] : @"no exception", + exceptionCaught ? [exceptionCaught reason] : @""]; + }); + + failureMessageForNotTo(^NSString *{ + return [NSString stringWithFormat:@"expected: %@ (%@), got: %@ (%@)", + expectedExceptionName ? [NSString stringWithFormat:@"not %@", expectedExceptionName] : @"no exception", + expectedReason ? [NSString stringWithFormat:@"not '%@'", expectedReason] : @"no reason", + exceptionCaught ? [exceptionCaught name] : @"no exception", + exceptionCaught ? [exceptionCaught reason] : @"no reason"]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+respondTo.h b/Example/Pods/Expecta/src/matchers/EXPMatchers+respondTo.h new file mode 100644 index 00000000..279131dd --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+respondTo.h @@ -0,0 +1,3 @@ +#import "Expecta.h" + +EXPMatcherInterface(respondTo, (SEL expected)); diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers+respondTo.m b/Example/Pods/Expecta/src/matchers/EXPMatchers+respondTo.m new file mode 100644 index 00000000..d294113f --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers+respondTo.m @@ -0,0 +1,28 @@ +#import "EXPMatchers+respondTo.h" +#import "EXPMatcherHelpers.h" + +EXPMatcherImplementationBegin(respondTo, (SEL expected)) { + BOOL actualIsNil = (actual == nil); + BOOL expectedIsNull = (expected == NULL); + + prerequisite (^BOOL { + return !(actualIsNil || expectedIsNull); + }); + + match(^BOOL { + return [actual respondsToSelector:expected]; + }); + + failureMessageForTo(^NSString *{ + if (actualIsNil) return @"the object is nil/null"; + if (expectedIsNull) return @"the selector is null"; + return [NSString stringWithFormat:@"expected: %@ to respond to %@", EXPDescribeObject(actual), NSStringFromSelector(expected)]; + }); + + failureMessageForNotTo(^NSString *{ + if (actualIsNil) return @"the object is nil/null"; + if (expectedIsNull) return @"the selector is null"; + return [NSString stringWithFormat:@"expected: %@ not to respond to %@", EXPDescribeObject(actual), NSStringFromSelector(expected)]; + }); +} +EXPMatcherImplementationEnd diff --git a/Example/Pods/Expecta/src/matchers/EXPMatchers.h b/Example/Pods/Expecta/src/matchers/EXPMatchers.h new file mode 100644 index 00000000..f3138291 --- /dev/null +++ b/Example/Pods/Expecta/src/matchers/EXPMatchers.h @@ -0,0 +1,24 @@ +#import "EXPMatchers+beNil.h" +#import "EXPMatchers+equal.h" +#import "EXPMatchers+beInstanceOf.h" +#import "EXPMatchers+beKindOf.h" +#import "EXPMatchers+beSubclassOf.h" +#import "EXPMatchers+conformTo.h" +#import "EXPMatchers+beTruthy.h" +#import "EXPMatchers+beFalsy.h" +#import "EXPMatchers+contain.h" +#import "EXPMatchers+beSupersetOf.h" +#import "EXPMatchers+haveCountOf.h" +#import "EXPMatchers+beIdenticalTo.h" +#import "EXPMatchers+beGreaterThan.h" +#import "EXPMatchers+beGreaterThanOrEqualTo.h" +#import "EXPMatchers+beLessThan.h" +#import "EXPMatchers+beLessThanOrEqualTo.h" +#import "EXPMatchers+beInTheRangeOf.h" +#import "EXPMatchers+beCloseTo.h" +#import "EXPMatchers+raise.h" +#import "EXPMatchers+raiseWithReason.h" +#import "EXPMatchers+respondTo.h" +#import "EXPMatchers+notify.h" +#import "EXPMatchers+beginWith.h" +#import "EXPMatchers+endWith.h" diff --git a/Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase.h b/Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase.h new file mode 100644 index 00000000..7b190ad9 --- /dev/null +++ b/Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2013, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import + +#import + +#import + +#ifndef FB_REFERENCE_IMAGE_DIR +#define FB_REFERENCE_IMAGE_DIR "\"$(SOURCE_ROOT)/$(PROJECT_NAME)Tests/ReferenceImages\"" +#endif + +/** + Similar to our much-loved XCTAssert() macros. Use this to perform your test. No need to write an explanation, though. + @param view The view to snapshot + @param identifier An optional identifier, used is there are multiple snapshot tests in a given -test method. + */ +#define FBSnapshotVerifyView(view__, identifier__) \ +{ \ + NSError *error__ = nil; \ + NSString *referenceImagesDirectory__ = [NSString stringWithFormat:@"%s", FB_REFERENCE_IMAGE_DIR]; \ + BOOL comparisonSuccess__ = [self compareSnapshotOfView:(view__) referenceImagesDirectory:referenceImagesDirectory__ identifier:(identifier__) error:&error__]; \ + XCTAssertTrue(comparisonSuccess__, @"Snapshot comparison failed: %@", error__); \ +} + +/** + Similar to our much-loved XCTAssert() macros. Use this to perform your test. No need to write an explanation, though. + @param layer The layer to snapshot + @param identifier An optional identifier, used is there are multiple snapshot tests in a given -test method. + */ +#define FBSnapshotVerifyLayer(layer__, identifier__) \ +{ \ + NSError *error__ = nil; \ + NSString *referenceImagesDirectory__ = [NSString stringWithFormat:@"%s", FB_REFERENCE_IMAGE_DIR]; \ + BOOL comparisonSuccess__ = [self compareSnapshotOfLayer:(layer__) referenceImagesDirectory:referenceImagesDirectory__ identifier:(identifier__) error:&error__]; \ + XCTAssertTrue(comparisonSuccess__, @"Snapshot comparison failed: %@", error__); \ +} + +/** + The base class of view snapshotting tests. If you have small UI component, it's often easier to configure it in a test + and compare an image of the view to a reference image that write lots of complex layout-code tests. + + In order to flip the tests in your subclass to record the reference images set `recordMode` to YES before calling + -[super setUp]. + */ +@interface FBSnapshotTestCase : XCTestCase + +/** + When YES, the test macros will save reference images, rather than performing an actual test. + */ +@property (readwrite, nonatomic, assign) BOOL recordMode; + +/** + Performs the comparisong or records a snapshot of the layer if recordMode is YES. + @param layer The Layer to snapshot + @param referenceImagesDirectory The directory in which reference images are stored. + @param identifier An optional identifier, used is there are muliptle snapshot tests in a given -test method. + @param error An error to log in an XCTAssert() macro if the method fails (missing reference image, images differ, etc). + @returns YES if the comparison (or saving of the reference image) succeeded. + */ +- (BOOL)compareSnapshotOfLayer:(CALayer *)layer + referenceImagesDirectory:(NSString *)referenceImagesDirectory + identifier:(NSString *)identifier + error:(NSError **)errorPtr; + +/** + Performs the comparisong or records a snapshot of the view if recordMode is YES. + @param view The view to snapshot + @param referenceImagesDirectory The directory in which reference images are stored. + @param identifier An optional identifier, used is there are muliptle snapshot tests in a given -test method. + @param error An error to log in an XCTAssert() macro if the method fails (missing reference image, images differ, etc). + @returns YES if the comparison (or saving of the reference image) succeeded. + */ +- (BOOL)compareSnapshotOfView:(UIView *)view + referenceImagesDirectory:(NSString *)referenceImagesDirectory + identifier:(NSString *)identifier + error:(NSError **)errorPtr; + +@end diff --git a/Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase.m b/Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase.m new file mode 100644 index 00000000..d5c19206 --- /dev/null +++ b/Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase.m @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2013, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import "FBSnapshotTestCase.h" + +#import "FBSnapshotTestController.h" + +@interface FBSnapshotTestCase () + +@property (readwrite, nonatomic, retain) FBSnapshotTestController *snapshotController; + +@end + +@implementation FBSnapshotTestCase + +- (void)setUp +{ + [super setUp]; + self.snapshotController = [[FBSnapshotTestController alloc] initWithTestClass:[self class]]; +} + +- (void)tearDown +{ + self.snapshotController = nil; + [super tearDown]; +} + +- (BOOL)recordMode +{ + return self.snapshotController.recordMode; +} + +- (void)setRecordMode:(BOOL)recordMode +{ + self.snapshotController.recordMode = recordMode; +} + +- (BOOL)compareSnapshotOfLayer:(CALayer *)layer + referenceImagesDirectory:(NSString *)referenceImagesDirectory + identifier:(NSString *)identifier + error:(NSError **)errorPtr +{ + return [self _compareSnapshotOfViewOrLayer:layer + referenceImagesDirectory:referenceImagesDirectory + identifier:identifier + error:errorPtr]; +} + +- (BOOL)compareSnapshotOfView:(UIView *)view + referenceImagesDirectory:(NSString *)referenceImagesDirectory + identifier:(NSString *)identifier + error:(NSError **)errorPtr +{ + return [self _compareSnapshotOfViewOrLayer:view + referenceImagesDirectory:referenceImagesDirectory + identifier:identifier + error:errorPtr]; +} + +#pragma mark - +#pragma mark Private API + +- (BOOL)_compareSnapshotOfViewOrLayer:(id)viewOrLayer + referenceImagesDirectory:(NSString *)referenceImagesDirectory + identifier:(NSString *)identifier + error:(NSError **)errorPtr +{ + _snapshotController.referenceImagesDirectory = referenceImagesDirectory; + return [_snapshotController compareSnapshotOfViewOrLayer:viewOrLayer + selector:self.selector + identifier:identifier + error:errorPtr]; +} + +@end diff --git a/Example/Pods/FBSnapshotTestCase/FBSnapshotTestController.h b/Example/Pods/FBSnapshotTestCase/FBSnapshotTestController.h new file mode 100644 index 00000000..38ff01bc --- /dev/null +++ b/Example/Pods/FBSnapshotTestCase/FBSnapshotTestController.h @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2013, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import +#import + +typedef NS_ENUM(NSInteger, FBSnapshotTestControllerErrorCode) { + FBSnapshotTestControllerErrorCodeUnknown, + FBSnapshotTestControllerErrorCodeNeedsRecord, + FBSnapshotTestControllerErrorCodePNGCreationFailed, + FBSnapshotTestControllerErrorCodeImagesDifferentSizes, + FBSnapshotTestControllerErrorCodeImagesDifferent, +}; +/** + Errors returned by the methods of FBSnapshotTestController use this domain. + */ +extern NSString *const FBSnapshotTestControllerErrorDomain; + +/** + Errors returned by the methods of FBSnapshotTestController sometimes contain this key in the `userInfo` dictionary. + */ +extern NSString *const FBReferenceImageFilePathKey; + +/** + Provides the heavy-lifting for FBSnapshotTestCase. It loads and saves images, along with performing the actual pixel- + by-pixel comparison of images. + Instances are initialized with the test class, and directories to read and write to. + */ +@interface FBSnapshotTestController : NSObject + +/** + Record snapshots. + **/ +@property(readwrite, nonatomic, assign) BOOL recordMode; + +/** + Designated initializer. + Before this methods returns the controller enumerates over the test methods in `testClass` and loads the images + for those tests. + @param testClass The subclass of FBSnapshotTestCase that is using this controller. + @param referenceImagesDirectory The directory where the reference images are stored. + @returns An instance of FBSnapshotTestController. + */ +- (id)initWithTestClass:(Class)testClass; + + +/** + Performs the comparison of the layer. + @param layer The Layer to snapshot. + @param referenceImagesDirectory The directory in which reference images are stored. + @param identifier An optional identifier, used is there are muliptle snapshot tests in a given -test method. + @param error An error to log in an XCTAssert() macro if the method fails (missing reference image, images differ, etc). + @returns YES if the comparison (or saving of the reference image) succeeded. + */ +- (BOOL)compareSnapshotOfLayer:(CALayer *)layer + selector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)errorPtr; + +/** + Performs the comparison of the view. + @param view The view to snapshot. + @param referenceImagesDirectory The directory in which reference images are stored. + @param identifier An optional identifier, used is there are muliptle snapshot tests in a given -test method. + @param error An error to log in an XCTAssert() macro if the method fails (missing reference image, images differ, etc). + @returns YES if the comparison (or saving of the reference image) succeeded. + */ +- (BOOL)compareSnapshotOfView:(UIView *)view + selector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)errorPtr; + +/** + Performs the comparison of a view or layer. + @param view The view or layer to snapshot. + @param referenceImagesDirectory The directory in which reference images are stored. + @param identifier An optional identifier, used is there are muliptle snapshot tests in a given -test method. + @param error An error to log in an XCTAssert() macro if the method fails (missing reference image, images differ, etc). + @returns YES if the comparison (or saving of the reference image) succeeded. + */ +- (BOOL)compareSnapshotOfViewOrLayer:(id)viewOrLayer + selector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)errorPtr; + + +/** + The directory in which referfence images are stored. + */ +@property (readwrite, nonatomic, copy) NSString *referenceImagesDirectory; + +/** + Loads a reference image. + @param selector The test method being run. + @param identifier The optional identifier, used when multiple images are tested in a single -test method. + @param error An error, if this methods returns nil, the error will be something useful. + @returns An image. + */ +- (UIImage *)referenceImageForSelector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)error; + +/** + Saves a reference image. + @param selector The test method being run. + @param identifier The optional identifier, used when multiple images are tested in a single -test method. + @param error An error, if this methods returns NO, the error will be something useful. + @returns An image. + */ +- (BOOL)saveReferenceImage:(UIImage *)image + selector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)errorPtr; + +/** + Performs a pixel-by-pixel comparison of the two images. + @param referenceImage The reference (correct) image. + @param image The image to test against the reference. + @param error An error that indicates why the comparison failed if it does. + @param YES if the comparison succeeded and the images are the same. + */ +- (BOOL)compareReferenceImage:(UIImage *)referenceImage + toImage:(UIImage *)image + error:(NSError **)errorPtr; + +/** + Saves the reference image and the test image to `failedOutputDirectory`. + @param referenceImage The reference (correct) image. + @param testImage The image to test against the reference. + @param selector The test method being run. + @param identifier The optional identifier, used when multiple images are tested in a single -test method. + @param error An error that indicates why the comparison failed if it does. + @param YES if the save succeeded. + */ +- (BOOL)saveFailedReferenceImage:(UIImage *)referenceImage + testImage:(UIImage *)testImage + selector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)errorPtr; +@end diff --git a/Example/Pods/FBSnapshotTestCase/FBSnapshotTestController.m b/Example/Pods/FBSnapshotTestCase/FBSnapshotTestController.m new file mode 100644 index 00000000..6d56568c --- /dev/null +++ b/Example/Pods/FBSnapshotTestCase/FBSnapshotTestController.m @@ -0,0 +1,376 @@ +/* + * Copyright (c) 2013, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#import "FBSnapshotTestController.h" + +#import "UIImage+Compare.h" +#import "UIImage+Diff.h" + +#import + +#import + +NSString *const FBSnapshotTestControllerErrorDomain = @"FBSnapshotTestControllerErrorDomain"; + +NSString *const FBReferenceImageFilePathKey = @"FBReferenceImageFilePathKey"; + +typedef struct RGBAPixel { + char r; + char g; + char b; + char a; +} RGBAPixel; + +@interface FBSnapshotTestController () + +@property (readonly, nonatomic, retain) Class testClass; + +@end + +@implementation FBSnapshotTestController +{ + NSFileManager *_fileManager; +} + +#pragma mark - +#pragma mark Lifecycle + +- (id)initWithTestClass:(Class)testClass; +{ + if ((self = [super init])) { + _testClass = testClass; + _fileManager = [[NSFileManager alloc] init]; + } + return self; +} + +#pragma mark - +#pragma mark Properties + +- (NSString *)description +{ + return [NSString stringWithFormat:@"%@ %@", [super description], _referenceImagesDirectory]; +} + +#pragma mark - +#pragma mark Public API + +- (UIImage *)referenceImageForSelector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)errorPtr +{ + NSString *filePath = [self _referenceFilePathForSelector:selector identifier:identifier]; + UIImage *image = [UIImage imageWithContentsOfFile:filePath]; + if (nil == image && NULL != errorPtr) { + BOOL exists = [_fileManager fileExistsAtPath:filePath]; + if (!exists) { + *errorPtr = [NSError errorWithDomain:FBSnapshotTestControllerErrorDomain + code:FBSnapshotTestControllerErrorCodeNeedsRecord + userInfo:@{ + FBReferenceImageFilePathKey: filePath, + NSLocalizedDescriptionKey: @"Unable to load reference image.", + NSLocalizedFailureReasonErrorKey: @"Reference image not found. You need to run the test in record mode", + }]; + } else { + *errorPtr = [NSError errorWithDomain:FBSnapshotTestControllerErrorDomain + code:FBSnapshotTestControllerErrorCodeUnknown + userInfo:nil]; + } + } + return image; +} + +- (BOOL)saveReferenceImage:(UIImage *)image + selector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)errorPtr +{ + BOOL didWrite = NO; + if (nil != image) { + NSString *filePath = [self _referenceFilePathForSelector:selector identifier:identifier]; + NSData *pngData = UIImagePNGRepresentation(image); + if (nil != pngData) { + NSError *creationError = nil; + BOOL didCreateDir = [_fileManager createDirectoryAtPath:[filePath stringByDeletingLastPathComponent] + withIntermediateDirectories:YES + attributes:nil + error:&creationError]; + if (!didCreateDir) { + if (NULL != errorPtr) { + *errorPtr = creationError; + } + return NO; + } + didWrite = [pngData writeToFile:filePath options:NSDataWritingAtomic error:errorPtr]; + } else { + if (nil != errorPtr) { + *errorPtr = [NSError errorWithDomain:FBSnapshotTestControllerErrorDomain + code:FBSnapshotTestControllerErrorCodePNGCreationFailed + userInfo:@{ + FBReferenceImageFilePathKey: filePath, + }]; + } + } + } + return didWrite; +} + +- (BOOL)saveFailedReferenceImage:(UIImage *)referenceImage + testImage:(UIImage *)testImage + selector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)errorPtr +{ + NSData *referencePNGData = UIImagePNGRepresentation(referenceImage); + NSData *testPNGData = UIImagePNGRepresentation(testImage); + + NSString *referencePath = [self _failedFilePathForSelector:selector + identifier:identifier + fileNameType:FBTestSnapshotFileNameTypeFailedReference]; + + NSError *creationError = nil; + BOOL didCreateDir = [_fileManager createDirectoryAtPath:[referencePath stringByDeletingLastPathComponent] + withIntermediateDirectories:YES + attributes:nil + error:&creationError]; + if (!didCreateDir) { + if (NULL != errorPtr) { + *errorPtr = creationError; + } + return NO; + } + + if (![referencePNGData writeToFile:referencePath options:NSDataWritingAtomic error:errorPtr]) { + return NO; + } + + NSString *testPath = [self _failedFilePathForSelector:selector + identifier:identifier + fileNameType:FBTestSnapshotFileNameTypeFailedTest]; + + if (![testPNGData writeToFile:testPath options:NSDataWritingAtomic error:errorPtr]) { + return NO; + } + + NSString *diffPath = [self _failedFilePathForSelector:selector + identifier:identifier + fileNameType:FBTestSnapshotFileNameTypeFailedTestDiff]; + + UIImage *diffImage = [referenceImage diffWithImage:testImage]; + NSData *diffImageData = UIImagePNGRepresentation(diffImage); + + if (![diffImageData writeToFile:diffPath options:NSDataWritingAtomic error:errorPtr]) { + return NO; + } + + NSLog(@"If you have Kaleidoscope installed you can run this command to see an image diff:\n" + @"ksdiff \"%@\" \"%@\"", referencePath, testPath); + + return YES; +} + +- (BOOL)compareReferenceImage:(UIImage *)referenceImage toImage:(UIImage *)image error:(NSError **)errorPtr +{ + if (CGSizeEqualToSize(referenceImage.size, image.size)) { + + BOOL imagesEqual = [referenceImage compareWithImage:image]; + if (NULL != errorPtr) { + *errorPtr = [NSError errorWithDomain:FBSnapshotTestControllerErrorDomain + code:FBSnapshotTestControllerErrorCodeImagesDifferent + userInfo:@{ + NSLocalizedDescriptionKey: @"Images different", + }]; + } + return imagesEqual; + } + if (NULL != errorPtr) { + *errorPtr = [NSError errorWithDomain:FBSnapshotTestControllerErrorDomain + code:FBSnapshotTestControllerErrorCodeImagesDifferentSizes + userInfo:@{ + NSLocalizedDescriptionKey: @"Images different sizes", + NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"referenceImage:%@, image:%@", + NSStringFromCGSize(referenceImage.size), + NSStringFromCGSize(image.size)], + }]; + } + return NO; +} + +#pragma mark - +#pragma mark Private API + +typedef NS_ENUM(NSUInteger, FBTestSnapshotFileNameType) { + FBTestSnapshotFileNameTypeReference, + FBTestSnapshotFileNameTypeFailedReference, + FBTestSnapshotFileNameTypeFailedTest, + FBTestSnapshotFileNameTypeFailedTestDiff, +}; + +- (NSString *)_fileNameForSelector:(SEL)selector + identifier:(NSString *)identifier + fileNameType:(FBTestSnapshotFileNameType)fileNameType +{ + NSString *fileName = nil; + switch (fileNameType) { + case FBTestSnapshotFileNameTypeFailedReference: + fileName = @"reference_"; + break; + case FBTestSnapshotFileNameTypeFailedTest: + fileName = @"failed_"; + break; + case FBTestSnapshotFileNameTypeFailedTestDiff: + fileName = @"diff_"; + break; + default: + fileName = @""; + break; + } + fileName = [fileName stringByAppendingString:NSStringFromSelector(selector)]; + if (0 < identifier.length) { + fileName = [fileName stringByAppendingFormat:@"_%@", identifier]; + } + if ([[UIScreen mainScreen] scale] >= 2.0) { + fileName = [fileName stringByAppendingString:@"@2x"]; + } + fileName = [fileName stringByAppendingPathExtension:@"png"]; + return fileName; +} + +- (NSString *)_referenceFilePathForSelector:(SEL)selector identifier:(NSString *)identifier +{ + NSString *fileName = [self _fileNameForSelector:selector + identifier:identifier + fileNameType:FBTestSnapshotFileNameTypeReference]; + NSString *filePath = [_referenceImagesDirectory stringByAppendingPathComponent:NSStringFromClass(_testClass)]; + filePath = [filePath stringByAppendingPathComponent:fileName]; + return filePath; +} + +- (NSString *)_failedFilePathForSelector:(SEL)selector + identifier:(NSString *)identifier + fileNameType:(FBTestSnapshotFileNameType)fileNameType +{ + NSString *fileName = [self _fileNameForSelector:selector + identifier:identifier + fileNameType:fileNameType]; + NSString *folderPath = NSTemporaryDirectory(); + if (getenv("IMAGE_DIFF_DIR")) { + folderPath = @(getenv("IMAGE_DIFF_DIR")); + } + NSString *filePath = [folderPath stringByAppendingPathComponent:NSStringFromClass(_testClass)]; + filePath = [filePath stringByAppendingPathComponent:fileName]; + return filePath; +} + +- (BOOL)compareSnapshotOfLayer:(CALayer *)layer + selector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)errorPtr +{ + return [self compareSnapshotOfViewOrLayer:layer + selector:selector + identifier:identifier + error:errorPtr]; +} + +- (BOOL)compareSnapshotOfView:(UIView *)view + selector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)errorPtr +{ + return [self compareSnapshotOfViewOrLayer:view + selector:selector + identifier:identifier + error:errorPtr]; +} + +- (BOOL)compareSnapshotOfViewOrLayer:(id)viewOrLayer + selector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)errorPtr +{ + if (self.recordMode) { + return [self _recordSnapshotOfViewOrLayer:viewOrLayer selector:selector identifier:identifier error:errorPtr]; + } else { + return [self _performPixelComparisonWithViewOrLayer:viewOrLayer selector:selector identifier:identifier error:errorPtr]; + } +} + +#pragma mark - +#pragma mark Private API + +- (BOOL)_performPixelComparisonWithViewOrLayer:(UIView *)viewOrLayer + selector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)errorPtr +{ + UIImage *referenceImage = [self referenceImageForSelector:selector identifier:identifier error:errorPtr]; + if (nil != referenceImage) { + UIImage *snapshot = [self _snapshotViewOrLayer:viewOrLayer]; + BOOL imagesSame = [self compareReferenceImage:referenceImage toImage:snapshot error:errorPtr]; + if (!imagesSame) { + [self saveFailedReferenceImage:referenceImage + testImage:snapshot + selector:selector + identifier:identifier + error:errorPtr]; + } + return imagesSame; + } + return NO; +} + +- (BOOL)_recordSnapshotOfViewOrLayer:(id)viewOrLayer + selector:(SEL)selector + identifier:(NSString *)identifier + error:(NSError **)errorPtr +{ + UIImage *snapshot = [self _snapshotViewOrLayer:viewOrLayer]; + return [self saveReferenceImage:snapshot selector:selector identifier:identifier error:errorPtr]; +} + +- (UIImage *)_snapshotViewOrLayer:(id)viewOrLayer +{ + CALayer *layer = nil; + + if ([viewOrLayer isKindOfClass:[UIView class]]) { + UIView *view = (UIView *)viewOrLayer; + [view layoutIfNeeded]; + layer = view.layer; + } else if ([viewOrLayer isKindOfClass:[CALayer class]]) { + layer = (CALayer *)viewOrLayer; + [layer layoutIfNeeded]; + } else { + [NSException raise:@"Only UIView and CALayer classes can be snapshotted" format:@"%@", viewOrLayer]; + } + + return [self _renderLayer:layer]; +} + +- (UIImage *)_renderLayer:(CALayer *)layer +{ + CGRect bounds = layer.bounds; + + UIGraphicsBeginImageContextWithOptions(bounds.size, NO, 0); + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGContextSaveGState(context); + { + [layer renderInContext:context]; + } + CGContextRestoreGState(context); + + UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return snapshot; +} + +@end diff --git a/Example/Pods/FBSnapshotTestCase/LICENSE b/Example/Pods/FBSnapshotTestCase/LICENSE new file mode 100644 index 00000000..2dd780cb --- /dev/null +++ b/Example/Pods/FBSnapshotTestCase/LICENSE @@ -0,0 +1,29 @@ +BSD License + +For the FBSnapshotTestCase software + +Copyright (c) 2013, Facebook, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Example/Pods/FBSnapshotTestCase/README.md b/Example/Pods/FBSnapshotTestCase/README.md new file mode 100644 index 00000000..6afa36e0 --- /dev/null +++ b/Example/Pods/FBSnapshotTestCase/README.md @@ -0,0 +1,83 @@ +FBSnapshotTestCase +====================== + +[![Build Status](https://travis-ci.org/facebook/ios-snapshot-test-case.png)](https://travis-ci.org/facebook/ios-snapshot-test-case) + +What it does +------------ + +A "snapshot test case" takes a configured `UIView` or `CALayer` and uses the +`renderInContext:` method to get an image snapshot of its contents. It +compares this snapshot to a "reference image" stored in your source code +repository and fails the test if the two images don't match. + +Why? +---- + +At Facebook we write a lot of UI code. As you might imagine, each type of +feed story is rendered using a subclass of `UIView`. There are a lot of edge +cases that we want to handle correctly: + +- What if there is more text than can fit in the space available? +- What if an image doesn't match the size of an image view? +- What should the highlighted state look like? + +It's straightforward to test logic code, but less obvious how you should test +views. You can do a lot of rectangle asserts, but these are hard to understand +or visualize. Looking at an image diff shows you exactly what changed and how +it will look to users. + +We developed `FBSnapshotTestCase` to make snapshot tests easy. + +Creating a snapshot test +------------------------ + +1. Drop the `FBSnapshotTestCase` and `FBSnapshotTestController` source files + into your project. In the Add Files dialog, be sure to check the **tests** + target, not the main target. + + Add Files Dialog + +2. Define `FB_REFERENCE_IMAGE_DIR` in `GCC_PREPROCESSOR_DEFINITIONS`. This + should point to the directory where you want reference images to be stored. + At Facebook, we normally use this: + + `GCC_PREPROCESSOR_DEFINITIONS = $(inherited) FB_REFERENCE_IMAGE_DIR="\"$(SOURCE_ROOT)/$(PROJECT_NAME)Tests/ReferenceImages\""` + +3. Subclass `FBSnapshotTestCase` instead of `XCTestCase`. +4. From within your test, use `FBSnapshotVerifyView`. +5. Run the test once with `self.recordMode = YES;` in the test's `-setUp` + method. (This creates the reference images on disk.) +6. Remove the line enabling record mode and run the test. + +Features +-------- + +- Automatically names reference images on disk according to test class and + selector. +- Prints a descriptive error message to the console on failure. (Bonus: + failure message includes a one-line command to see an image diff if + you have [Kaleidoscope](http://www.kaleidoscopeapp.com) installed.) +- Supply an optional "identifier" if you want to perform multiple snapshots + in a single test method. +- Support for `CALayer` via `FBSnapshotVerifyLayer`. + +Notes +----- + +Your unit test must be an "application test", not a "logic test." (That is, it +must be run within the Simulator so that it has access to UIKit.) In Xcode 5 +and later new projects only offer application tests, but older projects will +have separate targets for the two types. + +Authors +------- + +`FBSnapshotTestCase` was written at Facebook by +[Jonathan Dann](https://facebook.com/j.p.dann) with significant contributions by +[Todd Krabach](https://facebook.com/toddkrabach). + +License +------- + +`FBSnapshotTestCase` is BSD-licensed. See `LICENSE`. diff --git a/Example/Pods/FBSnapshotTestCase/UIImage+Compare.h b/Example/Pods/FBSnapshotTestCase/UIImage+Compare.h new file mode 100644 index 00000000..11c6fa63 --- /dev/null +++ b/Example/Pods/FBSnapshotTestCase/UIImage+Compare.h @@ -0,0 +1,37 @@ +// +// Created by Gabriel Handford on 3/1/09. +// Copyright 2009-2013. All rights reserved. +// Created by John Boiles on 10/20/11. +// Copyright (c) 2011. All rights reserved +// Modified by Felix Schulze on 2/11/13. +// Copyright 2013. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +#import + +@interface UIImage (Compare) + +- (BOOL)compareWithImage:(UIImage *)image; + +@end diff --git a/Example/Pods/FBSnapshotTestCase/UIImage+Compare.m b/Example/Pods/FBSnapshotTestCase/UIImage+Compare.m new file mode 100644 index 00000000..c0ba82e1 --- /dev/null +++ b/Example/Pods/FBSnapshotTestCase/UIImage+Compare.m @@ -0,0 +1,87 @@ +// +// Created by Gabriel Handford on 3/1/09. +// Copyright 2009-2013. All rights reserved. +// Created by John Boiles on 10/20/11. +// Copyright (c) 2011. All rights reserved +// Modified by Felix Schulze on 2/11/13. +// Copyright 2013. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +#import "UIImage+Compare.h" + +@implementation UIImage (Compare) + +- (BOOL)compareWithImage:(UIImage *)image +{ + NSAssert(CGSizeEqualToSize(self.size, image.size), @"Images must be same size."); + + // The images have the equal size, so we could use the smallest amount of bytes because of byte padding + size_t minBytesPerRow = MIN(CGImageGetBytesPerRow(self.CGImage), CGImageGetBytesPerRow(image.CGImage)); + size_t referenceImageSizeBytes = CGImageGetHeight(self.CGImage) * minBytesPerRow; + void *referenceImagePixels = calloc(1, referenceImageSizeBytes); + void *imagePixels = calloc(1, referenceImageSizeBytes); + + if (!referenceImagePixels || !imagePixels) { + free(referenceImagePixels); + free(imagePixels); + return NO; + } + + CGContextRef referenceImageContext = CGBitmapContextCreate(referenceImagePixels, + CGImageGetWidth(self.CGImage), + CGImageGetHeight(self.CGImage), + CGImageGetBitsPerComponent(self.CGImage), + minBytesPerRow, + CGImageGetColorSpace(self.CGImage), + (CGBitmapInfo)kCGImageAlphaPremultipliedLast + ); + CGContextRef imageContext = CGBitmapContextCreate(imagePixels, + CGImageGetWidth(image.CGImage), + CGImageGetHeight(image.CGImage), + CGImageGetBitsPerComponent(image.CGImage), + minBytesPerRow, + CGImageGetColorSpace(image.CGImage), + (CGBitmapInfo)kCGImageAlphaPremultipliedLast + ); + + if (!referenceImageContext || !imageContext) { + CGContextRelease(referenceImageContext); + CGContextRelease(imageContext); + free(referenceImagePixels); + free(imagePixels); + return NO; + } + + CGContextDrawImage(referenceImageContext, CGRectMake(0.0f, 0.0f, self.size.width, self.size.height), self.CGImage); + CGContextDrawImage(imageContext, CGRectMake(0.0f, 0.0f, image.size.width, image.size.height), image.CGImage); + CGContextRelease(referenceImageContext); + CGContextRelease(imageContext); + + BOOL imageEqual = (memcmp(referenceImagePixels, imagePixels, referenceImageSizeBytes) == 0); + free(referenceImagePixels); + free(imagePixels); + return imageEqual; +} + +@end diff --git a/Example/Pods/FBSnapshotTestCase/UIImage+Diff.h b/Example/Pods/FBSnapshotTestCase/UIImage+Diff.h new file mode 100644 index 00000000..35595843 --- /dev/null +++ b/Example/Pods/FBSnapshotTestCase/UIImage+Diff.h @@ -0,0 +1,37 @@ +// +// Created by Gabriel Handford on 3/1/09. +// Copyright 2009-2013. All rights reserved. +// Created by John Boiles on 10/20/11. +// Copyright (c) 2011. All rights reserved +// Modified by Felix Schulze on 2/11/13. +// Copyright 2013. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +#import + +@interface UIImage (Diff) + +- (UIImage *)diffWithImage:(UIImage *)image; + +@end diff --git a/Example/Pods/FBSnapshotTestCase/UIImage+Diff.m b/Example/Pods/FBSnapshotTestCase/UIImage+Diff.m new file mode 100644 index 00000000..44ecb59e --- /dev/null +++ b/Example/Pods/FBSnapshotTestCase/UIImage+Diff.m @@ -0,0 +1,56 @@ +// +// Created by Gabriel Handford on 3/1/09. +// Copyright 2009-2013. All rights reserved. +// Created by John Boiles on 10/20/11. +// Copyright (c) 2011. All rights reserved +// Modified by Felix Schulze on 2/11/13. +// Copyright 2013. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// + +#import "UIImage+Diff.h" + +@implementation UIImage (Diff) + +- (UIImage *)diffWithImage:(UIImage *)image +{ + if (!image) { + return nil; + } + CGSize imageSize = CGSizeMake(MAX(self.size.width, image.size.width), MAX(self.size.height, image.size.height)); + UIGraphicsBeginImageContextWithOptions(imageSize, YES, 0.0); + CGContextRef context = UIGraphicsGetCurrentContext(); + [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)]; + CGContextSetAlpha(context, 0.5f); + CGContextBeginTransparencyLayer(context, NULL); + [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)]; + CGContextSetBlendMode(context, kCGBlendModeDifference); + CGContextSetFillColorWithColor(context,[UIColor whiteColor].CGColor); + CGContextFillRect(context, CGRectMake(0, 0, self.size.width, self.size.height)); + CGContextEndTransparencyLayer(context); + UIImage *returnImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return returnImage; +} + +@end diff --git a/Example/Pods/Headers/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h b/Example/Pods/Headers/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h new file mode 120000 index 00000000..88b3253b --- /dev/null +++ b/Example/Pods/Headers/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h @@ -0,0 +1 @@ +../../Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPBackwardCompatibility.h b/Example/Pods/Headers/Expecta/EXPBackwardCompatibility.h new file mode 120000 index 00000000..fc512575 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPBackwardCompatibility.h @@ -0,0 +1 @@ +../../Expecta/src/EXPBackwardCompatibility.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPBlockDefinedMatcher.h b/Example/Pods/Headers/Expecta/EXPBlockDefinedMatcher.h new file mode 120000 index 00000000..95335fa1 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPBlockDefinedMatcher.h @@ -0,0 +1 @@ +../../Expecta/src/EXPBlockDefinedMatcher.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPDefines.h b/Example/Pods/Headers/Expecta/EXPDefines.h new file mode 120000 index 00000000..2638e94d --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPDefines.h @@ -0,0 +1 @@ +../../Expecta/src/EXPDefines.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPDoubleTuple.h b/Example/Pods/Headers/Expecta/EXPDoubleTuple.h new file mode 120000 index 00000000..0921aa0f --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPDoubleTuple.h @@ -0,0 +1 @@ +../../Expecta/src/EXPDoubleTuple.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPExpect.h b/Example/Pods/Headers/Expecta/EXPExpect.h new file mode 120000 index 00000000..6d723600 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPExpect.h @@ -0,0 +1 @@ +../../Expecta/src/EXPExpect.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPFloatTuple.h b/Example/Pods/Headers/Expecta/EXPFloatTuple.h new file mode 120000 index 00000000..ece45732 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPFloatTuple.h @@ -0,0 +1 @@ +../../Expecta/src/EXPFloatTuple.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatcher.h b/Example/Pods/Headers/Expecta/EXPMatcher.h new file mode 120000 index 00000000..c79be902 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatcher.h @@ -0,0 +1 @@ +../../Expecta/src/EXPMatcher.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatcherHelpers.h b/Example/Pods/Headers/Expecta/EXPMatcherHelpers.h new file mode 120000 index 00000000..2b564af6 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatcherHelpers.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatcherHelpers.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beCloseTo.h b/Example/Pods/Headers/Expecta/EXPMatchers+beCloseTo.h new file mode 120000 index 00000000..c12bc7a5 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beCloseTo.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beCloseTo.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beFalsy.h b/Example/Pods/Headers/Expecta/EXPMatchers+beFalsy.h new file mode 120000 index 00000000..52efa658 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beFalsy.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beFalsy.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beGreaterThan.h b/Example/Pods/Headers/Expecta/EXPMatchers+beGreaterThan.h new file mode 120000 index 00000000..83514d74 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beGreaterThan.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beGreaterThan.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beGreaterThanOrEqualTo.h b/Example/Pods/Headers/Expecta/EXPMatchers+beGreaterThanOrEqualTo.h new file mode 120000 index 00000000..f1ff2c97 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beGreaterThanOrEqualTo.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beGreaterThanOrEqualTo.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beIdenticalTo.h b/Example/Pods/Headers/Expecta/EXPMatchers+beIdenticalTo.h new file mode 120000 index 00000000..c601f2e2 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beIdenticalTo.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beIdenticalTo.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beInTheRangeOf.h b/Example/Pods/Headers/Expecta/EXPMatchers+beInTheRangeOf.h new file mode 120000 index 00000000..c0b31eb4 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beInTheRangeOf.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beInTheRangeOf.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beInstanceOf.h b/Example/Pods/Headers/Expecta/EXPMatchers+beInstanceOf.h new file mode 120000 index 00000000..1a608464 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beInstanceOf.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beInstanceOf.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beKindOf.h b/Example/Pods/Headers/Expecta/EXPMatchers+beKindOf.h new file mode 120000 index 00000000..fa76c024 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beKindOf.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beKindOf.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beLessThan.h b/Example/Pods/Headers/Expecta/EXPMatchers+beLessThan.h new file mode 120000 index 00000000..c3245f45 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beLessThan.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beLessThan.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beLessThanOrEqualTo.h b/Example/Pods/Headers/Expecta/EXPMatchers+beLessThanOrEqualTo.h new file mode 120000 index 00000000..3b01c3eb --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beLessThanOrEqualTo.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beLessThanOrEqualTo.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beNil.h b/Example/Pods/Headers/Expecta/EXPMatchers+beNil.h new file mode 120000 index 00000000..12a7e3f1 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beNil.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beNil.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beSubclassOf.h b/Example/Pods/Headers/Expecta/EXPMatchers+beSubclassOf.h new file mode 120000 index 00000000..6a5deb86 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beSubclassOf.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beSubclassOf.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beSupersetOf.h b/Example/Pods/Headers/Expecta/EXPMatchers+beSupersetOf.h new file mode 120000 index 00000000..11686b12 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beSupersetOf.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beSupersetOf.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beTruthy.h b/Example/Pods/Headers/Expecta/EXPMatchers+beTruthy.h new file mode 120000 index 00000000..54c68cae --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beTruthy.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beTruthy.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+beginWith.h b/Example/Pods/Headers/Expecta/EXPMatchers+beginWith.h new file mode 120000 index 00000000..ac38844e --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+beginWith.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+beginWith.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+conformTo.h b/Example/Pods/Headers/Expecta/EXPMatchers+conformTo.h new file mode 120000 index 00000000..1065cbba --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+conformTo.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+conformTo.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+contain.h b/Example/Pods/Headers/Expecta/EXPMatchers+contain.h new file mode 120000 index 00000000..acc77a1d --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+contain.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+contain.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+endWith.h b/Example/Pods/Headers/Expecta/EXPMatchers+endWith.h new file mode 120000 index 00000000..96994ee5 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+endWith.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+endWith.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+equal.h b/Example/Pods/Headers/Expecta/EXPMatchers+equal.h new file mode 120000 index 00000000..5899cd0e --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+equal.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+equal.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+haveCountOf.h b/Example/Pods/Headers/Expecta/EXPMatchers+haveCountOf.h new file mode 120000 index 00000000..3980491e --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+haveCountOf.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+haveCountOf.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+notify.h b/Example/Pods/Headers/Expecta/EXPMatchers+notify.h new file mode 120000 index 00000000..2fd138df --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+notify.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+notify.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+raise.h b/Example/Pods/Headers/Expecta/EXPMatchers+raise.h new file mode 120000 index 00000000..cba1bb04 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+raise.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+raise.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+raiseWithReason.h b/Example/Pods/Headers/Expecta/EXPMatchers+raiseWithReason.h new file mode 120000 index 00000000..a2fcd871 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+raiseWithReason.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+raiseWithReason.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers+respondTo.h b/Example/Pods/Headers/Expecta/EXPMatchers+respondTo.h new file mode 120000 index 00000000..5fc06399 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers+respondTo.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers+respondTo.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPMatchers.h b/Example/Pods/Headers/Expecta/EXPMatchers.h new file mode 120000 index 00000000..60a6f9c1 --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPMatchers.h @@ -0,0 +1 @@ +../../Expecta/src/matchers/EXPMatchers.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/EXPUnsupportedObject.h b/Example/Pods/Headers/Expecta/EXPUnsupportedObject.h new file mode 120000 index 00000000..c16ffb8b --- /dev/null +++ b/Example/Pods/Headers/Expecta/EXPUnsupportedObject.h @@ -0,0 +1 @@ +../../Expecta/src/EXPUnsupportedObject.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/Expecta.h b/Example/Pods/Headers/Expecta/Expecta.h new file mode 120000 index 00000000..b8fc5651 --- /dev/null +++ b/Example/Pods/Headers/Expecta/Expecta.h @@ -0,0 +1 @@ +../../Expecta/src/Expecta.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/ExpectaSupport.h b/Example/Pods/Headers/Expecta/ExpectaSupport.h new file mode 120000 index 00000000..b3e83b37 --- /dev/null +++ b/Example/Pods/Headers/Expecta/ExpectaSupport.h @@ -0,0 +1 @@ +../../Expecta/src/ExpectaSupport.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/NSObject+Expecta.h b/Example/Pods/Headers/Expecta/NSObject+Expecta.h new file mode 120000 index 00000000..6e1bf5e7 --- /dev/null +++ b/Example/Pods/Headers/Expecta/NSObject+Expecta.h @@ -0,0 +1 @@ +../../Expecta/src/NSObject+Expecta.h \ No newline at end of file diff --git a/Example/Pods/Headers/Expecta/NSValue+Expecta.h b/Example/Pods/Headers/Expecta/NSValue+Expecta.h new file mode 120000 index 00000000..cfbc364d --- /dev/null +++ b/Example/Pods/Headers/Expecta/NSValue+Expecta.h @@ -0,0 +1 @@ +../../Expecta/src/NSValue+Expecta.h \ No newline at end of file diff --git a/Example/Pods/Headers/FBSnapshotTestCase/FBSnapshotTestCase.h b/Example/Pods/Headers/FBSnapshotTestCase/FBSnapshotTestCase.h new file mode 120000 index 00000000..9a54bb78 --- /dev/null +++ b/Example/Pods/Headers/FBSnapshotTestCase/FBSnapshotTestCase.h @@ -0,0 +1 @@ +../../FBSnapshotTestCase/FBSnapshotTestCase.h \ No newline at end of file diff --git a/Example/Pods/Headers/FBSnapshotTestCase/FBSnapshotTestController.h b/Example/Pods/Headers/FBSnapshotTestCase/FBSnapshotTestController.h new file mode 120000 index 00000000..89747d16 --- /dev/null +++ b/Example/Pods/Headers/FBSnapshotTestCase/FBSnapshotTestController.h @@ -0,0 +1 @@ +../../FBSnapshotTestCase/FBSnapshotTestController.h \ No newline at end of file diff --git a/Example/Pods/Headers/FBSnapshotTestCase/UIImage+Compare.h b/Example/Pods/Headers/FBSnapshotTestCase/UIImage+Compare.h new file mode 120000 index 00000000..6f5df5c3 --- /dev/null +++ b/Example/Pods/Headers/FBSnapshotTestCase/UIImage+Compare.h @@ -0,0 +1 @@ +../../FBSnapshotTestCase/UIImage+Compare.h \ No newline at end of file diff --git a/Example/Pods/Headers/FBSnapshotTestCase/UIImage+Diff.h b/Example/Pods/Headers/FBSnapshotTestCase/UIImage+Diff.h new file mode 120000 index 00000000..d7fc4733 --- /dev/null +++ b/Example/Pods/Headers/FBSnapshotTestCase/UIImage+Diff.h @@ -0,0 +1 @@ +../../FBSnapshotTestCase/UIImage+Diff.h \ No newline at end of file diff --git a/ExampleProject/Pods/Headers/HexColors/HexColor.h b/Example/Pods/Headers/HexColors/HexColor.h similarity index 100% rename from ExampleProject/Pods/Headers/HexColors/HexColor.h rename to Example/Pods/Headers/HexColors/HexColor.h diff --git a/Example/Pods/Headers/Specta/SPTExample.h b/Example/Pods/Headers/Specta/SPTExample.h new file mode 120000 index 00000000..421898bb --- /dev/null +++ b/Example/Pods/Headers/Specta/SPTExample.h @@ -0,0 +1 @@ +../../Specta/src/SPTExample.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/SPTExampleGroup.h b/Example/Pods/Headers/Specta/SPTExampleGroup.h new file mode 120000 index 00000000..769748e8 --- /dev/null +++ b/Example/Pods/Headers/Specta/SPTExampleGroup.h @@ -0,0 +1 @@ +../../Specta/src/SPTExampleGroup.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/SPTNestedReporter.h b/Example/Pods/Headers/Specta/SPTNestedReporter.h new file mode 120000 index 00000000..172992ec --- /dev/null +++ b/Example/Pods/Headers/Specta/SPTNestedReporter.h @@ -0,0 +1 @@ +../../Specta/src/SPTNestedReporter.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/SPTReporter.h b/Example/Pods/Headers/Specta/SPTReporter.h new file mode 120000 index 00000000..670e5d4e --- /dev/null +++ b/Example/Pods/Headers/Specta/SPTReporter.h @@ -0,0 +1 @@ +../../Specta/src/SPTReporter.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/SPTSharedExampleGroups.h b/Example/Pods/Headers/Specta/SPTSharedExampleGroups.h new file mode 120000 index 00000000..d4cd80aa --- /dev/null +++ b/Example/Pods/Headers/Specta/SPTSharedExampleGroups.h @@ -0,0 +1 @@ +../../Specta/src/SPTSharedExampleGroups.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/SPTSpec.h b/Example/Pods/Headers/Specta/SPTSpec.h new file mode 120000 index 00000000..a67403ec --- /dev/null +++ b/Example/Pods/Headers/Specta/SPTSpec.h @@ -0,0 +1 @@ +../../Specta/src/SPTSpec.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/SPTXCTestCase.h b/Example/Pods/Headers/Specta/SPTXCTestCase.h new file mode 120000 index 00000000..b8ed7931 --- /dev/null +++ b/Example/Pods/Headers/Specta/SPTXCTestCase.h @@ -0,0 +1 @@ +../../Specta/src/SPTXCTestCase.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/SPTXCTestReporter.h b/Example/Pods/Headers/Specta/SPTXCTestReporter.h new file mode 120000 index 00000000..d4cde9c7 --- /dev/null +++ b/Example/Pods/Headers/Specta/SPTXCTestReporter.h @@ -0,0 +1 @@ +../../Specta/src/SPTXCTestReporter.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/Specta.h b/Example/Pods/Headers/Specta/Specta.h new file mode 120000 index 00000000..c0835e84 --- /dev/null +++ b/Example/Pods/Headers/Specta/Specta.h @@ -0,0 +1 @@ +../../Specta/src/Specta.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/SpectaSupport.h b/Example/Pods/Headers/Specta/SpectaSupport.h new file mode 120000 index 00000000..13503046 --- /dev/null +++ b/Example/Pods/Headers/Specta/SpectaSupport.h @@ -0,0 +1 @@ +../../Specta/src/SpectaSupport.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/SpectaTypes.h b/Example/Pods/Headers/Specta/SpectaTypes.h new file mode 120000 index 00000000..83983c30 --- /dev/null +++ b/Example/Pods/Headers/Specta/SpectaTypes.h @@ -0,0 +1 @@ +../../Specta/src/SpectaTypes.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/SpectaUtility.h b/Example/Pods/Headers/Specta/SpectaUtility.h new file mode 120000 index 00000000..6491285a --- /dev/null +++ b/Example/Pods/Headers/Specta/SpectaUtility.h @@ -0,0 +1 @@ +../../Specta/src/SpectaUtility.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/XCTestCase+Specta.h b/Example/Pods/Headers/Specta/XCTestCase+Specta.h new file mode 120000 index 00000000..d2f567ed --- /dev/null +++ b/Example/Pods/Headers/Specta/XCTestCase+Specta.h @@ -0,0 +1 @@ +../../Specta/src/XCTestCase+Specta.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/XCTestLog+Specta.h b/Example/Pods/Headers/Specta/XCTestLog+Specta.h new file mode 120000 index 00000000..5e8c650b --- /dev/null +++ b/Example/Pods/Headers/Specta/XCTestLog+Specta.h @@ -0,0 +1 @@ +../../Specta/src/XCTestLog+Specta.h \ No newline at end of file diff --git a/Example/Pods/Headers/Specta/XCTestRun+Specta.h b/Example/Pods/Headers/Specta/XCTestRun+Specta.h new file mode 120000 index 00000000..58583942 --- /dev/null +++ b/Example/Pods/Headers/Specta/XCTestRun+Specta.h @@ -0,0 +1 @@ +../../Specta/src/XCTestRun+Specta.h \ No newline at end of file diff --git a/Example/Pods/Headers/TSMessages/TSBlurView.h b/Example/Pods/Headers/TSMessages/TSBlurView.h new file mode 120000 index 00000000..3358658d --- /dev/null +++ b/Example/Pods/Headers/TSMessages/TSBlurView.h @@ -0,0 +1 @@ +../../../../Pod/Classes/TSBlurView.h \ No newline at end of file diff --git a/Example/Pods/Headers/TSMessages/TSMessage.h b/Example/Pods/Headers/TSMessages/TSMessage.h new file mode 120000 index 00000000..033e30a5 --- /dev/null +++ b/Example/Pods/Headers/TSMessages/TSMessage.h @@ -0,0 +1 @@ +../../../../Pod/Classes/TSMessage.h \ No newline at end of file diff --git a/Example/Pods/Headers/TSMessages/TSMessageView.h b/Example/Pods/Headers/TSMessages/TSMessageView.h new file mode 120000 index 00000000..88ac4c19 --- /dev/null +++ b/Example/Pods/Headers/TSMessages/TSMessageView.h @@ -0,0 +1 @@ +../../../../Pod/Classes/TSMessageView.h \ No newline at end of file diff --git a/ExampleProject/Pods/HexColors/Classes/HexColor.h b/Example/Pods/HexColors/Classes/HexColor.h similarity index 100% rename from ExampleProject/Pods/HexColors/Classes/HexColor.h rename to Example/Pods/HexColors/Classes/HexColor.h diff --git a/ExampleProject/Pods/HexColors/Classes/HexColor.m b/Example/Pods/HexColors/Classes/HexColor.m similarity index 100% rename from ExampleProject/Pods/HexColors/Classes/HexColor.m rename to Example/Pods/HexColors/Classes/HexColor.m diff --git a/ExampleProject/Pods/HexColors/LICENCE b/Example/Pods/HexColors/LICENCE similarity index 100% rename from ExampleProject/Pods/HexColors/LICENCE rename to Example/Pods/HexColors/LICENCE diff --git a/ExampleProject/Pods/HexColors/README.md b/Example/Pods/HexColors/README.md similarity index 100% rename from ExampleProject/Pods/HexColors/README.md rename to Example/Pods/HexColors/README.md diff --git a/Example/Pods/Local Podspecs/TSMessages.podspec b/Example/Pods/Local Podspecs/TSMessages.podspec new file mode 100644 index 00000000..1466b02b --- /dev/null +++ b/Example/Pods/Local Podspecs/TSMessages.podspec @@ -0,0 +1,34 @@ +# +# Be sure to run `pod lib lint TSMessages.podspec' to ensure this is a +# valid spec and remove all comments before submitting the spec. +# +# Any lines starting with a # are optional, but encouraged +# +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html +# + +Pod::Spec.new do |s| + s.name = "TSMessages" + s.version = "0.9.10" + s.summary = "Easy to use and customizable messages/notifications for iOS à la Tweetbot." + s.description = <<-DESC + This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). +The notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it. +There are 4 different types already set up for you: Success, Error, Warning, Message. + DESC + s.homepage = "https://github.com/toursprung/TSMessages/" + # s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2" + s.license = 'MIT' + s.author = { "Felix Krause" => "krausefx@gmail.com" } + s.source = { :git => "https://github.com/toursprung/TSMessages.git", :tag => s.version.to_s } + # s.social_media_url = 'https://twitter.com/' + + s.platform = :ios, '5.0' + s.requires_arc = true + + s.source_files = 'Pod/Classes' + s.resources = ['Pod/Assets/*.png', 'Pod/Assets/*.json'] + + s.public_header_files = 'Pod/Classes/**/*.h' + s.dependency 'HexColors' +end diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock new file mode 100644 index 00000000..03668710 --- /dev/null +++ b/Example/Pods/Manifest.lock @@ -0,0 +1,31 @@ +PODS: + - Expecta (0.3.1) + - Expecta+Snapshots (1.2.1): + - Expecta + - FBSnapshotTestCase + - FBSnapshotTestCase (1.1) + - HexColors (2.2.1) + - Specta (0.2.1) + - TSMessages (0.9.10): + - HexColors + +DEPENDENCIES: + - Expecta + - Expecta+Snapshots + - FBSnapshotTestCase + - Specta (~> 0.2.1) + - TSMessages (from `../`) + +EXTERNAL SOURCES: + TSMessages: + :path: ../ + +SPEC CHECKSUMS: + Expecta: 03aabd0a89d8dea843baecb19a7fd7466a69a31d + Expecta+Snapshots: 30c28e3d8104665ee70e32df1cfc030bb37a8a6c + FBSnapshotTestCase: 9053afee1d66b4c7c313fcb0ae582a5e47bea9d0 + HexColors: 01384d2bbe8dc4ffa43c3b4135db6e976952d153 + Specta: 9141310f46b1f68b676650ff2854e1ed0b74163a + TSMessages: 26a59c8a43cc80e1f918d9e7cbab527f4097d4d1 + +COCOAPODS: 0.33.1 diff --git a/Example/Pods/Pods-TSMessages-HexColors-Private.xcconfig b/Example/Pods/Pods-TSMessages-HexColors-Private.xcconfig new file mode 100644 index 00000000..d68c7c6e --- /dev/null +++ b/Example/Pods/Pods-TSMessages-HexColors-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-TSMessages-HexColors.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/HexColors" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Expecta" "${PODS_ROOT}/Headers/Expecta+Snapshots" "${PODS_ROOT}/Headers/FBSnapshotTestCase" "${PODS_ROOT}/Headers/HexColors" "${PODS_ROOT}/Headers/Specta" "${PODS_ROOT}/Headers/TSMessages" +OTHER_LDFLAGS = -ObjC +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Example/Pods/Pods-TSMessages-HexColors-dummy.m b/Example/Pods/Pods-TSMessages-HexColors-dummy.m new file mode 100644 index 00000000..1cc911b4 --- /dev/null +++ b/Example/Pods/Pods-TSMessages-HexColors-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_TSMessages_HexColors : NSObject +@end +@implementation PodsDummy_Pods_TSMessages_HexColors +@end diff --git a/Example/Pods/Pods-TSMessages-HexColors-prefix.pch b/Example/Pods/Pods-TSMessages-HexColors-prefix.pch new file mode 100644 index 00000000..ed2bd984 --- /dev/null +++ b/Example/Pods/Pods-TSMessages-HexColors-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-TSMessages-environment.h" diff --git a/ExampleProject/Pods/Pods-HexColors.xcconfig b/Example/Pods/Pods-TSMessages-HexColors.xcconfig similarity index 100% rename from ExampleProject/Pods/Pods-HexColors.xcconfig rename to Example/Pods/Pods-TSMessages-HexColors.xcconfig diff --git a/Example/Pods/Pods-TSMessages-TSMessages-Private.xcconfig b/Example/Pods/Pods-TSMessages-TSMessages-Private.xcconfig new file mode 100644 index 00000000..6116bbcc --- /dev/null +++ b/Example/Pods/Pods-TSMessages-TSMessages-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-TSMessages-TSMessages.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/TSMessages" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Expecta" "${PODS_ROOT}/Headers/Expecta+Snapshots" "${PODS_ROOT}/Headers/FBSnapshotTestCase" "${PODS_ROOT}/Headers/HexColors" "${PODS_ROOT}/Headers/Specta" "${PODS_ROOT}/Headers/TSMessages" +OTHER_LDFLAGS = -ObjC +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Example/Pods/Pods-TSMessages-TSMessages-dummy.m b/Example/Pods/Pods-TSMessages-TSMessages-dummy.m new file mode 100644 index 00000000..a278ea80 --- /dev/null +++ b/Example/Pods/Pods-TSMessages-TSMessages-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_TSMessages_TSMessages : NSObject +@end +@implementation PodsDummy_Pods_TSMessages_TSMessages +@end diff --git a/Example/Pods/Pods-TSMessages-TSMessages-prefix.pch b/Example/Pods/Pods-TSMessages-TSMessages-prefix.pch new file mode 100644 index 00000000..ed2bd984 --- /dev/null +++ b/Example/Pods/Pods-TSMessages-TSMessages-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-TSMessages-environment.h" diff --git a/ExampleProject/Pods/Pods-TSMessages.xcconfig b/Example/Pods/Pods-TSMessages-TSMessages.xcconfig similarity index 100% rename from ExampleProject/Pods/Pods-TSMessages.xcconfig rename to Example/Pods/Pods-TSMessages-TSMessages.xcconfig diff --git a/Example/Pods/Pods-TSMessages-acknowledgements.markdown b/Example/Pods/Pods-TSMessages-acknowledgements.markdown new file mode 100644 index 00000000..040d8fd9 --- /dev/null +++ b/Example/Pods/Pods-TSMessages-acknowledgements.markdown @@ -0,0 +1,38 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## HexColors + +The MIT License (MIT) +Copyright (c) 2012 Marius Landwehr marius.landwehr@gmail.com + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +## TSMessages + +Copyright (c) 2014 Toursprung, Felix Krause + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Generated by CocoaPods - http://cocoapods.org diff --git a/ExampleProject/Pods/Pods-Acknowledgements.plist b/Example/Pods/Pods-TSMessages-acknowledgements.plist similarity index 63% rename from ExampleProject/Pods/Pods-Acknowledgements.plist rename to Example/Pods/Pods-TSMessages-acknowledgements.plist index 21606bbc..12ba4720 100644 --- a/ExampleProject/Pods/Pods-Acknowledgements.plist +++ b/Example/Pods/Pods-TSMessages-acknowledgements.plist @@ -30,14 +30,26 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI FooterText - Copyright (c) 2013, Toursprung -All rights reserved. + Copyright (c) 2014 Toursprung, Felix Krause <krausefx@gmail.com> -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + Title TSMessages Type diff --git a/ExampleProject/Pods/Pods-TSMessages-dummy.m b/Example/Pods/Pods-TSMessages-dummy.m similarity index 100% rename from ExampleProject/Pods/Pods-TSMessages-dummy.m rename to Example/Pods/Pods-TSMessages-dummy.m diff --git a/ExampleProject/Pods/Pods-environment.h b/Example/Pods/Pods-TSMessages-environment.h similarity index 92% rename from ExampleProject/Pods/Pods-environment.h rename to Example/Pods/Pods-TSMessages-environment.h index f5642e91..9edf84c3 100644 --- a/ExampleProject/Pods/Pods-environment.h +++ b/Example/Pods/Pods-TSMessages-environment.h @@ -16,5 +16,5 @@ #define COCOAPODS_POD_AVAILABLE_TSMessages #define COCOAPODS_VERSION_MAJOR_TSMessages 0 #define COCOAPODS_VERSION_MINOR_TSMessages 9 -#define COCOAPODS_VERSION_PATCH_TSMessages 4 +#define COCOAPODS_VERSION_PATCH_TSMessages 10 diff --git a/ExampleProject/Pods/Pods-resources.sh b/Example/Pods/Pods-TSMessages-resources.sh similarity index 50% rename from ExampleProject/Pods/Pods-resources.sh rename to Example/Pods/Pods-TSMessages-resources.sh index a672c229..ff8e6d44 100755 --- a/ExampleProject/Pods/Pods-resources.sh +++ b/Example/Pods/Pods-TSMessages-resources.sh @@ -8,12 +8,12 @@ install_resource() { case $1 in *.storyboard) - echo "ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.xib) - echo "ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" - ibtool --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" ;; *.framework) echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" @@ -41,23 +41,23 @@ install_resource() ;; esac } -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundError.png" -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundError@2x.png" -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundErrorIcon.png" -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundErrorIcon@2x.png" -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundMessage.png" -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundMessage@2x.png" -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundSuccess.png" -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundSuccess@2x.png" -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundSuccessIcon.png" -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundSuccessIcon@2x.png" -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundWarning.png" -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundWarning@2x.png" -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundWarningIcon.png" -install_resource "../../TSMessages/Resources/Images/NotificationBackgroundWarningIcon@2x.png" -install_resource "../../TSMessages/Resources/Images/NotificationButtonBackground.png" -install_resource "../../TSMessages/Resources/Images/NotificationButtonBackground@2x.png" -install_resource "../../TSMessages/Resources/TSMessagesDefaultDesign.json" +install_resource "../../Pod/Assets/NotificationBackgroundError.png" +install_resource "../../Pod/Assets/NotificationBackgroundError@2x.png" +install_resource "../../Pod/Assets/NotificationBackgroundErrorIcon.png" +install_resource "../../Pod/Assets/NotificationBackgroundErrorIcon@2x.png" +install_resource "../../Pod/Assets/NotificationBackgroundMessage.png" +install_resource "../../Pod/Assets/NotificationBackgroundMessage@2x.png" +install_resource "../../Pod/Assets/NotificationBackgroundSuccess.png" +install_resource "../../Pod/Assets/NotificationBackgroundSuccess@2x.png" +install_resource "../../Pod/Assets/NotificationBackgroundSuccessIcon.png" +install_resource "../../Pod/Assets/NotificationBackgroundSuccessIcon@2x.png" +install_resource "../../Pod/Assets/NotificationBackgroundWarning.png" +install_resource "../../Pod/Assets/NotificationBackgroundWarning@2x.png" +install_resource "../../Pod/Assets/NotificationBackgroundWarningIcon.png" +install_resource "../../Pod/Assets/NotificationBackgroundWarningIcon@2x.png" +install_resource "../../Pod/Assets/NotificationButtonBackground.png" +install_resource "../../Pod/Assets/NotificationButtonBackground@2x.png" +install_resource "../../Pod/Assets/TSMessagesDefaultDesign.json" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" if [[ "${ACTION}" == "install" ]]; then diff --git a/Example/Pods/Pods-TSMessages.xcconfig b/Example/Pods/Pods-TSMessages.xcconfig new file mode 100644 index 00000000..0870823d --- /dev/null +++ b/Example/Pods/Pods-TSMessages.xcconfig @@ -0,0 +1,5 @@ +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Expecta" "${PODS_ROOT}/Headers/Expecta+Snapshots" "${PODS_ROOT}/Headers/FBSnapshotTestCase" "${PODS_ROOT}/Headers/HexColors" "${PODS_ROOT}/Headers/Specta" "${PODS_ROOT}/Headers/TSMessages" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers" -isystem "${PODS_ROOT}/Headers/Expecta" -isystem "${PODS_ROOT}/Headers/Expecta+Snapshots" -isystem "${PODS_ROOT}/Headers/FBSnapshotTestCase" -isystem "${PODS_ROOT}/Headers/HexColors" -isystem "${PODS_ROOT}/Headers/Specta" -isystem "${PODS_ROOT}/Headers/TSMessages" +OTHER_LDFLAGS = -ObjC +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Example/Pods/Pods-Tests-Expecta+Snapshots-Private.xcconfig b/Example/Pods/Pods-Tests-Expecta+Snapshots-Private.xcconfig new file mode 100644 index 00000000..a16f592a --- /dev/null +++ b/Example/Pods/Pods-Tests-Expecta+Snapshots-Private.xcconfig @@ -0,0 +1,6 @@ +#include "Pods-Tests-Expecta+Snapshots.xcconfig" +FRAMEWORK_SEARCH_PATHS = ${PODS_TESTS_EXPECTA_SNAPSHOTS_FRAMEWORK_SEARCH_PATHS} +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/Expecta+Snapshots" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Expecta" "${PODS_ROOT}/Headers/Expecta+Snapshots" "${PODS_ROOT}/Headers/FBSnapshotTestCase" "${PODS_ROOT}/Headers/HexColors" "${PODS_ROOT}/Headers/Specta" "${PODS_ROOT}/Headers/TSMessages" +OTHER_LDFLAGS = -ObjC ${PODS_TESTS_EXPECTA_SNAPSHOTS_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Example/Pods/Pods-Tests-Expecta+Snapshots-dummy.m b/Example/Pods/Pods-Tests-Expecta+Snapshots-dummy.m new file mode 100644 index 00000000..9d62444d --- /dev/null +++ b/Example/Pods/Pods-Tests-Expecta+Snapshots-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Tests_Expecta_Snapshots : NSObject +@end +@implementation PodsDummy_Pods_Tests_Expecta_Snapshots +@end diff --git a/ExampleProject/Pods/Pods-prefix.pch b/Example/Pods/Pods-Tests-Expecta+Snapshots-prefix.pch similarity index 57% rename from ExampleProject/Pods/Pods-prefix.pch rename to Example/Pods/Pods-Tests-Expecta+Snapshots-prefix.pch index 951b0313..2f298b1a 100644 --- a/ExampleProject/Pods/Pods-prefix.pch +++ b/Example/Pods/Pods-Tests-Expecta+Snapshots-prefix.pch @@ -2,5 +2,4 @@ #import #endif -#import "Pods-environment.h" - +#import "Pods-Tests-environment.h" diff --git a/Example/Pods/Pods-Tests-Expecta+Snapshots.xcconfig b/Example/Pods/Pods-Tests-Expecta+Snapshots.xcconfig new file mode 100644 index 00000000..35e2b692 --- /dev/null +++ b/Example/Pods/Pods-Tests-Expecta+Snapshots.xcconfig @@ -0,0 +1,2 @@ +PODS_TESTS_EXPECTA_SNAPSHOTS_FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" +PODS_TESTS_EXPECTA_SNAPSHOTS_OTHER_LDFLAGS = -framework Foundation -framework XCTest \ No newline at end of file diff --git a/Example/Pods/Pods-Tests-Expecta-Private.xcconfig b/Example/Pods/Pods-Tests-Expecta-Private.xcconfig new file mode 100644 index 00000000..3999254d --- /dev/null +++ b/Example/Pods/Pods-Tests-Expecta-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-Tests-Expecta.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/Expecta" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Expecta" "${PODS_ROOT}/Headers/Expecta+Snapshots" "${PODS_ROOT}/Headers/FBSnapshotTestCase" "${PODS_ROOT}/Headers/HexColors" "${PODS_ROOT}/Headers/Specta" "${PODS_ROOT}/Headers/TSMessages" +OTHER_LDFLAGS = -ObjC ${PODS_TESTS_EXPECTA_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Example/Pods/Pods-Tests-Expecta-dummy.m b/Example/Pods/Pods-Tests-Expecta-dummy.m new file mode 100644 index 00000000..5d9e9b6f --- /dev/null +++ b/Example/Pods/Pods-Tests-Expecta-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Tests_Expecta : NSObject +@end +@implementation PodsDummy_Pods_Tests_Expecta +@end diff --git a/ExampleProject/Pods/Pods-HexColors-prefix.pch b/Example/Pods/Pods-Tests-Expecta-prefix.pch similarity index 57% rename from ExampleProject/Pods/Pods-HexColors-prefix.pch rename to Example/Pods/Pods-Tests-Expecta-prefix.pch index 95cf11d9..2f298b1a 100644 --- a/ExampleProject/Pods/Pods-HexColors-prefix.pch +++ b/Example/Pods/Pods-Tests-Expecta-prefix.pch @@ -2,4 +2,4 @@ #import #endif -#import "Pods-environment.h" +#import "Pods-Tests-environment.h" diff --git a/Example/Pods/Pods-Tests-Expecta.xcconfig b/Example/Pods/Pods-Tests-Expecta.xcconfig new file mode 100644 index 00000000..d085c3a6 --- /dev/null +++ b/Example/Pods/Pods-Tests-Expecta.xcconfig @@ -0,0 +1 @@ +PODS_TESTS_EXPECTA_OTHER_LDFLAGS = -framework Foundation \ No newline at end of file diff --git a/Example/Pods/Pods-Tests-FBSnapshotTestCase-Private.xcconfig b/Example/Pods/Pods-Tests-FBSnapshotTestCase-Private.xcconfig new file mode 100644 index 00000000..146fd192 --- /dev/null +++ b/Example/Pods/Pods-Tests-FBSnapshotTestCase-Private.xcconfig @@ -0,0 +1,6 @@ +#include "Pods-Tests-FBSnapshotTestCase.xcconfig" +FRAMEWORK_SEARCH_PATHS = ${PODS_TESTS_FBSNAPSHOTTESTCASE_FRAMEWORK_SEARCH_PATHS} +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/FBSnapshotTestCase" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Expecta" "${PODS_ROOT}/Headers/Expecta+Snapshots" "${PODS_ROOT}/Headers/FBSnapshotTestCase" "${PODS_ROOT}/Headers/HexColors" "${PODS_ROOT}/Headers/Specta" "${PODS_ROOT}/Headers/TSMessages" +OTHER_LDFLAGS = -ObjC ${PODS_TESTS_FBSNAPSHOTTESTCASE_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Example/Pods/Pods-Tests-FBSnapshotTestCase-dummy.m b/Example/Pods/Pods-Tests-FBSnapshotTestCase-dummy.m new file mode 100644 index 00000000..ea768117 --- /dev/null +++ b/Example/Pods/Pods-Tests-FBSnapshotTestCase-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Tests_FBSnapshotTestCase : NSObject +@end +@implementation PodsDummy_Pods_Tests_FBSnapshotTestCase +@end diff --git a/Example/Pods/Pods-Tests-FBSnapshotTestCase-prefix.pch b/Example/Pods/Pods-Tests-FBSnapshotTestCase-prefix.pch new file mode 100644 index 00000000..c0f1cdc2 --- /dev/null +++ b/Example/Pods/Pods-Tests-FBSnapshotTestCase-prefix.pch @@ -0,0 +1,6 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-Tests-environment.h" +#define FB_REFERENCE_IMAGE_DIR = "$(SOURCE_ROOT)/$(PROJECT_NAME)Tests/ReferenceImages" diff --git a/Example/Pods/Pods-Tests-FBSnapshotTestCase.xcconfig b/Example/Pods/Pods-Tests-FBSnapshotTestCase.xcconfig new file mode 100644 index 00000000..835fab9a --- /dev/null +++ b/Example/Pods/Pods-Tests-FBSnapshotTestCase.xcconfig @@ -0,0 +1,2 @@ +PODS_TESTS_FBSNAPSHOTTESTCASE_FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" +PODS_TESTS_FBSNAPSHOTTESTCASE_OTHER_LDFLAGS = -framework XCTest \ No newline at end of file diff --git a/Example/Pods/Pods-Tests-HexColors-Private.xcconfig b/Example/Pods/Pods-Tests-HexColors-Private.xcconfig new file mode 100644 index 00000000..e55c7248 --- /dev/null +++ b/Example/Pods/Pods-Tests-HexColors-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-Tests-HexColors.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/HexColors" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Expecta" "${PODS_ROOT}/Headers/Expecta+Snapshots" "${PODS_ROOT}/Headers/FBSnapshotTestCase" "${PODS_ROOT}/Headers/HexColors" "${PODS_ROOT}/Headers/Specta" "${PODS_ROOT}/Headers/TSMessages" +OTHER_LDFLAGS = -ObjC +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Example/Pods/Pods-Tests-HexColors-dummy.m b/Example/Pods/Pods-Tests-HexColors-dummy.m new file mode 100644 index 00000000..0027b9d9 --- /dev/null +++ b/Example/Pods/Pods-Tests-HexColors-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Tests_HexColors : NSObject +@end +@implementation PodsDummy_Pods_Tests_HexColors +@end diff --git a/ExampleProject/Pods/Pods-TSMessages-prefix.pch b/Example/Pods/Pods-Tests-HexColors-prefix.pch similarity index 57% rename from ExampleProject/Pods/Pods-TSMessages-prefix.pch rename to Example/Pods/Pods-Tests-HexColors-prefix.pch index 95cf11d9..2f298b1a 100644 --- a/ExampleProject/Pods/Pods-TSMessages-prefix.pch +++ b/Example/Pods/Pods-Tests-HexColors-prefix.pch @@ -2,4 +2,4 @@ #import #endif -#import "Pods-environment.h" +#import "Pods-Tests-environment.h" diff --git a/Example/Pods/Pods-Tests-HexColors.xcconfig b/Example/Pods/Pods-Tests-HexColors.xcconfig new file mode 100644 index 00000000..e69de29b diff --git a/Example/Pods/Pods-Tests-Specta-Private.xcconfig b/Example/Pods/Pods-Tests-Specta-Private.xcconfig new file mode 100644 index 00000000..a5d1b0e9 --- /dev/null +++ b/Example/Pods/Pods-Tests-Specta-Private.xcconfig @@ -0,0 +1,6 @@ +#include "Pods-Tests-Specta.xcconfig" +FRAMEWORK_SEARCH_PATHS = ${PODS_TESTS_SPECTA_FRAMEWORK_SEARCH_PATHS} +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/Specta" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Expecta" "${PODS_ROOT}/Headers/Expecta+Snapshots" "${PODS_ROOT}/Headers/FBSnapshotTestCase" "${PODS_ROOT}/Headers/HexColors" "${PODS_ROOT}/Headers/Specta" "${PODS_ROOT}/Headers/TSMessages" +OTHER_LDFLAGS = -ObjC ${PODS_TESTS_SPECTA_OTHER_LDFLAGS} +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Example/Pods/Pods-Tests-Specta-dummy.m b/Example/Pods/Pods-Tests-Specta-dummy.m new file mode 100644 index 00000000..5ae3c459 --- /dev/null +++ b/Example/Pods/Pods-Tests-Specta-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Tests_Specta : NSObject +@end +@implementation PodsDummy_Pods_Tests_Specta +@end diff --git a/Example/Pods/Pods-Tests-Specta-prefix.pch b/Example/Pods/Pods-Tests-Specta-prefix.pch new file mode 100644 index 00000000..2f298b1a --- /dev/null +++ b/Example/Pods/Pods-Tests-Specta-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-Tests-environment.h" diff --git a/Example/Pods/Pods-Tests-Specta.xcconfig b/Example/Pods/Pods-Tests-Specta.xcconfig new file mode 100644 index 00000000..1d056c0e --- /dev/null +++ b/Example/Pods/Pods-Tests-Specta.xcconfig @@ -0,0 +1,2 @@ +PODS_TESTS_SPECTA_FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" +PODS_TESTS_SPECTA_OTHER_LDFLAGS = -framework Foundation -framework XCTest \ No newline at end of file diff --git a/Example/Pods/Pods-Tests-TSMessages-Private.xcconfig b/Example/Pods/Pods-Tests-TSMessages-Private.xcconfig new file mode 100644 index 00000000..7ac4018d --- /dev/null +++ b/Example/Pods/Pods-Tests-TSMessages-Private.xcconfig @@ -0,0 +1,5 @@ +#include "Pods-Tests-TSMessages.xcconfig" +GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/TSMessages" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Expecta" "${PODS_ROOT}/Headers/Expecta+Snapshots" "${PODS_ROOT}/Headers/FBSnapshotTestCase" "${PODS_ROOT}/Headers/HexColors" "${PODS_ROOT}/Headers/Specta" "${PODS_ROOT}/Headers/TSMessages" +OTHER_LDFLAGS = -ObjC +PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/Example/Pods/Pods-Tests-TSMessages-dummy.m b/Example/Pods/Pods-Tests-TSMessages-dummy.m new file mode 100644 index 00000000..b0c536be --- /dev/null +++ b/Example/Pods/Pods-Tests-TSMessages-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Tests_TSMessages : NSObject +@end +@implementation PodsDummy_Pods_Tests_TSMessages +@end diff --git a/Example/Pods/Pods-Tests-TSMessages-prefix.pch b/Example/Pods/Pods-Tests-TSMessages-prefix.pch new file mode 100644 index 00000000..2f298b1a --- /dev/null +++ b/Example/Pods/Pods-Tests-TSMessages-prefix.pch @@ -0,0 +1,5 @@ +#ifdef __OBJC__ +#import +#endif + +#import "Pods-Tests-environment.h" diff --git a/Example/Pods/Pods-Tests-TSMessages.xcconfig b/Example/Pods/Pods-Tests-TSMessages.xcconfig new file mode 100644 index 00000000..e69de29b diff --git a/Example/Pods/Pods-Tests-acknowledgements.markdown b/Example/Pods/Pods-Tests-acknowledgements.markdown new file mode 100644 index 00000000..f567f34a --- /dev/null +++ b/Example/Pods/Pods-Tests-acknowledgements.markdown @@ -0,0 +1,144 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## Expecta + +Copyright (c) 2011-2012 Specta Team - https://github.com/specta + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +## Expecta+Snapshots + +MIT License + +Copyright (c) 2014 Daniel Doubrovkine, Artsy Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +## FBSnapshotTestCase + +BSD License + +For the FBSnapshotTestCase software + +Copyright (c) 2013, Facebook, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +## HexColors + +The MIT License (MIT) +Copyright (c) 2012 Marius Landwehr marius.landwehr@gmail.com + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +## Specta + +Copyright (c) 2012-2013 Specta Team. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + + +## TSMessages + +Copyright (c) 2014 Toursprung, Felix Krause + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Generated by CocoaPods - http://cocoapods.org diff --git a/Example/Pods/Pods-Tests-acknowledgements.plist b/Example/Pods/Pods-Tests-acknowledgements.plist new file mode 100644 index 00000000..2b51233c --- /dev/null +++ b/Example/Pods/Pods-Tests-acknowledgements.plist @@ -0,0 +1,194 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2011-2012 Specta Team - https://github.com/specta + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + Title + Expecta + Type + PSGroupSpecifier + + + FooterText + MIT License + +Copyright (c) 2014 Daniel Doubrovkine, Artsy Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Title + Expecta+Snapshots + Type + PSGroupSpecifier + + + FooterText + BSD License + +For the FBSnapshotTestCase software + +Copyright (c) 2013, Facebook, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Title + FBSnapshotTestCase + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) +Copyright (c) 2012 Marius Landwehr marius.landwehr@gmail.com + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Title + HexColors + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2012-2013 Specta Team. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + + Title + Specta + Type + PSGroupSpecifier + + + FooterText + Copyright (c) 2014 Toursprung, Felix Krause <krausefx@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + Title + TSMessages + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - http://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/Example/Pods/Pods-Tests-dummy.m b/Example/Pods/Pods-Tests-dummy.m new file mode 100644 index 00000000..4093c7ba --- /dev/null +++ b/Example/Pods/Pods-Tests-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_Tests : NSObject +@end +@implementation PodsDummy_Pods_Tests +@end diff --git a/Example/Pods/Pods-Tests-environment.h b/Example/Pods/Pods-Tests-environment.h new file mode 100644 index 00000000..b8256390 --- /dev/null +++ b/Example/Pods/Pods-Tests-environment.h @@ -0,0 +1,44 @@ + +// To check if a library is compiled with CocoaPods you +// can use the `COCOAPODS` macro definition which is +// defined in the xcconfigs so it is available in +// headers also when they are imported in the client +// project. + + +// Expecta +#define COCOAPODS_POD_AVAILABLE_Expecta +#define COCOAPODS_VERSION_MAJOR_Expecta 0 +#define COCOAPODS_VERSION_MINOR_Expecta 3 +#define COCOAPODS_VERSION_PATCH_Expecta 1 + +// Expecta+Snapshots +#define COCOAPODS_POD_AVAILABLE_Expecta_Snapshots +#define COCOAPODS_VERSION_MAJOR_Expecta_Snapshots 1 +#define COCOAPODS_VERSION_MINOR_Expecta_Snapshots 2 +#define COCOAPODS_VERSION_PATCH_Expecta_Snapshots 1 + +// FBSnapshotTestCase +#define COCOAPODS_POD_AVAILABLE_FBSnapshotTestCase +#define COCOAPODS_VERSION_MAJOR_FBSnapshotTestCase 1 +#define COCOAPODS_VERSION_MINOR_FBSnapshotTestCase 1 +#define COCOAPODS_VERSION_PATCH_FBSnapshotTestCase 0 + +// HexColors +#define COCOAPODS_POD_AVAILABLE_HexColors +#define COCOAPODS_VERSION_MAJOR_HexColors 2 +#define COCOAPODS_VERSION_MINOR_HexColors 2 +#define COCOAPODS_VERSION_PATCH_HexColors 1 + +// Specta +#define COCOAPODS_POD_AVAILABLE_Specta +#define COCOAPODS_VERSION_MAJOR_Specta 0 +#define COCOAPODS_VERSION_MINOR_Specta 2 +#define COCOAPODS_VERSION_PATCH_Specta 1 + +// TSMessages +#define COCOAPODS_POD_AVAILABLE_TSMessages +#define COCOAPODS_VERSION_MAJOR_TSMessages 0 +#define COCOAPODS_VERSION_MINOR_TSMessages 9 +#define COCOAPODS_VERSION_PATCH_TSMessages 10 + diff --git a/Example/Pods/Pods-Tests-resources.sh b/Example/Pods/Pods-Tests-resources.sh new file mode 100755 index 00000000..ff8e6d44 --- /dev/null +++ b/Example/Pods/Pods-Tests-resources.sh @@ -0,0 +1,85 @@ +#!/bin/sh +set -e + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +install_resource() +{ + case $1 in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" + ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" + ;; + *.framework) + echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" + xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" + ;; + *.xcassets) + ;; + /*) + echo "$1" + echo "$1" >> "$RESOURCES_TO_COPY" + ;; + *) + echo "${PODS_ROOT}/$1" + echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" + ;; + esac +} +install_resource "../../Pod/Assets/NotificationBackgroundError.png" +install_resource "../../Pod/Assets/NotificationBackgroundError@2x.png" +install_resource "../../Pod/Assets/NotificationBackgroundErrorIcon.png" +install_resource "../../Pod/Assets/NotificationBackgroundErrorIcon@2x.png" +install_resource "../../Pod/Assets/NotificationBackgroundMessage.png" +install_resource "../../Pod/Assets/NotificationBackgroundMessage@2x.png" +install_resource "../../Pod/Assets/NotificationBackgroundSuccess.png" +install_resource "../../Pod/Assets/NotificationBackgroundSuccess@2x.png" +install_resource "../../Pod/Assets/NotificationBackgroundSuccessIcon.png" +install_resource "../../Pod/Assets/NotificationBackgroundSuccessIcon@2x.png" +install_resource "../../Pod/Assets/NotificationBackgroundWarning.png" +install_resource "../../Pod/Assets/NotificationBackgroundWarning@2x.png" +install_resource "../../Pod/Assets/NotificationBackgroundWarningIcon.png" +install_resource "../../Pod/Assets/NotificationBackgroundWarningIcon@2x.png" +install_resource "../../Pod/Assets/NotificationButtonBackground.png" +install_resource "../../Pod/Assets/NotificationButtonBackground@2x.png" +install_resource "../../Pod/Assets/TSMessagesDefaultDesign.json" + +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]]; then + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ `xcrun --find actool` ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] +then + case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; + esac + find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/Example/Pods/Pods-Tests.xcconfig b/Example/Pods/Pods-Tests.xcconfig new file mode 100644 index 00000000..4f84d148 --- /dev/null +++ b/Example/Pods/Pods-Tests.xcconfig @@ -0,0 +1,6 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(DEVELOPER_LIBRARY_DIR)/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Expecta" "${PODS_ROOT}/Headers/Expecta+Snapshots" "${PODS_ROOT}/Headers/FBSnapshotTestCase" "${PODS_ROOT}/Headers/HexColors" "${PODS_ROOT}/Headers/Specta" "${PODS_ROOT}/Headers/TSMessages" +OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers" -isystem "${PODS_ROOT}/Headers/Expecta" -isystem "${PODS_ROOT}/Headers/Expecta+Snapshots" -isystem "${PODS_ROOT}/Headers/FBSnapshotTestCase" -isystem "${PODS_ROOT}/Headers/HexColors" -isystem "${PODS_ROOT}/Headers/Specta" -isystem "${PODS_ROOT}/Headers/TSMessages" +OTHER_LDFLAGS = -ObjC -framework Foundation -framework XCTest +PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 00000000..6803889c --- /dev/null +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,6807 @@ + + + + + archiveVersion + 1 + classes + + objectVersion + 46 + objects + + 009BBFF03F9745E8B07BF221 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + TSBlurView.h + path + Pod/Classes/TSBlurView.h + sourceTree + <group> + + 0116CBF0956B4BA7BA412238 + + fileRef + E7D4E80B3DE84CE8B5B433B2 + isa + PBXBuildFile + + 01C37CFC59C84376AFE657DE + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + XCTestRun+Specta.m + path + src/XCTestRun+Specta.m + sourceTree + <group> + + 02E90FDB2DAA4FF4AEF24369 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + SPTSharedExampleGroups.m + path + src/SPTSharedExampleGroups.m + sourceTree + <group> + + 038450D3C0DF483B9A96944B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + SpectaUtility.h + path + src/SpectaUtility.h + sourceTree + <group> + + 03D639549FBC45A38D63C7A3 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + SPTSpec.m + path + src/SPTSpec.m + sourceTree + <group> + + 04175B60CE0F41D5925FF9FF + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundMessage@2x.png + path + Pod/Assets/NotificationBackgroundMessage@2x.png + sourceTree + <group> + + 044F5DD5396C4FF5B3EE4A6A + + fileRef + 3B7571C06BEB40BEAAD3153B + isa + PBXBuildFile + + 0520CE204B024A3682C12223 + + containerPortal + BB4916A4330B4187889447A3 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 7AB0FB23755F45A98181B45A + remoteInfo + Pods-Tests-TSMessages + + 0529929E27FC404993D598AC + + fileRef + 9AFF06C6DF75425BAED74AAF + isa + PBXBuildFile + + 0716C1820F794BE592F9B9BF + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-Tests-Specta.a + sourceTree + BUILT_PRODUCTS_DIR + + 0748FDACCC4C4D5E9708681B + + baseConfigurationReference + D6EFA2D72B654758BE96D9C5 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Tests-TSMessages-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + 08A8FB71B1184A5CB6944457 + + fileRef + 802A7293852F4B719007E386 + isa + PBXBuildFile + + 09E60234278E482BA56C5870 + + fileRef + DF149347E6AA45D68616C404 + isa + PBXBuildFile + + 0A5D2CCB26FF413F938FB18A + + fileRef + C9E3E5213AFF4058BF34E848 + isa + PBXBuildFile + + 0A9363E227D9410386B45238 + + fileRef + 623C2044A7834876B087E8F4 + isa + PBXBuildFile + + 0B67ACCCB6D04D8B9DA98C1D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + XCTestLog+Specta.m + path + src/XCTestLog+Specta.m + sourceTree + <group> + + 0C2D9480A52440F593D0C25B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-Tests-Specta-prefix.pch + sourceTree + <group> + + 0CF51EE74478410AA4D6849A + + isa + PBXTargetDependency + target + 89F2D7BA9BAF4ED197206EE0 + targetProxy + 0D98EEC06BAE49A19FB1D30C + + 0D7AD69E649240649BD0DEA5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-TSMessages-HexColors-prefix.pch + sourceTree + <group> + + 0D98EEC06BAE49A19FB1D30C + + containerPortal + BB4916A4330B4187889447A3 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 89F2D7BA9BAF4ED197206EE0 + remoteInfo + Pods-Tests-Expecta + + 0DD693D603014A53A3211430 + + fileRef + 009BBFF03F9745E8B07BF221 + isa + PBXBuildFile + + 0DECFE862F7644348E9F148B + + fileRef + A4F26DFEBD63414C81919AF5 + isa + PBXBuildFile + + 0EC97B20DEF240BAA31155E3 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beKindOf.m + path + src/matchers/EXPMatchers+beKindOf.m + sourceTree + <group> + + 0F0FB68059144CE58D01CD21 + + fileRef + 60691D223DD342E286F9FE7B + isa + PBXBuildFile + + 10A48DE0001544B5B96D564C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-TSMessages-HexColors-Private.xcconfig + sourceTree + <group> + + 11CA80991A4A412A94D3AB37 + + buildActionMask + 2147483647 + files + + 9DC9A041EAE74815BE2379D3 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 12183821820E45208EDA9DC1 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + EXPMatchers+FBSnapshotTest.m + sourceTree + <group> + + 12BFDBF9655644E6A27E58D5 + + baseConfigurationReference + 36850139D0EB44AA9F9C7B02 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Tests-FBSnapshotTestCase-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + 12EF8BB44AA94382B110AB0A + + children + + 551551615659494EA67C5E36 + 1A7D0D6EB6554F4DA238EE2B + C2B1C64389304F338C26A264 + 4F497EFA1CC84B93B88EC089 + + isa + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT + + 1461779C23E24EA094DA374D + + fileRef + 9F6800E033A442ADA0C6E989 + isa + PBXBuildFile + + 14BF6BF6903640DD96F15580 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Tests-Expecta+Snapshots.xcconfig + sourceTree + <group> + + 151E83F910434BDC9A96005F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPBackwardCompatibility.m + path + src/EXPBackwardCompatibility.m + sourceTree + <group> + + 156C64F61CD24B02AA36C027 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + Expecta.m + path + src/Expecta.m + sourceTree + <group> + + 163291B4322F42A68E7446F8 + + fileRef + 904BCE988E2A4F29988407E0 + isa + PBXBuildFile + + 16BCD5529C8C4AE1A2869896 + + buildActionMask + 2147483647 + files + + 40FB94EC1EF74D30A4116611 + FC3896BBC18C4605A82975B4 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 17FD25C4AE7A48E58ED56EE4 + + containerPortal + BB4916A4330B4187889447A3 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 336CC2C50A0741948A1A6F97 + remoteInfo + Pods-Tests-Expecta+Snapshots + + 18A3EB5968A2432880DFBA81 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text + path + Pods-TSMessages-acknowledgements.markdown + sourceTree + <group> + + 198C5B9D1BBB4723B1806CAA + + buildActionMask + 2147483647 + files + + 34D6B0B879E540B5887945F5 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 19957BF862794517B1F31B40 + + baseConfigurationReference + 979E7232DCE1473D8D388361 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + 199E83BC9AA04040AB7B2B3C + + fileRef + 6F3894D1F4FC48B6B52D8BE5 + isa + PBXBuildFile + + 1A7D0D6EB6554F4DA238EE2B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Tests-Expecta-Private.xcconfig + sourceTree + <group> + + 1ABDE4BFFD7E4685B5ED694B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + XCTestLog+Specta.h + path + src/XCTestLog+Specta.h + sourceTree + <group> + + 1ACA3621BA05436783F722A0 + + buildActionMask + 2147483647 + files + + 8AAF6BC39E7C427ABD1AECF5 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 1B8D3B3C0CCD408EA7E77B2E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beginWith.m + path + src/matchers/EXPMatchers+beginWith.m + sourceTree + <group> + + 1BB8CA699F7D43849609243F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.script.sh + path + Pods-Tests-resources.sh + sourceTree + <group> + + 1CBD96DD396D4A03BAAB5C3E + + containerPortal + BB4916A4330B4187889447A3 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 8436489099EE4FB69A034CFA + remoteInfo + Pods-TSMessages-HexColors + + 1CCB887DEAC84F81B68AE821 + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundSuccessIcon@2x.png + path + Pod/Assets/NotificationBackgroundSuccessIcon@2x.png + sourceTree + <group> + + 1D22B55928394F2BA5430313 + + buildActionMask + 2147483647 + files + + 199E83BC9AA04040AB7B2B3C + FCFB14971C134873B2A123E9 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 1E259C9B2B69415AAD12C7C8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Tests-FBSnapshotTestCase.xcconfig + sourceTree + <group> + + 1E72777565054B18A1D55824 + + buildConfigurationList + 917954A6B6B54D9C8022FBF5 + buildPhases + + 82355B880B1C49A7A0CBEDEA + 9FFA2D4886F04BD3B34885A1 + D95DC1D0525D427AAFEB7820 + + buildRules + + dependencies + + 66D632644B5C4CA6B536857F + + isa + PBXNativeTarget + name + Pods-TSMessages-TSMessages + productName + Pods-TSMessages-TSMessages + productReference + E7B59276937044A08CB4D90A + productType + com.apple.product-type.library.static + + 1FD1E23185E349E29B434DBF + + fileRef + 99AF37A9C84A4A188F674B4D + isa + PBXBuildFile + + 2053EBFF62A44AF0A989746C + + fileRef + 8579A4D9E2DE45EBAFF1D302 + isa + PBXBuildFile + + 214A00D4701D46EFBAE5DFF1 + + children + + 6F3894D1F4FC48B6B52D8BE5 + B72859772E504438AA235C3C + + isa + PBXGroup + name + iOS + sourceTree + <group> + + 21AAAC1BE6B342A2A23D51EF + + fileRef + ED5B2AEF83954F66B7E0AE02 + isa + PBXBuildFile + + 22A38EE522F5468C8ED90835 + + fileRef + 151E83F910434BDC9A96005F + isa + PBXBuildFile + + 22D0E8A7226147169897FB03 + + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + CLANG_CXX_LANGUAGE_STANDARD + gnu++0x + CLANG_CXX_LIBRARY + libc++ + CLANG_ENABLE_MODULES + YES + CLANG_ENABLE_OBJC_ARC + NO + CLANG_WARN_BOOL_CONVERSION + YES + CLANG_WARN_CONSTANT_CONVERSION + YES + CLANG_WARN_DIRECT_OBJC_ISA_USAGE + YES + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES + COPY_PHASE_STRIP + YES + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + ONLY_ACTIVE_ARCH + YES + STRIP_INSTALLED_PRODUCT + NO + + isa + XCBuildConfiguration + name + Debug + + 240C44F6738B43AF8CC1CAB8 + + fileRef + 7EBB42E156B84AB59B70318C + isa + PBXBuildFile + + 24EF819988434C1299F1001F + + fileRef + 6F3894D1F4FC48B6B52D8BE5 + isa + PBXBuildFile + + 2583C62BAE6F47FFA5F5E51B + + fileRef + 391CEB97E1CC45BBB8C5AB28 + isa + PBXBuildFile + + 26D0A71A080A4A8CA2A2EC22 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beTruthy.h + path + src/matchers/EXPMatchers+beTruthy.h + sourceTree + <group> + + 27D0C637D61640ACAA07D3BD + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers.h + path + src/matchers/EXPMatchers.h + sourceTree + <group> + + 285BB030A7FA4550BF39853E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+equal.m + path + src/matchers/EXPMatchers+equal.m + sourceTree + <group> + + 288A8D1640804ACBBD912194 + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundWarning.png + path + Pod/Assets/NotificationBackgroundWarning.png + sourceTree + <group> + + 2A00CFDCBF5C4B18B35046BB + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPDefines.h + path + src/EXPDefines.h + sourceTree + <group> + + 2A4F255A4D504E77A46EED7C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSObject+Expecta.h + path + src/NSObject+Expecta.h + sourceTree + <group> + + 2BD6FB874DA5448E855CD103 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.plist.xml + path + Pods-Tests-acknowledgements.plist + sourceTree + <group> + + 2BEF996B72024D28A5E4A894 + + children + + 009BBFF03F9745E8B07BF221 + 4BC4CBDB655E441DA9680F2E + 77B7541211F948148BBD8FBE + 94F60A63EAD44D5C8AE10A87 + 623C2044A7834876B087E8F4 + 8D6765CC7ABC46E0A2C14010 + 62A98EF6D60D42BDBBEF1509 + 8F3AC4E1D96D457CB3B23188 + + isa + PBXGroup + name + TSMessages + path + ../.. + sourceTree + <group> + + 2C62B5B60E414182BC2DA2BB + + fileRef + 8C542ED9367646FFA0CD8640 + isa + PBXBuildFile + + 2CD65329E9FC4F219AD512B0 + + buildConfigurations + + 22D0E8A7226147169897FB03 + 9CFD5B8CFF00455791BB2A16 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 2CDFBECC115043A3A38CB560 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPBlockDefinedMatcher.h + path + src/EXPBlockDefinedMatcher.h + sourceTree + <group> + + 2CEA6AC0355E43279705CF2E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + SPTXCTestCase.m + path + src/SPTXCTestCase.m + sourceTree + <group> + + 2E195F897C9145D785E1FEC5 + + fileRef + 4D00BBB0378449A7ABF0C382 + isa + PBXBuildFile + + 2F0B342BDF6D495BBA14E7A9 + + children + + 60691D223DD342E286F9FE7B + 12183821820E45208EDA9DC1 + E0DF90A595A142278C9D85C5 + + isa + PBXGroup + name + Expecta+Snapshots + path + Expecta+Snapshots + sourceTree + <group> + + 2FA7D271DC2449138DE26E3A + + fileRef + 48D21747110F4545830FB28A + isa + PBXBuildFile + + 2FE6F943C075467DBA770D77 + + fileRef + 4C4FEBD06964433389A1DA6C + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + 30E547DF40464F65BD7743A6 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+haveCountOf.m + path + src/matchers/EXPMatchers+haveCountOf.m + sourceTree + <group> + + 3144ED9558FA4A399864E102 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + SPTExampleGroup.h + path + src/SPTExampleGroup.h + sourceTree + <group> + + 31FCC73D63234D458C204151 + + fileRef + 5CF4B01120E5401F95B887DC + isa + PBXBuildFile + + 32B3940E56384A5F9CE59E06 + + fileRef + DA7DE92E568C43CC8F9BEB9A + isa + PBXBuildFile + + 32CB469D0CE94C98857EEED6 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + SPTXCTestCase.h + path + src/SPTXCTestCase.h + sourceTree + <group> + + 336CC2C50A0741948A1A6F97 + + buildConfigurationList + A5FB58E3814C4C60B4A33FF7 + buildPhases + + 6D3262AA43B240C2A73F4036 + 8C46C1BEBDD0458494189920 + DCD5AF077A1845B092DBCE11 + + buildRules + + dependencies + + A92D670FF2A244C8AF8D5F2B + 6288D9AB33264363BDC0EC84 + + isa + PBXNativeTarget + name + Pods-Tests-Expecta+Snapshots + productName + Pods-Tests-Expecta+Snapshots + productReference + CCC0088C15E44ABB873B076B + productType + com.apple.product-type.library.static + + 345DFE914002419B88AC126D + + baseConfigurationReference + 3E91DFDF8E4E418CB805F24B + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Tests-HexColors-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + 34D6B0B879E540B5887945F5 + + fileRef + 65258DE396F94489A91B5F15 + isa + PBXBuildFile + + 34DD15E6720D4C0FBB5D02EF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-Tests-HexColors-prefix.pch + sourceTree + <group> + + 351A64AC404E4962AD52F21B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPUnsupportedObject.h + path + src/EXPUnsupportedObject.h + sourceTree + <group> + + 351EBEFA83E947FF9E278677 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-TSMessages-dummy.m + sourceTree + <group> + + 364BDAC64D1249EC98F19694 + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-TSMessages.a + sourceTree + BUILT_PRODUCTS_DIR + + 36850139D0EB44AA9F9C7B02 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Tests-FBSnapshotTestCase-Private.xcconfig + sourceTree + <group> + + 369212B7B2784F4C940F9B38 + + fileRef + F03B64F7DBBD45E0B5C2A4F2 + isa + PBXBuildFile + + 36B6A54BD03843818AE078FC + + fileRef + 6F3894D1F4FC48B6B52D8BE5 + isa + PBXBuildFile + + 37F42FCE8B6243BEA437F490 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPUnsupportedObject.m + path + src/EXPUnsupportedObject.m + sourceTree + <group> + + 384A987F266442A195092ED5 + + children + + 364BDAC64D1249EC98F19694 + 5CF4B01120E5401F95B887DC + E7B59276937044A08CB4D90A + FE38FE741E4743B8AFD9B816 + A715076363BF439EAB204A05 + CCC0088C15E44ABB873B076B + 64276F9EEEC34F7796B61221 + FD4B8BE54DC24749B9B623D2 + 0716C1820F794BE592F9B9BF + 9F6800E033A442ADA0C6E989 + + isa + PBXGroup + name + Products + sourceTree + <group> + + 38562DA5ABB944589A3162C4 + + fileRef + F1BB13E27C464192972564BC + isa + PBXBuildFile + + 38E1387791A44A6698DD5ED1 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beKindOf.h + path + src/matchers/EXPMatchers+beKindOf.h + sourceTree + <group> + + 391CEB97E1CC45BBB8C5AB28 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beLessThanOrEqualTo.m + path + src/matchers/EXPMatchers+beLessThanOrEqualTo.m + sourceTree + <group> + + 395F55BEFA464F639C9A55A6 + + containerPortal + BB4916A4330B4187889447A3 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + E3CACBF0E2134D13B4FE07A2 + remoteInfo + Pods-Tests-HexColors + + 3966473415B248848A858A14 + + fileRef + 4E3C9886D99347CD906D461E + isa + PBXBuildFile + + 3A5D84A3E36E4CFC95606826 + + buildConfigurationList + 9F9D3A50345340DEA72BCCFE + buildPhases + + F4DC68D67A4244E7A46B2776 + 7CAF13FE24B54F32B51C4BEE + 612C9079AB7D428B86221A46 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-Tests-FBSnapshotTestCase + productName + Pods-Tests-FBSnapshotTestCase + productReference + 64276F9EEEC34F7796B61221 + productType + com.apple.product-type.library.static + + 3A65F6EE3DC345F9AEE30FDB + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPBlockDefinedMatcher.m + path + src/EXPBlockDefinedMatcher.m + sourceTree + <group> + + 3B6DD72898894194AE7EEE12 + + containerPortal + BB4916A4330B4187889447A3 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 8436489099EE4FB69A034CFA + remoteInfo + Pods-TSMessages-HexColors + + 3B7571C06BEB40BEAAD3153B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSValue+Expecta.h + path + src/NSValue+Expecta.h + sourceTree + <group> + + 3BF2EE83D8AB42FD83A83218 + + fileRef + 964B971D768C47FDA069E4C0 + isa + PBXBuildFile + + 3C9C82EC51804E46A2393EA1 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+notify.h + path + src/matchers/EXPMatchers+notify.h + sourceTree + <group> + + 3CA39AEBAEBE4B9FB09BF996 + + fileRef + C3C7BD8078B14309B604CF66 + isa + PBXBuildFile + + 3E6A57B856EF42C9BE83C805 + + isa + PBXTargetDependency + target + E3CACBF0E2134D13B4FE07A2 + targetProxy + 517208587F864B5DB0F8F0F7 + + 3E91DFDF8E4E418CB805F24B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Tests-HexColors-Private.xcconfig + sourceTree + <group> + + 3F73EBA04F774C7A9BD4A5F5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beCloseTo.m + path + src/matchers/EXPMatchers+beCloseTo.m + sourceTree + <group> + + 4057501A51FE48299E27D85E + + fileRef + 81CC0DCDB8DA4D4CBC76C213 + isa + PBXBuildFile + + 40FB94EC1EF74D30A4116611 + + fileRef + B512D9A6C06440229F2EF244 + isa + PBXBuildFile + + 426D05EBA5CD4243AE4D4882 + + fileRef + 6F3894D1F4FC48B6B52D8BE5 + isa + PBXBuildFile + + 43C180ACDFAA40B5A146B0BB + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beTruthy.m + path + src/matchers/EXPMatchers+beTruthy.m + sourceTree + <group> + + 43E803C1E44E488C867E3DAB + + fileRef + 03D639549FBC45A38D63C7A3 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + 4470F66FBFCD4A189B06C279 + + fileRef + B67CAC57DCA542C6AD1CA387 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + 458BCA1498374455AEF35641 + + buildActionMask + 2147483647 + files + + 760B690693454CF69CD1A77B + 4470F66FBFCD4A189B06C279 + 7F9BE47CAF8D48B9A0659335 + 2FE6F943C075467DBA770D77 + D8998AD949D444DA95E03E71 + F2375AD3C42940C8BA4ECD77 + 43E803C1E44E488C867E3DAB + CACC65AE637F404598C0EED8 + D0BF159C9DA649BEA29E8144 + 9A7A2BE3EC3C469CA13C7A97 + DC39ED9DCDE841B798A47D7C + 6380003157F34FDDA43FB136 + C06B20FA59654584911C2987 + 8C806D9C946445DDB1DCC64F + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 47F0034B490642DD972FC3E6 + + buildActionMask + 2147483647 + files + + 9E1CA24D83D74FE69FE90F7B + BC43E7D55DBF4162A9217455 + 8F15CC64E83A4017B7924307 + D95D1D6F1E0E4138BF9F779A + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 48D21747110F4545830FB28A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+raiseWithReason.m + path + src/matchers/EXPMatchers+raiseWithReason.m + sourceTree + <group> + + 49744A3B3B9E4607A14846B8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beLessThan.h + path + src/matchers/EXPMatchers+beLessThan.h + sourceTree + <group> + + 49BB8B00BF374E57B414AC43 + + fileRef + 2A4F255A4D504E77A46EED7C + isa + PBXBuildFile + + 4A09303FF3FA4100B23CA003 + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundErrorIcon@2x.png + path + Pod/Assets/NotificationBackgroundErrorIcon@2x.png + sourceTree + <group> + + 4A1D87116FA1405BA8EEEE05 + + fileRef + 9D2A40BBD4EB49A290B94CF5 + isa + PBXBuildFile + + 4A36E728A481478CA3A7DA64 + + children + + C0D349690FC94E999A4A3D2B + 2F0B342BDF6D495BBA14E7A9 + BC769D0D32574AB49568B975 + 4C7FE50EAD1A4936A2FFBBC9 + C451AD19E517443CA66AFD4D + + isa + PBXGroup + name + Pods + sourceTree + <group> + + 4AEBD431157E456A8C926398 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-Tests-environment.h + sourceTree + <group> + + 4B474B9B16B34D84A74D5884 + + fileRef + 3A65F6EE3DC345F9AEE30FDB + isa + PBXBuildFile + + 4BC4CBDB655E441DA9680F2E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + TSBlurView.m + path + Pod/Classes/TSBlurView.m + sourceTree + <group> + + 4C4FEBD06964433389A1DA6C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + SPTNestedReporter.m + path + src/SPTNestedReporter.m + sourceTree + <group> + + 4C7FE50EAD1A4936A2FFBBC9 + + children + + 65258DE396F94489A91B5F15 + B512D9A6C06440229F2EF244 + ABE33ADB5D31497A866EFA0B + + isa + PBXGroup + name + HexColors + path + HexColors + sourceTree + <group> + + 4CB7BEB052354730BB1B6F94 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + FBSnapshotTestCase.m + sourceTree + <group> + + 4D00BBB0378449A7ABF0C382 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beLessThanOrEqualTo.h + path + src/matchers/EXPMatchers+beLessThanOrEqualTo.h + sourceTree + <group> + + 4D4E01279D4D448B845415F2 + + fileRef + 2CDFBECC115043A3A38CB560 + isa + PBXBuildFile + + 4E3C9886D99347CD906D461E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beGreaterThanOrEqualTo.m + path + src/matchers/EXPMatchers+beGreaterThanOrEqualTo.m + sourceTree + <group> + + 4E9F336887474C2885702EE1 + + fileRef + 4CB7BEB052354730BB1B6F94 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc + + + 4F08A0F9FFDD489A94B84011 + + fileRef + BEA7BD0820C7489593D2E68E + isa + PBXBuildFile + + 4F497EFA1CC84B93B88EC089 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-Tests-Expecta-prefix.pch + sourceTree + <group> + + 5079938C5F684456B201BEA3 + + fileRef + 6FC8007A8FCD4DF68A301B57 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc + + + 509283B6915B4EB7AA4EAD17 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+endWith.m + path + src/matchers/EXPMatchers+endWith.m + sourceTree + <group> + + 517208587F864B5DB0F8F0F7 + + containerPortal + BB4916A4330B4187889447A3 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + E3CACBF0E2134D13B4FE07A2 + remoteInfo + Pods-Tests-HexColors + + 523221BCC3654344AA34BE8B + + fileRef + E6D79834194E473DB6EB335E + isa + PBXBuildFile + + 531EC826B40344A2AC296B6B + + fileRef + 8E6F32AA4FF142729BABF80D + isa + PBXBuildFile + + 53C20BFD66EC415FB3600636 + + children + + BE6D838FB00D4CDA84B5C607 + 74C150C6375A4A7F9B9798BC + 2BD6FB874DA5448E855CD103 + F2347E075B8345EDAB1B394B + 4AEBD431157E456A8C926398 + 1BB8CA699F7D43849609243F + + isa + PBXGroup + name + Pods-Tests + sourceTree + <group> + + 53F84F5BED4D427E87A77919 + + fileRef + E241E5199A0A4DF2BBC0EDBE + isa + PBXBuildFile + + 551551615659494EA67C5E36 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Tests-Expecta.xcconfig + sourceTree + <group> + + 5565E74D24D94DB498377A0E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+raise.m + path + src/matchers/EXPMatchers+raise.m + sourceTree + <group> + + 56FFF4E49C5640FB82684F0E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-Tests-Specta-dummy.m + sourceTree + <group> + + 57D9E53BADDB4B9F929A9BC0 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + SPTReporter.m + path + src/SPTReporter.m + sourceTree + <group> + + 57E839CE78AF4994AFB2C321 + + fileRef + 623C2044A7834876B087E8F4 + isa + PBXBuildFile + + 5872310AAAA6407EA65000EB + + fileRef + 43C180ACDFAA40B5A146B0BB + isa + PBXBuildFile + + 58E0A245B34C48FBA0893F6B + + fileRef + F178235A72FC45D2BC549667 + isa + PBXBuildFile + + 5A5733CC88754B579F95C1F8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatcherHelpers.m + path + src/matchers/EXPMatcherHelpers.m + sourceTree + <group> + + 5A66FEDA721F41CA9862EC04 + + fileRef + B72859772E504438AA235C3C + isa + PBXBuildFile + + 5ACD3D75079C40BB867CF256 + + buildActionMask + 2147483647 + files + + B39C8AD0B79B425A9FE3553D + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 5C2A5D655B8D4C1B8A9564C0 + + fileRef + 9EA4D6A88B614B8CA60EEF2A + isa + PBXBuildFile + + 5CF4B01120E5401F95B887DC + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-TSMessages-HexColors.a + sourceTree + BUILT_PRODUCTS_DIR + + 5FFB8468DA824DEF8965CE0D + + fileRef + B359036583BE405084BC61B8 + isa + PBXBuildFile + + 60691D223DD342E286F9FE7B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + EXPMatchers+FBSnapshotTest.h + sourceTree + <group> + + 607E618FBF5E41B38136DAA0 + + fileRef + 6F56573851E54A07A3184744 + isa + PBXBuildFile + + 607F2500761D480182E0D4A3 + + children + + 214A00D4701D46EFBAE5DFF1 + + isa + PBXGroup + name + Frameworks + sourceTree + <group> + + 612C9079AB7D428B86221A46 + + buildActionMask + 2147483647 + files + + 3BF2EE83D8AB42FD83A83218 + A3CDE083EF9840ED9DEC05CA + 240C44F6738B43AF8CC1CAB8 + 65D002D09A564B52B7A428E5 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 621E5C3C1EED45029985E9E6 + + fileRef + 285BB030A7FA4550BF39853E + isa + PBXBuildFile + + 623C2044A7834876B087E8F4 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + TSMessageView.h + path + Pod/Classes/TSMessageView.h + sourceTree + <group> + + 625F0999B7E24014822D7482 + + fileRef + 0716C1820F794BE592F9B9BF + isa + PBXBuildFile + + 6288D9AB33264363BDC0EC84 + + isa + PBXTargetDependency + target + 3A5D84A3E36E4CFC95606826 + targetProxy + FBE6729658F94D23A7C013CB + + 62A98EF6D60D42BDBBEF1509 + + children + + E8AB8AE40BB145B2B661A50B + 630DF77F41224EAD8C7830D6 + E6BA627DA1B44E5095CEC38A + 4A09303FF3FA4100B23CA003 + C0722C4201A04DF0B60D26A4 + 04175B60CE0F41D5925FF9FF + 8427ECC962554C92BDAE432F + C2DADBEE7F874F0C92454317 + 94A6DA13E45C4A0D9BD68504 + 1CCB887DEAC84F81B68AE821 + 288A8D1640804ACBBD912194 + 6703EC49933742B5990D0B42 + 730521A689AB485896D2A1C6 + 6712B9DBA8EB467590F4E1B1 + BF2DEFFF5B4246ADBAFF45C8 + DCB6EFB9F79E424E82BC36E0 + 71DE40E3FFF142D0AFD20AA9 + + isa + PBXGroup + name + Resources + sourceTree + <group> + + 62B14F2BDE7948068EE85715 + + baseConfigurationReference + 979E7232DCE1473D8D388361 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + 62B863218890489098903A91 + + fileRef + 351A64AC404E4962AD52F21B + isa + PBXBuildFile + + 630DF77F41224EAD8C7830D6 + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundError@2x.png + path + Pod/Assets/NotificationBackgroundError@2x.png + sourceTree + <group> + + 6380003157F34FDDA43FB136 + + fileRef + A963983043D643CD9EAE1E48 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + 64276F9EEEC34F7796B61221 + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-Tests-FBSnapshotTestCase.a + sourceTree + BUILT_PRODUCTS_DIR + + 65258DE396F94489A91B5F15 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + HexColor.h + path + Classes/HexColor.h + sourceTree + <group> + + 653E5CAD5F20455783D58E38 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.script.sh + path + Pods-TSMessages-resources.sh + sourceTree + <group> + + 6577590A49F04EDC8AFEEDCD + + fileRef + 9763A7DF3E514FD2984987CB + isa + PBXBuildFile + + 65D002D09A564B52B7A428E5 + + fileRef + 98A38CFF21874D60836AF73E + isa + PBXBuildFile + + 65D862EAB56F4F82AD3AB7F9 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + Specta.m + path + src/Specta.m + sourceTree + <group> + + 664F947C53244E5EA03979FA + + isa + PBXTargetDependency + target + 1E72777565054B18A1D55824 + targetProxy + 9DF3EC8C6EA149CD8B784C6B + + 669E4405AC744D9C8350EE81 + + baseConfigurationReference + 3E91DFDF8E4E418CB805F24B + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Tests-HexColors-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + 66A0677FC79146F78E0A3172 + + baseConfigurationReference + EB94C9DF284C4358A08B05EB + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-TSMessages-TSMessages-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + 66D632644B5C4CA6B536857F + + isa + PBXTargetDependency + target + 8436489099EE4FB69A034CFA + targetProxy + 1CBD96DD396D4A03BAAB5C3E + + 6703EC49933742B5990D0B42 + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundWarning@2x.png + path + Pod/Assets/NotificationBackgroundWarning@2x.png + sourceTree + <group> + + 6712B9DBA8EB467590F4E1B1 + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundWarningIcon@2x.png + path + Pod/Assets/NotificationBackgroundWarningIcon@2x.png + sourceTree + <group> + + 6B4B0A8B0535475BB469F201 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-TSMessages-TSMessages-dummy.m + sourceTree + <group> + + 6BBC8908787F4739AB96E97B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-Tests-Expecta+Snapshots-prefix.pch + sourceTree + <group> + + 6CB23D40DA6D432893DE76B5 + + fileRef + 7782C703AAF147BC9987F995 + isa + PBXBuildFile + + 6D3262AA43B240C2A73F4036 + + buildActionMask + 2147483647 + files + + CD298B16A9C7485EA1E08334 + 91ADA8DF58294F0A80CBD9F6 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 6E3C8C207745474391A085B6 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+conformTo.h + path + src/matchers/EXPMatchers+conformTo.h + sourceTree + <group> + + 6E8F881B414A40DDB197864E + + fileRef + 3F73EBA04F774C7A9BD4A5F5 + isa + PBXBuildFile + + 6EEDC42747774DFAA99A8A96 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beSupersetOf.h + path + src/matchers/EXPMatchers+beSupersetOf.h + sourceTree + <group> + + 6F3894D1F4FC48B6B52D8BE5 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + Foundation.framework + path + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework + sourceTree + DEVELOPER_DIR + + 6F56573851E54A07A3184744 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+raise.h + path + src/matchers/EXPMatchers+raise.h + sourceTree + <group> + + 6FC8007A8FCD4DF68A301B57 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + UIImage+Diff.m + sourceTree + <group> + + 705A8625EB434324A2A523B8 + + children + + 1E259C9B2B69415AAD12C7C8 + 36850139D0EB44AA9F9C7B02 + C3C7BD8078B14309B604CF66 + FA3DA915F7BA442D9947EA75 + + isa + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT + + 70C537AE0F074872AE4DD4A8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Tests-TSMessages.xcconfig + sourceTree + <group> + + 71DE40E3FFF142D0AFD20AA9 + + includeInIndex + 1 + isa + PBXFileReference + name + TSMessagesDefaultDesign.json + path + Pod/Assets/TSMessagesDefaultDesign.json + sourceTree + <group> + + 723D8B8D03E34C5195D24892 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beSupersetOf.m + path + src/matchers/EXPMatchers+beSupersetOf.m + sourceTree + <group> + + 730521A689AB485896D2A1C6 + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundWarningIcon.png + path + Pod/Assets/NotificationBackgroundWarningIcon.png + sourceTree + <group> + + 73190B980F3F4E349AB6D54D + + fileRef + 79B0844A28484164B4067E88 + isa + PBXBuildFile + + 73DD80404F29447592FF2A85 + + fileRef + E9EC725151D84C6E95FD543C + isa + PBXBuildFile + + 749A5B48F0284E8DBDEEB043 + + isa + PBXTargetDependency + target + 336CC2C50A0741948A1A6F97 + targetProxy + 17FD25C4AE7A48E58ED56EE4 + + 74C150C6375A4A7F9B9798BC + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text + path + Pods-Tests-acknowledgements.markdown + sourceTree + <group> + + 760B690693454CF69CD1A77B + + fileRef + 56FFF4E49C5640FB82684F0E + isa + PBXBuildFile + + 7695FF0AB62C44F1B5DAB358 + + baseConfigurationReference + BE6D838FB00D4CDA84B5C607 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + 7719F4986BB14DC78AF7C11B + + fileRef + 6F3894D1F4FC48B6B52D8BE5 + isa + PBXBuildFile + + 7782C703AAF147BC9987F995 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+contain.m + path + src/matchers/EXPMatchers+contain.m + sourceTree + <group> + + 77B7541211F948148BBD8FBE + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + TSMessage.h + path + Pod/Classes/TSMessage.h + sourceTree + <group> + + 7885288371B042B6A8016201 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-TSMessages-TSMessages.xcconfig + sourceTree + <group> + + 78BC81EA46EF4B30A95956FA + + buildConfigurations + + 345DFE914002419B88AC126D + 669E4405AC744D9C8350EE81 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 797221EEAC574779BCB0BDE8 + + fileRef + 79C7C8D7873B41EA90BD96AE + isa + PBXBuildFile + + 79B0844A28484164B4067E88 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beGreaterThan.m + path + src/matchers/EXPMatchers+beGreaterThan.m + sourceTree + <group> + + 79C7C8D7873B41EA90BD96AE + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + SpectaSupport.h + path + src/SpectaSupport.h + sourceTree + <group> + + 79DDAA470CB34E6F9E32A370 + + fileRef + 86A82AB1DCEA4EBCA7921853 + isa + PBXBuildFile + + 7A7BD51D8F4F4B60A6D64E52 + + baseConfigurationReference + D6EFA2D72B654758BE96D9C5 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Tests-TSMessages-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + 7AB0FB23755F45A98181B45A + + buildConfigurationList + F2715EC142D54BB9B90B4A01 + buildPhases + + 47F0034B490642DD972FC3E6 + 7B9A5344BE154EA79360FC24 + 860ED1426DDF4F589971AEC6 + + buildRules + + dependencies + + 3E6A57B856EF42C9BE83C805 + + isa + PBXNativeTarget + name + Pods-Tests-TSMessages + productName + Pods-Tests-TSMessages + productReference + 9F6800E033A442ADA0C6E989 + productType + com.apple.product-type.library.static + + 7AB750E7978A47858E0D77D8 + + fileRef + F85CD18086B749D2A4DAA486 + isa + PBXBuildFile + + 7B9A5344BE154EA79360FC24 + + buildActionMask + 2147483647 + files + + C8D5F2182A28445484E1FB9E + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 7BEF3EB9FBCB4613A29969A1 + + fileRef + 6F3894D1F4FC48B6B52D8BE5 + isa + PBXBuildFile + + 7C7C8A3AD97A4E089DA278B4 + + buildActionMask + 2147483647 + files + + 163291B4322F42A68E7446F8 + 9CDE7CB7B0F24135836B3304 + 5FFB8468DA824DEF8965CE0D + 79DDAA470CB34E6F9E32A370 + 2053EBFF62A44AF0A989746C + 531EC826B40344A2AC296B6B + 98331CE37E054CDA9350A43B + 7AB750E7978A47858E0D77D8 + BDFBF14BED4D48AA9BA58427 + 797221EEAC574779BCB0BDE8 + CEA96F3CC0DC41A1BCDCCE96 + E68D1D0ED10149F38E4DF850 + C0159FAF10E0432F82AFDE89 + A3002E0DF62042288F5147BD + 1FD1E23185E349E29B434DBF + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 7CAF13FE24B54F32B51C4BEE + + buildActionMask + 2147483647 + files + + 426D05EBA5CD4243AE4D4882 + E8D1F6B158874027845F9872 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 7D52B91D81E443049140EE0D + + fileRef + 8ABC1868F83E4E12A0FE3952 + isa + PBXBuildFile + + 7DE5856BAC884E7588A41D95 + + buildConfigurationList + A917264FAD3A4FA7B413720D + buildPhases + + 11CA80991A4A412A94D3AB37 + FBD4D2B9772A48769D8C2196 + + buildRules + + dependencies + + 0CF51EE74478410AA4D6849A + 749A5B48F0284E8DBDEEB043 + 886F50F2839443D09573EB26 + A3990BF6D2F54EE4A450DCB3 + 8F5A7AB71146442A8276D3C7 + C24EF6787CF84348A87E7419 + + isa + PBXNativeTarget + name + Pods-Tests + productName + Pods-Tests + productReference + FE38FE741E4743B8AFD9B816 + productType + com.apple.product-type.library.static + + 7EBB42E156B84AB59B70318C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + UIImage+Compare.h + sourceTree + <group> + + 7F9BE47CAF8D48B9A0659335 + + fileRef + E2CF042408E742D4A1571C26 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + 7FD9C7126D8448F9A554E539 + + children + + 2BEF996B72024D28A5E4A894 + + isa + PBXGroup + name + Development Pods + sourceTree + <group> + + 801FA9E02F1840BDA4EB9BA6 + + fileRef + DBDF5B9511914A6B83C425CC + isa + PBXBuildFile + + 802A7293852F4B719007E386 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beInstanceOf.h + path + src/matchers/EXPMatchers+beInstanceOf.h + sourceTree + <group> + + 8124478216984100BFAE5CC0 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + UIImage+Compare.m + sourceTree + <group> + + 81595259B34A4D3EB0D47D03 + + fileRef + EF0AC59E73D443D69D4DF8AC + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc + + + 81CC0DCDB8DA4D4CBC76C213 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+endWith.h + path + src/matchers/EXPMatchers+endWith.h + sourceTree + <group> + + 82355B880B1C49A7A0CBEDEA + + buildActionMask + 2147483647 + files + + B63DB0E1EFA44B37AB83657B + 99B372ADBF3542E79D3E415D + F8D3AAFE616342C998C80E7B + B38C6885A89442538413B585 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 83956B792E2448A7953C6639 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beFalsy.h + path + src/matchers/EXPMatchers+beFalsy.h + sourceTree + <group> + + 8427ECC962554C92BDAE432F + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundSuccess.png + path + Pod/Assets/NotificationBackgroundSuccess.png + sourceTree + <group> + + 8436489099EE4FB69A034CFA + + buildConfigurationList + AB4C0B9052F04D87A2256A76 + buildPhases + + 16BCD5529C8C4AE1A2869896 + CCF5F9563A6843319475D8D8 + 198C5B9D1BBB4723B1806CAA + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-TSMessages-HexColors + productName + Pods-TSMessages-HexColors + productReference + 5CF4B01120E5401F95B887DC + productType + com.apple.product-type.library.static + + 84C9FBBEF2814106B042D349 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beIdenticalTo.h + path + src/matchers/EXPMatchers+beIdenticalTo.h + sourceTree + <group> + + 84EE2772F01648229E09C966 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + SPTXCTestReporter.m + path + src/SPTXCTestReporter.m + sourceTree + <group> + + 84FBB215063C46348EC9025D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Tests-Specta.xcconfig + sourceTree + <group> + + 855248B9376041818299FE5A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text + name + Podfile + path + ../Podfile + sourceTree + SOURCE_ROOT + xcLanguageSpecificationIdentifier + xcode.lang.ruby + + 8579A4D9E2DE45EBAFF1D302 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + SPTSharedExampleGroups.h + path + src/SPTSharedExampleGroups.h + sourceTree + <group> + + 860ED1426DDF4F589971AEC6 + + buildActionMask + 2147483647 + files + + 0DD693D603014A53A3211430 + 8887F4EF199E4D95AE475427 + 57E839CE78AF4994AFB2C321 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 865A9AC9241B497680BD7CD1 + + fileRef + A035F2B90EC64AA991C87BE8 + isa + PBXBuildFile + + 86A82AB1DCEA4EBCA7921853 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + SPTReporter.h + path + src/SPTReporter.h + sourceTree + <group> + + 86BBCE4BF64C41F0A0E7AB6B + + fileRef + 84C9FBBEF2814106B042D349 + isa + PBXBuildFile + + 87216B6557AC427C845C3C4E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + SpectaTypes.h + path + src/SpectaTypes.h + sourceTree + <group> + + 87237EA54E324499B43C383E + + fileRef + 0EC97B20DEF240BAA31155E3 + isa + PBXBuildFile + + 878D9E973D5145F69150C367 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + Expecta.h + path + src/Expecta.h + sourceTree + <group> + + 886F50F2839443D09573EB26 + + isa + PBXTargetDependency + target + 3A5D84A3E36E4CFC95606826 + targetProxy + C9890BAA029446268639A1CD + + 8887F4EF199E4D95AE475427 + + fileRef + 77B7541211F948148BBD8FBE + isa + PBXBuildFile + + 88B9DC1D07354A7C964C4297 + + fileRef + C2B1C64389304F338C26A264 + isa + PBXBuildFile + + 89970C553F774A288D16C624 + + baseConfigurationReference + EB94C9DF284C4358A08B05EB + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-TSMessages-TSMessages-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + 89E03BD832EE47A0A4AB5F96 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+notify.m + path + src/matchers/EXPMatchers+notify.m + sourceTree + <group> + + 89F2D7BA9BAF4ED197206EE0 + + buildConfigurationList + EAA4062CFF17497DAAE8BF11 + buildPhases + + A0A7384D63CC4F47AA5C8DAE + CA61126B15754C0FA48C8A01 + E2D01EE11B444102B8A2EDAF + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-Tests-Expecta + productName + Pods-Tests-Expecta + productReference + A715076363BF439EAB204A05 + productType + com.apple.product-type.library.static + + 8AAF6BC39E7C427ABD1AECF5 + + fileRef + 65258DE396F94489A91B5F15 + isa + PBXBuildFile + + 8ABC1868F83E4E12A0FE3952 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beNil.m + path + src/matchers/EXPMatchers+beNil.m + sourceTree + <group> + + 8BA6669232DC47B99628612F + + buildConfigurations + + D481389C467E40F39789360C + D13655B09D334D11A3EA1C83 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 8C1BA7C4AC2F4D559A65C492 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPDoubleTuple.h + path + src/EXPDoubleTuple.h + sourceTree + <group> + + 8C46C1BEBDD0458494189920 + + buildActionMask + 2147483647 + files + + 24EF819988434C1299F1001F + 5A66FEDA721F41CA9862EC04 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 8C542ED9367646FFA0CD8640 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPExpect.m + path + src/EXPExpect.m + sourceTree + <group> + + 8C806D9C946445DDB1DCC64F + + fileRef + 01C37CFC59C84376AFE657DE + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + 8C83A0090B764740870EBE16 + + baseConfigurationReference + 36850139D0EB44AA9F9C7B02 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Tests-FBSnapshotTestCase-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + 8CC49B5746E94B49A2A32120 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPBackwardCompatibility.h + path + src/EXPBackwardCompatibility.h + sourceTree + <group> + + 8D05275099F84078914AC177 + + fileRef + FD4B8BE54DC24749B9B623D2 + isa + PBXBuildFile + + 8D23E099701C4BAB9631021B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Tests-Specta-Private.xcconfig + sourceTree + <group> + + 8D6765CC7ABC46E0A2C14010 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + TSMessageView.m + path + Pod/Classes/TSMessageView.m + sourceTree + <group> + + 8E6F32AA4FF142729BABF80D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + SPTSpec.h + path + src/SPTSpec.h + sourceTree + <group> + + 8F15CC64E83A4017B7924307 + + fileRef + 94F60A63EAD44D5C8AE10A87 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + 8F3AC4E1D96D457CB3B23188 + + children + + 7885288371B042B6A8016201 + EB94C9DF284C4358A08B05EB + 6B4B0A8B0535475BB469F201 + A614B3FB8410446AAF82D995 + 70C537AE0F074872AE4DD4A8 + D6EFA2D72B654758BE96D9C5 + D80F45031C0E46D59B801CDA + F3190F09F9084BE886CB6F65 + + isa + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT + + 8F5A7AB71146442A8276D3C7 + + isa + PBXTargetDependency + target + C11DB9D6893248558308716B + targetProxy + C99A92FA32D94A0597A35E73 + + 904BCE988E2A4F29988407E0 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + SPTExample.h + path + src/SPTExample.h + sourceTree + <group> + + 917954A6B6B54D9C8022FBF5 + + buildConfigurations + + 89970C553F774A288D16C624 + 66A0677FC79146F78E0A3172 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 91ADA8DF58294F0A80CBD9F6 + + fileRef + A21D084632524F07BA6D8D5A + isa + PBXBuildFile + + 93604C5F05C742F488714406 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-TSMessages-HexColors.xcconfig + sourceTree + <group> + + 93DC9160C8E24554A0ED86D3 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beSubclassOf.m + path + src/matchers/EXPMatchers+beSubclassOf.m + sourceTree + <group> + + 94A6DA13E45C4A0D9BD68504 + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundSuccessIcon.png + path + Pod/Assets/NotificationBackgroundSuccessIcon.png + sourceTree + <group> + + 94F60A63EAD44D5C8AE10A87 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + TSMessage.m + path + Pod/Classes/TSMessage.m + sourceTree + <group> + + 964B971D768C47FDA069E4C0 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + FBSnapshotTestCase.h + sourceTree + <group> + + 9763A7DF3E514FD2984987CB + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+raiseWithReason.h + path + src/matchers/EXPMatchers+raiseWithReason.h + sourceTree + <group> + + 979E7232DCE1473D8D388361 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-TSMessages.xcconfig + sourceTree + <group> + + 98331CE37E054CDA9350A43B + + fileRef + 32CB469D0CE94C98857EEED6 + isa + PBXBuildFile + + 9849F408B62642C88B913D04 + + fileRef + 27D0C637D61640ACAA07D3BD + isa + PBXBuildFile + + 9855BDBE995C4FDA9A77F30A + + fileRef + 6F3894D1F4FC48B6B52D8BE5 + isa + PBXBuildFile + + 98A38CFF21874D60836AF73E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + UIImage+Diff.h + sourceTree + <group> + + 98E41194D9094F8D948DF737 + + isa + PBXTargetDependency + target + 8436489099EE4FB69A034CFA + targetProxy + 3B6DD72898894194AE7EEE12 + + 99AF37A9C84A4A188F674B4D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + XCTestRun+Specta.h + path + src/XCTestRun+Specta.h + sourceTree + <group> + + 99B372ADBF3542E79D3E415D + + fileRef + 4BC4CBDB655E441DA9680F2E + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + 9A7A2BE3EC3C469CA13C7A97 + + fileRef + 65D862EAB56F4F82AD3AB7F9 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + 9AFACE748CEC4BC985A7082F + + baseConfigurationReference + BE6D838FB00D4CDA84B5C607 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + 9AFF06C6DF75425BAED74AAF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + ExpectaSupport.h + path + src/ExpectaSupport.h + sourceTree + <group> + + 9B33B38FEC254E47A9029AC3 + + fileRef + 6E3C8C207745474391A085B6 + isa + PBXBuildFile + + 9C62697A73B7488BAF3FA781 + + buildConfigurationList + C6D438003E3E4354B5D6F9D9 + buildPhases + + 5ACD3D75079C40BB867CF256 + A2CE53686C6641BFAE3A6A11 + + buildRules + + dependencies + + 98E41194D9094F8D948DF737 + 664F947C53244E5EA03979FA + + isa + PBXNativeTarget + name + Pods-TSMessages + productName + Pods-TSMessages + productReference + 364BDAC64D1249EC98F19694 + productType + com.apple.product-type.library.static + + 9CDE7CB7B0F24135836B3304 + + fileRef + 3144ED9558FA4A399864E102 + isa + PBXBuildFile + + 9CFD5B8CFF00455791BB2A16 + + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + CLANG_CXX_LANGUAGE_STANDARD + gnu++0x + CLANG_CXX_LIBRARY + libc++ + CLANG_ENABLE_MODULES + YES + CLANG_ENABLE_OBJC_ARC + NO + CLANG_WARN_BOOL_CONVERSION + YES + CLANG_WARN_CONSTANT_CONVERSION + YES + CLANG_WARN_DIRECT_OBJC_ISA_USAGE + YES + CLANG_WARN_EMPTY_BODY + YES + CLANG_WARN_ENUM_CONVERSION + YES + CLANG_WARN_INT_CONVERSION + YES + CLANG_WARN_OBJC_ROOT_CLASS + YES + COPY_PHASE_STRIP + NO + ENABLE_NS_ASSERTIONS + NO + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_WARN_64_TO_32_BIT_CONVERSION + YES + GCC_WARN_ABOUT_RETURN_TYPE + YES + GCC_WARN_UNDECLARED_SELECTOR + YES + GCC_WARN_UNINITIALIZED_AUTOS + YES + GCC_WARN_UNUSED_FUNCTION + YES + GCC_WARN_UNUSED_VARIABLE + YES + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + STRIP_INSTALLED_PRODUCT + NO + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + 9D2A40BBD4EB49A290B94CF5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beNil.h + path + src/matchers/EXPMatchers+beNil.h + sourceTree + <group> + + 9DC9A041EAE74815BE2379D3 + + fileRef + F2347E075B8345EDAB1B394B + isa + PBXBuildFile + + 9DF3EC8C6EA149CD8B784C6B + + containerPortal + BB4916A4330B4187889447A3 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 1E72777565054B18A1D55824 + remoteInfo + Pods-TSMessages-TSMessages + + 9E1CA24D83D74FE69FE90F7B + + fileRef + D80F45031C0E46D59B801CDA + isa + PBXBuildFile + + 9E8320975333430F855F7EA2 + + baseConfigurationReference + 10A48DE0001544B5B96D564C + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-TSMessages-HexColors-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + 9EA4D6A88B614B8CA60EEF2A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beSubclassOf.h + path + src/matchers/EXPMatchers+beSubclassOf.h + sourceTree + <group> + + 9F3362B2A86249D38B97E091 + + baseConfigurationReference + 1A7D0D6EB6554F4DA238EE2B + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Tests-Expecta-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + 9F4E60BE22A64471B13B4B7E + + baseConfigurationReference + 1A7D0D6EB6554F4DA238EE2B + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Tests-Expecta-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + 9F6800E033A442ADA0C6E989 + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-Tests-TSMessages.a + sourceTree + BUILT_PRODUCTS_DIR + + 9F9D3A50345340DEA72BCCFE + + buildConfigurations + + 8C83A0090B764740870EBE16 + 12BFDBF9655644E6A27E58D5 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 9FA94FC64A454891A98DB960 + + buildActionMask + 2147483647 + files + + B738E282C2DF4EE4840E76DD + D273A3798CEE48D9B344B53A + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 9FFA2D4886F04BD3B34885A1 + + buildActionMask + 2147483647 + files + + 36B6A54BD03843818AE078FC + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + A035F2B90EC64AA991C87BE8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPFloatTuple.h + path + src/EXPFloatTuple.h + sourceTree + <group> + + A05B694F56664589BC4FE35A + + fileRef + A715076363BF439EAB204A05 + isa + PBXBuildFile + + A0A7384D63CC4F47AA5C8DAE + + buildActionMask + 2147483647 + files + + 22A38EE522F5468C8ED90835 + 4B474B9B16B34D84A74D5884 + FADB1D9FB44843378BDE03BA + 2C62B5B60E414182BC2DA2BB + 32B3940E56384A5F9CE59E06 + FDD313E8C7614C0AA32B32B8 + 6E8F881B414A40DDB197864E + 369212B7B2784F4C940F9B38 + 73190B980F3F4E349AB6D54D + 3966473415B248848A858A14 + FAF33A1732F44D2C9222D584 + A36B4F7EFB2E4F0DAA22DBBC + D92D19B5AE114B17ABE68273 + 87237EA54E324499B43C383E + 0A5D2CCB26FF413F938FB18A + 2583C62BAE6F47FFA5F5E51B + 7D52B91D81E443049140EE0D + E269E1D222E949FDAF703DA3 + D4BAA2BFF3CD4763B98C9BDE + 5872310AAAA6407EA65000EB + CF105A6769AC49819A31E262 + 53F84F5BED4D427E87A77919 + 6CB23D40DA6D432893DE76B5 + ABA0692945BD4A83999E7226 + 621E5C3C1EED45029985E9E6 + E6A58B302ACB4680AE008D8C + E713415269E14BF6833507CD + EC5C3E9C240246CA9D96DA94 + 2FA7D271DC2449138DE26E3A + 801FA9E02F1840BDA4EB9BA6 + EE93FDB080E9453F85231F86 + D3B09477C16643C8BC507E47 + C265A5EF747D4CFCA087A0F1 + 4F08A0F9FFDD489A94B84011 + 88B9DC1D07354A7C964C4297 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + A21D084632524F07BA6D8D5A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-Tests-Expecta+Snapshots-dummy.m + sourceTree + <group> + + A2911D993D554444B6660A05 + + baseConfigurationReference + AFB3B4473B424A7C9045E433 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Tests-Expecta+Snapshots-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + A2CE53686C6641BFAE3A6A11 + + buildActionMask + 2147483647 + files + + 7BEF3EB9FBCB4613A29969A1 + 31FCC73D63234D458C204151 + C5B0914646C24472AF98387D + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + A3002E0DF62042288F5147BD + + fileRef + 1ABDE4BFFD7E4685B5ED694B + isa + PBXBuildFile + + A36B4F7EFB2E4F0DAA22DBBC + + fileRef + CA01C19906854DE3BB1F5E47 + isa + PBXBuildFile + + A3990BF6D2F54EE4A450DCB3 + + isa + PBXTargetDependency + target + E3CACBF0E2134D13B4FE07A2 + targetProxy + 395F55BEFA464F639C9A55A6 + + A39BF0422E1A4C83A1A4EB36 + + fileRef + 26D0A71A080A4A8CA2A2EC22 + isa + PBXBuildFile + + A3CDE083EF9840ED9DEC05CA + + fileRef + D2A84273F2444D5EA58F4C85 + isa + PBXBuildFile + + A4F26DFEBD63414C81919AF5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beGreaterThan.h + path + src/matchers/EXPMatchers+beGreaterThan.h + sourceTree + <group> + + A54F869A6DAF45559771F173 + + fileRef + 77B7541211F948148BBD8FBE + isa + PBXBuildFile + + A5FB58E3814C4C60B4A33FF7 + + buildConfigurations + + F9D4D6DD87574130A37C592B + A2911D993D554444B6660A05 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + A614B3FB8410446AAF82D995 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-TSMessages-TSMessages-prefix.pch + sourceTree + <group> + + A689DEB0B2584712A5490060 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPDoubleTuple.m + path + src/EXPDoubleTuple.m + sourceTree + <group> + + A715076363BF439EAB204A05 + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-Tests-Expecta.a + sourceTree + BUILT_PRODUCTS_DIR + + A844EA06DCA5459AA9D24A32 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beInstanceOf.m + path + src/matchers/EXPMatchers+beInstanceOf.m + sourceTree + <group> + + A917264FAD3A4FA7B413720D + + buildConfigurations + + 7695FF0AB62C44F1B5DAB358 + 9AFACE748CEC4BC985A7082F + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + A919CDF9B0AC4247A4C4DF6E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-Tests-HexColors-dummy.m + sourceTree + <group> + + A92D670FF2A244C8AF8D5F2B + + isa + PBXTargetDependency + target + 89F2D7BA9BAF4ED197206EE0 + targetProxy + C44D62FD32E447C892AFF7A2 + + A963983043D643CD9EAE1E48 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + XCTestCase+Specta.m + path + src/XCTestCase+Specta.m + sourceTree + <group> + + A9E345CAA1AD4A328EF45A5A + + fileRef + 8C1BA7C4AC2F4D559A65C492 + isa + PBXBuildFile + + AA3AAE2C027F45D29EDE97D9 + + fileRef + 49744A3B3B9E4607A14846B8 + isa + PBXBuildFile + + AB4C0B9052F04D87A2256A76 + + buildConfigurations + + 9E8320975333430F855F7EA2 + D3E5B186F16F4A3C814D4020 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + ABA0692945BD4A83999E7226 + + fileRef + 509283B6915B4EB7AA4EAD17 + isa + PBXBuildFile + + ABBA7E0C95FE41A2BBB16E52 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-TSMessages-HexColors-dummy.m + sourceTree + <group> + + ABE33ADB5D31497A866EFA0B + + children + + 93604C5F05C742F488714406 + 10A48DE0001544B5B96D564C + ABBA7E0C95FE41A2BBB16E52 + 0D7AD69E649240649BD0DEA5 + D941C8840E10402FADE8CF9C + 3E91DFDF8E4E418CB805F24B + A919CDF9B0AC4247A4C4DF6E + 34DD15E6720D4C0FBB5D02EF + + isa + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT + + AEF2456B400F4D2F8D3FA2E0 + + buildActionMask + 2147483647 + files + + 9855BDBE995C4FDA9A77F30A + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + AFB3B4473B424A7C9045E433 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Tests-Expecta+Snapshots-Private.xcconfig + sourceTree + <group> + + B0954012BB4F46A59034CFD5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beIdenticalTo.m + path + src/matchers/EXPMatchers+beIdenticalTo.m + sourceTree + <group> + + B231182FF67443019F15DBE3 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + XCTestCase+Specta.h + path + src/XCTestCase+Specta.h + sourceTree + <group> + + B359036583BE405084BC61B8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + SPTNestedReporter.h + path + src/SPTNestedReporter.h + sourceTree + <group> + + B38C6885A89442538413B585 + + fileRef + 8D6765CC7ABC46E0A2C14010 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + B39C8AD0B79B425A9FE3553D + + fileRef + 351EBEFA83E947FF9E278677 + isa + PBXBuildFile + + B512D9A6C06440229F2EF244 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + HexColor.m + path + Classes/HexColor.m + sourceTree + <group> + + B5C7BF46634D4E36A25190DB + + children + + BD4003FC16DA4F419E0C7E01 + 53C20BFD66EC415FB3600636 + + isa + PBXGroup + name + Targets Support Files + sourceTree + <group> + + B63DB0E1EFA44B37AB83657B + + fileRef + 6B4B0A8B0535475BB469F201 + isa + PBXBuildFile + + B67CAC57DCA542C6AD1CA387 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + SPTExample.m + path + src/SPTExample.m + sourceTree + <group> + + B72859772E504438AA235C3C + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + XCTest.framework + path + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/XCTest.framework + sourceTree + DEVELOPER_DIR + + B738E282C2DF4EE4840E76DD + + fileRef + B512D9A6C06440229F2EF244 + isa + PBXBuildFile + + B804440EBEF144CD92B941FC + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPExpect.h + path + src/EXPExpect.h + sourceTree + <group> + + B9DD4A3D8C434DA6A3FEB204 + + fileRef + CA7891F7942B49D3996D0AAC + isa + PBXBuildFile + + BA1625AF21514D85ACBF8ABC + + fileRef + 38E1387791A44A6698DD5ED1 + isa + PBXBuildFile + + BB4916A4330B4187889447A3 + + attributes + + LastUpgradeCheck + 0510 + + buildConfigurationList + 2CD65329E9FC4F219AD512B0 + compatibilityVersion + Xcode 3.2 + developmentRegion + English + hasScannedForEncodings + 0 + isa + PBXProject + knownRegions + + en + + mainGroup + FDC16B2EA35744D283713157 + productRefGroup + 384A987F266442A195092ED5 + projectDirPath + + projectReferences + + projectRoot + + targets + + 9C62697A73B7488BAF3FA781 + 8436489099EE4FB69A034CFA + 1E72777565054B18A1D55824 + 7DE5856BAC884E7588A41D95 + 89F2D7BA9BAF4ED197206EE0 + 336CC2C50A0741948A1A6F97 + 3A5D84A3E36E4CFC95606826 + E3CACBF0E2134D13B4FE07A2 + C11DB9D6893248558308716B + 7AB0FB23755F45A98181B45A + + + BB6054B76A944F6AABF42D4C + + fileRef + CCC0088C15E44ABB873B076B + isa + PBXBuildFile + + BC43E7D55DBF4162A9217455 + + fileRef + 4BC4CBDB655E441DA9680F2E + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + BC769D0D32574AB49568B975 + + children + + 964B971D768C47FDA069E4C0 + 4CB7BEB052354730BB1B6F94 + D2A84273F2444D5EA58F4C85 + EF0AC59E73D443D69D4DF8AC + 7EBB42E156B84AB59B70318C + 8124478216984100BFAE5CC0 + 98A38CFF21874D60836AF73E + 6FC8007A8FCD4DF68A301B57 + 705A8625EB434324A2A523B8 + + isa + PBXGroup + name + FBSnapshotTestCase + path + FBSnapshotTestCase + sourceTree + <group> + + BD4003FC16DA4F419E0C7E01 + + children + + 979E7232DCE1473D8D388361 + 18A3EB5968A2432880DFBA81 + FAE9C3E8102140C3955D27F8 + 351EBEFA83E947FF9E278677 + F874AEBABFC3491896D8E34A + 653E5CAD5F20455783D58E38 + + isa + PBXGroup + name + Pods-TSMessages + sourceTree + <group> + + BDBDBB9A3E93446BA2A0D02C + + fileRef + B804440EBEF144CD92B941FC + isa + PBXBuildFile + + BDFBF14BED4D48AA9BA58427 + + fileRef + DA8B289FD69040FBB82DC057 + isa + PBXBuildFile + + BE6D838FB00D4CDA84B5C607 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Tests.xcconfig + sourceTree + <group> + + BE97C27ADB2E46CE974BE537 + + fileRef + 6F3894D1F4FC48B6B52D8BE5 + isa + PBXBuildFile + + BEA7BD0820C7489593D2E68E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSValue+Expecta.m + path + src/NSValue+Expecta.m + sourceTree + <group> + + BEAEF00E19504A4D94C203C3 + + fileRef + 83956B792E2448A7953C6639 + isa + PBXBuildFile + + BF2DEFFF5B4246ADBAFF45C8 + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationButtonBackground.png + path + Pod/Assets/NotificationButtonBackground.png + sourceTree + <group> + + C0159FAF10E0432F82AFDE89 + + fileRef + B231182FF67443019F15DBE3 + isa + PBXBuildFile + + C06B20FA59654584911C2987 + + fileRef + 0B67ACCCB6D04D8B9DA98C1D + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + C0722C4201A04DF0B60D26A4 + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundMessage.png + path + Pod/Assets/NotificationBackgroundMessage.png + sourceTree + <group> + + C0D349690FC94E999A4A3D2B + + children + + 8CC49B5746E94B49A2A32120 + 151E83F910434BDC9A96005F + 2CDFBECC115043A3A38CB560 + 3A65F6EE3DC345F9AEE30FDB + 2A00CFDCBF5C4B18B35046BB + 8C1BA7C4AC2F4D559A65C492 + A689DEB0B2584712A5490060 + B804440EBEF144CD92B941FC + 8C542ED9367646FFA0CD8640 + A035F2B90EC64AA991C87BE8 + DA7DE92E568C43CC8F9BEB9A + CA7891F7942B49D3996D0AAC + E7D4E80B3DE84CE8B5B433B2 + 5A5733CC88754B579F95C1F8 + 27D0C637D61640ACAA07D3BD + E6D79834194E473DB6EB335E + 3F73EBA04F774C7A9BD4A5F5 + 83956B792E2448A7953C6639 + F03B64F7DBBD45E0B5C2A4F2 + A4F26DFEBD63414C81919AF5 + 79B0844A28484164B4067E88 + F0E11C60FC324A569929746E + 4E3C9886D99347CD906D461E + 84C9FBBEF2814106B042D349 + B0954012BB4F46A59034CFD5 + DA70FFE17B0A4FD48EB293C2 + CA01C19906854DE3BB1F5E47 + 802A7293852F4B719007E386 + A844EA06DCA5459AA9D24A32 + 38E1387791A44A6698DD5ED1 + 0EC97B20DEF240BAA31155E3 + 49744A3B3B9E4607A14846B8 + C9E3E5213AFF4058BF34E848 + 4D00BBB0378449A7ABF0C382 + 391CEB97E1CC45BBB8C5AB28 + 9D2A40BBD4EB49A290B94CF5 + 8ABC1868F83E4E12A0FE3952 + 9EA4D6A88B614B8CA60EEF2A + 93DC9160C8E24554A0ED86D3 + 6EEDC42747774DFAA99A8A96 + 723D8B8D03E34C5195D24892 + 26D0A71A080A4A8CA2A2EC22 + 43C180ACDFAA40B5A146B0BB + DF149347E6AA45D68616C404 + 1B8D3B3C0CCD408EA7E77B2E + 6E3C8C207745474391A085B6 + E241E5199A0A4DF2BBC0EDBE + ED5B2AEF83954F66B7E0AE02 + 7782C703AAF147BC9987F995 + 81CC0DCDB8DA4D4CBC76C213 + 509283B6915B4EB7AA4EAD17 + F178235A72FC45D2BC549667 + 285BB030A7FA4550BF39853E + F1BB13E27C464192972564BC + 30E547DF40464F65BD7743A6 + 3C9C82EC51804E46A2393EA1 + 89E03BD832EE47A0A4AB5F96 + 6F56573851E54A07A3184744 + 5565E74D24D94DB498377A0E + 9763A7DF3E514FD2984987CB + 48D21747110F4545830FB28A + E9EC725151D84C6E95FD543C + DBDF5B9511914A6B83C425CC + 351A64AC404E4962AD52F21B + 37F42FCE8B6243BEA437F490 + 878D9E973D5145F69150C367 + 156C64F61CD24B02AA36C027 + 9AFF06C6DF75425BAED74AAF + C9253D9D9E604782BA82A12F + 2A4F255A4D504E77A46EED7C + 3B7571C06BEB40BEAAD3153B + BEA7BD0820C7489593D2E68E + 12EF8BB44AA94382B110AB0A + + isa + PBXGroup + name + Expecta + path + Expecta + sourceTree + <group> + + C11DB9D6893248558308716B + + buildConfigurationList + 8BA6669232DC47B99628612F + buildPhases + + 458BCA1498374455AEF35641 + 1D22B55928394F2BA5430313 + 7C7C8A3AD97A4E089DA278B4 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-Tests-Specta + productName + Pods-Tests-Specta + productReference + 0716C1820F794BE592F9B9BF + productType + com.apple.product-type.library.static + + C24EF6787CF84348A87E7419 + + isa + PBXTargetDependency + target + 7AB0FB23755F45A98181B45A + targetProxy + 0520CE204B024A3682C12223 + + C265A5EF747D4CFCA087A0F1 + + fileRef + C9253D9D9E604782BA82A12F + isa + PBXBuildFile + + C2B1C64389304F338C26A264 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-Tests-Expecta-dummy.m + sourceTree + <group> + + C2DADBEE7F874F0C92454317 + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundSuccess@2x.png + path + Pod/Assets/NotificationBackgroundSuccess@2x.png + sourceTree + <group> + + C3C7BD8078B14309B604CF66 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-Tests-FBSnapshotTestCase-dummy.m + sourceTree + <group> + + C3F6BE486FEF44149056150D + + fileRef + F0E11C60FC324A569929746E + isa + PBXBuildFile + + C44D62FD32E447C892AFF7A2 + + containerPortal + BB4916A4330B4187889447A3 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 89F2D7BA9BAF4ED197206EE0 + remoteInfo + Pods-Tests-Expecta + + C451AD19E517443CA66AFD4D + + children + + 904BCE988E2A4F29988407E0 + B67CAC57DCA542C6AD1CA387 + 3144ED9558FA4A399864E102 + E2CF042408E742D4A1571C26 + B359036583BE405084BC61B8 + 4C4FEBD06964433389A1DA6C + 86A82AB1DCEA4EBCA7921853 + 57D9E53BADDB4B9F929A9BC0 + 8579A4D9E2DE45EBAFF1D302 + 02E90FDB2DAA4FF4AEF24369 + 8E6F32AA4FF142729BABF80D + 03D639549FBC45A38D63C7A3 + 32CB469D0CE94C98857EEED6 + 2CEA6AC0355E43279705CF2E + F85CD18086B749D2A4DAA486 + 84EE2772F01648229E09C966 + DA8B289FD69040FBB82DC057 + 65D862EAB56F4F82AD3AB7F9 + 79C7C8D7873B41EA90BD96AE + 87216B6557AC427C845C3C4E + 038450D3C0DF483B9A96944B + D26B85FB9CC24F2D899CD78E + B231182FF67443019F15DBE3 + A963983043D643CD9EAE1E48 + 1ABDE4BFFD7E4685B5ED694B + 0B67ACCCB6D04D8B9DA98C1D + 99AF37A9C84A4A188F674B4D + 01C37CFC59C84376AFE657DE + EC1712587A084E409029AA53 + + isa + PBXGroup + name + Specta + path + Specta + sourceTree + <group> + + C5B0914646C24472AF98387D + + fileRef + E7B59276937044A08CB4D90A + isa + PBXBuildFile + + C6D438003E3E4354B5D6F9D9 + + buildConfigurations + + 19957BF862794517B1F31B40 + 62B14F2BDE7948068EE85715 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + C8D5F2182A28445484E1FB9E + + fileRef + 6F3894D1F4FC48B6B52D8BE5 + isa + PBXBuildFile + + C9253D9D9E604782BA82A12F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + ExpectaSupport.m + path + src/ExpectaSupport.m + sourceTree + <group> + + C9890BAA029446268639A1CD + + containerPortal + BB4916A4330B4187889447A3 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 3A5D84A3E36E4CFC95606826 + remoteInfo + Pods-Tests-FBSnapshotTestCase + + C99A92FA32D94A0597A35E73 + + containerPortal + BB4916A4330B4187889447A3 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + C11DB9D6893248558308716B + remoteInfo + Pods-Tests-Specta + + C9E3E5213AFF4058BF34E848 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beLessThan.m + path + src/matchers/EXPMatchers+beLessThan.m + sourceTree + <group> + + CA01C19906854DE3BB1F5E47 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beInTheRangeOf.m + path + src/matchers/EXPMatchers+beInTheRangeOf.m + sourceTree + <group> + + CA61126B15754C0FA48C8A01 + + buildActionMask + 2147483647 + files + + BE97C27ADB2E46CE974BE537 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + CA7891F7942B49D3996D0AAC + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatcher.h + path + src/EXPMatcher.h + sourceTree + <group> + + CACC65AE637F404598C0EED8 + + fileRef + 2CEA6AC0355E43279705CF2E + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + CBD7C6251E9C4DD2A81E103A + + fileRef + 009BBFF03F9745E8B07BF221 + isa + PBXBuildFile + + CCC0088C15E44ABB873B076B + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-Tests-Expecta+Snapshots.a + sourceTree + BUILT_PRODUCTS_DIR + + CCF5F9563A6843319475D8D8 + + buildActionMask + 2147483647 + files + + 7719F4986BB14DC78AF7C11B + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + CD298B16A9C7485EA1E08334 + + fileRef + 12183821820E45208EDA9DC1 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc + + + CEA96F3CC0DC41A1BCDCCE96 + + fileRef + 87216B6557AC427C845C3C4E + isa + PBXBuildFile + + CF105A6769AC49819A31E262 + + fileRef + 1B8D3B3C0CCD408EA7E77B2E + isa + PBXBuildFile + + D0BF159C9DA649BEA29E8144 + + fileRef + 84EE2772F01648229E09C966 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + D13655B09D334D11A3EA1C83 + + baseConfigurationReference + 8D23E099701C4BAB9631021B + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Tests-Specta-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + D26B85FB9CC24F2D899CD78E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + SpectaUtility.m + path + src/SpectaUtility.m + sourceTree + <group> + + D273A3798CEE48D9B344B53A + + fileRef + A919CDF9B0AC4247A4C4DF6E + isa + PBXBuildFile + + D2A84273F2444D5EA58F4C85 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + FBSnapshotTestController.h + sourceTree + <group> + + D3B09477C16643C8BC507E47 + + fileRef + 156C64F61CD24B02AA36C027 + isa + PBXBuildFile + + D3E5B186F16F4A3C814D4020 + + baseConfigurationReference + 10A48DE0001544B5B96D564C + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + YES + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-TSMessages-HexColors-prefix.pch + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_CFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_CPLUSPLUSFLAGS + + -DNS_BLOCK_ASSERTIONS=1 + $(inherited) + + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + D481389C467E40F39789360C + + baseConfigurationReference + 8D23E099701C4BAB9631021B + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Tests-Specta-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + D4BAA2BFF3CD4763B98C9BDE + + fileRef + 723D8B8D03E34C5195D24892 + isa + PBXBuildFile + + D6C800B243794AFE9F08A71B + + fileRef + 64276F9EEEC34F7796B61221 + isa + PBXBuildFile + + D6EFA2D72B654758BE96D9C5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Tests-TSMessages-Private.xcconfig + sourceTree + <group> + + D80F45031C0E46D59B801CDA + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-Tests-TSMessages-dummy.m + sourceTree + <group> + + D8998AD949D444DA95E03E71 + + fileRef + 57D9E53BADDB4B9F929A9BC0 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + D92D19B5AE114B17ABE68273 + + fileRef + A844EA06DCA5459AA9D24A32 + isa + PBXBuildFile + + D941C8840E10402FADE8CF9C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Tests-HexColors.xcconfig + sourceTree + <group> + + D95D1D6F1E0E4138BF9F779A + + fileRef + 8D6765CC7ABC46E0A2C14010 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + D95DC1D0525D427AAFEB7820 + + buildActionMask + 2147483647 + files + + CBD7C6251E9C4DD2A81E103A + A54F869A6DAF45559771F173 + 0A9363E227D9410386B45238 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + DA70FFE17B0A4FD48EB293C2 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beInTheRangeOf.h + path + src/matchers/EXPMatchers+beInTheRangeOf.h + sourceTree + <group> + + DA7DE92E568C43CC8F9BEB9A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPFloatTuple.m + path + src/EXPFloatTuple.m + sourceTree + <group> + + DA8B289FD69040FBB82DC057 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + Specta.h + path + src/Specta.h + sourceTree + <group> + + DBDF5B9511914A6B83C425CC + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+respondTo.m + path + src/matchers/EXPMatchers+respondTo.m + sourceTree + <group> + + DC39ED9DCDE841B798A47D7C + + fileRef + D26B85FB9CC24F2D899CD78E + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + DCB6EFB9F79E424E82BC36E0 + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationButtonBackground@2x.png + path + Pod/Assets/NotificationButtonBackground@2x.png + sourceTree + <group> + + DCD5AF077A1845B092DBCE11 + + buildActionMask + 2147483647 + files + + 0F0FB68059144CE58D01CD21 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + DF149347E6AA45D68616C404 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beginWith.h + path + src/matchers/EXPMatchers+beginWith.h + sourceTree + <group> + + DF2B37ABF9754AE8BF88B74E + + fileRef + 6EEDC42747774DFAA99A8A96 + isa + PBXBuildFile + + E0DF90A595A142278C9D85C5 + + children + + 14BF6BF6903640DD96F15580 + AFB3B4473B424A7C9045E433 + A21D084632524F07BA6D8D5A + 6BBC8908787F4739AB96E97B + + isa + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT + + E1079352DD0842E7BD52E7CC + + fileRef + 878D9E973D5145F69150C367 + isa + PBXBuildFile + + E1388E2C34D94BB294F85FF1 + + fileRef + DA70FFE17B0A4FD48EB293C2 + isa + PBXBuildFile + + E241E5199A0A4DF2BBC0EDBE + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+conformTo.m + path + src/matchers/EXPMatchers+conformTo.m + sourceTree + <group> + + E269E1D222E949FDAF703DA3 + + fileRef + 93DC9160C8E24554A0ED86D3 + isa + PBXBuildFile + + E2CF042408E742D4A1571C26 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + SPTExampleGroup.m + path + src/SPTExampleGroup.m + sourceTree + <group> + + E2D01EE11B444102B8A2EDAF + + buildActionMask + 2147483647 + files + + F465FBA3BAFD4914A16911A8 + 4D4E01279D4D448B845415F2 + F8C542798EBE4D48A9FDA0B0 + A9E345CAA1AD4A328EF45A5A + BDBDBB9A3E93446BA2A0D02C + 865A9AC9241B497680BD7CD1 + B9DD4A3D8C434DA6A3FEB204 + 0116CBF0956B4BA7BA412238 + 523221BCC3654344AA34BE8B + BEAEF00E19504A4D94C203C3 + 0DECFE862F7644348E9F148B + C3F6BE486FEF44149056150D + 86BBCE4BF64C41F0A0E7AB6B + E1388E2C34D94BB294F85FF1 + 08A8FB71B1184A5CB6944457 + BA1625AF21514D85ACBF8ABC + AA3AAE2C027F45D29EDE97D9 + 2E195F897C9145D785E1FEC5 + 4A1D87116FA1405BA8EEEE05 + 5C2A5D655B8D4C1B8A9564C0 + DF2B37ABF9754AE8BF88B74E + A39BF0422E1A4C83A1A4EB36 + 09E60234278E482BA56C5870 + 9B33B38FEC254E47A9029AC3 + 21AAAC1BE6B342A2A23D51EF + 4057501A51FE48299E27D85E + 58E0A245B34C48FBA0893F6B + 38562DA5ABB944589A3162C4 + F656F00C7AEE467BBC1699EA + 607E618FBF5E41B38136DAA0 + 6577590A49F04EDC8AFEEDCD + 73DD80404F29447592FF2A85 + 9849F408B62642C88B913D04 + 62B863218890489098903A91 + E1079352DD0842E7BD52E7CC + 0529929E27FC404993D598AC + 49BB8B00BF374E57B414AC43 + 044F5DD5396C4FF5B3EE4A6A + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + E3CACBF0E2134D13B4FE07A2 + + buildConfigurationList + 78BC81EA46EF4B30A95956FA + buildPhases + + 9FA94FC64A454891A98DB960 + AEF2456B400F4D2F8D3FA2E0 + 1ACA3621BA05436783F722A0 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Pods-Tests-HexColors + productName + Pods-Tests-HexColors + productReference + FD4B8BE54DC24749B9B623D2 + productType + com.apple.product-type.library.static + + E68D1D0ED10149F38E4DF850 + + fileRef + 038450D3C0DF483B9A96944B + isa + PBXBuildFile + + E6A58B302ACB4680AE008D8C + + fileRef + 30E547DF40464F65BD7743A6 + isa + PBXBuildFile + + E6BA627DA1B44E5095CEC38A + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundErrorIcon.png + path + Pod/Assets/NotificationBackgroundErrorIcon.png + sourceTree + <group> + + E6D79834194E473DB6EB335E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beCloseTo.h + path + src/matchers/EXPMatchers+beCloseTo.h + sourceTree + <group> + + E713415269E14BF6833507CD + + fileRef + 89E03BD832EE47A0A4AB5F96 + isa + PBXBuildFile + + E7B59276937044A08CB4D90A + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-TSMessages-TSMessages.a + sourceTree + BUILT_PRODUCTS_DIR + + E7D4E80B3DE84CE8B5B433B2 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatcherHelpers.h + path + src/matchers/EXPMatcherHelpers.h + sourceTree + <group> + + E8AB8AE40BB145B2B661A50B + + includeInIndex + 1 + isa + PBXFileReference + name + NotificationBackgroundError.png + path + Pod/Assets/NotificationBackgroundError.png + sourceTree + <group> + + E8D1F6B158874027845F9872 + + fileRef + B72859772E504438AA235C3C + isa + PBXBuildFile + + E9C1E73D389E4FB3AEEC0886 + + fileRef + 8124478216984100BFAE5CC0 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc + + + E9EC725151D84C6E95FD543C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+respondTo.h + path + src/matchers/EXPMatchers+respondTo.h + sourceTree + <group> + + EAA4062CFF17497DAAE8BF11 + + buildConfigurations + + 9F4E60BE22A64471B13B4B7E + 9F3362B2A86249D38B97E091 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + EB94C9DF284C4358A08B05EB + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-TSMessages-TSMessages-Private.xcconfig + sourceTree + <group> + + EC1712587A084E409029AA53 + + children + + 84FBB215063C46348EC9025D + 8D23E099701C4BAB9631021B + 56FFF4E49C5640FB82684F0E + 0C2D9480A52440F593D0C25B + + isa + PBXGroup + name + Support Files + sourceTree + SOURCE_ROOT + + EC5C3E9C240246CA9D96DA94 + + fileRef + 5565E74D24D94DB498377A0E + isa + PBXBuildFile + + ED5B2AEF83954F66B7E0AE02 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+contain.h + path + src/matchers/EXPMatchers+contain.h + sourceTree + <group> + + EE93FDB080E9453F85231F86 + + fileRef + 37F42FCE8B6243BEA437F490 + isa + PBXBuildFile + + EF0AC59E73D443D69D4DF8AC + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + FBSnapshotTestController.m + sourceTree + <group> + + F03B64F7DBBD45E0B5C2A4F2 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + EXPMatchers+beFalsy.m + path + src/matchers/EXPMatchers+beFalsy.m + sourceTree + <group> + + F0E11C60FC324A569929746E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+beGreaterThanOrEqualTo.h + path + src/matchers/EXPMatchers+beGreaterThanOrEqualTo.h + sourceTree + <group> + + F178235A72FC45D2BC549667 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+equal.h + path + src/matchers/EXPMatchers+equal.h + sourceTree + <group> + + F1BB13E27C464192972564BC + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + EXPMatchers+haveCountOf.h + path + src/matchers/EXPMatchers+haveCountOf.h + sourceTree + <group> + + F2347E075B8345EDAB1B394B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-Tests-dummy.m + sourceTree + <group> + + F2375AD3C42940C8BA4ECD77 + + fileRef + 02E90FDB2DAA4FF4AEF24369 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + F2715EC142D54BB9B90B4A01 + + buildConfigurations + + 7A7BD51D8F4F4B60A6D64E52 + 0748FDACCC4C4D5E9708681B + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + F3190F09F9084BE886CB6F65 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-Tests-TSMessages-prefix.pch + sourceTree + <group> + + F465FBA3BAFD4914A16911A8 + + fileRef + 8CC49B5746E94B49A2A32120 + isa + PBXBuildFile + + F4DC68D67A4244E7A46B2776 + + buildActionMask + 2147483647 + files + + 4E9F336887474C2885702EE1 + 81595259B34A4D3EB0D47D03 + 3CA39AEBAEBE4B9FB09BF996 + E9C1E73D389E4FB3AEEC0886 + 5079938C5F684456B201BEA3 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + F656F00C7AEE467BBC1699EA + + fileRef + 3C9C82EC51804E46A2393EA1 + isa + PBXBuildFile + + F75F838BB5334761BA7FDABB + + fileRef + 6F3894D1F4FC48B6B52D8BE5 + isa + PBXBuildFile + + F85CD18086B749D2A4DAA486 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + SPTXCTestReporter.h + path + src/SPTXCTestReporter.h + sourceTree + <group> + + F874AEBABFC3491896D8E34A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-TSMessages-environment.h + sourceTree + <group> + + F8C542798EBE4D48A9FDA0B0 + + fileRef + 2A00CFDCBF5C4B18B35046BB + isa + PBXBuildFile + + F8D3AAFE616342C998C80E7B + + fileRef + 94F60A63EAD44D5C8AE10A87 + isa + PBXBuildFile + settings + + COMPILER_FLAGS + -fobjc-arc -DOS_OBJECT_USE_OBJC=0 + + + F9D4D6DD87574130A37C592B + + baseConfigurationReference + AFB3B4473B424A7C9045E433 + buildSettings + + ALWAYS_SEARCH_USER_PATHS + NO + COPY_PHASE_STRIP + NO + DSTROOT + /tmp/xcodeproj.dst + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PRECOMPILE_PREFIX_HEADER + YES + GCC_PREFIX_HEADER + Pods-Tests-Expecta+Snapshots-prefix.pch + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + GCC_VERSION + com.apple.compilers.llvm.clang.1_0 + INSTALL_PATH + $(BUILT_PRODUCTS_DIR) + IPHONEOS_DEPLOYMENT_TARGET + 7.1 + OTHER_LDFLAGS + + PRODUCT_NAME + $(TARGET_NAME) + PUBLIC_HEADERS_FOLDER_PATH + $(TARGET_NAME) + SDKROOT + iphoneos + SKIP_INSTALL + YES + + isa + XCBuildConfiguration + name + Debug + + FA3DA915F7BA442D9947EA75 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-Tests-FBSnapshotTestCase-prefix.pch + sourceTree + <group> + + FADB1D9FB44843378BDE03BA + + fileRef + A689DEB0B2584712A5490060 + isa + PBXBuildFile + + FAE9C3E8102140C3955D27F8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.plist.xml + path + Pods-TSMessages-acknowledgements.plist + sourceTree + <group> + + FAF33A1732F44D2C9222D584 + + fileRef + B0954012BB4F46A59034CFD5 + isa + PBXBuildFile + + FBD4D2B9772A48769D8C2196 + + buildActionMask + 2147483647 + files + + F75F838BB5334761BA7FDABB + BB6054B76A944F6AABF42D4C + A05B694F56664589BC4FE35A + D6C800B243794AFE9F08A71B + 8D05275099F84078914AC177 + 625F0999B7E24014822D7482 + 1461779C23E24EA094DA374D + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + FBE6729658F94D23A7C013CB + + containerPortal + BB4916A4330B4187889447A3 + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 3A5D84A3E36E4CFC95606826 + remoteInfo + Pods-Tests-FBSnapshotTestCase + + FC3896BBC18C4605A82975B4 + + fileRef + ABBA7E0C95FE41A2BBB16E52 + isa + PBXBuildFile + + FCFB14971C134873B2A123E9 + + fileRef + B72859772E504438AA235C3C + isa + PBXBuildFile + + FD4B8BE54DC24749B9B623D2 + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-Tests-HexColors.a + sourceTree + BUILT_PRODUCTS_DIR + + FDC16B2EA35744D283713157 + + children + + 855248B9376041818299FE5A + 7FD9C7126D8448F9A554E539 + 607F2500761D480182E0D4A3 + 4A36E728A481478CA3A7DA64 + 384A987F266442A195092ED5 + B5C7BF46634D4E36A25190DB + + isa + PBXGroup + sourceTree + <group> + + FDD313E8C7614C0AA32B32B8 + + fileRef + 5A5733CC88754B579F95C1F8 + isa + PBXBuildFile + + FE38FE741E4743B8AFD9B816 + + explicitFileType + archive.ar + includeInIndex + 0 + isa + PBXFileReference + path + libPods-Tests.a + sourceTree + BUILT_PRODUCTS_DIR + + + rootObject + BB4916A4330B4187889447A3 + + diff --git a/Example/Pods/Specta/LICENSE b/Example/Pods/Specta/LICENSE new file mode 100644 index 00000000..d136f6ad --- /dev/null +++ b/Example/Pods/Specta/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2012-2013 Specta Team. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/Example/Pods/Specta/README.md b/Example/Pods/Specta/README.md new file mode 100644 index 00000000..0c54ad81 --- /dev/null +++ b/Example/Pods/Specta/README.md @@ -0,0 +1,146 @@ +# Specta + +A light-weight TDD / BDD framework for Objective-C & Cocoa. + +### FEATURES + +* RSpec-like BDD DSL +* Super quick and easy to set up +* Runs on top of XCTest +* Excellent Xcode integration + +### SCREENSHOT + +![Specta Screenshot](http://github.com/petejkim/stuff/raw/master/images/specta-screenshot.png) + +### SETUP + +Use [CocoaPods](http://github.com/CocoaPods/CocoaPods) + +```ruby +target :MyApp do + # your app dependencies +end + +target :MyAppTests do + pod 'Specta', '~> 0.2.1' + # pod 'Expecta', '~> 0.2.3' # expecta matchers + # pod 'OCMock', '~> 2.2.1' # OCMock + # pod 'OCHamcrest', '~> 3.0.0' # hamcrest matchers + # pod 'OCMockito', '~> 1.0.0' # OCMock + # pod 'LRMocky', '~> 0.9.1' # LRMocky +end +``` + +or + +1. Clone from Github. +2. Run `rake` in project root to build. +3. Add a "Cocoa/Cocoa Touch Unit Testing Bundle" target if you don't already have one. +4. Copy and add all header files in `products` folder to the Test target in your Xcode project. +5. For **OS X projects**, copy and add `libSpecta-macosx.a` in `products` folder to the Test target in your Xcode project. + For **iOS projects**, copy and add `libSpecta-ios-universal.a` in `products` folder to the Test target in your Xcode project. +6. Add `-ObjC` and `-all_load` to the "Other Linker Flags" build setting for the Spec/Test target in your Xcode project. +7. Add the following to your test code. + +```objective-c +#import "Specta.h" +``` + +Standard XCTest matchers such as `XCTAssertEqualObjects` and `XCTAssertNil` work, but you probably want to add a nicer matcher framework - [Expecta](http://github.com/petejkim/expecta/) to your setup. Or if you really prefer, [OCHamcrest](https://github.com/jonreid/OCHamcrest) works fine too. Also, add a mocking framework: [OCMock](http://ocmock.org/). + +## WRITING SPECS + +```objective-c +#import "Specta.h" + +SharedExamplesBegin(MySharedExamples) +// Global shared examples are shared across all spec files. + +sharedExamplesFor(@"a shared behavior", ^(NSDictionary *data) { + it(@"should do some stuff", ^{ + id obj = data[@"key"]; + // ... + }); +}); + +SharedExamplesEnd + +SpecBegin(Thing) + +describe(@"Thing", ^{ + sharedExamplesFor(@"another shared behavior", ^(NSDictionary *data) { + // Locally defined shared examples can override global shared examples within its scope. + }); + + beforeAll(^{ + // This is run once and only once before all of the examples + // in this group and before any beforeEach blocks. + }); + + beforeEach(^{ + // This is run before each example. + }); + + it(@"should do stuff", ^{ + // This is an example block. Place your assertions here. + }); + + it(@"should do some stuff asynchronously", ^AsyncBlock { + // Async example blocks need to invoke done() callback. + done(); + }); + + itShouldBehaveLike(@"a shared behavior", @{@"key" : @"obj"}); + + itShouldBehaveLike(@"another shared behavior", ^{ + // Use a block that returns a dictionary if you need the context to be evaluated lazily, + // e.g. to use an object prepared in a beforeEach block. + return @{@"key" : @"obj"}; + }); + + describe(@"Nested examples", ^{ + it(@"should do even more stuff", ^{ + // ... + }); + }); + + pending(@"pending example"); + + pending(@"another pending example", ^{ + // ... + }); + + afterEach(^{ + // This is run after each example. + }); + + afterAll(^{ + // This is run once and only once after all of the examples + // in this group and after any afterEach blocks. + }); +}); + +SpecEnd +``` + +* `beforeEach` and `afterEach` are also aliased as `before` and `after` respectively. +* `describe` is also aliased as `context`. +* `it` is also aliased as `example` and `specify`. +* `itShouldBehaveLike` is also aliased as `itBehavesLike`. +* Use `pending` or prepend `x` to `describe`, `context`, `example`, `it`, and `specify` to mark examples or groups as pending. +* Use `^AsyncBlock` as shown in the example above to make examples wait for completion. `done()` callback needs to be invoked to let Specta know that your test is complete. The default timeout is 10.0 seconds but this can be changed by calling the function `setAsyncSpecTimeout(NSTimeInterval timeout)`. +* `(before|after)(Each/All)` also accept `^AsyncBlock`s. +* Do `#define SPT_CEDAR_SYNTAX` before importing Specta if you prefer to write `SPEC_BEGIN` and `SPEC_END` instead of `SpecBegin` and `SpecEnd`. +* Prepend `f` to your `describe`, `context`, `example`, `it`, and `specify` to set focus on examples or groups. When specs are focused, all unfocused specs are skipped. +* To use original XCTest reporter, set an environment variable named `SPECTA_REPORTER_CLASS` to `SPTXCTestReporter` in your test scheme. + +### CONTRIBUTION GUIDELINES + +* Please use only spaces and indent 2 spaces at a time. +* Please prefix instance variable names with a single underscore (`_`). +* Please prefix custom classes and functions defined in the global scope with `SPT`. + +## LICENSE + +Copyright (c) 2012-2013 [Specta Team](https://github.com/specta?tab=members). This software is licensed under the [MIT License](http://github.com/petejkim/specta/raw/master/LICENSE). \ No newline at end of file diff --git a/Example/Pods/Specta/src/SPTExample.h b/Example/Pods/Specta/src/SPTExample.h new file mode 100644 index 00000000..1173803e --- /dev/null +++ b/Example/Pods/Specta/src/SPTExample.h @@ -0,0 +1,14 @@ +#import +#import "SpectaTypes.h" + +@interface SPTExample : NSObject + +@property (nonatomic, copy) NSString *name; +@property (nonatomic, copy) id block; +@property (nonatomic) BOOL pending; +@property (nonatomic, getter = isFocused) BOOL focused; + +- (id)initWithName:(NSString *)name block:(id)block; + +@end + diff --git a/Example/Pods/Specta/src/SPTExample.m b/Example/Pods/Specta/src/SPTExample.m new file mode 100644 index 00000000..f2606ad6 --- /dev/null +++ b/Example/Pods/Specta/src/SPTExample.m @@ -0,0 +1,16 @@ +#import "SPTExample.h" + +@implementation SPTExample + +- (id)initWithName:(NSString *)name block:(id)block { + self = [super init]; + if (self) { + self.name = name; + self.block = block; + self.pending = block == nil; + } + return self; +} + +@end + diff --git a/Example/Pods/Specta/src/SPTExampleGroup.h b/Example/Pods/Specta/src/SPTExampleGroup.h new file mode 100644 index 00000000..c3539c53 --- /dev/null +++ b/Example/Pods/Specta/src/SPTExampleGroup.h @@ -0,0 +1,40 @@ +#import +#import +#import "SpectaTypes.h" + +@class + SPTExample +; + +@interface SPTExampleGroup : NSObject + +@property (nonatomic, copy) NSString *name; +@property (nonatomic, strong) SPTExampleGroup *root; +@property (nonatomic, strong) SPTExampleGroup *parent; +@property (nonatomic, strong) NSMutableArray *children; +@property (nonatomic, strong) NSMutableArray *beforeAllArray; +@property (nonatomic, strong) NSMutableArray *afterAllArray; +@property (nonatomic, strong) NSMutableArray *beforeEachArray; +@property (nonatomic, strong) NSMutableArray *afterEachArray; +@property (nonatomic, strong) NSMutableDictionary *sharedExamples; +@property (nonatomic) unsigned int exampleCount; +@property (nonatomic) unsigned int ranExampleCount; +@property (nonatomic, getter=isFocused) BOOL focused; + ++ (void)setAsyncSpecTimeout:(NSTimeInterval)timeout; +- (id)initWithName:(NSString *)name parent:(SPTExampleGroup *)parent root:(SPTExampleGroup *)root; + +- (SPTExampleGroup *)addExampleGroupWithName:(NSString *)name; +- (SPTExampleGroup *)addExampleGroupWithName:(NSString *)name focused:(BOOL)focused; + +- (SPTExample *)addExampleWithName:(NSString *)name block:(id)block; +- (SPTExample *)addExampleWithName:(NSString *)name block:(id)block focused:(BOOL)focused; + +- (void)addBeforeAllBlock:(SPTVoidBlock)block; +- (void)addAfterAllBlock:(SPTVoidBlock)block; +- (void)addBeforeEachBlock:(SPTVoidBlock)block; +- (void)addAfterEachBlock:(SPTVoidBlock)block; + +- (NSArray *)compileExamplesWithNameStack:(NSArray *)nameStack; + +@end diff --git a/Example/Pods/Specta/src/SPTExampleGroup.m b/Example/Pods/Specta/src/SPTExampleGroup.m new file mode 100644 index 00000000..a3a36d9a --- /dev/null +++ b/Example/Pods/Specta/src/SPTExampleGroup.m @@ -0,0 +1,326 @@ +#import "SPTExampleGroup.h" +#import "SPTExample.h" +#import "SPTXCTestCase.h" +#import "SPTSpec.h" +#import "SpectaUtility.h" +#import +#import + +static NSArray *ClassesWithClassMethod(SEL classMethodSelector) { + NSMutableArray *classesWithClassMethod = [[NSMutableArray alloc] init]; + + int numberOfClasses = objc_getClassList(NULL, 0); + if (numberOfClasses > 0) { + Class *classes = (Class *)malloc(sizeof(Class) *numberOfClasses); + numberOfClasses = objc_getClassList(classes, numberOfClasses); + + for(int classIndex = 0; classIndex < numberOfClasses; classIndex++) { + Class aClass = classes[classIndex]; + + if (strcmp("UIAccessibilitySafeCategory__NSObject", class_getName(aClass))) { + Method globalMethod = class_getClassMethod(aClass, classMethodSelector); + if (globalMethod) { + [classesWithClassMethod addObject:aClass]; + } + } + } + + free(classes); + } + + return classesWithClassMethod; +} + +@interface NSObject (SpectaGlobalBeforeAfterEach) + ++ (void)beforeEach; ++ (void)afterEach; + +@end + +static NSTimeInterval asyncSpecTimeout = 10.0; +static const char *asyncBlockSignature = NULL; + +static void runExampleBlock(id block, NSString *name) { + if (!SPTIsBlock(block)) { + return; + } + + const char *blockSignature = SPTGetBlockSignature(block); + + BOOL isAsyncBlock = strcmp(blockSignature, asyncBlockSignature) == 0; + + if (isAsyncBlock) { + __block uint32_t complete = 0; + ((SPTAsyncBlock)block)(^{ + OSAtomicOr32Barrier(1, &complete); + }); + NSTimeInterval timeout = asyncSpecTimeout; + NSDate *timeoutDate = [NSDate dateWithTimeIntervalSinceNow:timeout]; + while (!complete && [timeoutDate timeIntervalSinceNow] > 0) { + [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; + } + if (!complete) { + NSString *message = [NSString stringWithFormat:@"\"%@\" failed to invoke done() callback before timeout (%f seconds)", name, timeout]; + SPTXCTestCase *currentTestCase = SPTCurrentTestCase; + SPTSpec *spec = [[currentTestCase class] spt_spec]; + [currentTestCase recordFailureWithDescription:message inFile:spec.fileName atLine:spec.lineNumber expected:YES]; + } + } else { + ((SPTVoidBlock)block)(); + } +} + +@interface SPTExampleGroup () + +- (void)incrementExampleCount; +- (void)resetRanExampleCountIfNeeded; +- (void)incrementRanExampleCount; +- (void)runBeforeHooks:(NSString *)compiledName; +- (void)runAfterHooks:(NSString *)compiledName; + +@end + +@implementation SPTExampleGroup + ++ (void)initialize { + if (asyncBlockSignature == NULL) { + asyncBlockSignature = SPTGetBlockSignature(^(void (^done)(void)) {}); + } +} + +- (id)init { + self = [super init]; + if (self) { + self.name = nil; + self.root = nil; + self.parent = nil; + self.children = [NSMutableArray array]; + self.beforeAllArray = [NSMutableArray array]; + self.afterAllArray = [NSMutableArray array]; + self.beforeEachArray = [NSMutableArray array]; + self.afterEachArray = [NSMutableArray array]; + self.sharedExamples = [NSMutableDictionary dictionary]; + self.exampleCount = 0; + self.ranExampleCount = 0; + } + return self; +} + ++ (void)setAsyncSpecTimeout:(NSTimeInterval)timeout { + asyncSpecTimeout = timeout; +} + +- (id)initWithName:(NSString *)name parent:(SPTExampleGroup *)parent root:(SPTExampleGroup *)root { + self = [self init]; + if (self) { + self.name = name; + self.parent = parent; + self.root = root; + } + return self; +} + +- (SPTExampleGroup *)addExampleGroupWithName:(NSString *)name { + return [self addExampleGroupWithName:name + focused:NO]; +} + + +- (SPTExampleGroup *)addExampleGroupWithName:(NSString *)name focused:(BOOL)focused { + SPTExampleGroup *group = [[SPTExampleGroup alloc] initWithName:name parent:self root:self.root]; + group.focused = focused; + [self.children addObject:group]; + return group; +} + +- (SPTExample *)addExampleWithName:(NSString *)name block:(id)block { + return [self addExampleWithName:name + block:block + focused:NO]; +} + +- (SPTExample *)addExampleWithName:(NSString *)name block:(id)block focused:(BOOL)focused { + SPTExample *example; + @synchronized(self) { + example = [[SPTExample alloc] initWithName:name block:block]; + example.focused = focused; + [self.children addObject:example]; + [self incrementExampleCount]; + } + return example; +} + +- (void)incrementExampleCount { + SPTExampleGroup *group = self; + while (group != nil) { + group.exampleCount ++; + group = group.parent; + } +} + +- (void)resetRanExampleCountIfNeeded { + SPTExampleGroup *group = self; + while (group != nil) { + if (group.ranExampleCount >= group.exampleCount) { + group.ranExampleCount = 0; + } + group = group.parent; + } +} + +- (void)incrementRanExampleCount { + SPTExampleGroup *group = self; + while (group != nil) { + group.ranExampleCount ++; + group = group.parent; + } +} + +- (void)addBeforeAllBlock:(SPTVoidBlock)block { + if (!block) return; + [self.beforeAllArray addObject:[block copy]]; +} + +- (void)addAfterAllBlock:(SPTVoidBlock)block { + if (!block) return; + [self.afterAllArray addObject:[block copy]]; +} + +- (void)addBeforeEachBlock:(SPTVoidBlock)block { + if (!block) return; + [self.beforeEachArray addObject:[block copy]]; +} + +- (void)addAfterEachBlock:(SPTVoidBlock)block { + if (!block) return; + [self.afterEachArray addObject:[block copy]]; +} + +- (void)runGlobalBeforeEachHooks:(NSString *)compiledName { + static NSArray *globalBeforeEachClasses; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + globalBeforeEachClasses = ClassesWithClassMethod(@selector(beforeEach)); + }); + + for (Class class in globalBeforeEachClasses) { + [class beforeEach]; + } +} + +- (void)runGlobalAfterEachHooks:(NSString *)compiledName { + static NSArray *globalAfterEachClasses; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + globalAfterEachClasses = ClassesWithClassMethod(@selector(afterEach)); + }); + + for (Class class in globalAfterEachClasses) { + [class afterEach]; + } +} + +- (void)runBeforeHooks:(NSString *)compiledName { + NSMutableArray *groups = [NSMutableArray array]; + SPTExampleGroup *group = self; + while (group != nil) { + [groups insertObject:group atIndex:0]; + group = group.parent; + } + + // run beforeAll hooks + for(group in groups) { + if (group.ranExampleCount == 0) { + for(id beforeAllBlock in group.beforeAllArray) { + runExampleBlock(beforeAllBlock, [NSString stringWithFormat:@"%@ - before all block", compiledName]); + } + } + } + + // run beforeEach hooks + [self runGlobalBeforeEachHooks:compiledName]; + for(group in groups) { + for(id beforeEachBlock in group.beforeEachArray) { + runExampleBlock(beforeEachBlock, [NSString stringWithFormat:@"%@ - before each block", compiledName]); + } + } +} + +- (void)runAfterHooks:(NSString *)compiledName { + NSMutableArray *groups = [NSMutableArray array]; + SPTExampleGroup *group = self; + while (group != nil) { + [groups addObject:group]; + group = group.parent; + } + // run afterEach hooks + for(group in groups) { + for(id afterEachBlock in group.afterEachArray) { + runExampleBlock(afterEachBlock, [NSString stringWithFormat:@"%@ - after each block", compiledName]); + } + } + [self runGlobalAfterEachHooks:compiledName]; + + // run afterAll hooks + for(group in groups) { + if (group.ranExampleCount == group.exampleCount) { + for(id afterAllBlock in group.afterAllArray) { + runExampleBlock(afterAllBlock, [NSString stringWithFormat:@"%@ - after all block", compiledName]); + } + } + } +} + +- (BOOL)isFocusedOrHasFocusedAncestor { + SPTExampleGroup *ancestor = self; + while (ancestor != nil) { + if (ancestor.focused) { + return YES; + } else { + ancestor = ancestor.parent; + } + } + + return NO; +} + +- (NSArray *)compileExamplesWithNameStack:(NSArray *)nameStack { + BOOL groupIsFocusedOrHasFocusedAncestor = [self isFocusedOrHasFocusedAncestor]; + + NSArray *compiled = @[]; + for(id child in self.children) { + if ([child isKindOfClass:[SPTExampleGroup class]]) { + SPTExampleGroup *group = child; + NSArray *newNameStack = [nameStack arrayByAddingObject:group.name]; + compiled = [compiled arrayByAddingObjectsFromArray:[group compileExamplesWithNameStack:newNameStack]]; + } else if ([child isKindOfClass:[SPTExample class]]) { + SPTExample *example = child; + NSArray *newNameStack = [nameStack arrayByAddingObject:example.name]; + NSString *compiledName = [newNameStack componentsJoinedByString:@" "]; + + SPTVoidBlock compiledBlock = example.pending ? nil : ^{ + @synchronized(self.root) { + [self resetRanExampleCountIfNeeded]; + [self runBeforeHooks:compiledName]; + } + @try { + runExampleBlock(example.block, compiledName); + } + @finally { + @synchronized(self.root) { + [self incrementRanExampleCount]; + [self runAfterHooks:compiledName]; + } + } + }; + SPTExample *compiledExample = [[SPTExample alloc] initWithName:compiledName block:compiledBlock]; + compiledExample.pending = example.pending; + compiledExample.focused = (groupIsFocusedOrHasFocusedAncestor || example.focused); + compiled = [compiled arrayByAddingObject:compiledExample]; + } + } + return compiled; +} + +@end diff --git a/Example/Pods/Specta/src/SPTNestedReporter.h b/Example/Pods/Specta/src/SPTNestedReporter.h new file mode 100644 index 00000000..565c2462 --- /dev/null +++ b/Example/Pods/Specta/src/SPTNestedReporter.h @@ -0,0 +1,5 @@ +#import "SPTReporter.h" + +@interface SPTNestedReporter : SPTReporter + +@end diff --git a/Example/Pods/Specta/src/SPTNestedReporter.m b/Example/Pods/Specta/src/SPTNestedReporter.m new file mode 100644 index 00000000..c12ef27e --- /dev/null +++ b/Example/Pods/Specta/src/SPTNestedReporter.m @@ -0,0 +1,194 @@ +#import "SPTNestedReporter.h" +#import "XCTestRun+Specta.h" + +@interface SPTNestedReporter () + +@property (readwrite, assign, nonatomic) NSInteger nestingLevel; +@property (readwrite, assign, nonatomic) BOOL indentationEnabled; + +@end + +@implementation SPTNestedReporter + +#pragma mark - Printing + +- (NSString *)indentation { + // XCode does not strip whitespace from the beginning of lines that report an error. Indentation should only enabled for non-error text. + + if (self.indentationEnabled) { + return [@"" stringByPaddingToLength:(self.nestingLevel * 2) + withString:@" " + startingAtIndex:0]; + } else { + return @""; + } +} + +- (void)withIndentationEnabled:(void(^)(void))block { + [self withIndentationEnabled:YES block:block]; +} + +- (void)withIndentationEnabled:(BOOL)indentationEnabled block:(void(^)(void))block { + BOOL originalValue = self.indentationEnabled; + + self.indentationEnabled = indentationEnabled; + @try { + block(); + } @finally { + self.indentationEnabled = originalValue; + } +} + +- (void)printIndentation { + [self printString:self.indentation]; +} + +- (void)printTestSuiteHeader:(XCTestRun *)testRun { + [self printIndentation]; + [self printLineWithFormat:@"= %@", testRun.test.name]; +} + +- (void)printTestSuiteFooter:(XCTestRun *)testRun { + [self printIndentation]; + [self printLine]; + + if (self.nestingLevel == 0) { + [self printConciseSummaryOfTestRun:testRun]; + } +} + +- (void)printConciseSummaryOfTestRun:(XCTestRun *)testRun { + NSUInteger numberOfTests = testRun.testCaseCount; + NSUInteger numberOfFailures = testRun.totalFailureCount; + NSUInteger numberOfExceptions = testRun.unexpectedExceptionCount; + NSUInteger numberOfSkippedTests = testRun.spt_skippedTestCaseCount; + NSUInteger numberOfPendingTests = testRun.spt_pendingTestCaseCount; + + NSString * runInfo = [[self class] conciseRunInfoWithNumberOfTests:numberOfTests + numberOfSkippedTests:numberOfSkippedTests + numberOfFailures:numberOfFailures + numberOfExceptions:numberOfExceptions + numberOfPendingTests:numberOfPendingTests]; + + [self printIndentation]; + [self printLine:runInfo]; +} + +- (void)printTestCaseHeader:(XCTestRun *)testRun { + [self printIndentation]; + [self printLineWithFormat:@"%@", testRun.test.name]; +} + +- (void)printTestCaseFooter:(XCTestRun *)testRun { + [self printIndentation]; + [self printLine]; +} + ++ (NSString *)pluralizeString:(NSString *)singularString + pluralString:(NSString *)pluralString + count:(NSInteger)count { + return (count == 1 || count == -1) ? singularString : pluralString; +} + ++ (NSString *)conciseRunInfoWithNumberOfTests:(NSUInteger)numberOfTests + numberOfSkippedTests:(NSUInteger)numberOfSkippedTests + numberOfFailures:(NSUInteger)numberOfFailures + numberOfExceptions:(NSUInteger)numberOfExceptions + numberOfPendingTests:(NSUInteger)numberOfPendingTests { + NSString * testLabel = [[self class] pluralizeString:@"test" + pluralString:@"tests" + count:numberOfTests]; + + NSString * failureLabel = [[self class] pluralizeString:@"failure" + pluralString:@"failures" + count:numberOfFailures]; + + NSString * exceptionLabel = [[self class] pluralizeString:@"exception" + pluralString:@"exceptions" + count:numberOfExceptions]; + + return [NSString stringWithFormat:@"%lu %@; %lu skipped; %lu %@; %lu %@; %lu pending", + (unsigned long)numberOfTests, + testLabel, + (unsigned long)numberOfSkippedTests, + (unsigned long)numberOfFailures, + failureLabel, + (unsigned long)numberOfExceptions, + exceptionLabel, + (unsigned long)numberOfPendingTests]; +} + +#pragma mark - XCTestObserver + +- (void)startObserving { + [super startObserving]; + + self.nestingLevel = 0; +} + +- (void)testSuiteDidStart:(XCTestRun *)testRun { + [self withIndentationEnabled:^{ + + [self printTestSuiteHeader:testRun]; + self.nestingLevel ++; + + [super testSuiteDidStart:testRun]; + [self printLine]; + + }]; +} + +- (void)testSuiteDidStop:(XCTestRun *)testRun { + [self withIndentationEnabled:^{ + + [super testSuiteDidStop:testRun]; + + self.nestingLevel --; + [self printTestSuiteFooter:testRun]; + + }]; +} + +- (void)testCaseDidStart:(XCTestRun *)testRun { + [self withIndentationEnabled:^{ + + [self printTestCaseHeader:testRun]; + self.nestingLevel ++; + + [super testCaseDidStart:testRun]; + + }]; +} + +- (void)testCaseDidStop:(XCTestRun *)testRun { + [self withIndentationEnabled:^{ + + [super testCaseDidStop:testRun]; + + self.nestingLevel --; + [self printTestCaseFooter:testRun]; + + }]; +} + +- (void)testLogWithFormat:(NSString *)format arguments:(va_list)arguments { + NSString * indentation = self.indentation; + + NSMutableString * indentedFormat = [[NSMutableString alloc] initWithString:format]; + [indentedFormat insertString:indentation atIndex:0]; + + NSRange replacementRange = NSMakeRange(0, [indentedFormat length]); + if ([indentedFormat hasSuffix:@"\n"]) { + replacementRange.length -= [@"\n" length]; + } + + [indentedFormat replaceOccurrencesOfString:@"\n" + withString:[@"\n" stringByAppendingString:indentation] + options:0 + range:replacementRange]; + + [super testLogWithFormat:indentedFormat + arguments:arguments]; +} + +@end diff --git a/Example/Pods/Specta/src/SPTReporter.h b/Example/Pods/Specta/src/SPTReporter.h new file mode 100644 index 00000000..ed34cace --- /dev/null +++ b/Example/Pods/Specta/src/SPTReporter.h @@ -0,0 +1,33 @@ +#import + +@interface SPTReporter : XCTestLog + +/* + * Returns a singleton reporter used to generate Specta's test output. + * The type of reporter can be customized by subclassing and setting the + * SPECTA_REPORTER_CLASS environment variable. + * + * Subclasses may override methods from XCTestObserver to change test output. + * Initialization shuld be performed in the -startObserving / -stopObserving methods, + * and MUST invoke the super class implementation. + */ ++ (instancetype)sharedReporter; + +#pragma mark - Run Stack + +@property (nonatomic, strong, readonly) NSArray *runStack; +@property (nonatomic, assign, readonly) NSUInteger runStackCount; + +@property (nonatomic, assign, readonly) NSInteger numberOfTestCases; +@property (nonatomic, assign, readonly) NSInteger numberOfCompletedTestCases; + +#pragma mark - Printing + +- (void)printString:(NSString *)string; +- (void)printStringWithFormat:(NSString *)formatString, ... NS_FORMAT_FUNCTION(1,2); + +- (void)printLine; +- (void)printLine:(NSString *)line; +- (void)printLineWithFormat:(NSString *)formatString, ... NS_FORMAT_FUNCTION(1,2); + +@end diff --git a/Example/Pods/Specta/src/SPTReporter.m b/Example/Pods/Specta/src/SPTReporter.m new file mode 100644 index 00000000..570665a3 --- /dev/null +++ b/Example/Pods/Specta/src/SPTReporter.m @@ -0,0 +1,134 @@ +#import "SPTReporter.h" +#import "SPTNestedReporter.h" +#import "XCTestLog+Specta.h" + +@interface SPTReporter () + +@property (nonatomic, strong, readwrite) NSArray *runStack; +@property (nonatomic, assign, readwrite) NSInteger numberOfCompletedTestCases; + +@end + +@implementation SPTReporter + ++ (instancetype)sharedReporter { + static SPTReporter * sharedReporter; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedReporter = [self loadSharedReporter]; + }); + + return sharedReporter; +} + ++ (SPTReporter *)loadSharedReporter { + NSString * customReporterClassName = [[NSProcessInfo processInfo] environment][@"SPECTA_REPORTER_CLASS"]; + if (customReporterClassName != nil) { + Class customReporterClass = NSClassFromString(customReporterClassName); + if (customReporterClass != nil) { + return [[customReporterClass alloc] init]; + } + } + + return [[SPTNestedReporter alloc] init]; +} + +#pragma mark - Run Stack + +- (NSUInteger)runStackCount { + return self.runStack.count; +} + +- (void)pushRunStack:(XCTestRun *)run { + [(NSMutableArray *)self.runStack addObject:run]; +} + +- (void)popRunStack:(XCTestRun *)run { + NSAssert(run != nil, @"Attempt to pop nil test run"); + + NSAssert([self.runStack lastObject] == run, + @"Attempt to pop test run (%@) out of order: %@", + run, + self.runStack); + + [(NSMutableArray *)self.runStack removeLastObject]; +} + +- (NSInteger)numberOfTestCases { + XCTestRun * rootRun = self.runStack.firstObject; + if (rootRun) { + return rootRun.testCaseCount; + } else { + return 0; + } +} + +#pragma mark - Printing + +- (void)printString:(NSString *)string { + [[self logFileHandle] writeData:[string dataUsingEncoding:NSUTF8StringEncoding]]; +} + +- (void)printStringWithFormat:(NSString *)formatString, ... { + va_list args; + va_start(args, formatString); + NSString * formattedString = [[NSString alloc] initWithFormat:formatString arguments:args]; + va_end(args); + + [self printString:formattedString]; +} + +- (void)printLine { + [self printString:@"\n"]; +} + +- (void)printLine:(NSString *)line { + [self printStringWithFormat:@"%@\n", line]; +} + +- (void)printLineWithFormat:(NSString *)formatString, ... { + va_list args; + va_start(args, formatString); + NSString * formattedString = [[NSString alloc] initWithFormat:formatString arguments:args]; + va_end(args); + + [self printLine:formattedString]; +} + +#pragma mark - XCTestObserver + +- (void)startObserving { + [super startObserving]; + + self.runStack = [[NSMutableArray alloc] init]; +} + +- (void)stopObserving { + [super stopObserving]; + + self.runStack = nil; +} + +- (void)testSuiteDidStart:(XCTestRun *)testRun { + [super testSuiteDidStart:testRun]; + [self pushRunStack:testRun]; +} + +- (void)testSuiteDidStop:(XCTestRun *)testRun { + [super testSuiteDidStop:testRun]; + [self popRunStack:testRun]; +} + +- (void)testCaseDidStart:(XCTestRun *)testRun { + [super testCaseDidStart:testRun]; + [self pushRunStack:testRun]; +} + +- (void)testCaseDidStop:(XCTestRun *)testRun { + [super testCaseDidStop:testRun]; + [self popRunStack:testRun]; + + self.numberOfCompletedTestCases++; +} + +@end \ No newline at end of file diff --git a/Example/Pods/Specta/src/SPTSharedExampleGroups.h b/Example/Pods/Specta/src/SPTSharedExampleGroups.h new file mode 100644 index 00000000..fdd54399 --- /dev/null +++ b/Example/Pods/Specta/src/SPTSharedExampleGroups.h @@ -0,0 +1,17 @@ +#import +#import "SpectaTypes.h" + +@class + SPTExampleGroup +; + +@interface SPTSharedExampleGroups : NSObject + ++ (void)addSharedExampleGroupWithName:(NSString *)name block:(SPTDictionaryBlock)block exampleGroup:(SPTExampleGroup *)exampleGroup; ++ (SPTDictionaryBlock)sharedExampleGroupWithName:(NSString *)name exampleGroup:(SPTExampleGroup *)exampleGroup; ++ (void)defineSharedExampleGroups; + ++ (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filename atLine:(NSUInteger)lineNumber expected:(BOOL)expected; + +@end + diff --git a/Example/Pods/Specta/src/SPTSharedExampleGroups.m b/Example/Pods/Specta/src/SPTSharedExampleGroups.m new file mode 100644 index 00000000..bfbfd33f --- /dev/null +++ b/Example/Pods/Specta/src/SPTSharedExampleGroups.m @@ -0,0 +1,62 @@ +#import "SPTSharedExampleGroups.h" +#import "SPTExampleGroup.h" +#import "SPTXCTestCase.h" +#import "SpectaUtility.h" +#import + +NSMutableDictionary *globalSharedExampleGroups = nil; +BOOL initialized = NO; + +@implementation SPTSharedExampleGroups + ++ (void)initialize { + Class SPTSharedExampleGroupsClass = [SPTSharedExampleGroups class]; + if ([self class] == SPTSharedExampleGroupsClass) { + if (!initialized) { + initialized = YES; + globalSharedExampleGroups = [[NSMutableDictionary alloc] init]; + + Class *classes = NULL; + int numClasses = objc_getClassList(NULL, 0); + + if (numClasses > 0) { + classes = (Class *)malloc(sizeof(Class) * numClasses); + numClasses = objc_getClassList(classes, numClasses); + + Class klass, superClass; + for(uint i = 0; i < numClasses; i++) { + klass = classes[i]; + superClass = class_getSuperclass(klass); + if (superClass == SPTSharedExampleGroupsClass) { + [klass defineSharedExampleGroups]; + } + } + + free(classes); + } + } + } +} + ++ (void)addSharedExampleGroupWithName:(NSString *)name block:(SPTDictionaryBlock)block exampleGroup:(SPTExampleGroup *)exampleGroup { + (exampleGroup == nil ? globalSharedExampleGroups : exampleGroup.sharedExamples)[name] = [block copy]; +} + ++ (SPTDictionaryBlock)sharedExampleGroupWithName:(NSString *)name exampleGroup:(SPTExampleGroup *)exampleGroup { + SPTDictionaryBlock sharedExampleGroup = nil; + while (exampleGroup != nil) { + if ((sharedExampleGroup = exampleGroup.sharedExamples[name])) { + return sharedExampleGroup; + } + exampleGroup = exampleGroup.parent; + } + return globalSharedExampleGroups[name]; +} + ++ (void)defineSharedExampleGroups {} + ++ (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filename atLine:(NSUInteger)lineNumber expected:(BOOL)expected { + [SPTCurrentTestCase recordFailureWithDescription:description inFile:filename atLine:lineNumber expected:expected]; +} + +@end diff --git a/Example/Pods/Specta/src/SPTSpec.h b/Example/Pods/Specta/src/SPTSpec.h new file mode 100644 index 00000000..5a3f8e9a --- /dev/null +++ b/Example/Pods/Specta/src/SPTSpec.h @@ -0,0 +1,21 @@ +#import + +@class + SPTExample +, SPTExampleGroup +; + +@interface SPTSpec : NSObject + +@property (nonatomic, strong) SPTExampleGroup *rootGroup; +@property (nonatomic, strong) NSMutableArray *groupStack; +@property (nonatomic, strong) NSArray *compiledExamples; +@property (nonatomic, strong) NSString *fileName; +@property (nonatomic) NSUInteger lineNumber; +@property (nonatomic, getter = isDisabled) BOOL disabled; +@property (nonatomic) BOOL hasFocusedExamples; + +- (SPTExampleGroup *)currentGroup; +- (void)compile; + +@end diff --git a/Example/Pods/Specta/src/SPTSpec.m b/Example/Pods/Specta/src/SPTSpec.m new file mode 100644 index 00000000..fb6507e2 --- /dev/null +++ b/Example/Pods/Specta/src/SPTSpec.m @@ -0,0 +1,31 @@ +#import "SPTSpec.h" +#import "SPTExampleGroup.h" +#import "SPTExample.h" + +@implementation SPTSpec + +- (id)init { + self = [super init]; + if (self) { + self.rootGroup = [[SPTExampleGroup alloc] init]; + self.rootGroup.root = self.rootGroup; + self.groupStack = [NSMutableArray arrayWithObject:self.rootGroup]; + } + return self; +} + +- (SPTExampleGroup *)currentGroup { + return [self.groupStack lastObject]; +} + +- (void)compile { + self.compiledExamples = [self.rootGroup compileExamplesWithNameStack:@[]]; + for (SPTExample *example in self.compiledExamples) { + if (example.focused) { + self.hasFocusedExamples = YES; + break; + } + } +} + +@end diff --git a/Example/Pods/Specta/src/SPTXCTestCase.h b/Example/Pods/Specta/src/SPTXCTestCase.h new file mode 100644 index 00000000..16d6a6ea --- /dev/null +++ b/Example/Pods/Specta/src/SPTXCTestCase.h @@ -0,0 +1,27 @@ +#import +#import "XCTestCase+Specta.h" + +@class + SPTSpec +, SPTExample +; + +@interface SPTXCTestCase : XCTestCase + +@property (nonatomic, strong) NSInvocation *spt_invocation; +@property (nonatomic, strong) XCTestCaseRun *spt_run; +@property (nonatomic, assign) BOOL spt_skipped; +@property (nonatomic, assign, readonly, getter = spt_isPending) BOOL spt_pending; + ++ (BOOL)spt_isDisabled; ++ (void)spt_setDisabled:(BOOL)disabled; ++ (BOOL)spt_focusedExamplesExist; + ++ (SPTSpec *)spt_spec; +- (void)spt_setCurrentSpecWithFileName:(const char *)fileName lineNumber:(NSUInteger)lineNumber; +- (void)spt_defineSpec; +- (void)spt_unsetCurrentSpec; +- (void)spt_runExampleAtIndex:(NSUInteger)index; +- (SPTExample *)spt_getCurrentExample; + +@end diff --git a/Example/Pods/Specta/src/SPTXCTestCase.m b/Example/Pods/Specta/src/SPTXCTestCase.m new file mode 100644 index 00000000..172fcf15 --- /dev/null +++ b/Example/Pods/Specta/src/SPTXCTestCase.m @@ -0,0 +1,151 @@ +#import "SPTXCTestCase.h" +#import "SPTSpec.h" +#import "SPTExample.h" +#import "SPTSharedExampleGroups.h" +#import "SpectaUtility.h" +#import + +@implementation SPTXCTestCase + ++ (void)initialize { + [SPTSharedExampleGroups initialize]; + SPTSpec *spec = [[SPTSpec alloc] init]; + SPTXCTestCase *testCase = [[[self class] alloc] init]; + objc_setAssociatedObject(self, "spt_spec", spec, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + [testCase spt_defineSpec]; + [spec compile]; + [super initialize]; +} + ++ (SPTSpec *)spt_spec { + return objc_getAssociatedObject(self, "spt_spec"); +} + ++ (BOOL)spt_isDisabled { + return [self spt_spec].disabled; +} + ++ (void)spt_setDisabled:(BOOL)disabled { + [self spt_spec].disabled = disabled; +} + +- (BOOL)spt_isPending { + SPTExample *example = [self spt_getCurrentExample]; + return example == nil || example.pending; +} + ++ (NSArray *)spt_allSpecClasses { + static NSArray *allSpecClasses = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + + NSMutableArray *specClasses = [[NSMutableArray alloc] init]; + + int numberOfClasses = objc_getClassList(NULL, 0); + if (numberOfClasses > 0) { + Class *classes = (Class *)malloc(sizeof(Class) * numberOfClasses); + numberOfClasses = objc_getClassList(classes, numberOfClasses); + + for (int classIndex = 0; classIndex < numberOfClasses; classIndex++) { + Class aClass = classes[classIndex]; + if (SPTIsSpecClass(aClass)) { + [specClasses addObject:aClass]; + } + } + + free(classes); + } + + allSpecClasses = [specClasses copy]; + }); + + return allSpecClasses; +} + ++ (BOOL)spt_focusedExamplesExist { + for (Class specClass in [self spt_allSpecClasses]) { + SPTSpec *spec = [specClass spt_spec]; + if (spec.disabled == NO && [spec hasFocusedExamples]) { + return YES; + } + } + + return NO; +} + +- (void)spt_setCurrentSpecWithFileName:(const char *)fileName lineNumber:(NSUInteger)lineNumber { + SPTSpec *spec = [[self class] spt_spec]; + spec.fileName = @(fileName); + spec.lineNumber = lineNumber; + [[NSThread currentThread] threadDictionary][SPTCurrentSpecKey] = spec; +} + +- (void)spt_defineSpec {} + +- (void)spt_unsetCurrentSpec { + [[[NSThread currentThread] threadDictionary] removeObjectForKey:SPTCurrentSpecKey]; +} + +- (void)spt_runExampleAtIndex:(NSUInteger)index { + [[NSThread currentThread] threadDictionary][SPTCurrentTestCaseKey] = self; + SPTExample *compiledExample = ([[self class] spt_spec].compiledExamples)[index]; + if (!compiledExample.pending) { + if ([[self class] spt_isDisabled] == NO && + (compiledExample.focused || [[self class] spt_focusedExamplesExist] == NO)) { + ((SPTVoidBlock)compiledExample.block)(); + } else { + self.spt_skipped = YES; + } + } + + [[[NSThread currentThread] threadDictionary] removeObjectForKey:SPTCurrentTestCaseKey]; +} + +- (SPTExample *)spt_getCurrentExample { + if (!self.spt_invocation) { + return nil; + } + NSUInteger i; + [self.spt_invocation getArgument:&i atIndex:2]; + return ([[self class] spt_spec].compiledExamples)[i]; +} + +#pragma mark - XCTestCase overrides + ++ (NSArray *)testInvocations { + NSMutableArray *invocations = [NSMutableArray array]; + for(NSUInteger i = 0; i < [[self spt_spec].compiledExamples count]; i ++) { + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self instanceMethodSignatureForSelector:@selector(spt_runExampleAtIndex:)]]; + NSUInteger j = i; + [invocation setSelector:@selector(spt_runExampleAtIndex:)]; + [invocation setArgument:&j atIndex:2]; + [invocations addObject:invocation]; + } + return invocations; +} + +- (void)setInvocation:(NSInvocation *)invocation { + self.spt_invocation = invocation; + [super setInvocation:invocation]; +} + +- (NSString *)name { + NSString *specName = NSStringFromClass([self class]); + SPTExample *compiledExample = [self spt_getCurrentExample]; + NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"]; + NSString *exampleName = [[compiledExample.name componentsSeparatedByCharactersInSet:[charSet invertedSet]] componentsJoinedByString:@"_"]; + return [NSString stringWithFormat:@"-[%@ %@]", specName, exampleName]; +} + +- (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filename atLine:(NSUInteger)lineNumber expected:(BOOL)expected { + SPTXCTestCase *currentTestCase = SPTCurrentTestCase; + [currentTestCase.spt_run recordFailureInTest:currentTestCase withDescription:description inFile:filename atLine:lineNumber expected:expected]; +} + +- (void)performTest:(XCTestRun *)run { + self.spt_run = (XCTestCaseRun *)run; + [super performTest:run]; + self.spt_run = nil; +} + +@end diff --git a/Example/Pods/Specta/src/SPTXCTestReporter.h b/Example/Pods/Specta/src/SPTXCTestReporter.h new file mode 100644 index 00000000..516a6670 --- /dev/null +++ b/Example/Pods/Specta/src/SPTXCTestReporter.h @@ -0,0 +1,9 @@ +#import "SPTReporter.h" + +/** + * Reporter that produces output identical to XCode's default output. Useful when integrating with 3rd-party tools that + * may not like SPTNestedReporter's indented output. + */ +@interface SPTXCTestReporter : SPTReporter + +@end diff --git a/Example/Pods/Specta/src/SPTXCTestReporter.m b/Example/Pods/Specta/src/SPTXCTestReporter.m new file mode 100644 index 00000000..12bb616b --- /dev/null +++ b/Example/Pods/Specta/src/SPTXCTestReporter.m @@ -0,0 +1,11 @@ +#import "SPTXCTestReporter.h" + +@implementation SPTXCTestReporter + +/* + * Intentionally left blank. + * This class is included for future-compatibility just in case we need to + * weak reporter output for users who want test output idential to XCTestLog. + */ + +@end diff --git a/Example/Pods/Specta/src/Specta.h b/Example/Pods/Specta/src/Specta.h new file mode 100644 index 00000000..e2a5271f --- /dev/null +++ b/Example/Pods/Specta/src/Specta.h @@ -0,0 +1,70 @@ +#import +#import +#import "SpectaSupport.h" +#import "SPTXCTestCase.h" +#import "SPTSpec.h" +#import "SPTExampleGroup.h" +#import "SPTSharedExampleGroups.h" + +@interface Specta : NSObject +@end + +#define SpecBegin(name) _SPTSpecBegin(name, __FILE__, __LINE__) +#define SpecEnd _SPTSpecEnd + +#define SharedExamplesBegin(name) _SPTSharedExampleGroupsBegin(name) +#define SharedExamplesEnd _SPTSharedExampleGroupsEnd +#define SharedExampleGroupsBegin(name) _SPTSharedExampleGroupsBegin(name) +#define SharedExampleGroupsEnd _SPTSharedExampleGroupsEnd + +#ifdef SPT_CEDAR_SYNTAX +# define SPEC_BEGIN(name) SpecBegin(name) +# define SPEC_END SpecEnd +# define SHARED_EXAMPLE_GROUPS_BEGIN(name) SharedExamplesBegin(name) +# define SHARED_EXAMPLE_GROUPS_END SharedExamplesEnd +# ifndef PENDING +# define PENDING nil +# endif +#endif + +void SPTdescribe(NSString *name, BOOL focused, void (^block)()); +void describe(NSString *name, void (^block)()); +void fdescribe(NSString *name, void (^block)()); +void context(NSString *name, void (^block)()); +void fcontext(NSString *name, void (^block)()); + +void SPTexample(NSString *name, BOOL focused, id block); +void example(NSString *name, id block); +void fexample(NSString *name, id block); +void it(NSString *name, id block); +void fit(NSString *name, id block); +void specify(NSString *name, id block); +void fspecify(NSString *name, id block); + + +void SPTpending(NSString *name, ...); +#define xdescribe(...) SPTpending(__VA_ARGS__, nil) +#define xcontext(...) SPTpending(__VA_ARGS__, nil) +#define xexample(...) SPTpending(__VA_ARGS__, nil) +#define xit(...) SPTpending(__VA_ARGS__, nil) +#define xspecify(...) SPTpending(__VA_ARGS__, nil) +#define pending(...) SPTpending(__VA_ARGS__, nil) + +void beforeAll(id block); +void afterAll(id block); +void beforeEach(id block); +void afterEach(id block); +void before(id block); +void after(id block); + +void sharedExamplesFor(NSString *name, void (^block)(NSDictionary *data)); +void sharedExamples(NSString *name, void (^block)(NSDictionary *data)); + +void SPTitShouldBehaveLike(const char *fileName, NSUInteger lineNumber, NSString *name, id dictionaryOrBlock); +void itShouldBehaveLike(NSString *name, id dictionaryOrBlockOrNil); // aid code completion +void itBehavesLike(NSString *name, id dictionaryOrBlockOrNil); +#define itShouldBehaveLike(...) SPTitShouldBehaveLike(__FILE__, __LINE__, __VA_ARGS__) +#define itBehavesLike(...) SPTitShouldBehaveLike(__FILE__, __LINE__, __VA_ARGS__) + +void setAsyncSpecTimeout(NSTimeInterval timeout); +#define AsyncBlock (void (^done)(void)) diff --git a/Example/Pods/Specta/src/Specta.m b/Example/Pods/Specta/src/Specta.m new file mode 100644 index 00000000..a2ed5c99 --- /dev/null +++ b/Example/Pods/Specta/src/Specta.m @@ -0,0 +1,144 @@ +#import "Specta.h" +#import "SpectaTypes.h" +#import "SpectaUtility.h" + +@implementation Specta +@end + +void SPTdescribe(NSString *name, BOOL focused, void (^block)()) { + if (block) { + [SPTGroupStack addObject:[SPTCurrentGroup addExampleGroupWithName:name focused:focused]]; + block(); + [SPTGroupStack removeLastObject]; + } else { + SPTexample(name, focused, nil); + } +} + +void describe(NSString *name, void (^block)()) { + SPTdescribe(name, NO, block); +} + +void fdescribe(NSString *name, void (^block)()) { + SPTdescribe(name, YES, block); +} + +void context(NSString *name, void (^block)()) { + SPTdescribe(name, NO, block); +} +void fcontext(NSString *name, void (^block)()) { + SPTdescribe(name, YES, block); +} + +void SPTexample(NSString *name, BOOL focused, id block) { + SPTReturnUnlessBlockOrNil(block); + [SPTCurrentGroup addExampleWithName:name block:block focused:focused]; +} + +void example(NSString *name, id block) { + SPTexample(name, NO, block); +} + +void fexample(NSString *name, id block) { + SPTexample(name, YES, block); +} + +void it(NSString *name, id block) { + SPTexample(name, NO, block); +} + +void fit(NSString *name, id block) { + SPTexample(name, YES, block); +} + +void specify(NSString *name, id block) { + SPTexample(name, NO, block); +} + +void fspecify(NSString *name, id block) { + SPTexample(name, YES, block); +} + +void SPTpending(NSString *name, ...) { + SPTexample(name, NO, nil); +} + +void beforeAll(id block) { + SPTReturnUnlessBlockOrNil(block); + [SPTCurrentGroup addBeforeAllBlock:block]; +} + +void afterAll(id block) { + SPTReturnUnlessBlockOrNil(block); + [SPTCurrentGroup addAfterAllBlock:block]; +} + +void beforeEach(id block) { + SPTReturnUnlessBlockOrNil(block); + [SPTCurrentGroup addBeforeEachBlock:block]; +} + +void afterEach(id block) { + SPTReturnUnlessBlockOrNil(block); + [SPTCurrentGroup addAfterEachBlock:block]; +} + +void before(id block) { + beforeEach(block); +} + +void after(id block) { + afterEach(block); +} + +void sharedExamplesFor(NSString *name, void (^block)(NSDictionary *data)) { + [SPTSharedExampleGroups addSharedExampleGroupWithName:name block:block exampleGroup:SPTCurrentGroup]; +} + +void sharedExamples(NSString *name, void (^block)(NSDictionary *data)) { + sharedExamplesFor(name, block); +} + +void SPTitShouldBehaveLike(const char *fileName, NSUInteger lineNumber, NSString *name, id dictionaryOrBlock) { + SPTDictionaryBlock block = [SPTSharedExampleGroups sharedExampleGroupWithName:name exampleGroup:SPTCurrentGroup]; + if (block) { + if (SPTIsBlock(dictionaryOrBlock)) { + id (^dataBlock)(void) = [dictionaryOrBlock copy]; + + describe(name, ^{ + __block NSMutableDictionary *dataDict = [[NSMutableDictionary alloc] init]; + + beforeEach(^{ + NSDictionary *blockData = dataBlock(); + [dataDict removeAllObjects]; + [dataDict addEntriesFromDictionary:blockData]; + }); + + block(dataDict); + + afterAll(^{ + dataDict = nil; + }); + }); + } else { + NSDictionary *data = dictionaryOrBlock; + + describe(name, ^{ + block(data); + }); + } + } else { + SPTXCTestCase *currentTestCase = SPTCurrentTestCase; + if (currentTestCase) { + [currentTestCase recordFailureWithDescription:@"itShouldBehaveLike should not be invoked inside an example block!" inFile:@(fileName) atLine:lineNumber expected:NO]; + } else { + it(name, ^{ + [currentTestCase recordFailureWithDescription:[NSString stringWithFormat:@"Shared example group \"%@\" does not exist.", name] inFile:@(fileName) atLine:lineNumber expected:NO]; + }); + } + } +} + +void setAsyncSpecTimeout(NSTimeInterval timeout) { + [SPTExampleGroup setAsyncSpecTimeout:timeout]; +} \ No newline at end of file diff --git a/Example/Pods/Specta/src/SpectaSupport.h b/Example/Pods/Specta/src/SpectaSupport.h new file mode 100644 index 00000000..5b557328 --- /dev/null +++ b/Example/Pods/Specta/src/SpectaSupport.h @@ -0,0 +1,46 @@ +#ifndef SPT_SUBCLASS +#define SPT_SUBCLASS SPTXCTestCase +#endif + + + +#define _SPTSpecBegin(name, file, line) \ +@interface name##Spec : SPT_SUBCLASS \ +@end \ +@implementation name##Spec \ +- (void)spt_defineSpec { \ + const char *specFileName = file; \ + @try { \ + [self spt_setCurrentSpecWithFileName:(file) lineNumber:(line)]; + +#define _SPTSpecEnd \ + [self spt_unsetCurrentSpec]; \ + } @catch(NSException *exception) { \ + fprintf(stderr, "%s: An exception has occured outside of tests, aborting.\n\n%s (%s) \n", specFileName, [[exception name] UTF8String], [[exception reason] UTF8String]); \ + if ([exception respondsToSelector:@selector(callStackSymbols)]) { \ + NSArray *callStackSymbols = [exception callStackSymbols]; \ + if (callStackSymbols) { \ + NSString *callStack = [NSString stringWithFormat:@"\n Call Stack:\n %@\n", [callStackSymbols componentsJoinedByString:@"\n "]]; \ + fprintf(stderr, "%s", [callStack UTF8String]); \ + } \ + } \ + exit(1); \ + } \ +} \ +@end + +#define _SPTSharedExampleGroupsBegin(name) \ +@interface name##SharedExampleGroups : SPTSharedExampleGroups \ +@end \ +@implementation name##SharedExampleGroups \ ++ (void)defineSharedExampleGroups { + +#define _SPTSharedExampleGroupsEnd \ +} \ +@end + +#undef _XCTRegisterFailure +#define _XCTRegisterFailure(condition, format...) \ +({ \ +_XCTFailureHandler((id)self, YES, __FILE__, __LINE__, condition, @"" format); \ +}) \ No newline at end of file diff --git a/Example/Pods/Specta/src/SpectaTypes.h b/Example/Pods/Specta/src/SpectaTypes.h new file mode 100644 index 00000000..24eb4c3d --- /dev/null +++ b/Example/Pods/Specta/src/SpectaTypes.h @@ -0,0 +1,3 @@ +typedef void (^SPTVoidBlock)(); +typedef void (^SPTAsyncBlock)(void (^)()); +typedef void (^SPTDictionaryBlock)(NSDictionary *dictionary); diff --git a/Example/Pods/Specta/src/SpectaUtility.h b/Example/Pods/Specta/src/SpectaUtility.h new file mode 100644 index 00000000..f34c1d5f --- /dev/null +++ b/Example/Pods/Specta/src/SpectaUtility.h @@ -0,0 +1,14 @@ +#import +extern NSString * const SPTCurrentSpecKey; +extern NSString * const SPTCurrentTestCaseKey; + +#define SPTCurrentSpec [[NSThread currentThread] threadDictionary][SPTCurrentSpecKey] +#define SPTCurrentTestCase [[NSThread currentThread] threadDictionary][SPTCurrentTestCaseKey] +#define SPTCurrentGroup [SPTCurrentSpec currentGroup] +#define SPTGroupStack [SPTCurrentSpec groupStack] + +#define SPTReturnUnlessBlockOrNil(block) if ((block) && !SPTIsBlock((block))) return; +#define SPTIsBlock(obj) [(obj) isKindOfClass:NSClassFromString(@"NSBlock")] + +const char *SPTGetBlockSignature(id blockObject); +BOOL SPTIsSpecClass(Class aClass); \ No newline at end of file diff --git a/Example/Pods/Specta/src/SpectaUtility.m b/Example/Pods/Specta/src/SpectaUtility.m new file mode 100644 index 00000000..221e223b --- /dev/null +++ b/Example/Pods/Specta/src/SpectaUtility.m @@ -0,0 +1,65 @@ +#import "SpectaUtility.h" +#import "SPTXCTestCase.h" +#import + +NSString * const SPTCurrentSpecKey = @"SPTCurrentSpec"; +NSString * const SPTCurrentTestCaseKey = @"SPTCurrentTestCase"; + +// http://clang.llvm.org/docs/Block-ABI-Apple.html +struct SPTBlockLiteral { + void *isa; // initialized to &_NSConcreteStackBlock or &_NSConcreteGlobalBlock + int flags; + int reserved; + void (*invoke)(void *, ...); + struct Block_descriptor_1 { + unsigned long int reserved; // NULL + unsigned long int size; // sizeof(struct Block_literal_1) + // optional helper functions + void (*copy_helper)(void *dst, void *src); // IFF (1<<25) + void (*dispose_helper)(void *src); // IFF (1<<25) + // required ABI.2010.3.16 + const char *signature; // IFF (1<<30) + } *descriptor; + // imported variables +}; + +enum { + SPT_BLOCK_HAS_COPY_DISPOSE = (1 << 25), + SPT_BLOCK_HAS_CTOR = (1 << 26), // helpers have C++ code + SPT_BLOCK_IS_GLOBAL = (1 << 28), + SPT_BLOCK_HAS_STRET = (1 << 29), // IFF BLOCK_HAS_SIGNATURE + SPT_BLOCK_HAS_SIGNATURE = (1 << 30), +}; + +const char *SPTGetBlockSignature(id blockObject) { + struct SPTBlockLiteral *block = (__bridge struct SPTBlockLiteral *)blockObject; + + int flags = block->flags; + + if (flags & SPT_BLOCK_HAS_SIGNATURE) { + void *signaturePtr = block->descriptor; + signaturePtr += sizeof(unsigned long int); // skip reserved + signaturePtr += sizeof(unsigned long int); // skip size + + if (flags & SPT_BLOCK_HAS_COPY_DISPOSE) { + signaturePtr += sizeof(void(*)(void *dst, void *src)); // skip copy_helper + signaturePtr += sizeof(void(*)(void *src)); // skip dispose_helper + } + + return *(const char **)signaturePtr; + } + + return NULL; +} + +BOOL SPTIsSpecClass(Class aClass) { + Class superclass = class_getSuperclass(aClass); + while (superclass != Nil) { + if (superclass == [SPTXCTestCase class]) { + return YES; + } else { + superclass = class_getSuperclass(superclass); + } + } + return NO; +} \ No newline at end of file diff --git a/Example/Pods/Specta/src/XCTestCase+Specta.h b/Example/Pods/Specta/src/XCTestCase+Specta.h new file mode 100644 index 00000000..da3a56c0 --- /dev/null +++ b/Example/Pods/Specta/src/XCTestCase+Specta.h @@ -0,0 +1,4 @@ +#import + +@interface XCTestCase (Specta) +@end \ No newline at end of file diff --git a/Example/Pods/Specta/src/XCTestCase+Specta.m b/Example/Pods/Specta/src/XCTestCase+Specta.m new file mode 100644 index 00000000..0c69b412 --- /dev/null +++ b/Example/Pods/Specta/src/XCTestCase+Specta.m @@ -0,0 +1,26 @@ +#import "XCTestCase+Specta.h" +#import "SPTXCTestCase.h" +#import "SPTExample.h" +#import + +@interface XCTestCase (xct_allSubclasses) + +- (NSArray *)xct_allSubclasses; + +@end + +@implementation XCTestCase (Specta) + ++ (void)load { + Method xct_allSubclasses = class_getClassMethod(self, @selector(xct_allSubclasses)); + Method xct_allSubclasses_swizzle = class_getClassMethod(self, @selector(xct_allSubclasses_swizzle)); + method_exchangeImplementations(xct_allSubclasses, xct_allSubclasses_swizzle); +} + ++ (NSArray *)xct_allSubclasses_swizzle { + NSMutableArray *subclasses = [[self xct_allSubclasses_swizzle] mutableCopy]; // call original + [subclasses removeObject:[SPTXCTestCase class]]; + return subclasses; +} + +@end \ No newline at end of file diff --git a/Example/Pods/Specta/src/XCTestLog+Specta.h b/Example/Pods/Specta/src/XCTestLog+Specta.h new file mode 100644 index 00000000..f21d1607 --- /dev/null +++ b/Example/Pods/Specta/src/XCTestLog+Specta.h @@ -0,0 +1,7 @@ +#import + +@interface XCTestLog (Specta) + +- (void)spt_pauseObservationInBlock:(void (^)(void))block; + +@end diff --git a/Example/Pods/Specta/src/XCTestLog+Specta.m b/Example/Pods/Specta/src/XCTestLog+Specta.m new file mode 100644 index 00000000..ba42e4d2 --- /dev/null +++ b/Example/Pods/Specta/src/XCTestLog+Specta.m @@ -0,0 +1,49 @@ +#import "XCTestLog+Specta.h" +#import "SPTReporter.h" +#import + +static void spt_swizzleInstanceMethod(Class class, SEL originalSelector, SEL swizzledSelector) { + Method originalMethod = class_getInstanceMethod(class, originalSelector); + Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); + + method_exchangeImplementations(originalMethod, swizzledMethod); +} + +@implementation XCTestLog (Specta) + ++ (void)load { + spt_swizzleInstanceMethod(self, @selector(startObserving), @selector(XCTestLog_startObserving)); + spt_swizzleInstanceMethod(self, @selector(stopObserving), @selector(XCTestLog_stopObserving)); +} + +- (BOOL)spt_shouldProxyToSPTReporter { + // Instances of XCTestLog (but not subclasses) simply forward to -[SPTReporter sharedReporter] + return [self isMemberOfClass:[XCTestLog class]]; +} + +- (void)spt_pauseObservationInBlock:(void (^)(void))block { + [self XCTestLog_stopObserving]; + block(); + [self XCTestLog_startObserving]; +} + +#pragma mark - XCTestObserver + +- (void)XCTestLog_startObserving { + if ([self spt_shouldProxyToSPTReporter]) { + [[SPTReporter sharedReporter] startObserving]; + } else { + [self XCTestLog_startObserving]; + } +} + +- (void)XCTestLog_stopObserving { + if ([self spt_shouldProxyToSPTReporter]) { + [[SPTReporter sharedReporter] stopObserving]; + } else { + [self XCTestLog_stopObserving]; + usleep(100000); + } +} + +@end diff --git a/Example/Pods/Specta/src/XCTestRun+Specta.h b/Example/Pods/Specta/src/XCTestRun+Specta.h new file mode 100644 index 00000000..12d33e63 --- /dev/null +++ b/Example/Pods/Specta/src/XCTestRun+Specta.h @@ -0,0 +1,8 @@ +#import + +@interface XCTestRun (Specta) + +- (NSUInteger)spt_pendingTestCaseCount; +- (NSUInteger)spt_skippedTestCaseCount; + +@end diff --git a/Example/Pods/Specta/src/XCTestRun+Specta.m b/Example/Pods/Specta/src/XCTestRun+Specta.m new file mode 100644 index 00000000..da7f9156 --- /dev/null +++ b/Example/Pods/Specta/src/XCTestRun+Specta.m @@ -0,0 +1,44 @@ +#import "XCTestRun+Specta.h" +#import "SPTXCTestCase.h" + +@implementation XCTestRun (Specta) + +#pragma mark - Pending Test Cases + +- (NSUInteger)spt_pendingTestCaseCount { + NSUInteger pendingTestCaseCount = 0; + + if ([self isKindOfClass:[XCTestSuiteRun class]]) { + for (XCTestRun * testRun in [(XCTestSuiteRun *)self testRuns]) { + pendingTestCaseCount += [testRun spt_pendingTestCaseCount]; + } + } else if ([[self test] isKindOfClass:[SPTXCTestCase class]]) { + SPTXCTestCase * testCase = (SPTXCTestCase *)[self test]; + if (testCase != nil && [testCase spt_isPending]) { + pendingTestCaseCount++; + } + } + + return pendingTestCaseCount; +} + +#pragma mark - Skipped Test Cases + +- (NSUInteger)spt_skippedTestCaseCount { + NSUInteger skippedTestCaseCount = 0; + + if ([self isKindOfClass:[XCTestSuiteRun class]]) { + for (XCTestRun * testRun in [(XCTestSuiteRun *)self testRuns]) { + skippedTestCaseCount += [testRun spt_skippedTestCaseCount]; + } + } else if ([[self test] isKindOfClass:[SPTXCTestCase class]]) { + SPTXCTestCase * testCase = (SPTXCTestCase *)[self test]; + if (testCase.spt_skipped) { + skippedTestCaseCount++; + } + } + + return skippedTestCaseCount; +} + +@end \ No newline at end of file diff --git a/Example/TSMessages.xcodeproj/project.pbxproj b/Example/TSMessages.xcodeproj/project.pbxproj new file mode 100644 index 00000000..61f24edd --- /dev/null +++ b/Example/TSMessages.xcodeproj/project.pbxproj @@ -0,0 +1,581 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1687DD9DDD3F49028DE52098 /* libPods-Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D24C674F90784EC4AFFD8541 /* libPods-Tests.a */; }; + 2673C7B7BE2142E78B40DEE7 /* libPods-TSMessages.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DA65AE9564E43409150BC5E /* libPods-TSMessages.a */; }; + 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; + 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; }; + 6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; + 6003F598195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F596195388D20070C39A /* InfoPlist.strings */; }; + 6003F59A195388D20070C39A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F599195388D20070C39A /* main.m */; }; + 6003F59E195388D20070C39A /* TSAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F59D195388D20070C39A /* TSAppDelegate.m */; }; + 6003F5A1195388D20070C39A /* Main_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6003F59F195388D20070C39A /* Main_iPhone.storyboard */; }; + 6003F5A7195388D20070C39A /* TSViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5A6195388D20070C39A /* TSViewController.m */; }; + 6003F5A9195388D20070C39A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5A8195388D20070C39A /* Images.xcassets */; }; + 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F5AF195388D20070C39A /* XCTest.framework */; }; + 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; }; + 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; + 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5B8195388D20070C39A /* InfoPlist.strings */; }; + 6003F5BC195388D20070C39A /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5BB195388D20070C39A /* Tests.m */; }; + CACA6CED19AB263400824626 /* TSDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CACA6CEC19AB263400824626 /* TSDemoViewController.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 6003F5B3195388D20070C39A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6003F582195388D10070C39A /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6003F589195388D20070C39A; + remoteInfo = TSMessages; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 054A4F4795F343E891DF62E0 /* Pods-Tests.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Tests.xcconfig"; path = "Pods/Pods-Tests.xcconfig"; sourceTree = ""; }; + 3DA65AE9564E43409150BC5E /* libPods-TSMessages.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TSMessages.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 488446804C534949B8191823 /* Pods-TSMessages.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TSMessages.xcconfig"; path = "Pods/Pods-TSMessages.xcconfig"; sourceTree = ""; }; + 4C10E90825C54E85A5FD6274 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; + 6003F58A195388D20070C39A /* TSMessages.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TSMessages.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 6003F58D195388D20070C39A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 6003F58F195388D20070C39A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 6003F591195388D20070C39A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 6003F595195388D20070C39A /* TSMessages-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TSMessages-Info.plist"; sourceTree = ""; }; + 6003F597195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 6003F599195388D20070C39A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 6003F59B195388D20070C39A /* TSMessages-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TSMessages-Prefix.pch"; sourceTree = ""; }; + 6003F59C195388D20070C39A /* TSAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TSAppDelegate.h; sourceTree = ""; }; + 6003F59D195388D20070C39A /* TSAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TSAppDelegate.m; sourceTree = ""; }; + 6003F5A0195388D20070C39A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main_iPhone.storyboard; sourceTree = ""; }; + 6003F5A5195388D20070C39A /* TSViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TSViewController.h; sourceTree = ""; }; + 6003F5A6195388D20070C39A /* TSViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TSViewController.m; sourceTree = ""; }; + 6003F5A8195388D20070C39A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 6003F5AE195388D20070C39A /* Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 6003F5AF195388D20070C39A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 6003F5B7195388D20070C39A /* Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tests-Info.plist"; sourceTree = ""; }; + 6003F5B9195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 6003F5BB195388D20070C39A /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = ""; }; + 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Prefix.pch"; sourceTree = ""; }; + 60FDB524217248DC8C80BCC7 /* TSMessages.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = TSMessages.podspec; path = ../TSMessages.podspec; sourceTree = ""; }; + CACA6CEB19AB263400824626 /* TSDemoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TSDemoViewController.h; sourceTree = ""; }; + CACA6CEC19AB263400824626 /* TSDemoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSDemoViewController.m; sourceTree = ""; }; + D24C674F90784EC4AFFD8541 /* libPods-Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + FECCD72F1B4F493A82447BE0 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 6003F587195388D20070C39A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */, + 6003F592195388D20070C39A /* UIKit.framework in Frameworks */, + 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */, + 2673C7B7BE2142E78B40DEE7 /* libPods-TSMessages.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6003F5AB195388D20070C39A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */, + 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */, + 6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */, + 1687DD9DDD3F49028DE52098 /* libPods-Tests.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 6003F581195388D10070C39A = { + isa = PBXGroup; + children = ( + 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */, + 6003F593195388D20070C39A /* TSMessages */, + 6003F5B5195388D20070C39A /* Tests */, + 6003F58C195388D20070C39A /* Frameworks */, + 6003F58B195388D20070C39A /* Products */, + 488446804C534949B8191823 /* Pods-TSMessages.xcconfig */, + 054A4F4795F343E891DF62E0 /* Pods-Tests.xcconfig */, + ); + sourceTree = ""; + }; + 6003F58B195388D20070C39A /* Products */ = { + isa = PBXGroup; + children = ( + 6003F58A195388D20070C39A /* TSMessages.app */, + 6003F5AE195388D20070C39A /* Tests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 6003F58C195388D20070C39A /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6003F58D195388D20070C39A /* Foundation.framework */, + 6003F58F195388D20070C39A /* CoreGraphics.framework */, + 6003F591195388D20070C39A /* UIKit.framework */, + 6003F5AF195388D20070C39A /* XCTest.framework */, + 3DA65AE9564E43409150BC5E /* libPods-TSMessages.a */, + D24C674F90784EC4AFFD8541 /* libPods-Tests.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 6003F593195388D20070C39A /* TSMessages */ = { + isa = PBXGroup; + children = ( + CACA6CEB19AB263400824626 /* TSDemoViewController.h */, + CACA6CEC19AB263400824626 /* TSDemoViewController.m */, + 6003F59C195388D20070C39A /* TSAppDelegate.h */, + 6003F59D195388D20070C39A /* TSAppDelegate.m */, + 6003F59F195388D20070C39A /* Main_iPhone.storyboard */, + 6003F5A5195388D20070C39A /* TSViewController.h */, + 6003F5A6195388D20070C39A /* TSViewController.m */, + 6003F5A8195388D20070C39A /* Images.xcassets */, + 6003F594195388D20070C39A /* Supporting Files */, + ); + path = TSMessages; + sourceTree = ""; + }; + 6003F594195388D20070C39A /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 6003F595195388D20070C39A /* TSMessages-Info.plist */, + 6003F596195388D20070C39A /* InfoPlist.strings */, + 6003F599195388D20070C39A /* main.m */, + 6003F59B195388D20070C39A /* TSMessages-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 6003F5B5195388D20070C39A /* Tests */ = { + isa = PBXGroup; + children = ( + 6003F5BB195388D20070C39A /* Tests.m */, + 6003F5B6195388D20070C39A /* Supporting Files */, + ); + path = Tests; + sourceTree = ""; + }; + 6003F5B6195388D20070C39A /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 6003F5B7195388D20070C39A /* Tests-Info.plist */, + 6003F5B8195388D20070C39A /* InfoPlist.strings */, + 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */ = { + isa = PBXGroup; + children = ( + 60FDB524217248DC8C80BCC7 /* TSMessages.podspec */, + FECCD72F1B4F493A82447BE0 /* README.md */, + 4C10E90825C54E85A5FD6274 /* LICENSE */, + ); + name = "Podspec Metadata"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 6003F589195388D20070C39A /* TSMessages */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "TSMessages" */; + buildPhases = ( + 573E6F60FE3A47EF8559C1CC /* Check Pods Manifest.lock */, + 6003F586195388D20070C39A /* Sources */, + 6003F587195388D20070C39A /* Frameworks */, + 6003F588195388D20070C39A /* Resources */, + 98597394645B47438D90BF4D /* Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = TSMessages; + productName = TSMessages; + productReference = 6003F58A195388D20070C39A /* TSMessages.app */; + productType = "com.apple.product-type.application"; + }; + 6003F5AD195388D20070C39A /* Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "Tests" */; + buildPhases = ( + F2B8A9A88DC94069A87B0DD6 /* Check Pods Manifest.lock */, + 6003F5AA195388D20070C39A /* Sources */, + 6003F5AB195388D20070C39A /* Frameworks */, + 6003F5AC195388D20070C39A /* Resources */, + 051FD73A49EB413390345334 /* Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + 6003F5B4195388D20070C39A /* PBXTargetDependency */, + ); + name = Tests; + productName = TSMessagesTests; + productReference = 6003F5AE195388D20070C39A /* Tests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6003F582195388D10070C39A /* Project object */ = { + isa = PBXProject; + attributes = { + CLASSPREFIX = TS; + LastUpgradeCheck = 0510; + ORGANIZATIONNAME = "Felix Krause"; + TargetAttributes = { + 6003F5AD195388D20070C39A = { + TestTargetID = 6003F589195388D20070C39A; + }; + }; + }; + buildConfigurationList = 6003F585195388D10070C39A /* Build configuration list for PBXProject "TSMessages" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 6003F581195388D10070C39A; + productRefGroup = 6003F58B195388D20070C39A /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 6003F589195388D20070C39A /* TSMessages */, + 6003F5AD195388D20070C39A /* Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 6003F588195388D20070C39A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6003F5A9195388D20070C39A /* Images.xcassets in Resources */, + 6003F5A1195388D20070C39A /* Main_iPhone.storyboard in Resources */, + 6003F598195388D20070C39A /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6003F5AC195388D20070C39A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 051FD73A49EB413390345334 /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Pods-Tests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 573E6F60FE3A47EF8559C1CC /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; + 98597394645B47438D90BF4D /* Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Pods-TSMessages-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + F2B8A9A88DC94069A87B0DD6 /* Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 6003F586195388D20070C39A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CACA6CED19AB263400824626 /* TSDemoViewController.m in Sources */, + 6003F59E195388D20070C39A /* TSAppDelegate.m in Sources */, + 6003F5A7195388D20070C39A /* TSViewController.m in Sources */, + 6003F59A195388D20070C39A /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6003F5AA195388D20070C39A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6003F5BC195388D20070C39A /* Tests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 6003F5B4195388D20070C39A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 6003F589195388D20070C39A /* TSMessages */; + targetProxy = 6003F5B3195388D20070C39A /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 6003F596195388D20070C39A /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 6003F597195388D20070C39A /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 6003F59F195388D20070C39A /* Main_iPhone.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 6003F5A0195388D20070C39A /* Base */, + ); + name = Main_iPhone.storyboard; + sourceTree = ""; + }; + 6003F5B8195388D20070C39A /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 6003F5B9195388D20070C39A /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 6003F5BD195388D20070C39A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 6003F5BE195388D20070C39A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.1; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 6003F5C0195388D20070C39A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 488446804C534949B8191823 /* Pods-TSMessages.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "TSMessages/TSMessages-Prefix.pch"; + INFOPLIST_FILE = "TSMessages/TSMessages-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 6003F5C1195388D20070C39A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 488446804C534949B8191823 /* Pods-TSMessages.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "TSMessages/TSMessages-Prefix.pch"; + INFOPLIST_FILE = "TSMessages/TSMessages-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + 6003F5C3195388D20070C39A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 054A4F4795F343E891DF62E0 /* Pods-Tests.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/TSMessages.app/TSMessages"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "Tests/Tests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = xctest; + }; + name = Debug; + }; + 6003F5C4195388D20070C39A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 054A4F4795F343E891DF62E0 /* Pods-Tests.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/TSMessages.app/TSMessages"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tests/Tests-Prefix.pch"; + INFOPLIST_FILE = "Tests/Tests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = xctest; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 6003F585195388D10070C39A /* Build configuration list for PBXProject "TSMessages" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6003F5BD195388D20070C39A /* Debug */, + 6003F5BE195388D20070C39A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget "TSMessages" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6003F5C0195388D20070C39A /* Debug */, + 6003F5C1195388D20070C39A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget "Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6003F5C3195388D20070C39A /* Debug */, + 6003F5C4195388D20070C39A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6003F582195388D10070C39A /* Project object */; +} diff --git a/ExampleProject/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/TSMessages.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 70% rename from ExampleProject/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Example/TSMessages.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 6d2a51bb..3dec952c 100644 --- a/ExampleProject/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Example/TSMessages.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:TSMessages.xcodeproj"> diff --git a/ExampleProject/Example.xcodeproj/xcuserdata/felixkrause.xcuserdatad/xcschemes/Example.xcscheme b/Example/TSMessages.xcodeproj/xcshareddata/xcschemes/TSMessages.xcscheme similarity index 63% rename from ExampleProject/Example.xcodeproj/xcuserdata/felixkrause.xcuserdatad/xcschemes/Example.xcscheme rename to Example/TSMessages.xcodeproj/xcshareddata/xcschemes/TSMessages.xcscheme index ed1af009..2e64b0fe 100644 --- a/ExampleProject/Example.xcodeproj/xcuserdata/felixkrause.xcuserdatad/xcschemes/Example.xcscheme +++ b/Example/TSMessages.xcodeproj/xcshareddata/xcschemes/TSMessages.xcscheme @@ -1,6 +1,6 @@ + BlueprintIdentifier = "6003F589195388D20070C39A" + BuildableName = "TSMessages.app" + BlueprintName = "TSMessages" + ReferencedContainer = "container:TSMessages.xcodeproj"> @@ -28,14 +28,24 @@ shouldUseLaunchSchemeArgsEnv = "YES" buildConfiguration = "Debug"> + + + + + BlueprintIdentifier = "6003F589195388D20070C39A" + BuildableName = "TSMessages.app" + BlueprintName = "TSMessages" + ReferencedContainer = "container:TSMessages.xcodeproj"> @@ -51,10 +61,10 @@ + BlueprintIdentifier = "6003F589195388D20070C39A" + BuildableName = "TSMessages.app" + BlueprintName = "TSMessages" + ReferencedContainer = "container:TSMessages.xcodeproj"> @@ -69,10 +79,10 @@ + BlueprintIdentifier = "6003F589195388D20070C39A" + BuildableName = "TSMessages.app" + BlueprintName = "TSMessages" + ReferencedContainer = "container:TSMessages.xcodeproj"> diff --git a/Example/TSMessages.xcworkspace/contents.xcworkspacedata b/Example/TSMessages.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..3bfc8de6 --- /dev/null +++ b/Example/TSMessages.xcworkspace/contents.xcworkspacedata @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ExampleProject/Example/en.lproj/MainStoryboard.storyboard b/Example/TSMessages/Base.lproj/Main_iPhone.storyboard old mode 100644 new mode 100755 similarity index 100% rename from ExampleProject/Example/en.lproj/MainStoryboard.storyboard rename to Example/TSMessages/Base.lproj/Main_iPhone.storyboard diff --git a/Example/TSMessages/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/TSMessages/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..f697f61f --- /dev/null +++ b/Example/TSMessages/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,53 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/Example/TSMessages/Images.xcassets/LaunchImage.launchimage/Contents.json b/Example/TSMessages/Images.xcassets/LaunchImage.launchimage/Contents.json new file mode 100644 index 00000000..4458b40c --- /dev/null +++ b/Example/TSMessages/Images.xcassets/LaunchImage.launchimage/Contents.json @@ -0,0 +1,51 @@ +{ + "images" : [ + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "subtype" : "retina4", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ExampleProject/Example/TSAppDelegate.h b/Example/TSMessages/TSAppDelegate.h old mode 100644 new mode 100755 similarity index 100% rename from ExampleProject/Example/TSAppDelegate.h rename to Example/TSMessages/TSAppDelegate.h diff --git a/ExampleProject/Example/TSAppDelegate.m b/Example/TSMessages/TSAppDelegate.m old mode 100644 new mode 100755 similarity index 100% rename from ExampleProject/Example/TSAppDelegate.m rename to Example/TSMessages/TSAppDelegate.m diff --git a/ExampleProject/Example/TSDemoViewController.h b/Example/TSMessages/TSDemoViewController.h old mode 100644 new mode 100755 similarity index 100% rename from ExampleProject/Example/TSDemoViewController.h rename to Example/TSMessages/TSDemoViewController.h diff --git a/ExampleProject/Example/TSDemoViewController.m b/Example/TSMessages/TSDemoViewController.m old mode 100644 new mode 100755 similarity index 100% rename from ExampleProject/Example/TSDemoViewController.m rename to Example/TSMessages/TSDemoViewController.m diff --git a/ExampleProject/Example/Example-Info.plist b/Example/TSMessages/TSMessages-Info.plist similarity index 78% rename from ExampleProject/Example/Example-Info.plist rename to Example/TSMessages/TSMessages-Info.plist index a0e0b8d2..b72f0597 100644 --- a/ExampleProject/Example/Example-Info.plist +++ b/Example/TSMessages/TSMessages-Info.plist @@ -9,7 +9,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier - com.toursprung.${PRODUCT_NAME:rfc1034identifier} + org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier} CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -25,30 +25,25 @@ LSRequiresIPhoneOS UIMainStoryboardFile - MainStoryboard + Main_iPhone + UIMainStoryboardFile~ipad + Main_iPad UIRequiredDeviceCapabilities armv7 - UIStatusBarTintParameters - - UINavigationBar - - Style - UIBarStyleDefault - Translucent - - - UISupportedInterfaceOrientations UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight diff --git a/ExampleProject/Example/Example-Prefix.pch b/Example/TSMessages/TSMessages-Prefix.pch similarity index 66% rename from ExampleProject/Example/Example-Prefix.pch rename to Example/TSMessages/TSMessages-Prefix.pch index 546949be..82a2bb45 100644 --- a/ExampleProject/Example/Example-Prefix.pch +++ b/Example/TSMessages/TSMessages-Prefix.pch @@ -1,5 +1,7 @@ // -// Prefix header for all source files of the 'Example' target in the 'Example' project +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. // #import diff --git a/Example/TSMessages/TSViewController.h b/Example/TSMessages/TSViewController.h new file mode 100644 index 00000000..bedf734a --- /dev/null +++ b/Example/TSMessages/TSViewController.h @@ -0,0 +1,13 @@ +// +// TSViewController.h +// TSMessages +// +// Created by Felix Krause on 08/25/2014. +// Copyright (c) 2014 Felix Krause. All rights reserved. +// + +#import + +@interface TSViewController : UIViewController + +@end diff --git a/Example/TSMessages/TSViewController.m b/Example/TSMessages/TSViewController.m new file mode 100644 index 00000000..3f75408a --- /dev/null +++ b/Example/TSMessages/TSViewController.m @@ -0,0 +1,29 @@ +// +// TSViewController.m +// TSMessages +// +// Created by Felix Krause on 08/25/2014. +// Copyright (c) 2014 Felix Krause. All rights reserved. +// + +#import "TSViewController.h" + +@interface TSViewController () + +@end + +@implementation TSViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git a/ExampleProject/Example/en.lproj/InfoPlist.strings b/Example/TSMessages/en.lproj/InfoPlist.strings similarity index 100% rename from ExampleProject/Example/en.lproj/InfoPlist.strings rename to Example/TSMessages/en.lproj/InfoPlist.strings diff --git a/ExampleProject/Example/main.m b/Example/TSMessages/main.m similarity index 57% rename from ExampleProject/Example/main.m rename to Example/TSMessages/main.m index b5701288..be0c3a52 100644 --- a/ExampleProject/Example/main.m +++ b/Example/TSMessages/main.m @@ -1,16 +1,16 @@ // // main.m -// Example +// TSMessages // -// Created by Felix Krause on 13.04.13. -// Copyright (c) 2013 Felix Krause. All rights reserved. +// Created by Felix Krause on 08/25/2014. +// Copyright (c) 2014 Felix Krause. All rights reserved. // #import #import "TSAppDelegate.h" -int main(int argc, char *argv[]) +int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([TSAppDelegate class])); diff --git a/Example/Tests/ReferenceImages/InitialSpecsSpec/TSMessageViewErrorDefault@2x.png b/Example/Tests/ReferenceImages/InitialSpecsSpec/TSMessageViewErrorDefault@2x.png new file mode 100644 index 00000000..0e5d4b5d Binary files /dev/null and b/Example/Tests/ReferenceImages/InitialSpecsSpec/TSMessageViewErrorDefault@2x.png differ diff --git a/Example/Tests/Tests-Info.plist b/Example/Tests/Tests-Info.plist new file mode 100644 index 00000000..41520eda --- /dev/null +++ b/Example/Tests/Tests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Example/Tests/Tests-Prefix.pch b/Example/Tests/Tests-Prefix.pch new file mode 100644 index 00000000..c149089a --- /dev/null +++ b/Example/Tests/Tests-Prefix.pch @@ -0,0 +1,15 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every test case source file. +// + +#ifdef __OBJC__ + + #define EXP_SHORTHAND + #import + #import + #import + #import + +#endif diff --git a/Example/Tests/Tests.m b/Example/Tests/Tests.m new file mode 100644 index 00000000..8ed6d109 --- /dev/null +++ b/Example/Tests/Tests.m @@ -0,0 +1,28 @@ +// +// TSMessagesTests.m +// TSMessagesTests +// +// Created by Felix Krause on 08/25/2014. +// Copyright (c) 2014 Felix Krause. All rights reserved. +// + +#import "TSMessage.h" +#import "TSMessageView.h" + +SpecBegin(InitialSpecs) + +describe(@"Show a new TSMessage notification", ^{ + before(^{ + [UIView setAnimationsEnabled:NO]; + [TSMessage dismissActiveNotification]; + }); + + it(@"matches view (error message)", ^{ + [TSMessage showNotificationWithTitle:@"Error" type:TSMessageNotificationTypeError]; + TSMessageView *view = [[TSMessage queuedMessages] lastObject]; + + expect(view).to.haveValidSnapshotNamed(@"TSMessageViewErrorDefault"); + }); +}); + +SpecEnd diff --git a/Example/Tests/en.lproj/InfoPlist.strings b/Example/Tests/en.lproj/InfoPlist.strings new file mode 100644 index 00000000..477b28ff --- /dev/null +++ b/Example/Tests/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/ExampleProject/Example.xcodeproj/project.pbxproj b/ExampleProject/Example.xcodeproj/project.pbxproj deleted file mode 100644 index 8d868b04..00000000 --- a/ExampleProject/Example.xcodeproj/project.pbxproj +++ /dev/null @@ -1,341 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 0C9D527520AF4EAA93E80BC5 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A64AE23935D5499BAF0AC8C1 /* libPods.a */; }; - CA0B97051719CD6800E06F84 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA0B97041719CD6800E06F84 /* UIKit.framework */; }; - CA0B97071719CD6800E06F84 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA0B97061719CD6800E06F84 /* Foundation.framework */; }; - CA0B97091719CD6800E06F84 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA0B97081719CD6800E06F84 /* CoreGraphics.framework */; }; - CA0B970F1719CD6800E06F84 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CA0B970D1719CD6800E06F84 /* InfoPlist.strings */; }; - CA0B97111719CD6800E06F84 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = CA0B97101719CD6800E06F84 /* main.m */; }; - CA0B97151719CD6800E06F84 /* TSAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CA0B97141719CD6800E06F84 /* TSAppDelegate.m */; }; - CA0B97171719CD6800E06F84 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = CA0B97161719CD6800E06F84 /* Default.png */; }; - CA0B97191719CD6800E06F84 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CA0B97181719CD6800E06F84 /* Default@2x.png */; }; - CA0B971B1719CD6800E06F84 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CA0B971A1719CD6800E06F84 /* Default-568h@2x.png */; }; - CA0B971E1719CD6800E06F84 /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CA0B971C1719CD6800E06F84 /* MainStoryboard.storyboard */; }; - CA0B97281719CD6800E06F84 /* TSDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CA0B97271719CD6800E06F84 /* TSDemoViewController.m */; }; - CAA3C9E817C3CD180085E06E /* AlternativeDesign.json in Resources */ = {isa = PBXBuildFile; fileRef = CAA3C9E717C3CD180085E06E /* AlternativeDesign.json */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 8B33F75B47A447C8B36A0061 /* Pods.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.xcconfig; path = Pods/Pods.xcconfig; sourceTree = SOURCE_ROOT; }; - A64AE23935D5499BAF0AC8C1 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; - CA0B97011719CD6800E06F84 /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; - CA0B97041719CD6800E06F84 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - CA0B97061719CD6800E06F84 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - CA0B97081719CD6800E06F84 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - CA0B970C1719CD6800E06F84 /* Example-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Example-Info.plist"; sourceTree = ""; }; - CA0B970E1719CD6800E06F84 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - CA0B97101719CD6800E06F84 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - CA0B97121719CD6800E06F84 /* Example-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Example-Prefix.pch"; sourceTree = ""; }; - CA0B97131719CD6800E06F84 /* TSAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TSAppDelegate.h; sourceTree = ""; }; - CA0B97141719CD6800E06F84 /* TSAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TSAppDelegate.m; sourceTree = ""; }; - CA0B97161719CD6800E06F84 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; - CA0B97181719CD6800E06F84 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; - CA0B971A1719CD6800E06F84 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; - CA0B971D1719CD6800E06F84 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard.storyboard; sourceTree = ""; }; - CA0B97261719CD6800E06F84 /* TSDemoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TSDemoViewController.h; sourceTree = ""; }; - CA0B97271719CD6800E06F84 /* TSDemoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TSDemoViewController.m; sourceTree = ""; }; - CAA3C9E717C3CD180085E06E /* AlternativeDesign.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = AlternativeDesign.json; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - CA0B96FE1719CD6800E06F84 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - CA0B97051719CD6800E06F84 /* UIKit.framework in Frameworks */, - CA0B97071719CD6800E06F84 /* Foundation.framework in Frameworks */, - CA0B97091719CD6800E06F84 /* CoreGraphics.framework in Frameworks */, - 0C9D527520AF4EAA93E80BC5 /* libPods.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - CA0B96F81719CD6800E06F84 = { - isa = PBXGroup; - children = ( - CA0B970A1719CD6800E06F84 /* Example */, - CA0B97031719CD6800E06F84 /* Frameworks */, - CA0B97021719CD6800E06F84 /* Products */, - 8B33F75B47A447C8B36A0061 /* Pods.xcconfig */, - ); - sourceTree = ""; - }; - CA0B97021719CD6800E06F84 /* Products */ = { - isa = PBXGroup; - children = ( - CA0B97011719CD6800E06F84 /* Example.app */, - ); - name = Products; - sourceTree = ""; - }; - CA0B97031719CD6800E06F84 /* Frameworks */ = { - isa = PBXGroup; - children = ( - CA0B97041719CD6800E06F84 /* UIKit.framework */, - CA0B97061719CD6800E06F84 /* Foundation.framework */, - CA0B97081719CD6800E06F84 /* CoreGraphics.framework */, - A64AE23935D5499BAF0AC8C1 /* libPods.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - CA0B970A1719CD6800E06F84 /* Example */ = { - isa = PBXGroup; - children = ( - CAA3C9E717C3CD180085E06E /* AlternativeDesign.json */, - CA0B97131719CD6800E06F84 /* TSAppDelegate.h */, - CA0B97141719CD6800E06F84 /* TSAppDelegate.m */, - CA0B971C1719CD6800E06F84 /* MainStoryboard.storyboard */, - CA0B97261719CD6800E06F84 /* TSDemoViewController.h */, - CA0B97271719CD6800E06F84 /* TSDemoViewController.m */, - CA0B970B1719CD6800E06F84 /* Supporting Files */, - ); - path = Example; - sourceTree = ""; - }; - CA0B970B1719CD6800E06F84 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - CA0B970C1719CD6800E06F84 /* Example-Info.plist */, - CA0B970D1719CD6800E06F84 /* InfoPlist.strings */, - CA0B97101719CD6800E06F84 /* main.m */, - CA0B97121719CD6800E06F84 /* Example-Prefix.pch */, - CA0B97161719CD6800E06F84 /* Default.png */, - CA0B97181719CD6800E06F84 /* Default@2x.png */, - CA0B971A1719CD6800E06F84 /* Default-568h@2x.png */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - CA0B97001719CD6800E06F84 /* Example */ = { - isa = PBXNativeTarget; - buildConfigurationList = CA0B972F1719CD6800E06F84 /* Build configuration list for PBXNativeTarget "Example" */; - buildPhases = ( - CA0B96FD1719CD6800E06F84 /* Sources */, - CA0B96FE1719CD6800E06F84 /* Frameworks */, - CA0B96FF1719CD6800E06F84 /* Resources */, - E3258285C6274073968F0DF4 /* Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Example; - productName = Example; - productReference = CA0B97011719CD6800E06F84 /* Example.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - CA0B96F91719CD6800E06F84 /* Project object */ = { - isa = PBXProject; - attributes = { - CLASSPREFIX = TS; - LastUpgradeCheck = 0460; - ORGANIZATIONNAME = Toursprung; - }; - buildConfigurationList = CA0B96FC1719CD6800E06F84 /* Build configuration list for PBXProject "Example" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = CA0B96F81719CD6800E06F84; - productRefGroup = CA0B97021719CD6800E06F84 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - CA0B97001719CD6800E06F84 /* Example */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - CA0B96FF1719CD6800E06F84 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CA0B970F1719CD6800E06F84 /* InfoPlist.strings in Resources */, - CA0B97171719CD6800E06F84 /* Default.png in Resources */, - CA0B97191719CD6800E06F84 /* Default@2x.png in Resources */, - CA0B971B1719CD6800E06F84 /* Default-568h@2x.png in Resources */, - CA0B971E1719CD6800E06F84 /* MainStoryboard.storyboard in Resources */, - CAA3C9E817C3CD180085E06E /* AlternativeDesign.json in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - E3258285C6274073968F0DF4 /* Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Pods-resources.sh\"\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - CA0B96FD1719CD6800E06F84 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CA0B97111719CD6800E06F84 /* main.m in Sources */, - CA0B97151719CD6800E06F84 /* TSAppDelegate.m in Sources */, - CA0B97281719CD6800E06F84 /* TSDemoViewController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - CA0B970D1719CD6800E06F84 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - CA0B970E1719CD6800E06F84 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - CA0B971C1719CD6800E06F84 /* MainStoryboard.storyboard */ = { - isa = PBXVariantGroup; - children = ( - CA0B971D1719CD6800E06F84 /* en */, - ); - name = MainStoryboard.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - CA0B972D1719CD6800E06F84 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - }; - name = Debug; - }; - CA0B972E1719CD6800E06F84 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - SDKROOT = iphoneos; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - CA0B97301719CD6800E06F84 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8B33F75B47A447C8B36A0061 /* Pods.xcconfig */; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Example/Example-Prefix.pch"; - INFOPLIST_FILE = "Example/Example-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - CA0B97311719CD6800E06F84 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8B33F75B47A447C8B36A0061 /* Pods.xcconfig */; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Example/Example-Prefix.pch"; - INFOPLIST_FILE = "Example/Example-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.1; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - CA0B96FC1719CD6800E06F84 /* Build configuration list for PBXProject "Example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CA0B972D1719CD6800E06F84 /* Debug */, - CA0B972E1719CD6800E06F84 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - CA0B972F1719CD6800E06F84 /* Build configuration list for PBXNativeTarget "Example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - CA0B97301719CD6800E06F84 /* Debug */, - CA0B97311719CD6800E06F84 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = CA0B96F91719CD6800E06F84 /* Project object */; -} diff --git a/ExampleProject/Example.xcodeproj/project.xcworkspace/xcuserdata/felixkrause.xcuserdatad/UserInterfaceState.xcuserstate b/ExampleProject/Example.xcodeproj/project.xcworkspace/xcuserdata/felixkrause.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 814a3cab..00000000 Binary files a/ExampleProject/Example.xcodeproj/project.xcworkspace/xcuserdata/felixkrause.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/ExampleProject/Example.xcodeproj/xcuserdata/felixkrause.xcuserdatad/xcschemes/xcschememanagement.plist b/ExampleProject/Example.xcodeproj/xcuserdata/felixkrause.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index a4ea21d4..00000000 --- a/ExampleProject/Example.xcodeproj/xcuserdata/felixkrause.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - SchemeUserState - - Example.xcscheme - - orderHint - 0 - - - SuppressBuildableAutocreation - - CA0B97001719CD6800E06F84 - - primary - - - - - diff --git a/ExampleProject/Example.xcworkspace/contents.xcworkspacedata b/ExampleProject/Example.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 94576283..00000000 --- a/ExampleProject/Example.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ExampleProject/Example.xcworkspace/xcshareddata/Example.xccheckout b/ExampleProject/Example.xcworkspace/xcshareddata/Example.xccheckout deleted file mode 100644 index 354f7fd7..00000000 --- a/ExampleProject/Example.xcworkspace/xcshareddata/Example.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ - - - - - IDESourceControlProjectFavoriteDictionaryKey - - IDESourceControlProjectIdentifier - F6FF7C22-1562-4A01-9CD1-A3C34B7E21C3 - IDESourceControlProjectName - Example - IDESourceControlProjectOriginsDictionary - - 56C72571-8325-46B6-BC46-920E7DE5B629 - https://github.com/toursprung/TSMessages.git - - IDESourceControlProjectPath - ExampleProject/Example.xcworkspace - IDESourceControlProjectRelativeInstallPathDictionary - - 56C72571-8325-46B6-BC46-920E7DE5B629 - ../.. - - IDESourceControlProjectURL - https://github.com/toursprung/TSMessages.git - IDESourceControlProjectVersion - 110 - IDESourceControlProjectWCCIdentifier - 56C72571-8325-46B6-BC46-920E7DE5B629 - IDESourceControlProjectWCConfigurations - - - IDESourceControlRepositoryExtensionIdentifierKey - public.vcs.git - IDESourceControlWCCIdentifierKey - 56C72571-8325-46B6-BC46-920E7DE5B629 - IDESourceControlWCCName - TSMessages - - - - diff --git a/ExampleProject/Example/AlternativeDesign.json b/ExampleProject/Example/AlternativeDesign.json deleted file mode 100644 index cf627ba5..00000000 --- a/ExampleProject/Example/AlternativeDesign.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "success": { - "backgroundImageName": "NotificationBackgroundSuccess.png", - "borderColor": "#005700", - "borderHeight": 1, - "buttonBackgroundImageName": "NotificationButtonBackground.png", - "buttonTitleTextColor": "#FFFFFF", - "buttonTitleShadowColor": "#67B759", - "buttonTitleShadowOffsetX": 0, - "buttonTitleShadowOffsetY": -1, - "contentFontSize": 12, - "contentTextColor": "#FFFFFF", - "imageName": "NotificationBackgroundSuccessIcon.png", - "shadowColor": "#67B759", - "shadowOffsetX": 0, - "shadowOffsetY": -1, - "textColor": "#FFFFFF", - "titleFontSize": 25 - }, - "message": { - "backgroundImageName": "NotificationBackgroundMessage.png", - "borderColor": "#727C83", - "borderHeight": 1, - "buttonBackgroundImageName": "NotificationButtonBackground.png", - "buttonTitleTextColor": "#727C83", - "buttonTitleShadowColor": "#EBEEF1", - "buttonTitleShadowOffsetX": 0, - "buttonTitleShadowOffsetY": 1, - "contentFontSize": 12, - "contentTextColor": "#727C83", - "imageName": "", - "shadowColor": "#EBEEF1", - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "textColor": "#727C83", - "titleFontSize": 14 - }, - "warning": { - "backgroundImageName": "NotificationBackgroundWarning.png", - "borderColor": "#A28918", - "borderHeight": 1, - "buttonBackgroundImageName": "NotificationButtonBackground.png", - "buttonTitleTextColor": "#484638", - "buttonTitleShadowColor": "#E5D87C", - "buttonTitleShadowOffsetX": 0, - "buttonTitleShadowOffsetY": 1, - "contentFontSize": 12, - "contentTextColor": "#484638", - "imageName": "NotificationBackgroundWarningIcon.png", - "shadowColor": "#E5D87C", - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "textColor": "#484638", - "titleFontSize": 14 - }, - "error": { - "backgroundImageName": "NotificationBackgroundError.png", - "borderColor": "#700000", - "borderHeight": 1, - "buttonBackgroundImageName": "NotificationButtonBackground.png", - "buttonTitleTextColor": "#FFFFFF", - "buttonTitleShadowColor": "#812929", - "buttonTitleShadowOffsetX": 0, - "buttonTitleShadowOffsetY": -1, - "contentFontSize": 12, - "contentTextColor": "#FFFFFF", - "imageName": "NotificationBackgroundErrorIcon.png", - "shadowColor": "#812929", - "shadowOffsetX": 0, - "shadowOffsetY": -1, - "textColor": "#FFFFFF", - "titleFontSize": 14 - } -} \ No newline at end of file diff --git a/ExampleProject/Example/Default-568h@2x.png b/ExampleProject/Example/Default-568h@2x.png deleted file mode 100644 index 0891b7aa..00000000 Binary files a/ExampleProject/Example/Default-568h@2x.png and /dev/null differ diff --git a/ExampleProject/Example/Default.png b/ExampleProject/Example/Default.png deleted file mode 100644 index 4c8ca6f6..00000000 Binary files a/ExampleProject/Example/Default.png and /dev/null differ diff --git a/ExampleProject/Example/Default@2x.png b/ExampleProject/Example/Default@2x.png deleted file mode 100644 index 35b84cff..00000000 Binary files a/ExampleProject/Example/Default@2x.png and /dev/null differ diff --git a/ExampleProject/Example/Podfile b/ExampleProject/Example/Podfile deleted file mode 100644 index 9746f75d..00000000 --- a/ExampleProject/Example/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -platform :ios, '5.1' - -xcodeproj 'Example.xcodeproj' - -pod 'TSMessage', :local => '..' diff --git a/ExampleProject/Podfile b/ExampleProject/Podfile deleted file mode 100644 index f0a81b72..00000000 --- a/ExampleProject/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -platform :ios, '5.1' - -xcodeproj 'Example.xcodeproj' - -pod 'TSMessages', :path => '../' diff --git a/ExampleProject/Podfile.lock b/ExampleProject/Podfile.lock deleted file mode 100644 index 229e91c9..00000000 --- a/ExampleProject/Podfile.lock +++ /dev/null @@ -1,17 +0,0 @@ -PODS: - - HexColors (2.2.1) - - TSMessages (0.9.4): - - HexColors - -DEPENDENCIES: - - TSMessages (from `..`) - -EXTERNAL SOURCES: - TSMessages: - :path: .. - -SPEC CHECKSUMS: - HexColors: 3a68db077cd6572a8f7d4aa1add284dd2436a934 - TSMessages: de3fecb312d44078128add86d4347307669d0af2 - -COCOAPODS: 0.29.0 diff --git a/ExampleProject/Pods/BuildHeaders/TSMessages/TSBlurView.h b/ExampleProject/Pods/BuildHeaders/TSMessages/TSBlurView.h deleted file mode 120000 index 0d3ced99..00000000 --- a/ExampleProject/Pods/BuildHeaders/TSMessages/TSBlurView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../TSMessages/Views/TSBlurView.h \ No newline at end of file diff --git a/ExampleProject/Pods/BuildHeaders/TSMessages/TSMessage.h b/ExampleProject/Pods/BuildHeaders/TSMessages/TSMessage.h deleted file mode 120000 index 131b19e7..00000000 --- a/ExampleProject/Pods/BuildHeaders/TSMessages/TSMessage.h +++ /dev/null @@ -1 +0,0 @@ -../../../../TSMessages/Classes/TSMessage.h \ No newline at end of file diff --git a/ExampleProject/Pods/BuildHeaders/TSMessages/TSMessageView.h b/ExampleProject/Pods/BuildHeaders/TSMessages/TSMessageView.h deleted file mode 120000 index 891ad800..00000000 --- a/ExampleProject/Pods/BuildHeaders/TSMessages/TSMessageView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../TSMessages/Views/TSMessageView.h \ No newline at end of file diff --git a/ExampleProject/Pods/Headers/TSMessages/TSBlurView.h b/ExampleProject/Pods/Headers/TSMessages/TSBlurView.h deleted file mode 120000 index 0d3ced99..00000000 --- a/ExampleProject/Pods/Headers/TSMessages/TSBlurView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../TSMessages/Views/TSBlurView.h \ No newline at end of file diff --git a/ExampleProject/Pods/Headers/TSMessages/TSMessage.h b/ExampleProject/Pods/Headers/TSMessages/TSMessage.h deleted file mode 120000 index 131b19e7..00000000 --- a/ExampleProject/Pods/Headers/TSMessages/TSMessage.h +++ /dev/null @@ -1 +0,0 @@ -../../../../TSMessages/Classes/TSMessage.h \ No newline at end of file diff --git a/ExampleProject/Pods/Headers/TSMessages/TSMessageView.h b/ExampleProject/Pods/Headers/TSMessages/TSMessageView.h deleted file mode 120000 index 891ad800..00000000 --- a/ExampleProject/Pods/Headers/TSMessages/TSMessageView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../TSMessages/Views/TSMessageView.h \ No newline at end of file diff --git a/ExampleProject/Pods/Local Podspecs/TSMessages.podspec b/ExampleProject/Pods/Local Podspecs/TSMessages.podspec deleted file mode 100644 index c9f9cdef..00000000 --- a/ExampleProject/Pods/Local Podspecs/TSMessages.podspec +++ /dev/null @@ -1,28 +0,0 @@ -Pod::Spec.new do |s| - s.name = "TSMessages" - s.version = "0.9.4" - s.summary = "Easy to use and customizable messages/notifications for iOS à la Tweetbot." - s.description = <<-DESC - This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). -The notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it. -There are 4 different types already set up for you: Success, Error, Warning, Message. - DESC - - s.homepage = "https://github.com/toursprung/TSMessages/" - - s.license = 'MIT' - - s.author = { "Felix Krause" => "krausefx@gmail.com" } - - s.source = { :git => "https://github.com/toursprung/TSMessages.git", :tag => "#{s.version}"} - - s.platform = :ios, '5.0' - - s.source_files = 'TSMessages/Classes/**/*.{h,m}', 'TSMessages/Views/**/*.{h,m}' - - s.resources = "TSMessages/Resources/**/*.{png,json}" - - - s.requires_arc = true - s.dependency 'HexColors' -end diff --git a/ExampleProject/Pods/Manifest.lock b/ExampleProject/Pods/Manifest.lock deleted file mode 100644 index 229e91c9..00000000 --- a/ExampleProject/Pods/Manifest.lock +++ /dev/null @@ -1,17 +0,0 @@ -PODS: - - HexColors (2.2.1) - - TSMessages (0.9.4): - - HexColors - -DEPENDENCIES: - - TSMessages (from `..`) - -EXTERNAL SOURCES: - TSMessages: - :path: .. - -SPEC CHECKSUMS: - HexColors: 3a68db077cd6572a8f7d4aa1add284dd2436a934 - TSMessages: de3fecb312d44078128add86d4347307669d0af2 - -COCOAPODS: 0.29.0 diff --git a/ExampleProject/Pods/Pods-Acknowledgements.markdown b/ExampleProject/Pods/Pods-Acknowledgements.markdown deleted file mode 100644 index 044c8ae0..00000000 --- a/ExampleProject/Pods/Pods-Acknowledgements.markdown +++ /dev/null @@ -1,26 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## HexColors - -The MIT License (MIT) -Copyright (c) 2012 Marius Landwehr marius.landwehr@gmail.com - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -## TSMessages - -Copyright (c) 2013, Toursprung -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -Generated by CocoaPods - http://cocoapods.org diff --git a/ExampleProject/Pods/Pods-HexColors-Private.xcconfig b/ExampleProject/Pods/Pods-HexColors-Private.xcconfig deleted file mode 100644 index de5b07eb..00000000 --- a/ExampleProject/Pods/Pods-HexColors-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-HexColors.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/HexColors" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/HexColors" "${PODS_ROOT}/Headers/TSMessages" -OTHER_LDFLAGS = -ObjC -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/ExampleProject/Pods/Pods-HexColors-dummy.m b/ExampleProject/Pods/Pods-HexColors-dummy.m deleted file mode 100644 index c81fd4c0..00000000 --- a/ExampleProject/Pods/Pods-HexColors-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_HexColors : NSObject -@end -@implementation PodsDummy_Pods_HexColors -@end diff --git a/ExampleProject/Pods/Pods-TSMessages-Private.xcconfig b/ExampleProject/Pods/Pods-TSMessages-Private.xcconfig deleted file mode 100644 index c06eb5ba..00000000 --- a/ExampleProject/Pods/Pods-TSMessages-Private.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -#include "Pods-TSMessages.xcconfig" -GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/TSMessages" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/HexColors" "${PODS_ROOT}/Headers/TSMessages" -OTHER_LDFLAGS = -ObjC -PODS_ROOT = ${SRCROOT} \ No newline at end of file diff --git a/ExampleProject/Pods/Pods-dummy.m b/ExampleProject/Pods/Pods-dummy.m deleted file mode 100644 index ade64bd1..00000000 --- a/ExampleProject/Pods/Pods-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods : NSObject -@end -@implementation PodsDummy_Pods -@end diff --git a/ExampleProject/Pods/Pods.xcconfig b/ExampleProject/Pods/Pods.xcconfig deleted file mode 100644 index 1a9622ab..00000000 --- a/ExampleProject/Pods/Pods.xcconfig +++ /dev/null @@ -1,5 +0,0 @@ -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/HexColors" "${PODS_ROOT}/Headers/TSMessages" -OTHER_CFLAGS = $(inherited) "-isystem${PODS_ROOT}/Headers" "-isystem${PODS_ROOT}/Headers/HexColors" "-isystem${PODS_ROOT}/Headers/TSMessages" -OTHER_LDFLAGS = -ObjC -PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file diff --git a/ExampleProject/Pods/Pods.xcodeproj/project.pbxproj b/ExampleProject/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index 6e78b8c5..00000000 --- a/ExampleProject/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1731 +0,0 @@ - - - - - archiveVersion - 1 - classes - - objectVersion - 46 - objects - - 03C6013078E94A0E82974916 - - baseConfigurationReference - 73A7EA8E61034AC98667E196 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-HexColors-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.1 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 04BEA0BD41874685ACBC8DA2 - - baseConfigurationReference - 0B0F7677A5CA40EAB540A3DE - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-TSMessages-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.1 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 069A1DF9A34A43138DB94BE8 - - children - - 800156CDE3FA4B5EA1AFC2FA - - isa - PBXGroup - name - Pods - sourceTree - <group> - - 0B0F7677A5CA40EAB540A3DE - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-TSMessages-Private.xcconfig - sourceTree - <group> - - 0B14269B41954AC9B148A5F9 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-HexColors-prefix.pch - sourceTree - <group> - - 0D5A2A53932944A6AE8A4CA1 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - TSBlurView.h - path - TSMessages/Views/TSBlurView.h - sourceTree - <group> - - 14833BC0FBFB4B0C8672D8D3 - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundSuccessIcon@2x.png - path - TSMessages/Resources/Images/NotificationBackgroundSuccessIcon@2x.png - sourceTree - <group> - - 1D7A52D5728F41E785C322DC - - fileRef - A4CE9FC3E73543C38D323E2D - isa - PBXBuildFile - - 1FA50EC3B88C4C0CB1B14CA1 - - baseConfigurationReference - 40DEB958567846FFA974718C - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.1 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 2415DE35049842A2AFFA2686 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - TSBlurView.m - path - TSMessages/Views/TSBlurView.m - sourceTree - <group> - - 24240995116B46EAB0AF513E - - children - - 5F703371046545A2939CF01A - 6FD011263EC84BDDBED1AFE1 - BBEBDD261DC34FB8BB236341 - 069A1DF9A34A43138DB94BE8 - B2A7A54260A043A2874D2AEE - 26EB239DDC5B4CCCA42203CC - - isa - PBXGroup - sourceTree - <group> - - 2463BD24FF8D4198995F9BEB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - TSMessage.h - path - TSMessages/Classes/TSMessage.h - sourceTree - <group> - - 24C31BAB15AF47FFBD2F51E9 - - baseConfigurationReference - 73A7EA8E61034AC98667E196 - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-HexColors-prefix.pch - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.1 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - 259060024F734777BBEE0224 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-HexColors.a - sourceTree - BUILT_PRODUCTS_DIR - - 26EB239DDC5B4CCCA42203CC - - children - - FE01A87B16DA489ABE41A574 - - isa - PBXGroup - name - Targets Support Files - sourceTree - <group> - - 27BA6AF02B394EEDAD3073AA - - fileRef - 68C15DED264D4219B1D29AC7 - isa - PBXBuildFile - - 2CB643C08C4B48B6983B92A0 - - includeInIndex - 1 - isa - PBXFileReference - name - TSMessagesDefaultDesign.json - path - TSMessages/Resources/TSMessagesDefaultDesign.json - sourceTree - <group> - - 2D687DE1255D459FAC46B986 - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundWarning.png - path - TSMessages/Resources/Images/NotificationBackgroundWarning.png - sourceTree - <group> - - 2D946FE34C4E4E1C8CDDDC00 - - fileRef - D981CB2AF212488C83B57089 - isa - PBXBuildFile - - 2E04345824C144B786437EA1 - - fileRef - A4CE9FC3E73543C38D323E2D - isa - PBXBuildFile - - 329C9A0C916A4D2E93C257C4 - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - NO - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - COPY_PHASE_STRIP - YES - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 5.1 - ONLY_ACTIVE_ARCH - YES - STRIP_INSTALLED_PRODUCT - NO - - isa - XCBuildConfiguration - name - Debug - - 34EC7EF804A54DD38BFE4A78 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.plist.xml - path - Pods-acknowledgements.plist - sourceTree - <group> - - 38EC203546A14BD0913E36FB - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundWarning@2x.png - path - TSMessages/Resources/Images/NotificationBackgroundWarning@2x.png - sourceTree - <group> - - 3A4D7998F45E4CFD93B86CD0 - - buildActionMask - 2147483647 - files - - CD45345C93F34361BC1B6E10 - 55A265BA87F447F5859D72A0 - 2D946FE34C4E4E1C8CDDDC00 - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 3B733B54AF964A7AAD3B0D37 - - containerPortal - 960AC0AB20464481B1F828FB - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - BC5CDB1831C74F8AABF01B10 - remoteInfo - Pods-HexColors - - 3C72160B2C8E45918505780B - - fileRef - A1C56EA0BB274A2D8AE23D41 - isa - PBXBuildFile - - 40DEB958567846FFA974718C - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods.xcconfig - sourceTree - <group> - - 40F6BD4E11724577A3B0BA51 - - buildConfigurationList - CEA591430ACF4758B1890A90 - buildPhases - - FED15D656EC849388C009B94 - 66AE72DAA7954E8BA85E178A - - buildRules - - dependencies - - 64B3E31E46754BC89FBB1F22 - BAB9C16F0D7647749599679F - - isa - PBXNativeTarget - name - Pods - productName - Pods - productReference - D1D2457075E847678498CAE1 - productType - com.apple.product-type.library.static - - 457ECD26C4F14E829E904F1D - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationButtonBackground@2x.png - path - TSMessages/Resources/Images/NotificationButtonBackground@2x.png - sourceTree - <group> - - 4728996C35514049BC00536B - - baseConfigurationReference - 0B0F7677A5CA40EAB540A3DE - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - YES - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREFIX_HEADER - Pods-TSMessages-prefix.pch - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.1 - OTHER_CFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_CPLUSPLUSFLAGS - - -DNS_BLOCK_ASSERTIONS=1 - $(inherited) - - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 4940F90FEA65410F8AFB8F8B - - fileRef - 6CD42DAD26174313BDE0154F - isa - PBXBuildFile - - 4A2F32290C174C9DAA4241E0 - - buildActionMask - 2147483647 - files - - 9F7FE6B501114AA2BF5EE13F - - isa - PBXHeadersBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 4D0B5DF76432433290E9A520 - - fileRef - 5E0CFB2579BD4622AD88E280 - isa - PBXBuildFile - - 4FB78B9DC5274E45ADE45851 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - TSMessage.m - path - TSMessages/Classes/TSMessage.m - sourceTree - <group> - - 5304BFC7CDFA425CA9C08D80 - - buildConfigurations - - 24C31BAB15AF47FFBD2F51E9 - 03C6013078E94A0E82974916 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 53B443F40EED4B19B90DEC17 - - buildConfigurations - - 329C9A0C916A4D2E93C257C4 - 7346440540A643178A28990D - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - 54D3C00A46BB4E66BDEE0520 - - containerPortal - 960AC0AB20464481B1F828FB - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - 9D1220C3B8A14ECF8E1DC6F4 - remoteInfo - Pods-TSMessages - - 54F3AF800B5C4CC7BFA9F7EA - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - HexColor.h - path - Classes/HexColor.h - sourceTree - <group> - - 55A265BA87F447F5859D72A0 - - fileRef - 2463BD24FF8D4198995F9BEB - isa - PBXBuildFile - - 5651147C2DFF4E698B32E32D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - TSMessageView.m - path - TSMessages/Views/TSMessageView.m - sourceTree - <group> - - 5E0CFB2579BD4622AD88E280 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-dummy.m - sourceTree - <group> - - 5F703371046545A2939CF01A - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - name - Podfile - path - ../Podfile - sourceTree - SOURCE_ROOT - xcLanguageSpecificationIdentifier - xcode.lang.ruby - - 64B3E31E46754BC89FBB1F22 - - isa - PBXTargetDependency - target - BC5CDB1831C74F8AABF01B10 - targetProxy - 3B733B54AF964A7AAD3B0D37 - - 66AE72DAA7954E8BA85E178A - - buildActionMask - 2147483647 - files - - D8E9A18E3B604B09931632C4 - 7B51E34A7E2346148F450290 - 4940F90FEA65410F8AFB8F8B - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 68C15DED264D4219B1D29AC7 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - name - HexColor.m - path - Classes/HexColor.m - sourceTree - <group> - - 6C16DB02D58C4353B59B4E12 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-HexColors.xcconfig - sourceTree - <group> - - 6CD42DAD26174313BDE0154F - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods-TSMessages.a - sourceTree - BUILT_PRODUCTS_DIR - - 6F18CD3DC7F14E15AC671EF2 - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundWarningIcon@2x.png - path - TSMessages/Resources/Images/NotificationBackgroundWarningIcon@2x.png - sourceTree - <group> - - 6FD011263EC84BDDBED1AFE1 - - children - - 9F8B269E50C449C6842AA3C1 - - isa - PBXGroup - name - Development Pods - sourceTree - <group> - - 70DB0E8F6C3D48A1BC733D2E - - fileRef - D22EE3B4774043D58D535E20 - isa - PBXBuildFile - - 7346440540A643178A28990D - - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - CLANG_CXX_LANGUAGE_STANDARD - gnu++0x - CLANG_CXX_LIBRARY - libc++ - CLANG_ENABLE_MODULES - YES - CLANG_ENABLE_OBJC_ARC - NO - CLANG_WARN_BOOL_CONVERSION - YES - CLANG_WARN_CONSTANT_CONVERSION - YES - CLANG_WARN_DIRECT_OBJC_ISA_USAGE - YES_ERROR - CLANG_WARN_EMPTY_BODY - YES - CLANG_WARN_ENUM_CONVERSION - YES - CLANG_WARN_INT_CONVERSION - YES - CLANG_WARN_OBJC_ROOT_CLASS - YES_ERROR - COPY_PHASE_STRIP - NO - ENABLE_NS_ASSERTIONS - NO - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_WARN_64_TO_32_BIT_CONVERSION - YES - GCC_WARN_ABOUT_RETURN_TYPE - YES_ERROR - GCC_WARN_UNDECLARED_SELECTOR - YES - GCC_WARN_UNINITIALIZED_AUTOS - YES - GCC_WARN_UNUSED_FUNCTION - YES - GCC_WARN_UNUSED_VARIABLE - YES - IPHONEOS_DEPLOYMENT_TARGET - 5.1 - STRIP_INSTALLED_PRODUCT - NO - VALIDATE_PRODUCT - YES - - isa - XCBuildConfiguration - name - Release - - 7369A2112BB9422BA478F6E0 - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundMessage@2x.png - path - TSMessages/Resources/Images/NotificationBackgroundMessage@2x.png - sourceTree - <group> - - 73A7EA8E61034AC98667E196 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-HexColors-Private.xcconfig - sourceTree - <group> - - 73F1271D00AA46739C9233BA - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundSuccess@2x.png - path - TSMessages/Resources/Images/NotificationBackgroundSuccess@2x.png - sourceTree - <group> - - 765AFF434ED547D0B29EBC1C - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationButtonBackground.png - path - TSMessages/Resources/Images/NotificationButtonBackground.png - sourceTree - <group> - - 7B51E34A7E2346148F450290 - - fileRef - 259060024F734777BBEE0224 - isa - PBXBuildFile - - 800156CDE3FA4B5EA1AFC2FA - - children - - 54F3AF800B5C4CC7BFA9F7EA - 68C15DED264D4219B1D29AC7 - B356E772B5254879B61E7376 - - isa - PBXGroup - name - HexColors - path - HexColors - sourceTree - <group> - - 87375B4DDB794013BF02CB2E - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundWarningIcon.png - path - TSMessages/Resources/Images/NotificationBackgroundWarningIcon.png - sourceTree - <group> - - 8FE07178853342E09250918D - - buildActionMask - 2147483647 - files - - 2E04345824C144B786437EA1 - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - 960AC0AB20464481B1F828FB - - attributes - - LastUpgradeCheck - 0500 - - buildConfigurationList - 53B443F40EED4B19B90DEC17 - compatibilityVersion - Xcode 3.2 - developmentRegion - English - hasScannedForEncodings - 0 - isa - PBXProject - knownRegions - - en - - mainGroup - 24240995116B46EAB0AF513E - productRefGroup - B2A7A54260A043A2874D2AEE - projectDirPath - - projectReferences - - projectRoot - - targets - - 40F6BD4E11724577A3B0BA51 - BC5CDB1831C74F8AABF01B10 - 9D1220C3B8A14ECF8E1DC6F4 - - - 9BB63CE3AC754A8BAC5EF09D - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-TSMessages-prefix.pch - sourceTree - <group> - - 9D1220C3B8A14ECF8E1DC6F4 - - buildConfigurationList - A75A171CD8D145AD9F6561AC - buildPhases - - AA6C165C94CD4E6BBC98FF00 - 8FE07178853342E09250918D - 3A4D7998F45E4CFD93B86CD0 - - buildRules - - dependencies - - C1442F3F598F4DD7840D05CE - - isa - PBXNativeTarget - name - Pods-TSMessages - productName - Pods-TSMessages - productReference - 6CD42DAD26174313BDE0154F - productType - com.apple.product-type.library.static - - 9F7FE6B501114AA2BF5EE13F - - fileRef - 54F3AF800B5C4CC7BFA9F7EA - isa - PBXBuildFile - - 9F8B269E50C449C6842AA3C1 - - children - - 0D5A2A53932944A6AE8A4CA1 - 2415DE35049842A2AFFA2686 - 2463BD24FF8D4198995F9BEB - 4FB78B9DC5274E45ADE45851 - D981CB2AF212488C83B57089 - 5651147C2DFF4E698B32E32D - DD89D3A0E2E546B5B104B74C - B8EA8C8B92B54E3AAC2710C9 - - isa - PBXGroup - name - TSMessages - path - ../.. - sourceTree - <group> - - A0557B42439D46EBBCCD5BE2 - - fileRef - 5651147C2DFF4E698B32E32D - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - A10A43940FF148AA829DF51D - - containerPortal - 960AC0AB20464481B1F828FB - isa - PBXContainerItemProxy - proxyType - 1 - remoteGlobalIDString - BC5CDB1831C74F8AABF01B10 - remoteInfo - Pods-HexColors - - A1C56EA0BB274A2D8AE23D41 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-HexColors-dummy.m - sourceTree - <group> - - A1DEA504AFA84A758E9E82AA - - buildActionMask - 2147483647 - files - - 1D7A52D5728F41E785C322DC - - isa - PBXFrameworksBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - A26FAF9921E24272A13C6AE0 - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundErrorIcon.png - path - TSMessages/Resources/Images/NotificationBackgroundErrorIcon.png - sourceTree - <group> - - A4CE9FC3E73543C38D323E2D - - isa - PBXFileReference - lastKnownFileType - wrapper.framework - name - Foundation.framework - path - Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/Foundation.framework - sourceTree - DEVELOPER_DIR - - A4D243890D05418CB11439DB - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.xcconfig - path - Pods-TSMessages.xcconfig - sourceTree - <group> - - A75A171CD8D145AD9F6561AC - - buildConfigurations - - 04BEA0BD41874685ACBC8DA2 - 4728996C35514049BC00536B - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - A9AEC5BA924F4382B5749ACC - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundError.png - path - TSMessages/Resources/Images/NotificationBackgroundError.png - sourceTree - <group> - - AA6C165C94CD4E6BBC98FF00 - - buildActionMask - 2147483647 - files - - 70DB0E8F6C3D48A1BC733D2E - CABF247B7697439E883E462B - E3E553FD14FA42C1ACFA5816 - A0557B42439D46EBBCCD5BE2 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - AABC6754D5F9439D9E9892C3 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - path - Pods-environment.h - sourceTree - <group> - - B2A7A54260A043A2874D2AEE - - children - - D1D2457075E847678498CAE1 - 259060024F734777BBEE0224 - 6CD42DAD26174313BDE0154F - - isa - PBXGroup - name - Products - sourceTree - <group> - - B33D4E81354E49398E2C3DC8 - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundMessage.png - path - TSMessages/Resources/Images/NotificationBackgroundMessage.png - sourceTree - <group> - - B356E772B5254879B61E7376 - - children - - 6C16DB02D58C4353B59B4E12 - 73A7EA8E61034AC98667E196 - A1C56EA0BB274A2D8AE23D41 - 0B14269B41954AC9B148A5F9 - - isa - PBXGroup - name - Support Files - sourceTree - SOURCE_ROOT - - B600F65B8D7D41ED85CBCC57 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text.script.sh - path - Pods-resources.sh - sourceTree - <group> - - B6094657571848A4829418BE - - baseConfigurationReference - 40DEB958567846FFA974718C - buildSettings - - ALWAYS_SEARCH_USER_PATHS - NO - COPY_PHASE_STRIP - NO - DSTROOT - /tmp/xcodeproj.dst - GCC_C_LANGUAGE_STANDARD - gnu99 - GCC_DYNAMIC_NO_PIC - NO - GCC_OPTIMIZATION_LEVEL - 0 - GCC_PRECOMPILE_PREFIX_HEADER - YES - GCC_PREPROCESSOR_DEFINITIONS - - DEBUG=1 - $(inherited) - - GCC_SYMBOLS_PRIVATE_EXTERN - NO - GCC_VERSION - com.apple.compilers.llvm.clang.1_0 - INSTALL_PATH - $(BUILT_PRODUCTS_DIR) - IPHONEOS_DEPLOYMENT_TARGET - 5.1 - OTHER_LDFLAGS - - PRODUCT_NAME - $(TARGET_NAME) - PUBLIC_HEADERS_FOLDER_PATH - $(TARGET_NAME) - SDKROOT - iphoneos - SKIP_INSTALL - YES - - isa - XCBuildConfiguration - name - Debug - - B8EA8C8B92B54E3AAC2710C9 - - children - - A4D243890D05418CB11439DB - 0B0F7677A5CA40EAB540A3DE - D22EE3B4774043D58D535E20 - 9BB63CE3AC754A8BAC5EF09D - - isa - PBXGroup - name - Support Files - sourceTree - SOURCE_ROOT - - BAB9C16F0D7647749599679F - - isa - PBXTargetDependency - target - 9D1220C3B8A14ECF8E1DC6F4 - targetProxy - 54D3C00A46BB4E66BDEE0520 - - BBEBDD261DC34FB8BB236341 - - children - - E95AE17553B84BCD971EAC70 - - isa - PBXGroup - name - Frameworks - sourceTree - <group> - - BC5CDB1831C74F8AABF01B10 - - buildConfigurationList - 5304BFC7CDFA425CA9C08D80 - buildPhases - - E7CE3C41B4E042728248247C - A1DEA504AFA84A758E9E82AA - 4A2F32290C174C9DAA4241E0 - - buildRules - - dependencies - - isa - PBXNativeTarget - name - Pods-HexColors - productName - Pods-HexColors - productReference - 259060024F734777BBEE0224 - productType - com.apple.product-type.library.static - - C1442F3F598F4DD7840D05CE - - isa - PBXTargetDependency - target - BC5CDB1831C74F8AABF01B10 - targetProxy - A10A43940FF148AA829DF51D - - CABF247B7697439E883E462B - - fileRef - 2415DE35049842A2AFFA2686 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - CD45345C93F34361BC1B6E10 - - fileRef - 0D5A2A53932944A6AE8A4CA1 - isa - PBXBuildFile - - CEA591430ACF4758B1890A90 - - buildConfigurations - - B6094657571848A4829418BE - 1FA50EC3B88C4C0CB1B14CA1 - - defaultConfigurationIsVisible - 0 - defaultConfigurationName - Release - isa - XCConfigurationList - - D1D2457075E847678498CAE1 - - explicitFileType - archive.ar - includeInIndex - 0 - isa - PBXFileReference - path - libPods.a - sourceTree - BUILT_PRODUCTS_DIR - - D22EE3B4774043D58D535E20 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.objc - path - Pods-TSMessages-dummy.m - sourceTree - <group> - - D28618AA782C49A5B8F568CC - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundSuccessIcon.png - path - TSMessages/Resources/Images/NotificationBackgroundSuccessIcon.png - sourceTree - <group> - - D8E9A18E3B604B09931632C4 - - fileRef - A4CE9FC3E73543C38D323E2D - isa - PBXBuildFile - - D981CB2AF212488C83B57089 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - sourcecode.c.h - name - TSMessageView.h - path - TSMessages/Views/TSMessageView.h - sourceTree - <group> - - DD89D3A0E2E546B5B104B74C - - children - - A9AEC5BA924F4382B5749ACC - FB594E4FA1A145B6B1A7EE4E - A26FAF9921E24272A13C6AE0 - E5DAFA8555EB40D78468A0D6 - B33D4E81354E49398E2C3DC8 - 7369A2112BB9422BA478F6E0 - FD949A47B9334D55AED8D090 - 73F1271D00AA46739C9233BA - D28618AA782C49A5B8F568CC - 14833BC0FBFB4B0C8672D8D3 - 2D687DE1255D459FAC46B986 - 38EC203546A14BD0913E36FB - 87375B4DDB794013BF02CB2E - 6F18CD3DC7F14E15AC671EF2 - 765AFF434ED547D0B29EBC1C - 457ECD26C4F14E829E904F1D - 2CB643C08C4B48B6983B92A0 - - isa - PBXGroup - name - Resources - sourceTree - <group> - - DE80330D02144B4CB72AAC15 - - includeInIndex - 1 - isa - PBXFileReference - lastKnownFileType - text - path - Pods-acknowledgements.markdown - sourceTree - <group> - - E3E553FD14FA42C1ACFA5816 - - fileRef - 4FB78B9DC5274E45ADE45851 - isa - PBXBuildFile - settings - - COMPILER_FLAGS - -fobjc-arc -DOS_OBJECT_USE_OBJC=0 - - - E5DAFA8555EB40D78468A0D6 - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundErrorIcon@2x.png - path - TSMessages/Resources/Images/NotificationBackgroundErrorIcon@2x.png - sourceTree - <group> - - E7CE3C41B4E042728248247C - - buildActionMask - 2147483647 - files - - 27BA6AF02B394EEDAD3073AA - 3C72160B2C8E45918505780B - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - E95AE17553B84BCD971EAC70 - - children - - A4CE9FC3E73543C38D323E2D - - isa - PBXGroup - name - iOS - sourceTree - <group> - - FB594E4FA1A145B6B1A7EE4E - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundError@2x.png - path - TSMessages/Resources/Images/NotificationBackgroundError@2x.png - sourceTree - <group> - - FD949A47B9334D55AED8D090 - - includeInIndex - 1 - isa - PBXFileReference - name - NotificationBackgroundSuccess.png - path - TSMessages/Resources/Images/NotificationBackgroundSuccess.png - sourceTree - <group> - - FE01A87B16DA489ABE41A574 - - children - - 40DEB958567846FFA974718C - DE80330D02144B4CB72AAC15 - 34EC7EF804A54DD38BFE4A78 - 5E0CFB2579BD4622AD88E280 - AABC6754D5F9439D9E9892C3 - B600F65B8D7D41ED85CBCC57 - - isa - PBXGroup - name - Pods - sourceTree - <group> - - FED15D656EC849388C009B94 - - buildActionMask - 2147483647 - files - - 4D0B5DF76432433290E9A520 - - isa - PBXSourcesBuildPhase - runOnlyForDeploymentPostprocessing - 0 - - - rootObject - 960AC0AB20464481B1F828FB - - diff --git a/ExampleProject/TSMessagesDefaultDesign.json b/ExampleProject/TSMessagesDefaultDesign.json deleted file mode 100644 index 7a2dedad..00000000 --- a/ExampleProject/TSMessagesDefaultDesign.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "success": { - "backgroundImageName": "NotificationBackgroundSuccess.png", - "borderColor": "#005700", - "borderHeight": 1, - "buttonBackgroundImageName": "NotificationButtonBackground.png", - "buttonTitleTextColor": "#FFFFFF", - "buttonTitleShadowColor": "#67B759", - "buttonTitleShadowOffsetX": 0, - "buttonTitleShadowOffsetY": -1, - "contentFontSize": 12, - "contentTextColor": "#FFFFFF", - "imageName": "NotificationBackgroundSuccessIcon.png", - "shadowColor": "#67B759", - "shadowOffsetX": 0, - "shadowOffsetY": -1, - "textColor": "#FFFFFF", - "titleFontSize": 14 - }, - "message": { - "backgroundImageName": "NotificationBackgroundMessage.png", - "borderColor": "#727C83", - "borderHeight": 1, - "buttonBackgroundImageName": "NotificationButtonBackground.png", - "buttonTitleTextColor": "#727C83", - "buttonTitleShadowColor": "#EBEEF1", - "buttonTitleShadowOffsetX": 0, - "buttonTitleShadowOffsetY": 1, - "contentFontSize": 12, - "contentTextColor": "#727C83", - "imageName": "", - "shadowColor": "#EBEEF1", - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "textColor": "#727C83", - "titleFontSize": 14 - }, - "warning": { - "backgroundImageName": "NotificationBackgroundWarning.png", - "borderColor": "#A28918", - "borderHeight": 1, - "buttonBackgroundImageName": "NotificationButtonBackground.png", - "buttonTitleTextColor": "#484638", - "buttonTitleShadowColor": "#E5D87C", - "buttonTitleShadowOffsetX": 0, - "buttonTitleShadowOffsetY": 1, - "contentFontSize": 12, - "contentTextColor": "#484638", - "imageName": "NotificationBackgroundWarningIcon.png", - "shadowColor": "#E5D87C", - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "textColor": "#484638", - "titleFontSize": 14 - }, - "error": { - "backgroundImageName": "NotificationBackgroundError.png", - "borderColor": "#700000", - "borderHeight": 1, - "buttonBackgroundImageName": "NotificationButtonBackground.png", - "buttonTitleTextColor": "#FFFFFF", - "buttonTitleShadowColor": "#812929", - "buttonTitleShadowOffsetX": 0, - "buttonTitleShadowOffsetY": -1, - "contentFontSize": 12, - "contentTextColor": "#FFFFFF", - "imageName": "NotificationBackgroundErrorIcon.png", - "shadowColor": "#812929", - "shadowOffsetX": 0, - "shadowOffsetY": -1, - "textColor": "#FFFFFF", - "titleFontSize": 14 - } -} \ No newline at end of file diff --git a/LICENSE b/LICENSE index bd6134a8..9dc7b711 100644 --- a/LICENSE +++ b/LICENSE @@ -1,8 +1,19 @@ -Copyright (c) 2013, Toursprung -All rights reserved. +Copyright (c) 2014 Toursprung, Felix Krause -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Pod/Assets/.gitkeep b/Pod/Assets/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/TSMessages/Resources/Images/NotificationBackgroundError.png b/Pod/Assets/NotificationBackgroundError.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundError.png rename to Pod/Assets/NotificationBackgroundError.png diff --git a/TSMessages/Resources/Images/NotificationBackgroundError@2x.png b/Pod/Assets/NotificationBackgroundError@2x.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundError@2x.png rename to Pod/Assets/NotificationBackgroundError@2x.png diff --git a/TSMessages/Resources/Images/NotificationBackgroundErrorIcon.png b/Pod/Assets/NotificationBackgroundErrorIcon.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundErrorIcon.png rename to Pod/Assets/NotificationBackgroundErrorIcon.png diff --git a/TSMessages/Resources/Images/NotificationBackgroundErrorIcon@2x.png b/Pod/Assets/NotificationBackgroundErrorIcon@2x.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundErrorIcon@2x.png rename to Pod/Assets/NotificationBackgroundErrorIcon@2x.png diff --git a/TSMessages/Resources/Images/NotificationBackgroundMessage.png b/Pod/Assets/NotificationBackgroundMessage.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundMessage.png rename to Pod/Assets/NotificationBackgroundMessage.png diff --git a/TSMessages/Resources/Images/NotificationBackgroundMessage@2x.png b/Pod/Assets/NotificationBackgroundMessage@2x.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundMessage@2x.png rename to Pod/Assets/NotificationBackgroundMessage@2x.png diff --git a/TSMessages/Resources/Images/NotificationBackgroundSuccess.png b/Pod/Assets/NotificationBackgroundSuccess.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundSuccess.png rename to Pod/Assets/NotificationBackgroundSuccess.png diff --git a/TSMessages/Resources/Images/NotificationBackgroundSuccess@2x.png b/Pod/Assets/NotificationBackgroundSuccess@2x.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundSuccess@2x.png rename to Pod/Assets/NotificationBackgroundSuccess@2x.png diff --git a/TSMessages/Resources/Images/NotificationBackgroundSuccessIcon.png b/Pod/Assets/NotificationBackgroundSuccessIcon.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundSuccessIcon.png rename to Pod/Assets/NotificationBackgroundSuccessIcon.png diff --git a/TSMessages/Resources/Images/NotificationBackgroundSuccessIcon@2x.png b/Pod/Assets/NotificationBackgroundSuccessIcon@2x.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundSuccessIcon@2x.png rename to Pod/Assets/NotificationBackgroundSuccessIcon@2x.png diff --git a/TSMessages/Resources/Images/NotificationBackgroundWarning.png b/Pod/Assets/NotificationBackgroundWarning.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundWarning.png rename to Pod/Assets/NotificationBackgroundWarning.png diff --git a/TSMessages/Resources/Images/NotificationBackgroundWarning@2x.png b/Pod/Assets/NotificationBackgroundWarning@2x.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundWarning@2x.png rename to Pod/Assets/NotificationBackgroundWarning@2x.png diff --git a/TSMessages/Resources/Images/NotificationBackgroundWarningIcon.png b/Pod/Assets/NotificationBackgroundWarningIcon.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundWarningIcon.png rename to Pod/Assets/NotificationBackgroundWarningIcon.png diff --git a/TSMessages/Resources/Images/NotificationBackgroundWarningIcon@2x.png b/Pod/Assets/NotificationBackgroundWarningIcon@2x.png similarity index 100% rename from TSMessages/Resources/Images/NotificationBackgroundWarningIcon@2x.png rename to Pod/Assets/NotificationBackgroundWarningIcon@2x.png diff --git a/TSMessages/Resources/Images/NotificationButtonBackground.png b/Pod/Assets/NotificationButtonBackground.png old mode 100644 new mode 100755 similarity index 100% rename from TSMessages/Resources/Images/NotificationButtonBackground.png rename to Pod/Assets/NotificationButtonBackground.png diff --git a/TSMessages/Resources/Images/NotificationButtonBackground@2x.png b/Pod/Assets/NotificationButtonBackground@2x.png old mode 100644 new mode 100755 similarity index 100% rename from TSMessages/Resources/Images/NotificationButtonBackground@2x.png rename to Pod/Assets/NotificationButtonBackground@2x.png diff --git a/TSMessages/Resources/TSMessagesDefaultDesign.json b/Pod/Assets/TSMessagesDefaultDesign.json old mode 100644 new mode 100755 similarity index 100% rename from TSMessages/Resources/TSMessagesDefaultDesign.json rename to Pod/Assets/TSMessagesDefaultDesign.json diff --git a/Pod/Classes/.gitkeep b/Pod/Classes/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/TSMessages/Views/TSBlurView.h b/Pod/Classes/TSBlurView.h old mode 100644 new mode 100755 similarity index 100% rename from TSMessages/Views/TSBlurView.h rename to Pod/Classes/TSBlurView.h diff --git a/TSMessages/Views/TSBlurView.m b/Pod/Classes/TSBlurView.m old mode 100644 new mode 100755 similarity index 100% rename from TSMessages/Views/TSBlurView.m rename to Pod/Classes/TSBlurView.m diff --git a/TSMessages/Classes/TSMessage.h b/Pod/Classes/TSMessage.h similarity index 98% rename from TSMessages/Classes/TSMessage.h rename to Pod/Classes/TSMessage.h index dc1cd506..5d004c11 100755 --- a/TSMessages/Classes/TSMessage.h +++ b/Pod/Classes/TSMessage.h @@ -163,6 +163,9 @@ typedef NS_ENUM(NSInteger,TSMessageNotificationDuration) { /** Indicates whether a notification is currently active. */ + (BOOL)isNotificationActive; +/** Returns the currently queued array of TSMessageView */ ++ (NSArray *)queuedMessages; + /** Prepares the notification view to be displayed in the future. It is queued and then displayed in fadeInCurrentNotification. You don't have to use this method. */ diff --git a/TSMessages/Classes/TSMessage.m b/Pod/Classes/TSMessage.m similarity index 99% rename from TSMessages/Classes/TSMessage.m rename to Pod/Classes/TSMessage.m index 59e6bfd6..51610799 100755 --- a/TSMessages/Classes/TSMessage.m +++ b/Pod/Classes/TSMessage.m @@ -404,6 +404,11 @@ + (BOOL)isNotificationActive return notificationActive; } ++ (NSArray *)queuedMessages +{ + return [TSMessage sharedMessage].messages; +} + + (UIViewController *)defaultViewController { __strong UIViewController *defaultViewController = _defaultViewController; diff --git a/TSMessages/Views/TSMessageView.h b/Pod/Classes/TSMessageView.h similarity index 100% rename from TSMessages/Views/TSMessageView.h rename to Pod/Classes/TSMessageView.h diff --git a/TSMessages/Views/TSMessageView.m b/Pod/Classes/TSMessageView.m similarity index 100% rename from TSMessages/Views/TSMessageView.m rename to Pod/Classes/TSMessageView.m diff --git a/README.md b/README.md index 97df0558..db4453bf 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@ TSMessages ========== This library provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). +[![CI Status](http://img.shields.io/travis/Felix Krause/TSMessages.svg?style=flat)](https://travis-ci.org/Felix Krause/TSMessages) +[![Version](https://img.shields.io/cocoapods/v/TSMessages.svg?style=flat)](http://cocoadocs.org/docsets/TSMessages) +[![License](https://img.shields.io/cocoapods/l/TSMessages.svg?style=flat)](http://cocoadocs.org/docsets/TSMessages) +[![Platform](https://img.shields.io/cocoapods/p/TSMessages.svg?style=flat)](http://cocoadocs.org/docsets/TSMessages) The notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it. @@ -11,24 +15,24 @@ It is very easy to add new notification types with a different design. Add the n **Take a look at the Example project to see how to use this library.** You have to open the workspace, not the project file, since the Example project uses cocoapods. +## Author Follow the developer on Twitter: [KrauseFx](http://twitter.com/KrauseFx) (Felix Krause) ## Installation ### From CocoaPods +TSMessages is available through [CocoaPods](http://cocoapods.org). To install +it, simply add the following line to your Podfile: -Add `pod 'TSMessages'` to your Podfile. + pod "TSMessages" -### Manually +## License -Drag the whole folder into your project and remove the example project. This library requires ARC. - -Drag HexColors{.h/.m} from Submodules/HexColors/Classes into your project. +TSMessages is available under the MIT license. See the LICENSE file for more info. +```objective-c To show notifications use the following code: -------- - -```objective-c [TSMessage showNotificationWithTitle:title subtitle:subtitle type:TSMessageNotificationTypeError]; @@ -84,4 +88,4 @@ This project requires ARC. If you have ideas how to improve this library please let me know or send a pull request. -**Recent changes can be found in the releases section of this repo.** +**Recent changes can be found in the releases section of this repo.** \ No newline at end of file diff --git a/TSMessages.podspec b/TSMessages.podspec index 72f07ba6..c0a602b6 100644 --- a/TSMessages.podspec +++ b/TSMessages.podspec @@ -1,28 +1,34 @@ +# +# Be sure to run `pod lib lint TSMessages.podspec' to ensure this is a +# valid spec and remove all comments before submitting the spec. +# +# Any lines starting with a # are optional, but encouraged +# +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html +# + Pod::Spec.new do |s| - s.name = "TSMessages" - s.version = "0.9.9" - s.summary = "Easy to use and customizable messages/notifications for iOS à la Tweetbot." + s.name = "TSMessages" + s.version = "0.9.10" + s.summary = "Easy to use and customizable messages/notifications for iOS à la Tweetbot." s.description = <<-DESC This framework provides an easy to use class to show little notification views on the top of the screen. (à la Tweetbot). The notification moves from the top of the screen underneath the navigation bar and stays there for a few seconds, depending on the length of the displayed text. To dismiss a notification before the time runs out, the user can swipe it to the top or just tap it. There are 4 different types already set up for you: Success, Error, Warning, Message. DESC - s.homepage = "https://github.com/toursprung/TSMessages/" - - s.license = 'MIT' - - s.author = { "Felix Krause" => "krausefx@gmail.com" } - - s.source = { :git => "https://github.com/toursprung/TSMessages.git", :tag => "#{s.version}"} - s.platform = :ios, '5.0' + s.license = 'MIT' + s.author = { "Felix Krause" => "krausefx@gmail.com" } + s.source = { :git => "https://github.com/toursprung/TSMessages.git", :tag => s.version.to_s } + s.social_media_url = 'https://twitter.com/KrauseFx' - s.source_files = 'TSMessages/Classes/**/*.{h,m}', 'TSMessages/Views/**/*.{h,m}' + s.platform = :ios, '5.0' + s.requires_arc = true - s.resources = "TSMessages/Resources/**/*.{png,json}" + s.source_files = 'Pod/Classes' + s.resources = ['Pod/Assets/*.png', 'Pod/Assets/*.json'] - - s.requires_arc = true + s.public_header_files = 'Pod/Classes/**/*.h' s.dependency 'HexColors' end