├── BinAnimation ├── Assets │ └── .gitkeep └── Classes │ ├── .gitkeep │ ├── BinAnimationGroupFactory.h │ ├── BinAnimationPublic.h │ ├── BinAnimation.h │ ├── BinTransitionFactory.h │ ├── BinAnimationGroupFactory.m │ ├── BinSpringAnimationFactory.h │ ├── BinAnimationFactory.h │ ├── BinKeyframeAnimationFactory.h │ ├── BinAnimationFounder.h │ ├── CALayer+BinAdditions.h │ ├── BinTransitionFactory.m │ └── NSArray+BinAdditions.h ├── _Pods.xcodeproj ├── Example ├── Tests │ ├── en.lproj │ │ └── InfoPlist.strings │ ├── Tests-Prefix.pch │ ├── Tests-Info.plist │ └── Tests.m ├── BinAnimation │ ├── en.lproj │ │ └── InfoPlist.strings │ ├── BinViewController.h │ ├── BinAppDelegate.h │ ├── main.m │ ├── BinAnimation-Prefix.pch │ ├── BinAnimationViewController │ │ ├── BinAnimationGroupViewController.h │ │ ├── BinMultiAnimationViewController.h │ │ ├── BinSpringAnimationViewController.h │ │ ├── BinKeyframeAnimationViewController.h │ │ ├── BinAnimation_OneOrSomeViewController.h │ │ ├── BinTransitionAnimationViewController.h │ │ ├── BinAnimation_SyncOrAsyncViewController.h │ │ ├── BinAnimation_PauseAndResumeViewController.h │ │ ├── BinAnimation_CompletionBlockViewController.h │ │ ├── BinKeyframeAnimation_FromOrToOrByViewController.h │ │ ├── BinBaseViewController.h │ │ ├── BinAnimation_PauseAndResumeViewController.m │ │ ├── BinSpringAnimationViewController.m │ │ ├── BinAnimation_CompletionBlockViewController.m │ │ ├── BinMultiAnimationViewController.m │ │ ├── BinAnimation_OneOrSomeViewController.m │ │ └── BinKeyframeAnimationViewController.m │ ├── BinExamplePublic.h │ ├── BinExamplePublic.m │ ├── BinAnimation-Info.plist │ ├── BinViewController.m │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ └── Images.xcassets │ │ └── AppIcon.appiconset │ │ └── Contents.json ├── Pods │ ├── Target Support Files │ │ ├── Kiwi │ │ │ ├── Kiwi.modulemap │ │ │ ├── Kiwi-dummy.m │ │ │ ├── Kiwi-prefix.pch │ │ │ ├── Kiwi.xcconfig │ │ │ └── Info.plist │ │ ├── BinAnimation │ │ │ ├── BinAnimation.modulemap │ │ │ ├── BinAnimation-dummy.m │ │ │ ├── BinAnimation-prefix.pch │ │ │ ├── BinAnimation.xcconfig │ │ │ ├── BinAnimation-umbrella.h │ │ │ └── Info.plist │ │ ├── FBSnapshotTestCase │ │ │ ├── FBSnapshotTestCase.modulemap │ │ │ ├── FBSnapshotTestCase-dummy.m │ │ │ ├── FBSnapshotTestCase-prefix.pch │ │ │ ├── FBSnapshotTestCase-umbrella.h │ │ │ ├── FBSnapshotTestCase.xcconfig │ │ │ └── Info.plist │ │ ├── Pods-BinAnimation_Tests │ │ │ ├── Pods-BinAnimation_Tests.modulemap │ │ │ ├── Pods-BinAnimation_Tests-dummy.m │ │ │ ├── Pods-BinAnimation_Tests-umbrella.h │ │ │ ├── Info.plist │ │ │ ├── Pods-BinAnimation_Tests.debug.xcconfig │ │ │ └── Pods-BinAnimation_Tests.release.xcconfig │ │ └── Pods-BinAnimation_Example │ │ │ ├── Pods-BinAnimation_Example.modulemap │ │ │ ├── Pods-BinAnimation_Example-dummy.m │ │ │ ├── Pods-BinAnimation_Example-umbrella.h │ │ │ ├── Pods-BinAnimation_Example.debug.xcconfig │ │ │ ├── Pods-BinAnimation_Example.release.xcconfig │ │ │ ├── Info.plist │ │ │ └── Pods-BinAnimation_Example-acknowledgements.markdown │ ├── Kiwi │ │ ├── Classes │ │ │ ├── Core │ │ │ │ ├── KWCaptureSpy.h │ │ │ │ ├── NSValue+KiwiAdditions.h │ │ │ │ ├── KWCountType.h │ │ │ │ ├── KWProbe.h │ │ │ │ ├── KWDeviceInfo.h │ │ │ │ ├── KWExpectationType.h │ │ │ │ ├── KWReporting.h │ │ │ │ ├── KWMessageSpying.h │ │ │ │ ├── KWFormatter.h │ │ │ │ ├── NSObject+KiwiVerifierAdditions.h │ │ │ │ ├── KiwiBlockMacros.h │ │ │ │ ├── KWAny.h │ │ │ │ ├── KWExampleDelegate.h │ │ │ │ ├── NSMethodSignature+KiwiAdditions.h │ │ │ │ ├── KWLet.h │ │ │ │ ├── KWSymbolicator.h │ │ │ │ ├── KWAny.m │ │ │ │ ├── KWNull.h │ │ │ │ ├── KWNull.m │ │ │ │ ├── NSObject+KiwiVerifierAdditions.m │ │ │ │ ├── KWProbePoller.h │ │ │ │ ├── NSObject+KiwiSpyAdditions.h │ │ │ │ ├── KWFutureObject.h │ │ │ │ ├── KWWorkarounds.h │ │ │ │ ├── NSProxy+KiwiVerifierAdditions.h │ │ │ │ ├── KWBlock.h │ │ │ │ ├── NSMethodSignature+KiwiAdditions.m │ │ │ │ ├── NSValue+KiwiAdditions.m │ │ │ │ ├── KWDeviceInfo.m │ │ │ │ ├── KWStringUtilities.h │ │ │ │ ├── KWCallSite.h │ │ │ │ ├── NSProxy+KiwiVerifierAdditions.m │ │ │ │ ├── KWFailure.h │ │ │ │ ├── KWWorkarounds.m │ │ │ │ ├── KiwiConfiguration.h │ │ │ │ ├── KWMatcher.h │ │ │ │ ├── KWFutureObject.m │ │ │ │ ├── KWExampleSuite.h │ │ │ │ ├── KWMatcherFactory.h │ │ │ │ ├── KWMatchers.h │ │ │ │ ├── KWSpec.h │ │ │ │ ├── KWBlock.m │ │ │ │ ├── NSInvocation+KiwiAdditions.h │ │ │ │ ├── KWMatching.h │ │ │ │ ├── KWExampleNodeVisitor.h │ │ │ │ ├── NSObject+KiwiSpyAdditions.m │ │ │ │ ├── KWInvocationCapturer.h │ │ │ │ ├── KWBackgroundTask.h │ │ │ │ ├── KWObjCUtilities.h │ │ │ │ ├── NSNumber+KiwiAdditions.h │ │ │ │ ├── KWCallSite.m │ │ │ │ ├── KWMessageTracker.h │ │ │ │ ├── KWMessagePattern.h │ │ │ │ ├── KWFailure.m │ │ │ │ ├── NSInvocation+OCMAdditions.h │ │ │ │ ├── KWFormatter.m │ │ │ │ ├── KWProbePoller.m │ │ │ │ ├── KWCaptureSpy.m │ │ │ │ └── KWExampleSuiteBuilder.h │ │ │ ├── Matchers │ │ │ │ ├── KWBeEmptyMatcher.h │ │ │ │ ├── KWBeZeroMatcher.h │ │ │ │ ├── KWEqualMatcher.h │ │ │ │ ├── KWBeIdenticalToMatcher.h │ │ │ │ ├── KWBeKindOfClassMatcher.h │ │ │ │ ├── KWBeMemberOfClassMatcher.h │ │ │ │ ├── KWBeSubclassOfClassMatcher.h │ │ │ │ ├── KWRespondToSelectorMatcher.h │ │ │ │ ├── KWConformToProtocolMatcher.h │ │ │ │ ├── KWBeTrueMatcher.h │ │ │ │ ├── KWGenericMatchEvaluator.h │ │ │ │ ├── KWBeWithinMatcher.h │ │ │ │ ├── KWStringPrefixMatcher.h │ │ │ │ ├── KWInequalityMatcher.h │ │ │ │ ├── KWBlockRaiseMatcher.h │ │ │ │ ├── KWRegularExpressionPatternMatcher.h │ │ │ │ ├── KWBeBetweenMatcher.h │ │ │ │ ├── KWGenericMatcher.h │ │ │ │ ├── KWNilMatcher.h │ │ │ │ ├── KWChangeMatcher.h │ │ │ │ ├── KWHaveValueMatcher.h │ │ │ │ ├── KWStringContainsMatcher.h │ │ │ │ ├── KWNotificationMatcher.h │ │ │ │ ├── KWContainMatcher.h │ │ │ │ ├── KWGenericMatchingAdditions.h │ │ │ │ ├── KWStringPrefixMatcher.m │ │ │ │ ├── KWStringContainsMatcher.m │ │ │ │ ├── KWGenericMatcher.m │ │ │ │ ├── KWConformToProtocolMatcher.m │ │ │ │ ├── KWRespondToSelectorMatcher.m │ │ │ │ ├── KWBeKindOfClassMatcher.m │ │ │ │ ├── KWBeZeroMatcher.m │ │ │ │ ├── KWBeMemberOfClassMatcher.m │ │ │ │ ├── KWHaveMatcher.h │ │ │ │ ├── KWContainStringMatcher.h │ │ │ │ ├── KWBeSubclassOfClassMatcher.m │ │ │ │ ├── KWBeTrueMatcher.m │ │ │ │ ├── KWBeEmptyMatcher.m │ │ │ │ ├── KWBeIdenticalToMatcher.m │ │ │ │ ├── KWUserDefinedMatcher.h │ │ │ │ ├── KWEqualMatcher.m │ │ │ │ └── KWGenericMatchingAdditions.m │ │ │ ├── Nodes │ │ │ │ ├── KWAfterAllNode.h │ │ │ │ ├── KWAfterEachNode.h │ │ │ │ ├── KWBeforeAllNode.h │ │ │ │ ├── KWBeforeEachNode.h │ │ │ │ ├── KWExampleNode.h │ │ │ │ ├── KWAfterAllNode.m │ │ │ │ ├── KWAfterEachNode.m │ │ │ │ ├── KWBeforeAllNode.m │ │ │ │ ├── KWBeforeEachNode.m │ │ │ │ ├── KWBlockNode.m │ │ │ │ ├── KWItNode.h │ │ │ │ ├── KWRegisterMatchersNode.h │ │ │ │ ├── KWBlockNode.h │ │ │ │ ├── KWPendingNode.h │ │ │ │ ├── KWRegisterMatchersNode.m │ │ │ │ ├── KWLetNode.h │ │ │ │ ├── KWPendingNode.m │ │ │ │ └── KWItNode.m │ │ │ ├── Shared Examples │ │ │ │ ├── KWSharedExampleRegistry.h │ │ │ │ ├── KWSharedExample.h │ │ │ │ └── KWSharedExample.m │ │ │ ├── Mocking │ │ │ │ ├── NSObject+KiwiMockAdditions.h │ │ │ │ └── NSObject+KiwiMockAdditions.m │ │ │ ├── Verifiers │ │ │ │ ├── KWVerifying.h │ │ │ │ ├── KWExistVerifier.h │ │ │ │ ├── KWAsyncVerifier.h │ │ │ │ └── KWMatchVerifier.h │ │ │ ├── Config │ │ │ │ ├── KWSuiteConfigurationBase.h │ │ │ │ └── KWAllTestsSuite.m │ │ │ └── Stubbing │ │ │ │ ├── KWStub.h │ │ │ │ └── KWIntercept.h │ │ ├── License.txt │ │ └── Readme.md │ ├── Local Podspecs │ │ └── BinAnimation.podspec.json │ ├── FBSnapshotTestCase │ │ ├── FBSnapshotTestCase │ │ │ ├── Categories │ │ │ │ ├── UIApplication+StrictKeyWindow.h │ │ │ │ ├── UIImage+Snapshot.h │ │ │ │ ├── UIApplication+StrictKeyWindow.m │ │ │ │ ├── UIImage+Diff.h │ │ │ │ └── UIImage+Compare.h │ │ │ ├── FBSnapshotTestCasePlatform.h │ │ │ └── FBSnapshotTestCasePlatform.m │ │ └── LICENSE │ └── Manifest.lock ├── BinAnimation.xcodeproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── Podfile ├── BinAnimation.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── Podfile.lock ├── Resources ├── AnimationGroup.gif ├── SpringAnimation.gif ├── KeyframeAnimation.gif ├── Animation_OneOrSome.gif ├── TransitionAnimation.gif ├── Animation_SyncOrAsync.gif ├── Animation_CompletionBlock.gif ├── Animation_PauseAndResume.gif └── KeyframeAnimation_FromOrToOrBy.gif ├── .travis.yml ├── .gitignore ├── LICENSE └── BinAnimation.podspec /BinAnimation/Assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /BinAnimation/Classes/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj -------------------------------------------------------------------------------- /Example/Tests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Example/BinAnimation/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Resources/AnimationGroup.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angBin/BinAnimation/HEAD/Resources/AnimationGroup.gif -------------------------------------------------------------------------------- /Resources/SpringAnimation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angBin/BinAnimation/HEAD/Resources/SpringAnimation.gif -------------------------------------------------------------------------------- /Resources/KeyframeAnimation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angBin/BinAnimation/HEAD/Resources/KeyframeAnimation.gif -------------------------------------------------------------------------------- /Resources/Animation_OneOrSome.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angBin/BinAnimation/HEAD/Resources/Animation_OneOrSome.gif -------------------------------------------------------------------------------- /Resources/TransitionAnimation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angBin/BinAnimation/HEAD/Resources/TransitionAnimation.gif -------------------------------------------------------------------------------- /Resources/Animation_SyncOrAsync.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angBin/BinAnimation/HEAD/Resources/Animation_SyncOrAsync.gif -------------------------------------------------------------------------------- /Resources/Animation_CompletionBlock.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angBin/BinAnimation/HEAD/Resources/Animation_CompletionBlock.gif -------------------------------------------------------------------------------- /Resources/Animation_PauseAndResume.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angBin/BinAnimation/HEAD/Resources/Animation_PauseAndResume.gif -------------------------------------------------------------------------------- /Resources/KeyframeAnimation_FromOrToOrBy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/angBin/BinAnimation/HEAD/Resources/KeyframeAnimation_FromOrToOrBy.gif -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Kiwi/Kiwi.modulemap: -------------------------------------------------------------------------------- 1 | framework module Kiwi { 2 | umbrella header "Kiwi-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Kiwi/Kiwi-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Kiwi : NSObject 3 | @end 4 | @implementation PodsDummy_Kiwi 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/BinAnimation/BinAnimation.modulemap: -------------------------------------------------------------------------------- 1 | framework module BinAnimation { 2 | umbrella header "BinAnimation-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/BinAnimation/BinAnimation-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_BinAnimation : NSObject 3 | @end 4 | @implementation PodsDummy_BinAnimation 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/FBSnapshotTestCase/FBSnapshotTestCase.modulemap: -------------------------------------------------------------------------------- 1 | framework module FBSnapshotTestCase { 2 | umbrella header "FBSnapshotTestCase-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Tests/Tests-Prefix.pch: -------------------------------------------------------------------------------- 1 | // The contents of this file are implicitly included at the beginning of every test case source file. 2 | 3 | #ifdef __OBJC__ 4 | 5 | @import Kiwi; 6 | @import FBSnapshotTestCase; 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/FBSnapshotTestCase/FBSnapshotTestCase-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_FBSnapshotTestCase : NSObject 3 | @end 4 | @implementation PodsDummy_FBSnapshotTestCase 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-BinAnimation_Tests/Pods-BinAnimation_Tests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_BinAnimation_Tests { 2 | umbrella header "Pods-BinAnimation_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/BinAnimation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-BinAnimation_Example/Pods-BinAnimation_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_BinAnimation_Example { 2 | umbrella header "Pods-BinAnimation_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-BinAnimation_Tests/Pods-BinAnimation_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_BinAnimation_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_BinAnimation_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-BinAnimation_Example/Pods-BinAnimation_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_BinAnimation_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_BinAnimation_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'BinAnimation_Example' do 4 | pod 'BinAnimation', :path => '../' 5 | 6 | target 'BinAnimation_Tests' do 7 | inherit! :search_paths 8 | 9 | pod 'Kiwi' 10 | pod 'FBSnapshotTestCase' 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWCaptureSpy.h: -------------------------------------------------------------------------------- 1 | #import "KWMessageSpying.h" 2 | 3 | @interface KWCaptureSpy : NSObject 4 | 5 | @property (nonatomic, strong, readonly) id argument; 6 | 7 | - (id)initWithArgumentIndex:(NSUInteger)index; 8 | 9 | @end 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/BinAnimation/BinAnimation-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/BinAnimation.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/FBSnapshotTestCase/FBSnapshotTestCase-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/BinAnimation.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinViewController.h 3 | // BinAnimation 4 | // 5 | // Created by angBin on 10/16/2018. 6 | // Copyright (c) 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinBaseViewController.h" 10 | 11 | @interface BinViewController : BinBaseViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Kiwi/Kiwi-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import 14 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface NSValue(KiwiAdditions) 10 | 11 | #pragma mark - Accessing Data 12 | 13 | - (NSData *)dataValue; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWCountType.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | enum { 10 | KWCountTypeExact, 11 | KWCountTypeAtLeast, 12 | KWCountTypeAtMost 13 | }; 14 | 15 | typedef NSUInteger KWCountType; 16 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWProbe.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWProbe.h 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 13/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol KWProbe 12 | - (BOOL)isSatisfied; 13 | - (void)sample; 14 | @end 15 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWDeviceInfo.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface KWDeviceInfo : NSObject 10 | 11 | #pragma mark - Getting the Device Type 12 | 13 | + (BOOL)isSimulator; 14 | + (BOOL)isPhysical; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeEmptyMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beEmpty; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeZeroMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beZero; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinAppDelegate.h 3 | // BinAnimation 4 | // 5 | // Created by angBin on 10/16/2018. 6 | // Copyright (c) 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BinAppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWExpectationType.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | enum { 10 | KWExpectationTypeShould, 11 | KWExpectationTypeShouldNot, 12 | KWExpectationTypeMaybe 13 | }; 14 | 15 | typedef NSUInteger KWExpectationType; 16 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWReporting.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWFailure; 10 | 11 | @protocol KWReporting 12 | 13 | #pragma mark - Reporting Failures 14 | 15 | - (void)reportFailure:(KWFailure *)failure; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWEqualMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWEqualMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)equal:(id)anObject; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMessageSpying.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @protocol KWMessageSpying 10 | 11 | #pragma mark - Spying on Messages 12 | 13 | - (void)object:(id)anObject didReceiveInvocation:(NSInvocation *)anInvocation; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /BinAnimation/Classes/BinAnimationGroupFactory.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimationGroupFactory.h 3 | // BinAnimation 4 | // 5 | // Created by angBin on 2018/9/15. 6 | // Copyright © 2018年 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinAnimationFactory.h" 10 | 11 | FOUNDATION_EXTERN NSString *const BinAnimationGroup; 12 | 13 | @interface BinAnimationGroupFactory : BinAnimationFactory 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeIdenticalToMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beIdenticalTo:(id)anObject; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeKindOfClassMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beKindOfClass:(Class)aClass; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeMemberOfClassMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beMemberOfClass:(Class)aClass; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWFormatter.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface KWFormatter : NSObject 10 | 11 | #pragma mark - Getting Descriptions 12 | 13 | + (NSString *)formatObject:(id)anObject; 14 | + (NSString *)formatObjectIncludingClass:(id)anObject; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeSubclassOfClassMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beSubclassOfClass:(Class)aClass; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWRespondToSelectorMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)respondToSelector:(SEL)aSelector; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/BinAnimation/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // BinAnimation 4 | // 5 | // Created by angBin on 10/16/2018. 6 | // Copyright (c) 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "BinAppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([BinAppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @protocol KWVerifying; 10 | 11 | @interface NSObject(KiwiVerifierAdditions) 12 | 13 | #pragma mark - Attaching to Verifiers 14 | 15 | - (id)attachToVerifier:(id)aVerifier; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWConformToProtocolMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)conformToProtocol:(Protocol *)aProtocol; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeTrueMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beTrue; 15 | - (void)beFalse; 16 | - (void)beYes; 17 | - (void)beNo; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimation-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_5_0 10 | #warning "This project uses features only available in iOS SDK 5.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import 16 | #endif 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KiwiBlockMacros.h: -------------------------------------------------------------------------------- 1 | // 2 | // KiwiBlockMacros.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 11/07/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | // user defined matchers 10 | #define registerMatcher(name) \ 11 | \ 12 | @interface NSObject (KWUserDefinedMatchersDefinitions) \ 13 | - (void)name; \ 14 | @end \ 15 | 16 | #define defineMatcher(...) KWDefineMatchers(__VA_ARGS__) 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWGenericMatchEvaluator.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWGenericMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Allen Ding on 1/31/13. 6 | // Copyright (c) 2013 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KWGenericMatchEvaluator : NSObject 12 | 13 | + (BOOL)isGenericMatcher:(id)object; 14 | 15 | + (BOOL)genericMatcher:(id)matcher matches:(id)object; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWAny.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | // KWAny exists to determine arguments in a message pattern that should 10 | // match any value. Used for pointers as well as for scalar values. 11 | @interface KWAny : NSObject 12 | 13 | #pragma mark - Initializing 14 | 15 | + (id)any; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinAnimationGroupViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimationGroupViewController.h 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/10/19. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinBaseViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface BinAnimationGroupViewController : BinBaseViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinMultiAnimationViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinMultiAnimationViewController.h 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2019/2/16. 6 | // Copyright © 2019 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinBaseViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface BinMultiAnimationViewController : BinBaseViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWExampleDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWExampleGroupDelegate.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 08/09/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class KWExample; 12 | @class KWFailure; 13 | 14 | @protocol KWExampleDelegate 15 | 16 | - (void)example:(KWExample *)example didFailWithFailure:(KWFailure *)failure; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeWithinMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeWithinMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beWithin:(id)aDistance of:(id)aValue; 15 | - (void)equal:(double)aValue withDelta:(double)aDelta; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinSpringAnimationViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinSpringAnimationViewController.h 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/10/18. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinBaseViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface BinSpringAnimationViewController : BinBaseViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinKeyframeAnimationViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinKeyframeAnimationViewController.h 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/10/19. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinBaseViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface BinKeyframeAnimationViewController : BinBaseViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface NSMethodSignature(KiwiAdditions) 10 | 11 | #pragma mark - Getting Information on Message Arguments 12 | 13 | - (NSUInteger)numberOfMessageArguments; 14 | - (const char *)messageArgumentTypeAtIndex:(NSUInteger)anIndex; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinAnimation_OneOrSomeViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimation_OneOrSomeViewController.h 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/12/21. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinBaseViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface BinAnimation_OneOrSomeViewController : BinBaseViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinTransitionAnimationViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinTransitionAnimationViewController.h 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/10/19. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinBaseViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface BinTransitionAnimationViewController : BinBaseViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWLet.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #if __has_feature(objc_arc) 8 | # define KW_ARC_AUTORELEASE(obj) obj 9 | #else 10 | # define KW_ARC_AUTORELEASE(obj) [obj autorelease] 11 | #endif 12 | 13 | #define KW_LET_REF(var) \ 14 | (__autoreleasing id *) \ 15 | ( (void *(^)(void)) KW_ARC_AUTORELEASE([^{ void *ref = &var; return ref; } copy]) )() 16 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWSymbolicator.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWSymbolicator.h 3 | // Kiwi 4 | // 5 | // Created by Jerry Marino on 4/28/13. 6 | // Copyright (c) 2013 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWSymbolicator.h" 11 | #import "KWCallSite.h" 12 | 13 | long kwCallerAddress(void); 14 | 15 | @interface KWCallSite (KWSymbolication) 16 | 17 | + (KWCallSite *)callSiteWithCallerAddress:(long)address; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlockNode.h" 9 | #import "KWExampleNode.h" 10 | 11 | @interface KWAfterAllNode : KWBlockNode 12 | 13 | #pragma mark - Initializing 14 | 15 | + (id)afterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlockNode.h" 9 | #import "KWExampleNode.h" 10 | 11 | @interface KWAfterEachNode : KWBlockNode 12 | 13 | #pragma mark - Initializing 14 | 15 | + (id)afterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlockNode.h" 9 | #import "KWExampleNode.h" 10 | 11 | @interface KWBeforeAllNode : KWBlockNode 12 | 13 | #pragma mark - Initializing 14 | 15 | + (id)beforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlockNode.h" 9 | #import "KWExampleNode.h" 10 | 11 | @interface KWBeforeEachNode : KWBlockNode 12 | 13 | #pragma mark - Initializing 14 | 15 | + (id)beforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinAnimation_SyncOrAsyncViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimation_SyncOrAsyncViewController.h 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/12/19. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinBaseViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface BinAnimation_SyncOrAsyncViewController : BinBaseViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/BinAnimation/BinAnimation.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/BinAnimation 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT} 6 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinAnimation_PauseAndResumeViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimation_PauseAndResumeViewController.h 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/12/19. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinBaseViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface BinAnimation_PauseAndResumeViewController : BinBaseViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-BinAnimation_Tests/Pods-BinAnimation_Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_BinAnimation_TestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_BinAnimation_TestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinAnimation_CompletionBlockViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimation_CompletionBlockViewController.h 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/12/19. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinBaseViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface BinAnimation_CompletionBlockViewController : BinBaseViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWAny.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWAny.h" 8 | 9 | @implementation KWAny 10 | 11 | #pragma mark - Initializing 12 | 13 | + (id)any { 14 | static KWAny *sharedAny = nil; 15 | static dispatch_once_t onceToken; 16 | dispatch_once(&onceToken, ^{ 17 | sharedAny = [self new]; 18 | 19 | }); 20 | return sharedAny; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-BinAnimation_Example/Pods-BinAnimation_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_BinAnimation_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_BinAnimation_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Shared Examples/KWSharedExampleRegistry.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2014 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import 8 | 9 | @class KWSharedExample; 10 | 11 | @interface KWSharedExampleRegistry : NSObject 12 | 13 | + (instancetype)sharedRegistry; 14 | - (KWSharedExample *)sharedExampleForName:(NSString *)name; 15 | - (void)registerSharedExample:(KWSharedExample *)sharedExample; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinKeyframeAnimation_FromOrToOrByViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinKeyframeAnimation_FromOrToOrByViewController.h 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/12/21. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinBaseViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface BinKeyframeAnimation_FromOrToOrByViewController : BinBaseViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWNull.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | // KWNull exists to represent the same thing as NSNull, except that Kiwi needs 10 | // to distinguish between null singletons used internally and those a user 11 | // is using as an object parameter. 12 | @interface KWNull : NSObject 13 | 14 | #pragma mark - Initializing 15 | 16 | + (id)null; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWExampleNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWContextNode; 10 | @protocol KWExampleNodeVisitor; 11 | 12 | @protocol KWExampleNode 13 | 14 | #pragma mark - Accepting Visitors 15 | 16 | - (void)acceptExampleNodeVisitor:(id)aVisitor; 17 | 18 | @optional 19 | 20 | - (NSArray *)contextStack; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWNull.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWNull.h" 8 | 9 | @implementation KWNull 10 | 11 | #pragma mark - Initializing 12 | 13 | 14 | + (id)null { 15 | static KWNull *sharedNull = nil; 16 | static dispatch_once_t onceToken; 17 | dispatch_once(&onceToken, ^{ 18 | sharedNull = [self new]; 19 | 20 | }); 21 | 22 | return sharedNull; 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSObject+KiwiVerifierAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "NSObject+KiwiVerifierAdditions.h" 8 | #import "KWVerifying.h" 9 | 10 | @implementation NSObject(KiwiVerifierAdditions) 11 | 12 | #pragma mark - Attaching to Verifiers 13 | 14 | - (id)attachToVerifier:(id)aVerifier { 15 | [aVerifier setSubject:self]; 16 | return aVerifier; 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // StringPrefixMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 17/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KWStringPrefixMatcher : NSObject 12 | 13 | + (id)matcherWithPrefix:(NSString *)aPrefix; 14 | - (id)initWithPrefix:(NSString *)aPrefix; 15 | 16 | @end 17 | 18 | #define hasPrefix(prefix) [KWStringPrefixMatcher matcherWithPrefix:prefix] 19 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWInequalityMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWInequalityMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)beLessThan:(id)aValue; 15 | - (void)beLessThanOrEqualTo:(id)aValue; 16 | - (void)beGreaterThan:(id)aValue; 17 | - (void)beGreaterThanOrEqualTo:(id)aValue; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWProbePoller.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWProbePoller.h 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 13/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWProbe.h" 11 | 12 | #define kKW_DEFAULT_PROBE_DELAY 0.1 13 | 14 | @interface KWProbePoller : NSObject 15 | 16 | - (id)initWithTimeout:(NSTimeInterval)theTimeout delay:(NSTimeInterval)theDelay shouldWait:(BOOL)wait; 17 | - (BOOL)check:(id)probe; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBlockRaiseMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBlockRaiseMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | - (void)raise; 15 | - (void)raiseWithName:(NSString *)aName; 16 | - (void)raiseWithReason:(NSString *)aReason; 17 | - (void)raiseWithName:(NSString *)aName reason:(NSString *)aReason; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWRegularExpressionPatternMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWRegularExpressionPatternMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Kristopher Johnson on 4/11/13. 6 | // Copyright (c) 2013 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KiwiConfiguration.h" 10 | #import "KWMatcher.h" 11 | 12 | @interface KWRegularExpressionPatternMatcher : KWMatcher 13 | 14 | - (void)matchPattern:(NSString *)pattern; 15 | 16 | - (void)matchPattern:(NSString *)pattern options:(NSRegularExpressionOptions)options; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @protocol KiwiMockAdditions 10 | 11 | #pragma mark - Creating Mocks 12 | 13 | + (id)mock; 14 | + (id)mockWithName:(NSString *)aName; 15 | 16 | + (id)nullMock; 17 | + (id)nullMockWithName:(NSString *)aName; 18 | 19 | @end 20 | 21 | @interface NSObject(KiwiMockAdditions) 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeBetweenMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | 10 | @interface KWBeBetweenMatcher : KWMatcher 11 | 12 | #pragma mark - Configuring Matchers 13 | 14 | // TODO: 'and' below is a reserved word in C++ 15 | - (void)beBetween:(id)aLowerEndpoint and:(id)anUpperEndpoint; 16 | - (void)beInTheIntervalFrom:(id)aLowerEndpoint to:(id)anUpperEndpoint; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWCaptureSpy; 10 | 11 | @protocol KiwiSpyAdditions 12 | 13 | - (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index; 14 | + (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index; 15 | 16 | @end 17 | 18 | @interface NSObject (KiwiSpyAdditions) 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWGenericMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 24/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWMatcher.h" 11 | 12 | @protocol KWGenericMatching 13 | 14 | - (BOOL)matches:(id)object; 15 | 16 | @end 17 | 18 | @interface KWGenericMatcher : KWMatcher 19 | 20 | #pragma mark - Configuring Matchers 21 | 22 | - (void)match:(id)aMatcher; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWFutureObject.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWFutureObject.h 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 13/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef id (^KWFutureObjectBlock)(void); 12 | 13 | @interface KWFutureObject : NSObject 14 | 15 | + (id)objectWithObjectPointer:(id *)pointer; 16 | + (id)futureObjectWithBlock:(KWFutureObjectBlock)block; 17 | - (id)initWithBlock:(KWFutureObjectBlock)aBlock; 18 | - (id)object; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWNilMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWBeNilMatcher.h 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 14/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWMatcher.h" 11 | 12 | @interface KWNilMatcher : KWMatcher 13 | 14 | - (void)beNil; 15 | - (void)beNonNil; 16 | 17 | - (void)beNil:(BOOL)workaroundArgument; 18 | - (void)beNonNil:(BOOL)workaroundArgument; 19 | 20 | + (BOOL)verifyNilSubject; 21 | + (BOOL)verifyNonNilSubject; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Verifiers/KWVerifying.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWCallSite; 10 | 11 | @protocol KWVerifying 12 | 13 | @property (nonatomic, readonly) KWCallSite *callSite; 14 | 15 | - (NSString *)descriptionForAnonymousItNode; 16 | 17 | #pragma mark - Subjects 18 | 19 | @property (nonatomic, strong) id subject; 20 | 21 | #pragma mark - Ending Examples 22 | 23 | - (void)exampleWillEnd; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWWorkarounds.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG 10 | 11 | #pragma mark - Invocation Exception Bug Workaround 12 | 13 | // See KiwiConfiguration.h for notes. 14 | void KWSetExceptionFromAcrossInvocationBoundary(NSException *anException); 15 | NSException *KWGetAndClearExceptionFromAcrossInvocationBoundary(void); 16 | 17 | #endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG 18 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2013 Allen Ding. All rights reserved. 5 | // 6 | // Contributed by https://github.com/dwlnetnl 7 | // 8 | 9 | #import "KiwiConfiguration.h" 10 | 11 | @protocol KWVerifying; 12 | 13 | @interface NSProxy (KiwiVerifierAdditions) 14 | 15 | #pragma mark - Attaching to Verifiers 16 | 17 | - (id)attachToVerifier:(id)aVerifier; 18 | - (id)attachToVerifier:(id)firstVerifier verifier:(id)secondVerifier; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /BinAnimation/Classes/BinAnimationPublic.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimationPublic.h 3 | // BinAnimation 4 | // 5 | // Created by angBin on 2018/9/16. 6 | // Copyright © 2018年 angBin. All rights reserved. 7 | // 8 | 9 | #ifndef BinAnimationPublic_h 10 | #define BinAnimationPublic_h 11 | 12 | #import 13 | #import 14 | 15 | #ifdef DEBUG 16 | #define BALog(format, ...) NSLog((@"BinAnimationLog: %s [Line %d] " format), __FUNCTION__, __LINE__, ##__VA_ARGS__) 17 | #else 18 | #define BALog(...) 19 | #endif 20 | 21 | #endif /* BinAnimationPublic_h */ 22 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWBlock.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface KWBlock : NSObject 10 | 11 | #pragma mark - Initializing 12 | - (id)initWithBlock:(void (^)(void))block; 13 | 14 | + (id)blockWithBlock:(void (^)(void))block; 15 | 16 | #pragma mark - Calling Blocks 17 | 18 | - (void)call; 19 | 20 | @end 21 | 22 | #pragma mark - Creating Blocks 23 | 24 | KWBlock *theBlock(void (^block)(void)); 25 | KWBlock *lambda(void (^block)(void)); 26 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWChangeMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWChangeMatcher.h 3 | // Kiwi 4 | // 5 | // Copyright (c) 2013 Eloy Durán . 6 | // All rights reserved. 7 | // 8 | 9 | #import "KWMatcher.h" 10 | 11 | typedef NSInteger (^KWChangeMatcherCountBlock)(); 12 | 13 | @interface KWChangeMatcher : KWMatcher 14 | 15 | // Expect _any_ change. 16 | - (void)change:(KWChangeMatcherCountBlock)countBlock; 17 | 18 | // Expect changes by a specific amount. 19 | - (void)change:(KWChangeMatcherCountBlock)countBlock by:(NSInteger)expectedDifference; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/FBSnapshotTestCase/FBSnapshotTestCase-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "FBSnapshotTestCase.h" 14 | #import "FBSnapshotTestCasePlatform.h" 15 | #import "FBSnapshotTestController.h" 16 | 17 | FOUNDATION_EXPORT double FBSnapshotTestCaseVersionNumber; 18 | FOUNDATION_EXPORT const unsigned char FBSnapshotTestCaseVersionString[]; 19 | 20 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Kiwi/Kiwi.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Kiwi 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = -framework "XCTest" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Kiwi 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * https://www.objc.io/issues/6-build-tools/travis-ci/ 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode7.3 6 | language: objective-c 7 | # cache: cocoapods 8 | # podfile: Example/Podfile 9 | # before_install: 10 | # - gem install cocoapods # Since Travis is not always on latest version 11 | # - pod install --project-directory=Example 12 | script: 13 | - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/BinAnimation.xcworkspace -scheme BinAnimation-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty 14 | - pod lib lint 15 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSMethodSignature+KiwiAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "NSMethodSignature+KiwiAdditions.h" 8 | 9 | @implementation NSMethodSignature(KiwiAdditions) 10 | 11 | #pragma mark - Getting Information on Message Arguments 12 | 13 | - (NSUInteger)numberOfMessageArguments { 14 | return [self numberOfArguments] - 2; 15 | } 16 | 17 | - (const char *)messageArgumentTypeAtIndex:(NSUInteger)anIndex { 18 | return [self getArgumentTypeAtIndex:anIndex + 2]; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWHaveValueMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWHaveValueMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 24/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWMatcher.h" 11 | 12 | @interface KWHaveValueMatcher : KWMatcher 13 | 14 | #pragma mark - Configuring Matchers 15 | 16 | - (void)haveValue:(id)value forKey:(NSString *)key; 17 | - (void)haveValue:(id)value forKeyPath:(NSString *)keyPath; 18 | - (void)haveValueForKey:(NSString *)key; 19 | - (void)haveValueForKeyPath:(NSString *)keyPath; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSValue+KiwiAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "NSValue+KiwiAdditions.h" 8 | #import "KWObjCUtilities.h" 9 | 10 | @implementation NSValue(KiwiAdditions) 11 | 12 | #pragma mark - Accessing Data 13 | 14 | - (NSData *)dataValue { 15 | NSUInteger length = KWObjCTypeLength([self objCType]); 16 | void *buffer = malloc(length); 17 | [self getValue:buffer]; 18 | NSData *data = [NSData dataWithBytes:buffer length:length]; 19 | free(buffer); 20 | return data; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /BinAnimation/Classes/BinAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimation.h 3 | // BinAnimation 4 | // 5 | // Created by angBin on 2018/9/15. 6 | // Copyright © 2018年 angBin. All rights reserved. 7 | // 8 | 9 | #ifndef BinAnimation_h 10 | #define BinAnimation_h 11 | 12 | #import "NSArray+BinAdditions.h" 13 | #import "CALayer+BinAdditions.h" 14 | #import "BinAnimationFounder.h" 15 | #import "BinAnimationFactory.h" 16 | #import "BinKeyframeAnimationFactory.h" 17 | #import "BinSpringAnimationFactory.h" 18 | #import "BinTransitionFactory.h" 19 | #import "BinAnimationGroupFactory.h" 20 | #import "BinKeyframeFactory.h" 21 | 22 | #endif /* BinAnimation_h */ 23 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinBaseViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinBaseViewController.h 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/12/17. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface BinBaseViewController : UIViewController 14 | 15 | @property (nonatomic, strong, nullable) UILabel *animationlabel; 16 | @property (nonatomic, strong) UITableView *animationTableView; 17 | @property (nonatomic, strong) NSArray *animationArr; 18 | 19 | - (void)changeColor; 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWStringContainsMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Stewart Gleadow on 7/06/12. 6 | // Copyright (c) 2012 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWGenericMatcher.h" 11 | 12 | @interface KWStringContainsMatcher : NSObject 13 | 14 | + (id)matcherWithSubstring:(NSString *)aSubstring DEPRECATED_ATTRIBUTE; 15 | - (id)initWithSubstring:(NSString *)aSubstring DEPRECATED_ATTRIBUTE; 16 | 17 | @end 18 | 19 | #define hasSubstring(substring) [KWStringContainsMatcher matcherWithSubstring:substring] 20 | -------------------------------------------------------------------------------- /BinAnimation/Classes/BinTransitionFactory.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinTransitionFactory.h 3 | // BinAnimation 4 | // 5 | // Created by angBin on 2018/9/25. 6 | // Copyright © 2018年 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinAnimationFactory.h" 10 | 11 | FOUNDATION_EXTERN NSString *const BinTransition; 12 | 13 | @interface BinTransitionFactory : BinAnimationFactory 14 | 15 | - (BinTransitionFactory *(^)(NSString *type))type; 16 | 17 | - (BinTransitionFactory *(^)(NSString *subtype))subtype; 18 | 19 | - (BinTransitionFactory *(^)(float startProgress))startProgress; 20 | 21 | - (BinTransitionFactory *(^)(float endProgress))endProgress; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWDeviceInfo.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWDeviceInfo.h" 8 | 9 | #if TARGET_IPHONE_SIMULATOR 10 | 11 | #import 12 | 13 | #endif // #if TARGET_IPHONE_SIMULATOR 14 | 15 | @implementation KWDeviceInfo 16 | 17 | #pragma mark - Getting the Device Type 18 | 19 | + (BOOL)isSimulator { 20 | #if TARGET_IPHONE_SIMULATOR 21 | return YES; 22 | #else 23 | return NO; 24 | #endif // #if TARGET_IPHONE_SIMULATOR 25 | } 26 | 27 | + (BOOL)isPhysical { 28 | return ![self isSimulator]; 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/BinAnimation.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BinAnimation", 3 | "version": "0.1.0", 4 | "summary": "A short description of BinAnimation.", 5 | "description": "TODO: Add long description of the pod here.", 6 | "homepage": "https://github.com/angBin/BinAnimation", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "angBin": "895887420@qq.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/angBin/BinAnimation.git", 16 | "tag": "0.1.0" 17 | }, 18 | "platforms": { 19 | "ios": "8.0" 20 | }, 21 | "source_files": "BinAnimation/Classes/**/*" 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/Categories/UIApplication+StrictKeyWindow.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2015, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | * 9 | */ 10 | 11 | #import 12 | 13 | @interface UIApplication (StrictKeyWindow) 14 | 15 | /** 16 | @return The receiver's @c keyWindow. Raises an assertion if @c nil. 17 | */ 18 | - (UIWindow *)fb_strictKeyWindow; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWStringUtilities.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | #pragma mark - Checking for Case Separated Words 10 | 11 | BOOL KWStringHasWordPrefix(NSString *string, NSString *prefix); 12 | BOOL KWStringHasStrictWordPrefix(NSString *string, NSString *prefix); 13 | BOOL KWStringHasWord(NSString *string, NSString *word); 14 | 15 | #pragma mark - Getting Type Encodings 16 | 17 | NSString *KWEncodingWithObjCTypes(const char *firstType, ...) NS_REQUIRES_NIL_TERMINATION; 18 | NSString *KWEncodingForDefaultMethod(void); 19 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWNotificationMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWNotificationMatcher.h 3 | // 4 | // Created by Paul Zabelin on 7/12/12. 5 | // Copyright (c) 2012 Blazing Cloud, Inc. All rights reserved. 6 | // 7 | 8 | #import "KWMatcher.h" 9 | 10 | typedef void (^PostedNotificationBlock)(NSNotification* note); 11 | 12 | @interface KWNotificationMatcher : KWMatcher 13 | 14 | - (void)bePosted; 15 | - (void)bePostedWithObject:(id)object; 16 | - (void)bePostedWithUserInfo:(NSDictionary *)userInfo; 17 | - (void)bePostedWithObject:(id)object andUserInfo:(NSDictionary *)userInfo; 18 | - (void)bePostedEvaluatingBlock:(PostedNotificationBlock)block; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWContainMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | #import "KWMatchVerifier.h" 10 | 11 | @interface KWContainMatcher : KWMatcher 12 | 13 | #pragma mark - Configuring Matchers 14 | 15 | - (void)contain:(id)anObject; 16 | - (void)containObjectsInArray:(NSArray *)anArray; 17 | 18 | @end 19 | 20 | @interface KWMatchVerifier(KWContainMatcherAdditions) 21 | 22 | #pragma mark - Verifying 23 | 24 | - (void)containObjects:(id)firstObject, ... NS_REQUIRES_NIL_TERMINATION; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWAfterAllNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWAfterAllNode.h" 8 | #import "KWExampleNodeVisitor.h" 9 | 10 | @implementation KWAfterAllNode 11 | 12 | #pragma mark - Initializing 13 | 14 | + (id)afterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { 15 | return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; 16 | } 17 | 18 | #pragma mark - Accepting Visitors 19 | 20 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 21 | [aVisitor visitAfterAllNode:self]; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWAfterEachNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWAfterEachNode.h" 8 | #import "KWExampleNodeVisitor.h" 9 | 10 | @implementation KWAfterEachNode 11 | 12 | #pragma mark - Initializing 13 | 14 | + (id)afterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { 15 | return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; 16 | } 17 | 18 | #pragma mark - Accepting Visitors 19 | 20 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 21 | [aVisitor visitAfterEachNode:self]; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWBeforeAllNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeforeAllNode.h" 8 | #import "KWExampleNodeVisitor.h" 9 | 10 | @implementation KWBeforeAllNode 11 | 12 | #pragma mark - Initializing 13 | 14 | + (id)beforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { 15 | return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; 16 | } 17 | 18 | #pragma mark - Accepting Visitors 19 | 20 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 21 | [aVisitor visitBeforeAllNode:self]; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWBeforeEachNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeforeEachNode.h" 8 | #import "KWExampleNodeVisitor.h" 9 | 10 | @implementation KWBeforeEachNode 11 | 12 | #pragma mark - Initializing 13 | 14 | + (id)beforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block { 15 | return [[self alloc] initWithCallSite:aCallSite description:nil block:block]; 16 | } 17 | 18 | #pragma mark - Accepting Visitors 19 | 20 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 21 | [aVisitor visitBeforeEachNode:self]; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Config/KWSuiteConfigurationBase.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWSuiteConfigurationBase.h 3 | // Kiwi 4 | // 5 | // Created by Adam Sharp on 14/12/2013. 6 | // Copyright (c) 2013 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface KWSuiteConfigurationBase : NSObject 12 | 13 | + (instancetype)defaultConfiguration; 14 | 15 | - (void)configureSuite; 16 | 17 | - (void)setUp; 18 | - (void)tearDown; 19 | 20 | @property (nonatomic, copy) void (^beforeAllSpecsBlock)(void); 21 | @property (nonatomic, copy) void (^afterAllSpecsBlock)(void); 22 | 23 | @end 24 | 25 | void beforeAllSpecs(void (^block)(void)); 26 | void afterAllSpecs(void (^block)(void)); 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-BinAnimation_Example/Pods-BinAnimation_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BinAnimation" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/BinAnimation/BinAnimation.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "BinAnimation" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-BinAnimation_Example/Pods-BinAnimation_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/BinAnimation" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/BinAnimation/BinAnimation.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "BinAnimation" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Shared Examples/KWSharedExample.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2014 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import 8 | 9 | typedef void (^KWSharedExampleBlock)(NSDictionary *data); 10 | 11 | @interface KWSharedExample : NSObject 12 | 13 | @property (nonatomic, copy) NSString *name; 14 | @property (nonatomic, copy) KWSharedExampleBlock block; 15 | 16 | - (id)initWithName:(NSString *)name block:(KWSharedExampleBlock)block; 17 | 18 | @end 19 | 20 | #pragma mark - Building Shared Example Groups 21 | 22 | void sharedExamplesFor(NSString *name, KWSharedExampleBlock block); 23 | void itBehavesLike(NSString *name, NSDictionary *data); 24 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWCallSite.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface KWCallSite : NSObject 10 | 11 | #pragma mark - Initializing 12 | 13 | - (id)initWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber; 14 | 15 | + (id)callSiteWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber; 16 | 17 | #pragma mark - Properties 18 | 19 | @property (nonatomic, readonly, copy) NSString *filename; 20 | @property (nonatomic, readonly) NSUInteger lineNumber; 21 | 22 | #pragma mark - Identifying and Comparing 23 | 24 | - (BOOL)isEqualToCallSite:(KWCallSite *)aCallSite; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWBlockNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBlockNode.h" 8 | 9 | @implementation KWBlockNode 10 | 11 | @synthesize description = _description; 12 | 13 | #pragma mark - Initializing 14 | 15 | - (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block { 16 | self = [super init]; 17 | if (self) { 18 | _callSite = aCallSite; 19 | _description = [aDescription copy]; 20 | _block = [block copy]; 21 | } 22 | 23 | return self; 24 | } 25 | 26 | - (void)performBlock { 27 | if (self.block != nil) { self.block(); } 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Mocking/NSObject+KiwiMockAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "NSObject+KiwiMockAdditions.h" 8 | #import "KWMock.h" 9 | 10 | @implementation NSObject(KiwiMockAdditions) 11 | 12 | #pragma mark - Creating Mocks 13 | 14 | + (id)mock { 15 | return [KWMock mockForClass:[self class]]; 16 | } 17 | 18 | + (id)mockWithName:(NSString *)aName { 19 | return [KWMock mockWithName:aName forClass:[self class]]; 20 | } 21 | 22 | + (id)nullMock { 23 | return [KWMock nullMockForClass:[self class]]; 24 | } 25 | 26 | + (id)nullMockWithName:(NSString *)aName { 27 | return [KWMock nullMockWithName:aName forClass:[self class]]; 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /BinAnimation/Classes/BinAnimationGroupFactory.m: -------------------------------------------------------------------------------- 1 | 2 | // 3 | // BinAnimationGroupFactory.m 4 | // BinAnimation 5 | // 6 | // Created by angBin on 2018/9/15. 7 | // Copyright © 2018年 angBin. All rights reserved. 8 | // 9 | 10 | #import "BinAnimationGroupFactory.h" 11 | 12 | NSString *const BinAnimationGroup = @"animationGroup"; 13 | 14 | @interface BinAnimationGroupFactory () 15 | 16 | /** 17 | The property name must be BinAnimationGroup's value. 18 | */ 19 | @property (nonatomic, weak) CAAnimationGroup *animationGroup; 20 | 21 | @end 22 | 23 | @implementation BinAnimationGroupFactory 24 | 25 | - (void)setAnimationGroup:(CAAnimationGroup *)animationGroup { 26 | _animationGroup = animationGroup; 27 | [self setValue:animationGroup forKey:BinAnimation]; 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /Example/Tests/Tests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSProxy+KiwiVerifierAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2013 Allen Ding. All rights reserved. 5 | // 6 | // Contributed by https://github.com/dwlnetnl 7 | // 8 | 9 | #import "NSProxy+KiwiVerifierAdditions.h" 10 | #import "KWVerifying.h" 11 | 12 | @implementation NSProxy (KiwiVerifierAdditions) 13 | 14 | #pragma mark - Attaching to Verifiers 15 | 16 | - (id)attachToVerifier:(id)aVerifier { 17 | [aVerifier setSubject:self]; 18 | return aVerifier; 19 | } 20 | 21 | - (id)attachToVerifier:(id)firstVerifier verifier:(id)secondVerifier { 22 | [firstVerifier setSubject:self]; 23 | [secondVerifier setSubject:self]; 24 | return firstVerifier; 25 | } 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinExamplePublic.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinExamplePublic.h 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/12/17. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #ifndef BinExamplePublic_h 10 | #define BinExamplePublic_h 11 | 12 | #import 13 | #import "BinAnimation.h" 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | @interface BinExamplePublic : NSObject 18 | 19 | CGFloat bin_screenWidth(void); 20 | 21 | CGFloat bin_screenHeight(void); 22 | 23 | CGFloat bin_widthExceptNavBar(void); 24 | 25 | CGFloat bin_heightExceptNavBar(void); 26 | 27 | UIColor * bin_bgColor(void); 28 | 29 | UIColor * bin_tintColor1(void); 30 | 31 | UIColor * bin_tintColor2(void); 32 | 33 | @end 34 | 35 | NS_ASSUME_NONNULL_END 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWItNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlockNode.h" 9 | #import "KWExampleNode.h" 10 | 11 | @class KWPendingNode; 12 | @class KWExample; 13 | @class KWContextNode; 14 | 15 | @interface KWItNode : KWBlockNode 16 | 17 | @property (nonatomic, strong) KWExample *example; 18 | @property (nonatomic, weak, readonly) KWContextNode *context; 19 | 20 | #pragma mark - Initializing 21 | 22 | + (id)itNodeWithCallSite:(KWCallSite *)aCallSite 23 | description:(NSString *)aDescription 24 | context:(KWContextNode *)context 25 | block:(void (^)(void))block; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/FBSnapshotTestCase/FBSnapshotTestCase.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FBSnapshotTestCase 2 | ENABLE_BITCODE = NO 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | OTHER_LDFLAGS = -framework "Foundation" -framework "QuartzCore" -framework "UIKit" -framework "XCTest" 6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/FBSnapshotTestCase 11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 12 | SKIP_INSTALL = YES 13 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWFailure.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWCallSite; 10 | 11 | @interface KWFailure : NSObject 12 | 13 | #pragma mark - Initializing 14 | 15 | - (id)initWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage; 16 | - (id)initWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ...; 17 | 18 | + (id)failureWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage; 19 | + (id)failureWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ...; 20 | 21 | #pragma mark - Properties 22 | 23 | @property (nonatomic, readonly) NSString *message; 24 | @property (nonatomic, weak, readonly) KWCallSite *callSite; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWWorkarounds.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWWorkarounds.h" 8 | 9 | #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG 10 | 11 | static NSException *KWExceptionAcrossInvokeBoundary = nil; 12 | 13 | void KWSetExceptionFromAcrossInvocationBoundary(NSException *anException) { 14 | if (KWExceptionAcrossInvokeBoundary != nil) 15 | return; 16 | 17 | KWExceptionAcrossInvokeBoundary = anException; 18 | } 19 | 20 | NSException *KWGetAndClearExceptionFromAcrossInvocationBoundary(void) { 21 | NSException *exception = KWExceptionAcrossInvokeBoundary; 22 | KWExceptionAcrossInvokeBoundary = nil; 23 | return exception; 24 | } 25 | 26 | #endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG 27 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Verifiers/KWExistVerifier.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWExpectationType.h" 9 | #import "KWVerifying.h" 10 | 11 | @class KWCallSite; 12 | 13 | @protocol KWReporting; 14 | 15 | @interface KWExistVerifier : NSObject 16 | 17 | #pragma mark - Initializing 18 | 19 | - (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter; 20 | 21 | + (id)existVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite reporter:(id)aReporter; 22 | 23 | #pragma mark - Properties 24 | 25 | @property (nonatomic, strong) id subject; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWExampleNode.h" 9 | 10 | @class KWCallSite; 11 | 12 | @interface KWRegisterMatchersNode : NSObject 13 | 14 | #pragma mark - Initializing 15 | 16 | - (id)initWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix; 17 | 18 | + (id)registerMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix; 19 | 20 | #pragma mark - Getting Call Sites 21 | 22 | @property (nonatomic, readonly) KWCallSite *callSite; 23 | 24 | #pragma mark - Getting Namespace Prefixes 25 | 26 | @property (nonatomic, readonly) NSString *namespacePrefix; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/BinAnimation/BinAnimation-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "BinAnimation.h" 14 | #import "BinAnimationFactory.h" 15 | #import "BinAnimationFounder.h" 16 | #import "BinAnimationGroupFactory.h" 17 | #import "BinAnimationPublic.h" 18 | #import "BinKeyframeAnimationFactory.h" 19 | #import "BinKeyframeFactory.h" 20 | #import "BinSpringAnimationFactory.h" 21 | #import "BinTransitionFactory.h" 22 | #import "CALayer+BinAdditions.h" 23 | #import "NSArray+BinAdditions.h" 24 | 25 | FOUNDATION_EXPORT double BinAnimationVersionNumber; 26 | FOUNDATION_EXPORT const unsigned char BinAnimationVersionString[]; 27 | 28 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - BinAnimation (0.1.0) 3 | - FBSnapshotTestCase (2.1.4): 4 | - FBSnapshotTestCase/SwiftSupport (= 2.1.4) 5 | - FBSnapshotTestCase/Core (2.1.4) 6 | - FBSnapshotTestCase/SwiftSupport (2.1.4): 7 | - FBSnapshotTestCase/Core 8 | - Kiwi (2.4.0) 9 | 10 | DEPENDENCIES: 11 | - BinAnimation (from `../`) 12 | - FBSnapshotTestCase 13 | - Kiwi 14 | 15 | SPEC REPOS: 16 | https://github.com/cocoapods/specs.git: 17 | - FBSnapshotTestCase 18 | - Kiwi 19 | 20 | EXTERNAL SOURCES: 21 | BinAnimation: 22 | :path: "../" 23 | 24 | SPEC CHECKSUMS: 25 | BinAnimation: 2374232c70e05dd0baea1a01411afea89a0f6636 26 | FBSnapshotTestCase: 094f9f314decbabe373b87cc339bea235a63e07a 27 | Kiwi: f49c9d54b28917df5928fe44968a39ed198cb8a8 28 | 29 | PODFILE CHECKSUM: 5baa1f4d75d54eab96c9d0927a4c284e40aa6d43 30 | 31 | COCOAPODS: 1.5.3 32 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - BinAnimation (0.1.0) 3 | - FBSnapshotTestCase (2.1.4): 4 | - FBSnapshotTestCase/SwiftSupport (= 2.1.4) 5 | - FBSnapshotTestCase/Core (2.1.4) 6 | - FBSnapshotTestCase/SwiftSupport (2.1.4): 7 | - FBSnapshotTestCase/Core 8 | - Kiwi (2.4.0) 9 | 10 | DEPENDENCIES: 11 | - BinAnimation (from `../`) 12 | - FBSnapshotTestCase 13 | - Kiwi 14 | 15 | SPEC REPOS: 16 | https://github.com/cocoapods/specs.git: 17 | - FBSnapshotTestCase 18 | - Kiwi 19 | 20 | EXTERNAL SOURCES: 21 | BinAnimation: 22 | :path: "../" 23 | 24 | SPEC CHECKSUMS: 25 | BinAnimation: 2374232c70e05dd0baea1a01411afea89a0f6636 26 | FBSnapshotTestCase: 094f9f314decbabe373b87cc339bea235a63e07a 27 | Kiwi: f49c9d54b28917df5928fe44968a39ed198cb8a8 28 | 29 | PODFILE CHECKSUM: 5baa1f4d75d54eab96c9d0927a4c284e40aa6d43 30 | 31 | COCOAPODS: 1.5.3 32 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWBlockNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlock.h" 9 | 10 | @class KWCallSite; 11 | 12 | @interface KWBlockNode : NSObject 13 | 14 | #pragma mark - Initializing 15 | 16 | - (id)initWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block; 17 | 18 | #pragma mark - Getting Call Sites 19 | 20 | @property (nonatomic, strong, readonly) KWCallSite *callSite; 21 | 22 | #pragma mark - Getting Descriptions 23 | 24 | @property (nonatomic, copy) NSString *description; 25 | 26 | #pragma mark - Getting Blocks 27 | 28 | @property (nonatomic, copy, readonly) void (^block)(void); 29 | 30 | #pragma mark - Performing blocks 31 | 32 | - (void)performBlock; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KiwiConfiguration.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import 8 | 9 | // As of iPhone SDK 4 GM, exceptions thrown across an NSInvocation -invoke or 10 | // forwardInvocation: boundary in the simulator will terminate the app instead 11 | // of being caught in @catch blocks from the caller side of the -invoke. Kiwi 12 | // tries to handle this by storing the first exception that it would have 13 | // otherwise thrown in a nasty global that callers can look for and handle. 14 | // (Buggy termination is less desirable than global variables). 15 | // 16 | // Obviously, this can only handles cases where Kiwi itself would have raised 17 | // an exception. 18 | #if TARGET_IPHONE_SIMULATOR 19 | #define KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG 1 20 | #endif 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 26 | # Carthage/Checkouts 27 | 28 | Carthage/Build 29 | 30 | # We recommend against adding the Pods directory to your .gitignore. However 31 | # you should judge for yourself, the pros and cons are mentioned at: 32 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 33 | # 34 | # Note: if you ignore the Pods directory, make sure to uncomment 35 | # `pod install` in .travis.yml 36 | # 37 | # Pods/ 38 | -------------------------------------------------------------------------------- /Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/Categories/UIImage+Snapshot.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2015, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | * 9 | */ 10 | 11 | #import 12 | 13 | @interface UIImage (Snapshot) 14 | 15 | /// Uses renderInContext: to get a snapshot of the layer. 16 | + (UIImage *)fb_imageForLayer:(CALayer *)layer; 17 | 18 | /// Uses renderInContext: to get a snapshot of the view layer. 19 | + (UIImage *)fb_imageForViewLayer:(UIView *)view; 20 | 21 | /// Uses drawViewHierarchyInRect: to get a snapshot of the view and adds the view into a window if needed. 22 | + (UIImage *)fb_imageForView:(UIView *)view; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatching.h" 9 | 10 | @interface KWMatcher : NSObject 11 | 12 | #pragma mark - Initializing 13 | 14 | - (id)initWithSubject:(id)anObject; 15 | 16 | + (id)matcherWithSubject:(id)anObject; 17 | 18 | #pragma mark - Properties 19 | 20 | @property (nonatomic, strong) id subject; 21 | 22 | #pragma mark - Getting Matcher Strings 23 | 24 | + (NSArray *)matcherStrings; 25 | 26 | #pragma mark - Getting Matcher Compatability 27 | 28 | + (BOOL)canMatchSubject:(id)anObject; 29 | 30 | #pragma mark - Matching 31 | 32 | - (BOOL)evaluate; 33 | 34 | #pragma mark - Getting Failure Messages 35 | 36 | - (NSString *)failureMessageForShould; 37 | - (NSString *)failureMessageForShouldNot; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWFutureObject.m: -------------------------------------------------------------------------------- 1 | // 2 | // KWFutureObject.m 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 13/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import "KWFutureObject.h" 10 | 11 | @interface KWFutureObject() 12 | 13 | @property (nonatomic, strong) KWFutureObjectBlock block; 14 | 15 | @end 16 | 17 | @implementation KWFutureObject 18 | 19 | + (id)objectWithObjectPointer:(id *)pointer { 20 | return [self futureObjectWithBlock:^{ return *pointer; }]; 21 | } 22 | 23 | + (id)futureObjectWithBlock:(KWFutureObjectBlock)block { 24 | return [[self alloc] initWithBlock:block]; 25 | } 26 | 27 | - (id)initWithBlock:(KWFutureObjectBlock)aBlock { 28 | self = [super init]; 29 | if (self) { 30 | _block = [aBlock copy]; 31 | } 32 | return self; 33 | } 34 | 35 | - (id)object; { 36 | return self.block(); 37 | } 38 | 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWExampleSuite.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWExampleSuite.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 17/10/2011. 6 | // Copyright (c) 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWExampleNodeVisitor.h" 11 | 12 | @class KWContextNode; 13 | @class KWExample; 14 | 15 | @interface KWExampleSuite : NSObject 16 | 17 | - (id)initWithRootNode:(KWContextNode *)contextNode; 18 | - (void)addExample:(KWExample *)example; 19 | - (void)markLastExampleAsLastInContext:(KWContextNode *)context; 20 | 21 | @property (nonatomic, readonly) NSMutableArray *examples; 22 | 23 | #pragma mark - Example selector names 24 | 25 | - (NSString *)nextUniqueSelectorName:(NSString *)name; 26 | 27 | @end 28 | 29 | @interface NSInvocation (KWExampleGroup) 30 | @property (nonatomic, setter = kw_setExample:) KWExample *kw_example; 31 | @end 32 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinExamplePublic.m: -------------------------------------------------------------------------------- 1 | // 2 | // BinExamplePublic.m 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/12/17. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinExamplePublic.h" 10 | 11 | @implementation BinExamplePublic 12 | 13 | CGFloat bin_screenWidth(void) { 14 | return UIScreen.mainScreen.bounds.size.width; 15 | } 16 | 17 | CGFloat bin_screenHeight(void) { 18 | return UIScreen.mainScreen.bounds.size.height; 19 | } 20 | 21 | CGFloat bin_widthExceptNavBar(void) { 22 | return bin_screenWidth(); 23 | } 24 | 25 | CGFloat bin_heightExceptNavBar(void) { 26 | return bin_screenHeight()-64; 27 | } 28 | 29 | UIColor * bin_bgColor(void) { 30 | return UIColor.whiteColor; 31 | } 32 | 33 | UIColor * bin_tintColor1(void) { 34 | return UIColor.redColor; 35 | } 36 | 37 | UIColor * bin_tintColor2(void) { 38 | return UIColor.greenColor; 39 | } 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWPendingNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWExampleNode.h" 9 | 10 | @class KWContextNode; 11 | @class KWCallSite; 12 | 13 | @interface KWPendingNode : NSObject 14 | 15 | @property (nonatomic, readonly, strong) KWContextNode *context; 16 | 17 | #pragma mark - Initializing 18 | 19 | - (id)initWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription; 20 | 21 | + (id)pendingNodeWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription; 22 | 23 | #pragma mark - Getting Call Sites 24 | 25 | @property (nonatomic, readonly) KWCallSite *callSite; 26 | 27 | #pragma mark - Getting Descriptions 28 | 29 | @property (readonly, copy) NSString *description; 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+KiwiAdditions.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 24/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSObject (KiwiGenericMatchingAdditions) 12 | 13 | - (BOOL)isEqualOrMatches:(id)object DEPRECATED_ATTRIBUTE; 14 | 15 | @end 16 | 17 | @interface NSArray (KiwiGenericMatchingAdditions) 18 | 19 | - (BOOL)containsObjectEqualToOrMatching:(id)object DEPRECATED_ATTRIBUTE; 20 | - (BOOL)containsObjectMatching:(id)matcher DEPRECATED_ATTRIBUTE; 21 | 22 | @end 23 | 24 | @interface NSSet (KiwiGenericMatchingAdditions) 25 | 26 | - (BOOL)containsObjectEqualToOrMatching:(id)object DEPRECATED_ATTRIBUTE; 27 | 28 | @end 29 | 30 | @interface NSOrderedSet (KiwiGenericMatchingAdditions) 31 | 32 | - (BOOL)containsObjectEqualToOrMatching:(id)object DEPRECATED_ATTRIBUTE; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /BinAnimation/Classes/BinSpringAnimationFactory.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinSpringAnimationFactory.h 3 | // BinAnimation 4 | // 5 | // Created by angBin on 2018/9/25. 6 | // Copyright © 2018年 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinAnimationFactory.h" 10 | 11 | FOUNDATION_EXTERN NSString *const BinSpringAnimation; 12 | 13 | @interface BinSpringAnimationFactory : BinAnimationFactory 14 | 15 | - (BinSpringAnimationFactory *(^)(float mass))mass; 16 | 17 | - (BinSpringAnimationFactory *(^)(float stiffness))stiffness; 18 | 19 | - (BinSpringAnimationFactory *(^)(float damping))damping; 20 | 21 | - (BinSpringAnimationFactory *(^)(float initialVelocity))initialVelocity; 22 | 23 | - (BinSpringAnimationFactory *(^)(float *settlingDuration))getSettlingDuration; 24 | 25 | - (BinSpringAnimationFactory *(^)(id value))fromValue; 26 | 27 | - (BinSpringAnimationFactory *(^)(id value))toValue; 28 | 29 | - (BinSpringAnimationFactory *(^)(id value))byValue; 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Kiwi/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 2.4.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/BinAnimation/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/FBSnapshotTestCase/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 2.1.4 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-BinAnimation_Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-BinAnimation_Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMatcherFactory.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatching.h" 9 | 10 | @class KWFailure; 11 | @class KWMatcher; 12 | @class KWUserDefinedMatcherBuilder; 13 | 14 | @interface KWMatcherFactory : NSObject 15 | 16 | #pragma mark - Initializing 17 | 18 | - (id)init; 19 | 20 | #pragma mark - Properties 21 | 22 | @property (nonatomic, readonly) NSArray *registeredMatcherClasses; 23 | 24 | #pragma mark - Registering Matcher Classes 25 | 26 | - (void)registerMatcherClass:(Class)aClass; 27 | - (void)registerMatcherClassesWithNamespacePrefix:(NSString *)aNamespacePrefix; 28 | 29 | #pragma mark - Getting Method Signatures 30 | 31 | - (NSMethodSignature *)methodSignatureForMatcherSelector:(SEL)aSelector; 32 | 33 | #pragma mark - Getting Matchers 34 | 35 | - (KWMatcher *)matcherFromInvocation:(NSInvocation *)anInvocation subject:(id)subject; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMatchers.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWMatchers.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 17/06/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class KWUserDefinedMatcherBuilder; 12 | 13 | typedef void (^KWMatchersBuildingBlock)(KWUserDefinedMatcherBuilder *matcherBuilder); 14 | 15 | @class KWUserDefinedMatcher; 16 | 17 | @interface KWMatchers : NSObject 18 | 19 | + (id)matchers; 20 | 21 | #pragma mark - Defining Matchers 22 | 23 | + (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block; 24 | - (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block; 25 | - (void)addUserDefinedMatcherBuilder:(KWUserDefinedMatcherBuilder *)builder; 26 | 27 | #pragma mark - Building Matchers 28 | 29 | - (KWUserDefinedMatcher *)matcherForSelector:(SEL)selector subject:(id)subject; 30 | @end 31 | 32 | void KWDefineMatchers(NSString *selectorString, KWMatchersBuildingBlock block); 33 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWSpec.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import 9 | #import "KWExpectationType.h" 10 | #import "KWVerifying.h" 11 | #import "KWExampleDelegate.h" 12 | 13 | @class KWCallSite; 14 | 15 | @interface KWSpec : XCTestCase 16 | 17 | #pragma mark - Adding Verifiers 18 | 19 | + (id)addVerifier:(id)aVerifier; 20 | + (id)addExistVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; 21 | + (id)addMatchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite; 22 | + (id)addAsyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite timeout:(NSTimeInterval)timeout shouldWait:(BOOL)shouldWait; 23 | 24 | #pragma mark - Building Example Groups 25 | 26 | + (NSString *)file; 27 | + (void)buildExampleGroups; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWStringPrefixMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // StringPrefixMatcher.m 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 17/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KWStringPrefixMatcher.h" 10 | 11 | @interface KWStringPrefixMatcher(){} 12 | @property (nonatomic, copy) NSString *prefix; 13 | @end 14 | 15 | @implementation KWStringPrefixMatcher 16 | 17 | + (id)matcherWithPrefix:(NSString *)aPrefix { 18 | return [[self alloc] initWithPrefix:aPrefix]; 19 | } 20 | 21 | - (id)initWithPrefix:(NSString *)aPrefix { 22 | self = [super init]; 23 | if (self) { 24 | _prefix = [aPrefix copy]; 25 | } 26 | return self; 27 | } 28 | 29 | 30 | - (BOOL)matches:(id)item { 31 | if (![item respondsToSelector:@selector(hasPrefix:)]) 32 | return NO; 33 | 34 | return [item hasPrefix:self.prefix]; 35 | } 36 | 37 | - (NSString *)description { 38 | return [NSString stringWithFormat:@"a string with prefix '%@'", self.prefix]; 39 | } 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWBlock.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBlock.h" 8 | 9 | @interface KWBlock() 10 | 11 | #pragma mark - Properties 12 | 13 | @property (nonatomic, readonly, copy) void (^block)(void); 14 | 15 | @end 16 | 17 | @implementation KWBlock 18 | 19 | #pragma mark - Initializing 20 | 21 | - (id)initWithBlock:(void (^)(void))block { 22 | self = [super init]; 23 | if (self) { 24 | _block = [block copy]; 25 | } 26 | 27 | return self; 28 | } 29 | 30 | + (id)blockWithBlock:(void (^)(void))aBlock { 31 | return [[self alloc] initWithBlock:aBlock]; 32 | } 33 | 34 | #pragma mark - Calling Blocks 35 | 36 | - (void)call { 37 | self.block(); 38 | } 39 | 40 | @end 41 | 42 | #pragma mark - Creating Blocks 43 | 44 | KWBlock *theBlock(void (^block)(void)) { 45 | return lambda(block); 46 | } 47 | 48 | KWBlock *lambda(void (^block)(void)) { 49 | return [KWBlock blockWithBlock:block]; 50 | } 51 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSInvocation+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface NSInvocation(KiwiAdditions) 10 | 11 | #pragma mark - Creating NSInvocation Objects 12 | 13 | + (NSInvocation *)invocationWithTarget:(id)anObject selector:(SEL)aSelector; 14 | + (NSInvocation *)invocationWithTarget:(id)anObject selector:(SEL)aSelector messageArguments:(const void *)firstBytes, ...; 15 | 16 | #pragma mark - Accessing Message Arguments 17 | 18 | // Message arguments are invocation arguments that begin after the target and selector arguments. These methods provide 19 | // convenient ways to access them. 20 | 21 | - (NSData *)messageArgumentDataAtIndex:(NSUInteger)anIndex; 22 | - (void)getMessageArgument:(void *)buffer atIndex:(NSUInteger)anIndex; 23 | - (void)setMessageArgument:(const void *)bytes atIndex:(NSUInteger)anIndex; 24 | - (void)setMessageArguments:(const void *)firstBytes, ...; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMatching.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @protocol KWMatching 10 | 11 | #pragma mark - Initializing 12 | 13 | - (id)initWithSubject:(id)anObject; 14 | 15 | #pragma mark - Getting Matcher Strings 16 | 17 | + (NSArray *)matcherStrings; 18 | 19 | #pragma mark - Getting Matcher Compatability 20 | 21 | + (BOOL)canMatchSubject:(id)anObject; 22 | 23 | #pragma mark - Matching 24 | 25 | @optional 26 | 27 | - (BOOL)isNilMatcher; 28 | - (BOOL)shouldBeEvaluatedAtEndOfExample; 29 | - (BOOL)willEvaluateMultipleTimes; 30 | - (void)setWillEvaluateMultipleTimes:(BOOL)shouldEvaluateMultipleTimes; 31 | - (void)setWillEvaluateAgainstNegativeExpectation:(BOOL)willEvaluateAgainstNegativeExpectation; 32 | 33 | @required 34 | 35 | - (BOOL)evaluate; 36 | 37 | #pragma mark - Getting Failure Messages 38 | 39 | - (NSString *)failureMessageForShould; 40 | - (NSString *)failureMessageForShouldNot; 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWRegisterMatchersNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWRegisterMatchersNode.h" 8 | 9 | #import "KWCallSite.h" 10 | #import "KWExampleNodeVisitor.h" 11 | 12 | @implementation KWRegisterMatchersNode 13 | 14 | #pragma mark - Initializing 15 | 16 | - (id)initWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix { 17 | self = [super init]; 18 | if (self) { 19 | _callSite = aCallSite; 20 | _namespacePrefix = [aNamespacePrefix copy]; 21 | } 22 | 23 | return self; 24 | } 25 | 26 | + (id)registerMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix { 27 | return [[self alloc] initWithCallSite:aCallSite namespacePrefix:aNamespacePrefix]; 28 | } 29 | 30 | #pragma mark - Accepting Visitors 31 | 32 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 33 | [aVisitor visitRegisterMatchersNode:self]; 34 | } 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /BinAnimation/Classes/BinAnimationFactory.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimationFactory.h 3 | // BinAnimation 4 | // 5 | // Created by angBin on 2018/9/17. 6 | // Copyright © 2018年 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinAnimationPublic.h" 10 | 11 | FOUNDATION_EXTERN NSString *const BinAnimation; 12 | 13 | @interface BinAnimationFactory : NSObject 14 | 15 | - (BinAnimationFactory *(^)(CFTimeInterval second))beginTime; 16 | 17 | - (BinAnimationFactory *(^)(CFTimeInterval second))duration; 18 | 19 | - (BinAnimationFactory *(^)(float scale))speed; 20 | 21 | - (BinAnimationFactory *(^)(CFTimeInterval second))timeOffset; 22 | 23 | - (BinAnimationFactory *(^)(float time))repeatCount; 24 | 25 | - (BinAnimationFactory *(^)(CFTimeInterval second))repeatDuration; 26 | 27 | - (BinAnimationFactory *(^)(BOOL autoreverses))autoreverses; 28 | 29 | - (BinAnimationFactory *(^)(NSString *fillMode))fillMode; 30 | 31 | - (BinAnimationFactory *(^)(NSString *timingFunction))timingFunction; 32 | 33 | - (BinAnimationFactory *(^)(BOOL removedOnCompletion))removedOnCompletion; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWExampleNodeVisitor.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWAfterAllNode; 10 | @class KWAfterEachNode; 11 | @class KWBeforeAllNode; 12 | @class KWBeforeEachNode; 13 | @class KWContextNode; 14 | @class KWLetNode; 15 | @class KWItNode; 16 | @class KWPendingNode; 17 | @class KWRegisterMatchersNode; 18 | 19 | @protocol KWExampleNodeVisitor 20 | 21 | #pragma mark - Visiting Nodes 22 | 23 | @optional 24 | 25 | - (void)visitContextNode:(KWContextNode *)aNode; 26 | - (void)visitRegisterMatchersNode:(KWRegisterMatchersNode *)aNode; 27 | - (void)visitBeforeAllNode:(KWBeforeAllNode *)aNode; 28 | - (void)visitAfterAllNode:(KWAfterAllNode *)aNode; 29 | - (void)visitBeforeEachNode:(KWBeforeEachNode *)aNode; 30 | - (void)visitAfterEachNode:(KWAfterEachNode *)aNode; 31 | - (void)visitLetNode:(KWLetNode *)aNode; 32 | - (void)visitItNode:(KWItNode *)aNode; 33 | - (void)visitPendingNode:(KWPendingNode *)aNode; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSObject+KiwiSpyAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "NSObject+KiwiSpyAdditions.h" 8 | 9 | #import "KWCaptureSpy.h" 10 | #import "KWMessagePattern.h" 11 | #import "NSObject+KiwiStubAdditions.h" 12 | 13 | @implementation NSObject (KiwiSpyAdditions) 14 | 15 | - (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index { 16 | KWCaptureSpy *spy = [[KWCaptureSpy alloc] initWithArgumentIndex:index]; 17 | KWMessagePattern *pattern = [[KWMessagePattern alloc] initWithSelector:selector]; 18 | [self addMessageSpy:spy forMessagePattern:pattern]; 19 | return spy; 20 | } 21 | 22 | + (KWCaptureSpy *)captureArgument:(SEL)selector atIndex:(NSUInteger)index { 23 | KWCaptureSpy *spy = [[KWCaptureSpy alloc] initWithArgumentIndex:index]; 24 | KWMessagePattern *pattern = [[KWMessagePattern alloc] initWithSelector:selector]; 25 | [self addMessageSpy:spy forMessagePattern:pattern]; 26 | return spy; 27 | } 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Example/Tests/Tests.m: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimationTests.m 3 | // BinAnimationTests 4 | // 5 | // Created by angBin on 10/16/2018. 6 | // Copyright (c) 2018 angBin. All rights reserved. 7 | // 8 | 9 | // https://github.com/kiwi-bdd/Kiwi 10 | 11 | SPEC_BEGIN(InitialTests) 12 | 13 | describe(@"My initial tests", ^{ 14 | 15 | context(@"will fail", ^{ 16 | 17 | it(@"can do maths", ^{ 18 | [[@1 should] equal:@2]; 19 | }); 20 | 21 | it(@"can read", ^{ 22 | [[@"number" should] equal:@"string"]; 23 | }); 24 | 25 | it(@"will wait and fail", ^{ 26 | NSObject *object = [[NSObject alloc] init]; 27 | [[expectFutureValue(object) shouldEventually] receive:@selector(autoContentAccessingProxy)]; 28 | }); 29 | }); 30 | 31 | context(@"will pass", ^{ 32 | 33 | it(@"can do maths", ^{ 34 | [[@1 should] beLessThan:@23]; 35 | }); 36 | 37 | it(@"can read", ^{ 38 | [[@"team" shouldNot] containString:@"I"]; 39 | }); 40 | }); 41 | 42 | }); 43 | 44 | SPEC_END 45 | 46 | -------------------------------------------------------------------------------- /BinAnimation/Classes/BinKeyframeAnimationFactory.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinKeyframeAnimationFactory.h 3 | // BinAnimation 4 | // 5 | // Created by angBin on 2018/9/14. 6 | // Copyright © 2018年 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinAnimationFactory.h" 10 | 11 | FOUNDATION_EXTERN NSString *const BinKeyframeAnimation; 12 | FOUNDATION_EXTERN NSString *const BinKeyframeAnimationLayer; 13 | FOUNDATION_EXTERN NSString *const BinKeyframeAnimationGetKeyframeAnimationFirstValue; 14 | 15 | @interface BinKeyframeAnimationFactory : BinAnimationFactory 16 | 17 | - (BinKeyframeAnimationFactory *(^)(CGPathRef path))path; 18 | 19 | - (BinKeyframeAnimationFactory *(^)(NSString *calculationModeName))calculationMode; 20 | 21 | - (BinKeyframeAnimationFactory *(^)(NSArray *tensionValues))tensionValues; 22 | 23 | - (BinKeyframeAnimationFactory *(^)(NSArray *continuityValues))continuityValues; 24 | 25 | - (BinKeyframeAnimationFactory *(^)(NSArray *biasValues))biasValues; 26 | 27 | - (BinKeyframeAnimationFactory *(^)(NSString *rotationModeName))rotationMode; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-BinAnimation_Tests/Pods-BinAnimation_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) $(PLATFORM_DIR)/Developer/Library/Frameworks "${PODS_CONFIGURATION_BUILD_DIR}/FBSnapshotTestCase" "${PODS_CONFIGURATION_BUILD_DIR}/Kiwi" "${PODS_CONFIGURATION_BUILD_DIR}/BinAnimation" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FBSnapshotTestCase/FBSnapshotTestCase.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Kiwi/Kiwi.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/BinAnimation/BinAnimation.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "FBSnapshotTestCase" -framework "Kiwi" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-BinAnimation_Tests/Pods-BinAnimation_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) $(PLATFORM_DIR)/Developer/Library/Frameworks "${PODS_CONFIGURATION_BUILD_DIR}/FBSnapshotTestCase" "${PODS_CONFIGURATION_BUILD_DIR}/Kiwi" "${PODS_CONFIGURATION_BUILD_DIR}/BinAnimation" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/FBSnapshotTestCase/FBSnapshotTestCase.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Kiwi/Kiwi.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/BinAnimation/BinAnimation.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "FBSnapshotTestCase" -framework "Kiwi" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 angBin <895887420@qq.com> 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWStringContainsMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // StringContainsMatcher.m 3 | // Kiwi 4 | // 5 | // Created by Stewart Gleadow on 7/06/12. 6 | // Copyright (c) 2012 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KWStringContainsMatcher.h" 10 | 11 | @interface KWStringContainsMatcher(){} 12 | @property (nonatomic, copy) NSString *substring; 13 | @end 14 | 15 | @implementation KWStringContainsMatcher 16 | 17 | + (id)matcherWithSubstring:(NSString *)aSubstring { 18 | return [[self alloc] initWithSubstring:aSubstring]; 19 | } 20 | 21 | - (id)initWithSubstring:(NSString *)aSubstring { 22 | self = [super init]; 23 | if (self) { 24 | _substring = [aSubstring copy]; 25 | } 26 | return self; 27 | } 28 | 29 | 30 | - (BOOL)matches:(id)item { 31 | if (![item respondsToSelector:@selector(rangeOfString:)]) { 32 | return NO; 33 | } 34 | 35 | return [item rangeOfString:self.substring].location != NSNotFound; 36 | } 37 | 38 | - (NSString *)description { 39 | return [NSString stringWithFormat:@"a string with substring '%@'", self.substring]; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/Categories/UIApplication+StrictKeyWindow.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2015, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | * 9 | */ 10 | 11 | #import 12 | 13 | @implementation UIApplication (StrictKeyWindow) 14 | 15 | - (UIWindow *)fb_strictKeyWindow 16 | { 17 | UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow; 18 | if (!keyWindow) { 19 | [NSException raise:@"FBSnapshotTestCaseNilKeyWindowException" 20 | format:@"Snapshot tests must be hosted by an application with a key window. Please ensure your test" 21 | " host sets up a key window at launch (either via storyboards or programmatically) and doesn't" 22 | " do anything to remove it while snapshot tests are running."]; 23 | } 24 | return keyWindow; 25 | } 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWGenericMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // KWGenericMatcher.m 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 24/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KWGenericMatcher.h" 10 | #import "KWGenericMatchEvaluator.h" 11 | 12 | @interface KWGenericMatcher () 13 | 14 | @property (nonatomic, strong) id matcher; 15 | 16 | @end 17 | 18 | @implementation KWGenericMatcher 19 | 20 | #pragma mark - Matching 21 | 22 | - (BOOL)evaluate { 23 | return [KWGenericMatchEvaluator genericMatcher:self.matcher matches:self.subject]; 24 | } 25 | 26 | - (NSString *)failureMessageForShould { 27 | return [NSString stringWithFormat:@"expected subject to match %@", self.matcher]; 28 | } 29 | 30 | - (NSString *)description 31 | { 32 | return [NSString stringWithFormat:@"match %@", [self.matcher description]]; 33 | } 34 | 35 | #pragma mark - Getting Matcher Strings 36 | 37 | + (NSArray *)matcherStrings { 38 | return @[@"match:"]; 39 | } 40 | 41 | #pragma mark - Configuring Matchers 42 | 43 | - (void)match:(id)aMatcher; 44 | { 45 | self.matcher = aMatcher; 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWInvocationCapturer.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @protocol KWInvocationCapturerDelegate; 10 | 11 | @interface KWInvocationCapturer : NSProxy 12 | 13 | #pragma mark - Initializing 14 | 15 | - (id)initWithDelegate:(id)aDelegate; 16 | - (id)initWithDelegate:(id)aDelegate userInfo:(NSDictionary *)aUserInfo; 17 | 18 | + (id)invocationCapturerWithDelegate:(id)aDelegate; 19 | + (id)invocationCapturerWithDelegate:(id)aDelegate userInfo:(NSDictionary *)aUserInfo; 20 | 21 | #pragma mark - Properties 22 | 23 | @property (nonatomic, weak, readonly) id delegate; 24 | @property (nonatomic, strong, readonly) NSDictionary *userInfo; 25 | 26 | @end 27 | 28 | @protocol KWInvocationCapturerDelegate 29 | 30 | #pragma mark - Capturing Invocations 31 | 32 | - (NSMethodSignature *)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer methodSignatureForSelector:(SEL)aSelector; 33 | - (void)invocationCapturer:(KWInvocationCapturer *)anInvocationCapturer didCaptureInvocation:(NSInvocation *)anInvocation; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Verifiers/KWAsyncVerifier.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWAsyncVerifier.h 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 13/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWMatchVerifier.h" 11 | #import "KWProbe.h" 12 | 13 | #define kKW_DEFAULT_PROBE_TIMEOUT 1.0 14 | 15 | @class KWAsyncMatcherProbe; 16 | 17 | @interface KWAsyncVerifier : KWMatchVerifier 18 | 19 | @property (nonatomic, assign) NSTimeInterval timeout; 20 | @property (nonatomic, assign) BOOL shouldWait; 21 | 22 | + (id)asyncVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter probeTimeout:(NSTimeInterval)probeTimeout shouldWait:(BOOL)shouldWait; 23 | - (void)verifyWithProbe:(KWAsyncMatcherProbe *)aProbe; 24 | 25 | @end 26 | 27 | 28 | @interface KWAsyncMatcherProbe : NSObject 29 | 30 | @property (nonatomic, assign) BOOL matchResult; 31 | @property (nonatomic, readonly) id matcher; 32 | 33 | - (id)initWithMatcher:(id)aMatcher; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWBackgroundTask.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import 8 | 9 | // Used to suppress compiler warnings by 10 | // casting receivers to this protocol 11 | @protocol NSTask_KWWarningSuppressor 12 | 13 | - (void)setLaunchPath:(NSString *)path; 14 | - (void)setArguments:(NSArray *)arguments; 15 | - (void)setEnvironment:(NSDictionary *)dict; 16 | - (void)setStandardOutput:(id)output; 17 | - (void)setStandardError:(id)output; 18 | - (void)launch; 19 | - (void)waitUntilExit; 20 | 21 | @property (readonly) int terminationStatus; 22 | 23 | @end 24 | 25 | @interface KWBackgroundTask : NSObject 26 | 27 | @property (nonatomic, readonly) id task; 28 | @property (nonatomic, readonly) NSPipe *standardOutput; 29 | @property (nonatomic, readonly) NSPipe *standardError; 30 | @property (nonatomic, readonly) NSString *command; 31 | @property (nonatomic, readonly) NSArray *arguments; 32 | @property (nonatomic, readonly) NSData *output; 33 | 34 | - (instancetype)initWithCommand:(NSString *)command arguments:(NSArray *)arguments; 35 | 36 | - (void)launchAndWaitForExit; 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /BinAnimation/Classes/BinAnimationFounder.h: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimationFounder.h 3 | // BinAnimation 4 | // 5 | // Created by angBin on 2018/9/14. 6 | // Copyright © 2018年 angBin. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "BinAnimationPublic.h" 11 | 12 | @class BinKeyframeAnimationFactory; 13 | @class BinSpringAnimationFactory; 14 | @class BinTransitionFactory; 15 | @class BinAnimationGroupFactory; 16 | @class BinKeyframeFactory; 17 | 18 | @interface BinAnimationFounder : NSObject 19 | 20 | - (instancetype)initWithLayer:(NSArray *)layerArr; 21 | 22 | - (NSArray *)build; 23 | 24 | - (BinKeyframeFactory *)fromKeyframe; 25 | 26 | - (BinKeyframeFactory *)toKeyframe; 27 | 28 | - (BinKeyframeFactory *)byKeyframe; 29 | 30 | - (BinKeyframeAnimationFactory *)keyframeAnimation; 31 | 32 | - (BinKeyframeAnimationFactory *(^)(NSString *keyPath))moreKeyframeAnimation; 33 | 34 | - (BinSpringAnimationFactory *)springAnimation; 35 | 36 | - (BinSpringAnimationFactory *(^)(NSString *keyPath))moreSpringAnimation API_AVAILABLE(ios(9.0)); 37 | 38 | - (BinTransitionFactory *)transition; 39 | 40 | - (BinAnimationGroupFactory *)animationGroup; 41 | 42 | - (void (^)(NSMutableArray *animationArr))getAnimationArr; 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWObjCUtilities.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | #pragma mark - Objective-C Type Utilities 10 | 11 | BOOL KWObjCTypeEqualToObjCType(const char *firstObjCType, const char *secondObjCType); 12 | BOOL KWObjCTypeIsNumeric(const char *objCType); 13 | BOOL KWObjCTypeIsFloatingPoint(const char *objCType); 14 | BOOL KWObjCTypeIsIntegral(const char *objCType); 15 | BOOL KWObjCTypeIsSignedIntegral(const char *objCType); 16 | BOOL KWObjCTypeIsUnsignedIntegral(const char *objCType); 17 | BOOL KWObjCTypeIsBoolean(const char *objCType); 18 | BOOL KWObjCTypeIsObject(const char *objCType); 19 | BOOL KWObjCTypeIsCharString(const char *objCType); 20 | BOOL KWObjCTypeIsClass(const char *objCType); 21 | BOOL KWObjCTypeIsSelector(const char *objCType); 22 | BOOL KWObjCTypeIsPointerToType(const char *objCType); 23 | BOOL KWObjCTypeIsPointerLike(const char *objCType); 24 | BOOL KWObjCTypeIsUnknown(const char *objCType); 25 | BOOL KWObjCTypeIsBlock(const char *objCType); 26 | 27 | NSUInteger KWObjCTypeLength(const char *objCType); 28 | 29 | #pragma mark - Selector Utlities 30 | 31 | NSUInteger KWSelectorParameterCount(SEL selector); 32 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSNumber+KiwiAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface NSNumber(KiwiAdditions) 10 | 11 | #pragma mark - Creating Numbers 12 | 13 | + (id)numberWithBytes:(const void *)bytes objCType:(const char *)anObjCType; 14 | + (id)numberWithBoolBytes:(const void *)bytes; 15 | + (id)numberWithStdBoolBytes:(const void *)bytes; 16 | + (id)numberWithCharBytes:(const void *)bytes; 17 | + (id)numberWithDoubleBytes:(const void *)bytes; 18 | + (id)numberWithFloatBytes:(const void *)bytes; 19 | + (id)numberWithIntBytes:(const void *)bytes; 20 | + (id)numberWithIntegerBytes:(const void *)bytes; 21 | + (id)numberWithLongBytes:(const void *)bytes; 22 | + (id)numberWithLongLongBytes:(const void *)bytes; 23 | + (id)numberWithShortBytes:(const void *)bytes; 24 | + (id)numberWithUnsignedCharBytes:(const void *)bytes; 25 | + (id)numberWithUnsignedIntBytes:(const void *)bytes; 26 | + (id)numberWithUnsignedIntegerBytes:(const void *)bytes; 27 | + (id)numberWithUnsignedLongBytes:(const void *)bytes; 28 | + (id)numberWithUnsignedLongLongBytes:(const void *)bytes; 29 | + (id)numberWithUnsignedShortBytes:(const void *)bytes; 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWCallSite.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWCallSite.h" 8 | 9 | @implementation KWCallSite 10 | 11 | #pragma mark - Initializing 12 | 13 | - (id)initWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber { 14 | self = [super init]; 15 | if (self) { 16 | _filename = [aFilename copy]; 17 | _lineNumber = aLineNumber; 18 | } 19 | 20 | return self; 21 | } 22 | 23 | + (id)callSiteWithFilename:(NSString *)aFilename lineNumber:(NSUInteger)aLineNumber { 24 | return [[self alloc] initWithFilename:aFilename lineNumber:aLineNumber]; 25 | } 26 | 27 | #pragma mark - Identifying and Comparing 28 | 29 | - (NSUInteger)hash { 30 | return [[NSString stringWithFormat:@"%@%u", self.filename, (unsigned)self.lineNumber] hash]; 31 | } 32 | 33 | - (BOOL)isEqual:(id)anObject { 34 | if (![anObject isKindOfClass:[KWCallSite class]]) 35 | return NO; 36 | 37 | return [self isEqualToCallSite:anObject]; 38 | } 39 | 40 | - (BOOL)isEqualToCallSite:(KWCallSite *)aCallSite { 41 | return [self.filename isEqualToString:aCallSite.filename] && (self.lineNumber == aCallSite.lineNumber); 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMessageTracker.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWCountType.h" 9 | #import "KWMessageSpying.h" 10 | 11 | @class KWMessagePattern; 12 | 13 | @interface KWMessageTracker : NSObject 14 | 15 | #pragma mark - Initializing 16 | 17 | - (id)initWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount; 18 | 19 | + (id)messageTrackerWithSubject:(id)anObject messagePattern:(KWMessagePattern *)aMessagePattern countType:(KWCountType)aCountType count:(NSUInteger)aCount; 20 | 21 | #pragma mark - Properties 22 | 23 | @property (nonatomic, readonly) id subject; 24 | @property (nonatomic, readonly) KWMessagePattern *messagePattern; 25 | @property (nonatomic, readonly) KWCountType countType; 26 | @property (nonatomic, readonly) NSUInteger count; 27 | 28 | #pragma mark - Stopping Tracking 29 | 30 | - (void)stopTracking; 31 | 32 | #pragma mark - Getting Message Tracker Status 33 | 34 | - (BOOL)succeeded; 35 | 36 | #pragma mark - Getting Phrases 37 | 38 | - (NSString *)expectedCountPhrase; 39 | - (NSString *)receivedCountPhrase; 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWConformToProtocolMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWConformToProtocolMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWConformToProtocolMatcher() 11 | 12 | @property (nonatomic, assign) Protocol *protocol; 13 | 14 | @end 15 | 16 | @implementation KWConformToProtocolMatcher 17 | 18 | #pragma mark - Getting Matcher Strings 19 | 20 | + (NSArray *)matcherStrings { 21 | return @[@"conformToProtocol:"]; 22 | } 23 | 24 | #pragma mark - Matching 25 | 26 | - (BOOL)evaluate { 27 | return [self.subject conformsToProtocol:self.protocol]; 28 | } 29 | 30 | #pragma mark - Getting Failure Messages 31 | 32 | - (NSString *)failureMessageForShould { 33 | return [NSString stringWithFormat:@"expected subject to conform to %@ protocol", 34 | NSStringFromProtocol(self.protocol)]; 35 | } 36 | 37 | - (NSString *)description { 38 | return [NSString stringWithFormat:@"conform to %@ protocol", NSStringFromProtocol(self.protocol)]; 39 | } 40 | 41 | #pragma mark - Configuring Matchers 42 | 43 | - (void)conformToProtocol:(Protocol *)aProtocol { 44 | self.protocol = aProtocol; 45 | } 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWRespondToSelectorMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWRespondToSelectorMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWRespondToSelectorMatcher() 11 | 12 | #pragma mark - Properties 13 | 14 | @property (nonatomic, assign) SEL selector; 15 | 16 | @end 17 | 18 | @implementation KWRespondToSelectorMatcher 19 | 20 | #pragma mark - Getting Matcher Strings 21 | 22 | + (NSArray *)matcherStrings { 23 | return @[@"respondToSelector:"]; 24 | } 25 | 26 | #pragma mark - Matching 27 | 28 | - (BOOL)evaluate { 29 | return [self.subject respondsToSelector:self.selector]; 30 | } 31 | 32 | #pragma mark - Getting Failure Messages 33 | 34 | - (NSString *)failureMessageForShould { 35 | return [NSString stringWithFormat:@"expected subject to respond to -%@", 36 | NSStringFromSelector(self.selector)]; 37 | } 38 | 39 | - (NSString *)description { 40 | return [NSString stringWithFormat:@"respond to -%@", NSStringFromSelector(self.selector)]; 41 | } 42 | 43 | #pragma mark - Configuring Matchers 44 | 45 | - (void)respondToSelector:(SEL)aSelector { 46 | self.selector = aSelector; 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeKindOfClassMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeKindOfClassMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWBeKindOfClassMatcher() 11 | 12 | @property (nonatomic, assign) Class targetClass; 13 | 14 | @end 15 | 16 | @implementation KWBeKindOfClassMatcher 17 | 18 | #pragma mark - Getting Matcher Strings 19 | 20 | + (NSArray *)matcherStrings { 21 | return @[@"beKindOfClass:"]; 22 | } 23 | 24 | #pragma mark - Matching 25 | 26 | - (BOOL)evaluate { 27 | return [self.subject isKindOfClass:self.targetClass]; 28 | } 29 | 30 | #pragma mark - Getting Failure Messages 31 | 32 | - (NSString *)failureMessageForShould { 33 | return [NSString stringWithFormat:@"expected subject to be kind of %@, got %@", 34 | NSStringFromClass(self.targetClass), 35 | NSStringFromClass([self.subject class])]; 36 | } 37 | 38 | - (NSString *)description { 39 | return [NSString stringWithFormat:@"be kind of %@", NSStringFromClass(self.targetClass)]; 40 | } 41 | 42 | #pragma mark - Configuring Matchers 43 | 44 | - (void)beKindOfClass:(Class)aClass { 45 | self.targetClass = aClass; 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Shared Examples/KWSharedExample.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2014 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWSharedExample.h" 8 | #import "KWSharedExampleRegistry.h" 9 | #import "KWExample.h" 10 | 11 | @implementation KWSharedExample 12 | 13 | #pragma mark - Initializing 14 | 15 | - (id)initWithName:(NSString *)name block:(KWSharedExampleBlock)block { 16 | NSParameterAssert(name); 17 | NSParameterAssert(block); 18 | 19 | self = [super init]; 20 | if (self) { 21 | _name = name; 22 | _block = block; 23 | } 24 | return self; 25 | } 26 | 27 | @end 28 | 29 | #pragma mark - Building Example Groups 30 | 31 | void sharedExamplesFor(NSString *name, KWSharedExampleBlock block) { 32 | KWSharedExample *sharedExample = [[KWSharedExample alloc] initWithName:name block:block]; 33 | [[KWSharedExampleRegistry sharedRegistry] registerSharedExample:sharedExample]; 34 | } 35 | 36 | void itBehavesLike(NSString *name, NSDictionary *data) { 37 | KWSharedExample *sharedExample = [[KWSharedExampleRegistry sharedRegistry] sharedExampleForName:name]; 38 | NSString *description = [NSString stringWithFormat:@"behaves like %@", sharedExample.name]; 39 | context(description, ^{ sharedExample.block(data); }); 40 | } 41 | -------------------------------------------------------------------------------- /BinAnimation/Classes/CALayer+BinAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // CALayer+BinAdditions.h 3 | // BinAnimation 4 | // 5 | // Created by angBin on 2018/9/14. 6 | // Copyright © 2018年 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinAnimationPublic.h" 10 | 11 | @class BinAnimationFounder; 12 | 13 | FOUNDATION_EXTERN NSString *const CALayerBinAdditionsBinAddAnimationSync; 14 | FOUNDATION_EXTERN NSString *const CALayerBinAdditionsBinAddAnimationAsync; 15 | 16 | @interface BinAnimationInfo : NSObject 17 | 18 | @property (nonatomic, weak) CAAnimation *animation; 19 | @property (nonatomic, weak) CALayer *layer; 20 | @property (nonatomic, assign) BOOL finished; 21 | @property (nonatomic, assign) NSInteger index; 22 | 23 | @end 24 | 25 | @interface CALayer (BinAdditions) 26 | 27 | - (NSArray *)bin_addAnimation_sync:(void (^)(BinAnimationFounder *founder))animationSetting; 28 | 29 | - (NSArray *)bin_addAnimation_sync:(void (^)(BinAnimationFounder *founder))animationSetting completion:(void (^)(BinAnimationInfo *animationInfo))completion; 30 | 31 | - (void)bin_addAnimation_async:(void (^)(BinAnimationFounder *founder))animationSetting; 32 | 33 | - (void)bin_addAnimation_async:(void (^)(BinAnimationFounder *founder))animationSetting completion:(void (^)(BinAnimationInfo *animationInfo))completion; 34 | 35 | - (void)bin_pause; 36 | 37 | - (void)bin_resume; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinAnimation_PauseAndResumeViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimation_PauseAndResumeViewController.m 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/12/19. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinAnimation_PauseAndResumeViewController.h" 10 | #import "BinExamplePublic.h" 11 | 12 | @interface BinAnimation_PauseAndResumeViewController () 13 | 14 | @end 15 | 16 | @implementation BinAnimation_PauseAndResumeViewController 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | // Do any additional setup after loading the view. 21 | 22 | self.animationArr = @[@"pause", @"resume", ]; 23 | 24 | [self.animationlabel.layer bin_addAnimation_sync:^(BinAnimationFounder *founder) { 25 | founder.toKeyframe.translationY(200).keyTime(1.0).repeatCount(100).autoreverses(YES); 26 | }]; 27 | } 28 | 29 | - (void)tableViewDidClick:(NSString *)animationStr { 30 | NSUInteger index = [self.animationArr indexOfObject:animationStr]; 31 | switch (index) { 32 | case 0: 33 | [self.animationlabel.layer bin_pause]; 34 | break; 35 | case 1: 36 | [self.animationlabel.layer bin_resume]; 37 | break; 38 | 39 | default: 40 | break; 41 | } 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeZeroMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeZeroMatcher.h" 8 | #import "KWFormatter.h" 9 | #import "KWValue.h" 10 | 11 | @implementation KWBeZeroMatcher 12 | 13 | #pragma mark - Getting Matcher Strings 14 | 15 | + (NSArray *)matcherStrings { 16 | return @[@"beZero"]; 17 | } 18 | 19 | #pragma mark - Matching 20 | 21 | - (BOOL)evaluate { 22 | if ([self.subject isKindOfClass:[NSNumber class]]) { 23 | return [self.subject isEqualToNumber:@0]; 24 | } 25 | 26 | if ([self.subject respondsToSelector:@selector(numberValue)]) { 27 | return [[self.subject numberValue] isEqualToNumber:@0]; 28 | } 29 | 30 | return NO; 31 | } 32 | 33 | #pragma mark - Getting Failure Messages 34 | 35 | - (NSString *)failureMessageForShould { 36 | return [NSString stringWithFormat:@"expected subject to be zero, got %@", 37 | [KWFormatter formatObject:self.subject]]; 38 | } 39 | 40 | - (NSString *)failureMessageForShouldNot { 41 | return [NSString stringWithFormat:@"expected subject not to be zero"]; 42 | } 43 | 44 | - (NSString *)description { 45 | return @"be zero"; 46 | } 47 | 48 | #pragma mark - Configuring Matchers 49 | 50 | - (void)beZero { 51 | } 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWLetNode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWExampleNode.h" 9 | 10 | @interface KWLetNode : NSObject 11 | 12 | - (instancetype)initWithSymbolName:(NSString *)aSymbolName objectRef:(id *)anObjectRef block:(id (^)(void))block; 13 | + (instancetype)letNodeWithSymbolName:(NSString *)aSymbolName objectRef:(id *)anObjectRef block:(id (^)(void))block; 14 | 15 | @property (nonatomic, copy) NSString *symbolName; 16 | @property (nonatomic, copy) id (^block)(void); 17 | @property (nonatomic, readonly) __autoreleasing id *objectRef; 18 | 19 | - (id)evaluate; 20 | - (void)evaluateTree; 21 | 22 | - (void)addLetNode:(KWLetNode *)aNode; 23 | - (void)unlink; 24 | 25 | // The parent/child relationship describes let nodes declared in nested 26 | // contexts -- evaluating a node returns the value of the deepest 27 | // evaluated child. 28 | @property (nonatomic, readonly, weak) KWLetNode *parent; 29 | @property (nonatomic, readonly, strong) KWLetNode *child; 30 | 31 | // The next/previous relationship describes the order in which nodes 32 | // of different symbols were declared. 33 | @property (nonatomic, readonly, strong) KWLetNode *next; 34 | @property (nonatomic, readonly, weak) KWLetNode *previous; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeMemberOfClassMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeMemberOfClassMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWBeMemberOfClassMatcher() 11 | 12 | @property (nonatomic, assign) Class targetClass; 13 | 14 | @end 15 | 16 | @implementation KWBeMemberOfClassMatcher 17 | 18 | #pragma mark - Getting Matcher Strings 19 | 20 | + (NSArray *)matcherStrings { 21 | return @[@"beMemberOfClass:"]; 22 | } 23 | 24 | #pragma mark - Matching 25 | 26 | - (BOOL)evaluate { 27 | return [self.subject isMemberOfClass:self.targetClass]; 28 | } 29 | 30 | #pragma mark - Getting Failure Messages 31 | 32 | - (NSString *)failureMessageForShould { 33 | return [NSString stringWithFormat:@"expected subject to be member of %@, got %@", 34 | NSStringFromClass(self.targetClass), 35 | NSStringFromClass([self.subject class])]; 36 | } 37 | 38 | - (NSString *)description { 39 | return [NSString stringWithFormat:@"be member of %@", 40 | NSStringFromClass(self.targetClass)]; 41 | } 42 | 43 | #pragma mark - Configuring Matchers 44 | 45 | - (void)beMemberOfClass:(Class)aClass { 46 | self.targetClass = aClass; 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWMessagePattern.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @interface KWMessagePattern : NSObject 10 | 11 | #pragma mark - Initializing 12 | 13 | - (id)initWithSelector:(SEL)aSelector; 14 | - (id)initWithSelector:(SEL)aSelector argumentFilters:(NSArray *)anArray; 15 | - (id)initWithSelector:(SEL)aSelector firstArgumentFilter:(id)firstArgumentFilter argumentList:(va_list)argumentList; 16 | 17 | + (id)messagePatternWithSelector:(SEL)aSelector; 18 | + (id)messagePatternWithSelector:(SEL)aSelector argumentFilters:(NSArray *)anArray; 19 | + (id)messagePatternWithSelector:(SEL)aSelector firstArgumentFilter:(id)firstArgumentFilter argumentList:(va_list)argumentList; 20 | 21 | + (id)messagePatternFromInvocation:(NSInvocation *)anInvocation; 22 | 23 | #pragma mark - Properties 24 | 25 | @property (nonatomic, readonly) SEL selector; 26 | @property (nonatomic, readonly) NSArray *argumentFilters; 27 | 28 | #pragma mark - Matching Invocations 29 | 30 | - (BOOL)matchesInvocation:(NSInvocation *)anInvocation; 31 | 32 | #pragma mark - Comparing Message Patterns 33 | 34 | - (BOOL)isEqualToMessagePattern:(KWMessagePattern *)aMessagePattern; 35 | 36 | #pragma mark - Retrieving String Representations 37 | 38 | - (NSString *)stringValue; 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWHaveMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWMatcher.h" 9 | #import "KWMatchVerifier.h" 10 | 11 | @interface KWHaveMatcher : KWMatcher 12 | 13 | #pragma mark - Configuring Matchers 14 | 15 | - (void)haveCountOf:(NSUInteger)aCount; 16 | - (void)haveCountOfAtLeast:(NSUInteger)aCount; 17 | - (void)haveCountOfAtMost:(NSUInteger)aCount; 18 | - (void)haveLengthOf:(NSUInteger)aCount; 19 | - (void)haveLengthOfAtLeast:(NSUInteger)aCount; 20 | - (void)haveLengthOfAtMost:(NSUInteger)aCount; 21 | - (void)have:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation; 22 | - (void)haveAtLeast:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation; 23 | - (void)haveAtMost:(NSUInteger)aCount itemsForInvocation:(NSInvocation *)anInvocation; 24 | 25 | @end 26 | 27 | @protocol KWContainmentCountMatcherTerminals 28 | 29 | #pragma mark - Terminals 30 | 31 | - (id)objects; 32 | - (id)items; 33 | - (id)elements; 34 | 35 | @end 36 | 37 | #pragma mark - Verifying 38 | 39 | @interface KWMatchVerifier(KWHaveMatcherAdditions) 40 | 41 | #pragma mark - Invocation Capturing Methods 42 | 43 | - (id)have:(NSUInteger)aCount; 44 | - (id)haveAtLeast:(NSUInteger)aCount; 45 | - (id)haveAtMost:(NSUInteger)aCount; 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWContainStringMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWContainStringMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Kristopher Johnson on 4/28/13. 6 | // Copyright (c) 2013 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KiwiConfiguration.h" 10 | #import "KWMatcher.h" 11 | 12 | // Kiwi matcher for determining whether a string contains an expected substring 13 | // 14 | // Examples: 15 | // 16 | // [[@"Hello, world!" should] containString:@"world"]; 17 | // [[@"Hello, world!" shouldNot] containString:@"xyzzy"]; 18 | // 19 | // [[@"Hello, world!" should] containString:@"WORLD" 20 | // options:NSCaseInsensitiveSearch]; 21 | // 22 | // [[@"Hello, world!" should] startWithString:@"Hello,"]; 23 | // [[@"Hello, world!" should] endWithString:@"world!"]; 24 | 25 | @interface KWContainStringMatcher : KWMatcher 26 | 27 | // Match if subject contains specified substring 28 | - (void)containString:(NSString *)string; 29 | 30 | // Match if subject contains specified substring, using specified comparison options 31 | - (void)containString:(NSString *)string options:(NSStringCompareOptions)options; 32 | 33 | // Match if subject starts with the specified prefix 34 | - (void)startWithString:(NSString *)prefix; 35 | 36 | // Match if subject ends with the specified prefix 37 | - (void)endWithString:(NSString *)suffix; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-BinAnimation_Example/Pods-BinAnimation_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## BinAnimation 5 | 6 | Copyright (c) 2018 angBin <895887420@qq.com> 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | Generated by CocoaPods - https://cocoapods.org 27 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeSubclassOfClassMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeSubclassOfClassMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWBeSubclassOfClassMatcher() 11 | 12 | #pragma mark - Properties 13 | 14 | @property (nonatomic, assign) Class targetClass; 15 | 16 | @end 17 | 18 | @implementation KWBeSubclassOfClassMatcher 19 | 20 | #pragma mark - Getting Matcher Strings 21 | 22 | + (NSArray *)matcherStrings { 23 | return @[@"beSubclassOfClass:"]; 24 | } 25 | 26 | #pragma mark - Matching 27 | 28 | - (BOOL)evaluate { 29 | return [self.subject isSubclassOfClass:self.targetClass]; 30 | } 31 | 32 | #pragma mark - Getting Failure Messages 33 | 34 | - (NSString *)failureMessageForShould { 35 | return [NSString stringWithFormat:@"expected subject to be subclass of %@, got %@", 36 | NSStringFromClass(self.targetClass), 37 | NSStringFromClass([self.subject class])]; 38 | } 39 | 40 | - (NSString *)description { 41 | return [NSString stringWithFormat:@"be subclass of %@", 42 | NSStringFromClass(self.targetClass)]; 43 | } 44 | 45 | #pragma mark - Configuring Matchers 46 | 47 | - (void)beSubclassOfClass:(Class)aClass { 48 | self.targetClass = aClass; 49 | } 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWFailure.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWFailure.h" 8 | #import "KWCallSite.h" 9 | 10 | @implementation KWFailure 11 | 12 | #pragma mark - Initializing 13 | 14 | - (id)initWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage { 15 | self = [super init]; 16 | if (self) { 17 | _callSite = aCallSite; 18 | _message = [aMessage copy]; 19 | } 20 | 21 | return self; 22 | } 23 | 24 | - (id)initWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ... { 25 | va_list argumentList; 26 | va_start(argumentList, format); 27 | NSString *aMessage = [[NSString alloc] initWithFormat:format arguments:argumentList]; 28 | va_end(argumentList); 29 | return [self initWithCallSite:aCallSite message:aMessage]; 30 | } 31 | 32 | + (id)failureWithCallSite:(KWCallSite *)aCallSite message:(NSString *)aMessage { 33 | return [[self alloc] initWithCallSite:aCallSite message:aMessage]; 34 | } 35 | 36 | + (id)failureWithCallSite:(KWCallSite *)aCallSite format:(NSString *)format, ... { 37 | va_list argumentList; 38 | va_start(argumentList, format); 39 | NSString *message = [[NSString alloc] initWithFormat:format arguments:argumentList]; 40 | va_end(argumentList); 41 | return [self failureWithCallSite:aCallSite message:message]; 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /BinAnimation/Classes/BinTransitionFactory.m: -------------------------------------------------------------------------------- 1 | // 2 | // BinTransitionFactory.m 3 | // BinAnimation 4 | // 5 | // Created by angBin on 2018/9/25. 6 | // Copyright © 2018年 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinTransitionFactory.h" 10 | 11 | NSString *const BinTransition = @"transition"; 12 | 13 | @interface BinTransitionFactory () 14 | 15 | /** 16 | The property name must be BinTransition's value. 17 | */ 18 | @property (nonatomic, weak) CATransition *transition; 19 | 20 | @end 21 | 22 | @implementation BinTransitionFactory 23 | 24 | - (BinTransitionFactory *(^)(NSString *))type { 25 | return ^id(NSString *type) { 26 | _transition.type = type; 27 | return self; 28 | }; 29 | } 30 | 31 | - (BinTransitionFactory *(^)(NSString *))subtype { 32 | return ^id(NSString *subtype) { 33 | _transition.subtype = subtype; 34 | return self; 35 | }; 36 | } 37 | 38 | - (BinTransitionFactory *(^)(float))startProgress { 39 | return ^id(float startProgress) { 40 | _transition.startProgress = startProgress; 41 | return self; 42 | }; 43 | } 44 | 45 | - (BinTransitionFactory *(^)(float))endProgress { 46 | return ^id(float endProgress) { 47 | _transition.endProgress = endProgress; 48 | return self; 49 | }; 50 | } 51 | 52 | - (void)setTransition:(CATransition *)transition { 53 | _transition = transition; 54 | [self setValue:transition forKey:BinAnimation]; 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Config/KWAllTestsSuite.m: -------------------------------------------------------------------------------- 1 | // 2 | // XCTestSuite+KWConfiguration.m 3 | // Kiwi 4 | // 5 | // Created by Adam Sharp on 1/07/2014. 6 | // Copyright (c) 2014 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "KWSuiteConfigurationBase.h" 12 | 13 | @interface _KWAllTestsSuite : XCTestSuite 14 | @end 15 | 16 | @implementation _KWAllTestsSuite 17 | 18 | - (void)setUp { 19 | [super setUp]; 20 | [[KWSuiteConfigurationBase defaultConfiguration] setUp]; 21 | } 22 | 23 | - (void)tearDown { 24 | [[KWSuiteConfigurationBase defaultConfiguration] tearDown]; 25 | [super tearDown]; 26 | } 27 | 28 | @end 29 | 30 | @interface XCTestSuite (KWConfiguration) 31 | @end 32 | 33 | @implementation XCTestSuite (KWConfiguration) 34 | 35 | + (void)load { 36 | Method testSuiteWithName = class_getClassMethod(self, @selector(testSuiteWithName:)); 37 | Method kiwi_testSuiteWithName = class_getClassMethod(self, @selector(kiwi_testSuiteWithName:)); 38 | method_exchangeImplementations(testSuiteWithName, kiwi_testSuiteWithName); 39 | } 40 | 41 | + (id)kiwi_testSuiteWithName:(NSString *)aName { 42 | id suite = [self kiwi_testSuiteWithName:aName]; 43 | if ([aName isEqualToString:@"All tests"]) { 44 | if ([suite isMemberOfClass:[XCTestSuite class]]) { 45 | object_setClass(suite, [_KWAllTestsSuite class]); 46 | } 47 | } 48 | return suite; 49 | } 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /BinAnimation/Classes/NSArray+BinAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+BinAdditions.h 3 | // BinAnimation 4 | // 5 | // Created by angBin on 2018/10/9. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinAnimationPublic.h" 10 | 11 | @class BinAnimationInfo; 12 | @class BinAnimationFounder; 13 | 14 | @interface NSArray (BinAdditions) 15 | 16 | - (NSArray *)bin_addOneAnimation_sync:(void (^)(BinAnimationFounder *founder))animationSetting; 17 | 18 | - (NSArray *)bin_addSameAnimation_sync:(void (^)(BinAnimationFounder *founder))animationSetting; 19 | 20 | - (NSArray *)bin_addOneAnimation_sync:(void (^)(BinAnimationFounder *founder))animationSetting completion:(void (^)(BinAnimationInfo *animationInfo))completion; 21 | 22 | - (NSArray *)bin_addSameAnimation_sync:(void (^)(BinAnimationFounder *founder))animationSetting completion:(void (^)(BinAnimationInfo *animationInfo))completion; 23 | 24 | - (void)bin_addOneAnimation_async:(void (^)(BinAnimationFounder *founder))animationSetting; 25 | 26 | - (void)bin_addSameAnimation_async:(void (^)(BinAnimationFounder *founder))animationSetting; 27 | 28 | - (void)bin_addOneAnimation_async:(void (^)(BinAnimationFounder *founder))animationSetting completion:(void (^)(BinAnimationInfo *animationInfo))completion; 29 | 30 | - (void)bin_addSameAnimation_async:(void (^)(BinAnimationFounder *founder))animationSetting completion:(void (^)(BinAnimationInfo *animationInfo))completion; 31 | 32 | - (void)bin_pause; 33 | 34 | - (void)bin_resume; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinSpringAnimationViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BinSpringAnimationViewController.m 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/10/18. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinSpringAnimationViewController.h" 10 | #import "BinExamplePublic.h" 11 | 12 | @interface BinSpringAnimationViewController () 13 | 14 | @end 15 | 16 | @implementation BinSpringAnimationViewController 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | // Do any additional setup after loading the view. 21 | 22 | self.animationArr = @[@"position", @"opacity", ]; 23 | } 24 | 25 | - (void)tableViewDidClick:(NSString *)animationStr { 26 | NSUInteger index = [self.animationArr indexOfObject:animationStr]; 27 | switch (index) { 28 | case 0: 29 | [self.animationlabel.layer bin_addAnimation_sync:^(BinAnimationFounder *founder) { 30 | founder.springAnimation.mass(1).stiffness(50).damping(2).initialVelocity(10).byValue([NSValue valueWithCGSize:CGSizeMake(0, 200)]); 31 | }]; 32 | break; 33 | case 1: 34 | [self.animationlabel.layer bin_addAnimation_sync:^(BinAnimationFounder *founder) { 35 | founder.moreSpringAnimation(@"opacity").mass(1).stiffness(50).damping(2).initialVelocity(10). 36 | toValue(@0); 37 | }]; 38 | break; 39 | 40 | default: 41 | break; 42 | } 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Stubbing/KWStub.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | 9 | @class KWMessagePattern; 10 | 11 | @interface KWStub : NSObject 12 | 13 | #pragma mark - Initializing 14 | 15 | - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern; 16 | - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue; 17 | - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern block:(id (^)(NSArray *params))aBlock; 18 | - (id)initWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue; 19 | 20 | + (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern; 21 | + (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue; 22 | + (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern block:(id (^)(NSArray *params))aBlock; 23 | + (id)stubWithMessagePattern:(KWMessagePattern *)aMessagePattern value:(id)aValue times:(id)times afterThatReturn:(id)aSecondValue; 24 | 25 | #pragma mark - Properties 26 | 27 | @property (nonatomic, readonly) KWMessagePattern *messagePattern; 28 | @property (nonatomic, readonly) id value; 29 | @property (nonatomic, readonly) id returnValueTimes; 30 | @property (nonatomic, readonly) int returnedValueTimes; 31 | @property (nonatomic, readonly) id secondValue; 32 | 33 | #pragma mark - Processing Invocations 34 | 35 | - (BOOL)processInvocation:(NSInvocation *)anInvocation; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/NSInvocation+OCMAdditions.h: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------------------- 2 | // $Id$ 3 | // Copyright (c) 2006-2009 by Mulle Kybernetik. See License file for details. 4 | //--------------------------------------------------------------------------------------- 5 | 6 | #import 7 | 8 | @interface NSInvocation(OCMAdditions) 9 | 10 | - (id)getArgumentAtIndexAsObject:(int)argIndex; 11 | 12 | - (NSString *)invocationDescription; 13 | 14 | - (NSString *)argumentDescriptionAtIndex:(int)argIndex; 15 | 16 | - (NSString *)objectDescriptionAtIndex:(int)anInt; 17 | - (NSString *)charDescriptionAtIndex:(int)anInt; 18 | - (NSString *)unsignedCharDescriptionAtIndex:(int)anInt; 19 | - (NSString *)intDescriptionAtIndex:(int)anInt; 20 | - (NSString *)unsignedIntDescriptionAtIndex:(int)anInt; 21 | - (NSString *)shortDescriptionAtIndex:(int)anInt; 22 | - (NSString *)unsignedShortDescriptionAtIndex:(int)anInt; 23 | - (NSString *)longDescriptionAtIndex:(int)anInt; 24 | - (NSString *)unsignedLongDescriptionAtIndex:(int)anInt; 25 | - (NSString *)longLongDescriptionAtIndex:(int)anInt; 26 | - (NSString *)unsignedLongLongDescriptionAtIndex:(int)anInt; 27 | - (NSString *)doubleDescriptionAtIndex:(int)anInt; 28 | - (NSString *)floatDescriptionAtIndex:(int)anInt; 29 | - (NSString *)structDescriptionAtIndex:(int)anInt; 30 | - (NSString *)pointerDescriptionAtIndex:(int)anInt; 31 | - (NSString *)cStringDescriptionAtIndex:(int)anInt; 32 | - (NSString *)selectorDescriptionAtIndex:(int)anInt; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Verifiers/KWMatchVerifier.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWExpectationType.h" 9 | #import "KWVerifying.h" 10 | 11 | @class KWCallSite; 12 | @class KWMatcherFactory; 13 | 14 | @protocol KWMatching; 15 | @protocol KWReporting; 16 | 17 | @interface KWMatchVerifier : NSObject 18 | 19 | #pragma mark - Properties 20 | 21 | @property (nonatomic, readonly) KWExpectationType expectationType; 22 | 23 | @property (nonatomic, readonly) KWMatcherFactory *matcherFactory; 24 | @property (nonatomic, readonly) id reporter; 25 | 26 | @property (nonatomic, strong) id subject; 27 | 28 | 29 | #pragma mark - Initializing 30 | 31 | - (id)initForShouldWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; 32 | - (id)initForShouldNotWithCallSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; 33 | - (id)initWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; 34 | 35 | + (id)matchVerifierWithExpectationType:(KWExpectationType)anExpectationType callSite:(KWCallSite *)aCallSite matcherFactory:(KWMatcherFactory *)aMatcherFactory reporter:(id)aReporter; 36 | 37 | - (void)verifyWithMatcher:(id)aMatcher; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeTrueMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeTrueMatcher.h" 8 | 9 | @interface KWBeTrueMatcher() 10 | 11 | @property (nonatomic, readwrite) BOOL expectedValue; 12 | 13 | @end 14 | 15 | @implementation KWBeTrueMatcher 16 | 17 | #pragma mark - Getting Matcher Strings 18 | 19 | + (NSArray *)matcherStrings { 20 | return @[@"beTrue", @"beFalse", @"beYes", @"beNo"]; 21 | } 22 | 23 | #pragma mark - Matching 24 | 25 | - (BOOL)evaluate { 26 | if (![self.subject respondsToSelector:@selector(boolValue)]) 27 | [NSException raise:@"KWMatcherException" format:@"subject does not respond to -boolValue"]; 28 | 29 | return [self.subject boolValue] == self.expectedValue; 30 | } 31 | 32 | #pragma mark - Getting Failure Messages 33 | 34 | - (NSString *)failureMessageForShould { 35 | return [NSString stringWithFormat:@"expected subject to be %@", 36 | self.expectedValue ? @"true" : @"false"]; 37 | } 38 | 39 | - (NSString *)description { 40 | if (self.expectedValue == YES) { 41 | return @"be true"; 42 | } 43 | return @"be false"; 44 | } 45 | 46 | #pragma mark - Configuring Matchers 47 | 48 | - (void)beTrue { 49 | self.expectedValue = YES; 50 | } 51 | 52 | - (void)beFalse { 53 | self.expectedValue = NO; 54 | } 55 | 56 | - (void)beYes { 57 | self.expectedValue = YES; 58 | } 59 | 60 | - (void)beNo { 61 | self.expectedValue = NO; 62 | } 63 | 64 | @end 65 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/License.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010, Allen Ding 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | 1. Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | 2. Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | 3. Neither the name of Allen Ding nor the names of any contributors may be 15 | used to endorse or promote products derived from this software without specific 16 | prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Stubbing/KWIntercept.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import 9 | 10 | @class KWMessagePattern; 11 | @class KWStub; 12 | 13 | #pragma mark - Getting Forwarding Implementations 14 | 15 | IMP KWRegularForwardingImplementation(void); 16 | IMP KWStretForwardingImplementation(void); 17 | IMP KWForwardingImplementationForMethodEncoding(const char* encoding); 18 | 19 | #pragma mark - Getting Intercept Class Information 20 | 21 | BOOL KWObjectIsClass(id anObject); 22 | BOOL KWClassIsInterceptClass(Class aClass); 23 | NSString *KWInterceptClassNameForClass(Class aClass); 24 | Class KWInterceptClassForCanonicalClass(Class canonicalClass); 25 | Class KWRealClassForClass(Class aClass); 26 | 27 | #pragma mark - Enabling Intercepting 28 | 29 | Class KWSetupObjectInterceptSupport(id anObject); 30 | void KWSetupMethodInterceptSupport(Class interceptClass, SEL aSelector); 31 | 32 | #pragma mark - Managing Stubs & Spies 33 | void KWClearStubsAndSpies(void); 34 | 35 | #pragma mark - Managing Objects Stubs 36 | 37 | void KWAssociateObjectStub(id anObject, KWStub *aStub, BOOL overrideExisting); 38 | void KWClearObjectStubs(id anObject); 39 | void KWClearAllObjectStubs(void); 40 | 41 | #pragma mark - Managing Message Spies 42 | 43 | void KWAssociateMessageSpy(id anObject, id aSpy, KWMessagePattern *aMessagePattern); 44 | void KWClearObjectSpy(id anObject, id aSpy, KWMessagePattern *aMessagePattern); 45 | void KWClearAllMessageSpies(void); 46 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWPendingNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWPendingNode.h" 8 | 9 | #import "KWCallSite.h" 10 | #import "KWContextNode.h" 11 | #import "KWExampleNodeVisitor.h" 12 | 13 | @implementation KWPendingNode 14 | 15 | @synthesize description = _description; 16 | 17 | #pragma mark - Initializing 18 | 19 | - (id)initWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription { 20 | self = [super init]; 21 | if (self) { 22 | _callSite = aCallSite; 23 | _description = [aDescription copy]; 24 | _context = context; 25 | } 26 | 27 | return self; 28 | } 29 | 30 | + (id)pendingNodeWithCallSite:(KWCallSite *)aCallSite context:(KWContextNode *)context description:(NSString *)aDescription { 31 | return [[self alloc] initWithCallSite:aCallSite context:context description:aDescription]; 32 | } 33 | 34 | #pragma mark - Accepting Visitors 35 | 36 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 37 | [aVisitor visitPendingNode:self]; 38 | } 39 | 40 | #pragma mark - Accessing the context stack 41 | 42 | - (NSArray *)contextStack 43 | { 44 | NSMutableArray *contextStack = [NSMutableArray array]; 45 | 46 | KWContextNode *currentContext = _context; 47 | 48 | while (currentContext) { 49 | [contextStack addObject:currentContext]; 50 | currentContext = currentContext.parentContext; 51 | } 52 | return contextStack; 53 | } 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Readme.md: -------------------------------------------------------------------------------- 1 | # Simple BDD for iOS 2 | [![Build Status](https://travis-ci.org/kiwi-bdd/Kiwi.svg?branch=master)](https://travis-ci.org/kiwi-bdd/Kiwi) 3 | 4 | Kiwi is a Behavior Driven Development library for iOS development. 5 | The goal is to provide a BDD library that is exquisitely simple to setup and use. 6 | 7 | ## Why? 8 | The idea behind Kiwi is to have tests that are more readable than what is possible with the bundled test framework. 9 | 10 | Tests (or rather specs) are written in Objective-C and run within the comfort of Xcode to provide a test environment that is as unobtrusive and seamless as possible in terms of running tests and error reporting. 11 | 12 | Specs look like this: 13 | 14 | ```objective-c 15 | describe(@"Team", ^{ 16 | context(@"when newly created", ^{ 17 | it(@"has a name", ^{ 18 | id team = [Team team]; 19 | [[team.name should] equal:@"Black Hawks"]; 20 | }); 21 | 22 | it(@"has 11 players", ^{ 23 | id team = [Team team]; 24 | [[[team should] have:11] players]; 25 | }); 26 | }); 27 | }); 28 | ``` 29 | 30 | ## Documentation 31 | The [Kiwi Wiki](https://github.com/kiwi-bdd/Kiwi/wiki) is the official documentation source. 32 | 33 | ## Getting it 34 | The best way to get Kiwi is by using [CocoaPods](https://github.com/cocoapods/cocoapods). 35 | For all the installation details, check out the [Wiki](https://github.com/kiwi-bdd/Kiwi/wiki) 36 | 37 | ## Support 38 | For all the questions / suggestions you have, that aren't bug reports please use our [Google Group](https://groups.google.com/forum/#!forum/kiwi-bdd) 39 | 40 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinAnimation_CompletionBlockViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimation_CompletionBlockViewController.m 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/12/19. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinAnimation_CompletionBlockViewController.h" 10 | #import "BinExamplePublic.h" 11 | 12 | @interface BinAnimation_CompletionBlockViewController () 13 | 14 | @end 15 | 16 | @implementation BinAnimation_CompletionBlockViewController 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | // Do any additional setup after loading the view. 21 | 22 | self.animationArr = @[@"without completion block", @"with completion block", ]; 23 | } 24 | 25 | - (void)tableViewDidClick:(NSString *)animationStr { 26 | NSUInteger index = [self.animationArr indexOfObject:animationStr]; 27 | switch (index) { 28 | case 0: 29 | [self.animationlabel.layer bin_addAnimation_sync:^(BinAnimationFounder *founder) { 30 | founder.toKeyframe.translationY(200).keyTime(1.0).autoreverses(YES); 31 | }]; 32 | break; 33 | case 1: 34 | { 35 | [self.animationlabel.layer bin_addAnimation_sync:^(BinAnimationFounder *founder) { 36 | founder.toKeyframe.translationY(200).keyTime(1.0).autoreverses(YES); 37 | } completion:^(BinAnimationInfo *animationInfo) { 38 | [self changeColor]; 39 | }]; 40 | } 41 | break; 42 | 43 | default: 44 | break; 45 | } 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /Example/Pods/FBSnapshotTestCase/LICENSE: -------------------------------------------------------------------------------- 1 | BSD License 2 | 3 | For the FBSnapshotTestCase software 4 | 5 | Copyright (c) 2013, Facebook, Inc. 6 | All rights reserved. 7 | 8 | Redistribution and use in source and binary forms, with or without 9 | modification, are permitted provided that the following conditions are met: 10 | 11 | * Redistributions of source code must retain the above copyright notice, 12 | this list of conditions and the following disclaimer. 13 | * Redistributions in binary form must reproduce the above copyright notice, 14 | this list of conditions and the following disclaimer in the documentation 15 | and/or other materials provided with the distribution. 16 | * Neither the name Facebook nor the names of its contributors may be used to 17 | endorse or promote products derived from this software without specific 18 | prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/Categories/UIImage+Diff.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Gabriel Handford on 3/1/09. 3 | // Copyright 2009-2013. All rights reserved. 4 | // Created by John Boiles on 10/20/11. 5 | // Copyright (c) 2011. All rights reserved 6 | // Modified by Felix Schulze on 2/11/13. 7 | // Copyright 2013. All rights reserved. 8 | // 9 | // Permission is hereby granted, free of charge, to any person 10 | // obtaining a copy of this software and associated documentation 11 | // files (the "Software"), to deal in the Software without 12 | // restriction, including without limitation the rights to use, 13 | // copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | // copies of the Software, and to permit persons to whom the 15 | // Software is furnished to do so, subject to the following 16 | // conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be 19 | // included in all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 23 | // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 27 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 28 | // OTHER DEALINGS IN THE SOFTWARE. 29 | // 30 | 31 | #import 32 | 33 | @interface UIImage (Diff) 34 | 35 | - (UIImage *)fb_diffWithImage:(UIImage *)image; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/Categories/UIImage+Compare.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Gabriel Handford on 3/1/09. 3 | // Copyright 2009-2013. All rights reserved. 4 | // Created by John Boiles on 10/20/11. 5 | // Copyright (c) 2011. All rights reserved 6 | // Modified by Felix Schulze on 2/11/13. 7 | // Copyright 2013. All rights reserved. 8 | // 9 | // Permission is hereby granted, free of charge, to any person 10 | // obtaining a copy of this software and associated documentation 11 | // files (the "Software"), to deal in the Software without 12 | // restriction, including without limitation the rights to use, 13 | // copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | // copies of the Software, and to permit persons to whom the 15 | // Software is furnished to do so, subject to the following 16 | // conditions: 17 | // 18 | // The above copyright notice and this permission notice shall be 19 | // included in all copies or substantial portions of the Software. 20 | // 21 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 23 | // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 | // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 25 | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 26 | // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 27 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 28 | // OTHER DEALINGS IN THE SOFTWARE. 29 | // 30 | 31 | #import 32 | 33 | @interface UIImage (Compare) 34 | 35 | - (BOOL)fb_compareWithImage:(UIImage *)image tolerance:(CGFloat)tolerance; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/FBSnapshotTestCasePlatform.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2015, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | * 9 | */ 10 | 11 | #import 12 | 13 | #ifdef __cplusplus 14 | extern "C" { 15 | #endif 16 | 17 | /** 18 | Returns a Boolean value that indicates whether the snapshot test is running in 64Bit. 19 | This method is a convenience for creating the suffixes set based on the architecture 20 | that the test is running. 21 | 22 | @returns @c YES if the test is running in 64bit, otherwise @c NO. 23 | */ 24 | BOOL FBSnapshotTestCaseIs64Bit(void); 25 | 26 | /** 27 | Returns a default set of strings that is used to append a suffix based on the architectures. 28 | @warning Do not modify this function, you can create your own and use it with @c FBSnapshotVerifyViewWithOptions() 29 | 30 | @returns An @c NSOrderedSet object containing strings that are appended to the reference images directory. 31 | */ 32 | NSOrderedSet *FBSnapshotTestCaseDefaultSuffixes(void); 33 | 34 | /** 35 | Returns a fully «normalized» file name. 36 | Strips punctuation and spaces and replaces them with @c _. Also appends the device model, running OS and screen size to the file name. 37 | 38 | @returns An @c NSString object containing the passed @c fileName with the device model, OS and screen size appended at the end. 39 | */ 40 | NSString *FBDeviceAgnosticNormalizedFileName(NSString *fileName); 41 | 42 | #ifdef __cplusplus 43 | } 44 | #endif 45 | -------------------------------------------------------------------------------- /BinAnimation.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint BinAnimation.podspec' to ensure this is a 3 | # valid spec before submitting. 4 | # 5 | # Any lines starting with a # are optional, but their use is encouraged 6 | # To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | s.name = 'BinAnimation' 11 | s.version = '0.1.1' 12 | s.summary = 'A library of CAAnimation.' 13 | 14 | # This description is used to generate tags and improve search results. 15 | # * Think: What does it do? Why did you write it? What is the focus? 16 | # * Try to keep it short, snappy and to the point. 17 | # * Write the description between the DESC delimiters below. 18 | # * Finally, don't worry about the indent, CocoaPods strips it! 19 | 20 | s.description = <<-DESC 21 | TODO: Add long description of the pod here. 22 | DESC 23 | 24 | s.homepage = 'https://github.com/angBin/BinAnimation' 25 | # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' 26 | s.license = { :type => 'MIT', :file => 'LICENSE' } 27 | s.author = { 'angBin' => '895887420@qq.com' } 28 | s.source = { :git => 'https://github.com/angBin/BinAnimation.git', :tag => s.version.to_s } 29 | # s.social_media_url = 'https://twitter.com/' 30 | 31 | s.ios.deployment_target = '9.0' 32 | 33 | s.source_files = 'BinAnimation/Classes/**/*' 34 | 35 | # s.resource_bundles = { 36 | # 'BinAnimation' => ['BinAnimation/Assets/*.png'] 37 | # } 38 | 39 | # s.public_header_files = 'Pod/Classes/**/*.h' 40 | s.frameworks = 'Foundation', 'QuartzCore' 41 | # s.dependency 'Masonry', '~> 1.1.0' 42 | end 43 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeEmptyMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeEmptyMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWBeEmptyMatcher() 11 | 12 | #pragma mark - Properties 13 | 14 | @property (nonatomic, readwrite) NSUInteger count; 15 | 16 | @end 17 | 18 | @implementation KWBeEmptyMatcher 19 | 20 | #pragma mark - Getting Matcher Strings 21 | 22 | + (NSArray *)matcherStrings { 23 | return @[@"beEmpty"]; 24 | } 25 | 26 | #pragma mark - Matching 27 | 28 | - (BOOL)evaluate { 29 | if ([self.subject respondsToSelector:@selector(count)]) { 30 | self.count = [self.subject count]; 31 | return self.count == 0; 32 | } 33 | else if ([self.subject respondsToSelector:@selector(length)]) { 34 | self.count = [self.subject length]; 35 | return self.count == 0; 36 | } 37 | 38 | [NSException raise:@"KWMatcherException" format:@"subject does not respond to -count or -length"]; 39 | return NO; 40 | } 41 | 42 | #pragma mark - Getting Failure Messages 43 | 44 | - (NSString *)countPhrase { 45 | if (self.count == 1) 46 | return @"1 item"; 47 | else 48 | return [NSString stringWithFormat:@"%u items", (unsigned)self.count]; 49 | } 50 | 51 | - (NSString *)failureMessageForShould { 52 | return [NSString stringWithFormat:@"expected subject to be empty, got %@", [self countPhrase]]; 53 | } 54 | 55 | - (NSString *)failureMessageForShouldNot { 56 | return @"expected subject not to be empty"; 57 | } 58 | 59 | - (NSString *)description { 60 | return @"be empty"; 61 | } 62 | 63 | #pragma mark - Configuring Matchers 64 | 65 | - (void)beEmpty { 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Nodes/KWItNode.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWItNode.h" 8 | #import "KWExampleNodeVisitor.h" 9 | #import "KWExample.h" 10 | #import "KWVerifying.h" 11 | #import "KWContextNode.h" 12 | 13 | @interface KWItNode () 14 | 15 | @property (nonatomic, weak) KWContextNode *context; 16 | 17 | @end 18 | 19 | @implementation KWItNode 20 | 21 | #pragma mark - Initializing 22 | 23 | + (id)itNodeWithCallSite:(KWCallSite *)aCallSite 24 | description:(NSString *)aDescription 25 | context:(KWContextNode *)context 26 | block:(void (^)(void))block { 27 | KWItNode *itNode = [[self alloc] initWithCallSite:aCallSite description:aDescription block:block]; 28 | itNode.context = context; 29 | return itNode; 30 | } 31 | 32 | #pragma mark - Accepting Visitors 33 | 34 | - (void)acceptExampleNodeVisitor:(id)aVisitor { 35 | [aVisitor visitItNode:self]; 36 | } 37 | 38 | #pragma mark - Runtime Description support 39 | 40 | - (NSString *)description { 41 | NSString *description = [super description]; 42 | if (description == nil) { 43 | description = [self.example generateDescriptionForAnonymousItNode]; 44 | } 45 | return description; 46 | } 47 | 48 | #pragma mark - Accessing the context stack 49 | 50 | - (NSArray *)contextStack { 51 | NSMutableArray *contextStack = [NSMutableArray array]; 52 | 53 | KWContextNode *currentContext = _context; 54 | 55 | while (currentContext) { 56 | [contextStack addObject:currentContext]; 57 | currentContext = currentContext.parentContext; 58 | } 59 | return contextStack; 60 | } 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWBeIdenticalToMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWBeIdenticalToMatcher.h" 8 | #import "KWFormatter.h" 9 | 10 | @interface KWBeIdenticalToMatcher() 11 | 12 | #pragma mark - Properties 13 | 14 | @property (nonatomic, readwrite, strong) id otherSubject; 15 | 16 | @end 17 | 18 | @implementation KWBeIdenticalToMatcher 19 | 20 | #pragma mark - Getting Matcher Strings 21 | 22 | + (NSArray *)matcherStrings { 23 | return @[@"beIdenticalTo:"]; 24 | } 25 | 26 | #pragma mark - Matching 27 | 28 | - (BOOL)evaluate { 29 | return self.subject == self.otherSubject; 30 | } 31 | 32 | #pragma mark - Getting Failure Messages 33 | 34 | - (NSString *)failureMessageForShould { 35 | return [NSString stringWithFormat:@"expected subject to be identical to %@ (%p), got %@ (%p)", 36 | [KWFormatter formatObject:self.otherSubject], 37 | self.otherSubject, 38 | [KWFormatter formatObject:self.subject], 39 | self.subject]; 40 | } 41 | 42 | - (NSString *)failureMessageForShouldNot { 43 | return [NSString stringWithFormat:@"expected subject not to be identical to %@ (%p)", 44 | [KWFormatter formatObject:self.otherSubject], 45 | self.otherSubject]; 46 | } 47 | 48 | - (NSString *)description { 49 | return [NSString stringWithFormat:@"be identical to %@", self.otherSubject]; 50 | } 51 | 52 | #pragma mark - Configuring Matchers 53 | 54 | - (void)beIdenticalTo:(id)anObject { 55 | self.otherSubject = anObject; 56 | } 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimation-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UIRequiredDeviceCapabilities 32 | 33 | armv7 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationLandscapeLeft 39 | UIInterfaceOrientationLandscapeRight 40 | 41 | UISupportedInterfaceOrientations~ipad 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationPortraitUpsideDown 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BinViewController.m 3 | // BinAnimation 4 | // 5 | // Created by angBin on 10/16/2018. 6 | // Copyright (c) 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinViewController.h" 10 | #import "BinExamplePublic.h" 11 | 12 | @interface BinViewController () 13 | 14 | @end 15 | 16 | @implementation BinViewController 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | // Do any additional setup after loading the view, typically from a nib. 21 | 22 | // 避免viewC被navC的导航栏遮挡,以下两种方法都可以实现,但是已经在AppDelegate中使用了方法二,所以此处不再重复 23 | // self.edgesForExtendedLayout = NO; 24 | // self.navigationController.navigationBar.translucent = NO; 25 | 26 | self.title = @"BinAnimationExample"; 27 | 28 | [self.animationlabel removeFromSuperview]; 29 | self.animationlabel = nil; 30 | CGRect animationTableViewFrame = self.animationTableView.frame; 31 | animationTableViewFrame.origin.y = 0; 32 | animationTableViewFrame.size.height = bin_heightExceptNavBar(); 33 | self.animationTableView.frame = animationTableViewFrame; 34 | self.animationArr = @[@"KeyframeAnimation", @"SpringAnimation", @"TransitionAnimation", @"MultiAnimation", @"AnimationGroup", @"Animation_PauseAndResume", @"Animation_CompletionBlock", @"Animation_SyncOrAsync", @"Animation_OneOrSome", @"KeyframeAnimation_FromOrToOrBy", ]; 35 | } 36 | 37 | - (void)tableViewDidClick:(NSString *)animationStr { 38 | NSString *animationViewControllerString = [NSString stringWithFormat:@"Bin%@ViewController", animationStr]; 39 | UIViewController *animationViewController = [[NSClassFromString(animationViewControllerString) alloc] init]; 40 | [self.navigationController pushViewController:animationViewController animated:YES]; 41 | } 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWFormatter.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWFormatter.h" 8 | 9 | @implementation KWFormatter 10 | 11 | 12 | #pragma mark - Getting Descriptions 13 | 14 | + (NSString *)formatObject:(id)anObject { 15 | if ([anObject isKindOfClass:[NSString class]]) 16 | return [NSString stringWithFormat:@"\"%@\"", anObject]; 17 | 18 | else if ([anObject isKindOfClass:[NSDictionary class]]) 19 | return [anObject description]; // NSDictionary conforms to NSFastEnumeration 20 | 21 | else if ([anObject conformsToProtocol:@protocol(NSFastEnumeration)]) 22 | return [self formattedCollection:anObject]; 23 | 24 | return [anObject description]; 25 | } 26 | 27 | + (NSString *)formatObjectIncludingClass:(id)anObject { 28 | NSString *classString = [[anObject class] description]; 29 | 30 | if ([anObject isKindOfClass:[NSString class]]) 31 | classString = @"NSString"; 32 | 33 | return [NSString stringWithFormat:@"(%@) %@", classString, [self formatObject:anObject]]; 34 | } 35 | 36 | 37 | #pragma mark - Internal Methods 38 | 39 | + (NSString *)formattedCollection:(id)collection { 40 | 41 | NSMutableString *description = [[NSMutableString alloc] initWithString:@"("]; 42 | NSUInteger index = 0; 43 | 44 | for (id object in collection) { 45 | if (index == 0) 46 | [description appendFormat:@"%@", [self formatObject:object]]; 47 | else 48 | [description appendFormat:@", %@", [self formatObject:object]]; 49 | 50 | ++index; 51 | } 52 | 53 | [description appendString:@")"]; 54 | return description; 55 | } 56 | 57 | 58 | 59 | @end 60 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinMultiAnimationViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BinMultiAnimationViewController.m 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2019/2/16. 6 | // Copyright © 2019 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinMultiAnimationViewController.h" 10 | #import "BinExamplePublic.h" 11 | 12 | @interface BinMultiAnimationViewController () 13 | 14 | @end 15 | 16 | @implementation BinMultiAnimationViewController 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | // Do any additional setup after loading the view. 21 | 22 | self.animationArr = @[@"spring+keyframe(rotation)", @"keyframe(translation)+keyframe(opacity)", ]; 23 | } 24 | 25 | - (void)tableViewDidClick:(NSString *)animationStr { 26 | NSUInteger index = [self.animationArr indexOfObject:animationStr]; 27 | switch (index) { 28 | case 0: 29 | [self.animationlabel.layer bin_addAnimation_sync:^(BinAnimationFounder *founder) { 30 | founder.springAnimation.mass(1).stiffness(50).damping(2).initialVelocity(10).byValue([NSValue valueWithCGSize:CGSizeMake(0, 200)]); 31 | founder.toKeyframe.scaleX(0.2).scaleY(0.2).keyTime(1.0).autoreverses(YES); 32 | }]; 33 | break; 34 | case 1: 35 | [self.animationlabel.layer bin_addAnimation_sync:^(BinAnimationFounder *founder) { 36 | founder.toKeyframe.translationY(200).keyTime(1.0).autoreverses(YES); 37 | [founder keyframeAnimation]; // 多组 keyframeAnimation 之间需要使用 [founder keyframeAnimation] 隔离 38 | founder.toKeyframe.opacity(0.0).keyTime(1.0).autoreverses(YES); 39 | }]; 40 | break; 41 | 42 | default: 43 | break; 44 | } 45 | } 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWProbePoller.m: -------------------------------------------------------------------------------- 1 | // 2 | // KWProbePoller.m 3 | // iOSFalconCore 4 | // 5 | // Created by Luke Redpath on 13/01/2011. 6 | // Copyright 2011 LJR Software Limited. All rights reserved. 7 | // 8 | 9 | #import "KWProbePoller.h" 10 | 11 | @interface KWTimeout : NSObject 12 | 13 | @property (nonatomic) CFTimeInterval timeoutDateStamp; 14 | 15 | @end 16 | 17 | @implementation KWTimeout 18 | 19 | - (id)initWithTimeout:(NSTimeInterval)timeout 20 | { 21 | self = [super init]; 22 | if (self) { 23 | _timeoutDateStamp = CFAbsoluteTimeGetCurrent() + timeout; 24 | } 25 | return self; 26 | } 27 | 28 | 29 | - (BOOL)hasTimedOut { 30 | return (_timeoutDateStamp - CFAbsoluteTimeGetCurrent()) < 0; 31 | } 32 | 33 | @end 34 | 35 | 36 | @interface KWProbePoller() 37 | 38 | @property (nonatomic, assign) NSTimeInterval timeoutInterval; 39 | @property (nonatomic, assign) NSTimeInterval delayInterval; 40 | @property (nonatomic, assign) BOOL shouldWait; 41 | 42 | @end 43 | 44 | @implementation KWProbePoller 45 | 46 | - (id)initWithTimeout:(NSTimeInterval)theTimeout 47 | delay:(NSTimeInterval)theDelay 48 | shouldWait:(BOOL)wait { 49 | self = [super init]; 50 | if (self) { 51 | _timeoutInterval = theTimeout; 52 | _delayInterval = theDelay; 53 | _shouldWait = wait; 54 | } 55 | return self; 56 | } 57 | 58 | - (BOOL)check:(id)probe; { 59 | KWTimeout *timeout = [[KWTimeout alloc] initWithTimeout:self.timeoutInterval]; 60 | 61 | while (self.shouldWait || ![probe isSatisfied]) { 62 | if ([timeout hasTimedOut]) { 63 | return [probe isSatisfied]; 64 | } 65 | CFRunLoopRunInMode(kCFRunLoopDefaultMode, _delayInterval, false); 66 | [probe sample]; 67 | } 68 | 69 | return YES; 70 | } 71 | 72 | @end 73 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWUserDefinedMatcher.h: -------------------------------------------------------------------------------- 1 | // 2 | // KWUserDefinedMatcher.h 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 16/06/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "KWMatcher.h" 11 | 12 | typedef BOOL (^KWUserDefinedMatcherBlock)(); 13 | 14 | @interface KWUserDefinedMatcher : KWMatcher 15 | 16 | @property (nonatomic, assign) SEL selector; 17 | @property (nonatomic, copy) NSString *failureMessageForShould; 18 | @property (nonatomic, copy) NSString *failureMessageForShouldNot; 19 | @property (nonatomic, copy) KWUserDefinedMatcherBlock matcherBlock; 20 | @property (nonatomic, copy) NSString *description; 21 | 22 | + (id)matcherWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock; 23 | - (id)initWithSubject:(id)aSubject block:(KWUserDefinedMatcherBlock)aBlock; 24 | @end 25 | 26 | #pragma mark - 27 | 28 | typedef NSString * (^KWUserDefinedMatcherMessageBlock)(id); 29 | 30 | @interface KWUserDefinedMatcherBuilder : NSObject 31 | { 32 | KWUserDefinedMatcher *matcher; 33 | KWUserDefinedMatcherMessageBlock failureMessageForShouldBlock; 34 | KWUserDefinedMatcherMessageBlock failureMessageForShouldNotBlock; 35 | NSString *description; 36 | } 37 | @property (nonatomic, copy, readonly) NSString *key; 38 | 39 | + (id)builder; 40 | + (id)builderForSelector:(SEL)aSelector; 41 | - (id)initWithSelector:(SEL)aSelector; 42 | 43 | #pragma mark - Configuring The Matcher 44 | 45 | - (void)match:(KWUserDefinedMatcherBlock)block; 46 | - (void)failureMessageForShould:(KWUserDefinedMatcherMessageBlock)block; 47 | - (void)failureMessageForShouldNot:(KWUserDefinedMatcherMessageBlock)block; 48 | - (void)description:(NSString *)description; 49 | 50 | #pragma mark - Buiding The Matcher 51 | 52 | - (KWUserDefinedMatcher *)buildMatcherWithSubject:(id)subject; 53 | @end 54 | -------------------------------------------------------------------------------- /Example/Pods/FBSnapshotTestCase/FBSnapshotTestCase/FBSnapshotTestCasePlatform.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2015, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | * 9 | */ 10 | 11 | #import 12 | #import 13 | #import 14 | 15 | BOOL FBSnapshotTestCaseIs64Bit(void) 16 | { 17 | #if __LP64__ 18 | return YES; 19 | #else 20 | return NO; 21 | #endif 22 | } 23 | 24 | NSOrderedSet *FBSnapshotTestCaseDefaultSuffixes(void) 25 | { 26 | NSMutableOrderedSet *suffixesSet = [[NSMutableOrderedSet alloc] init]; 27 | [suffixesSet addObject:@"_32"]; 28 | [suffixesSet addObject:@"_64"]; 29 | if (FBSnapshotTestCaseIs64Bit()) { 30 | return [suffixesSet reversedOrderedSet]; 31 | } 32 | return [suffixesSet copy]; 33 | } 34 | 35 | NSString *FBDeviceAgnosticNormalizedFileName(NSString *fileName) 36 | { 37 | UIDevice *device = [UIDevice currentDevice]; 38 | UIWindow *keyWindow = [[UIApplication sharedApplication] fb_strictKeyWindow]; 39 | CGSize screenSize = keyWindow.bounds.size; 40 | NSString *os = device.systemVersion; 41 | 42 | fileName = [NSString stringWithFormat:@"%@_%@%@_%.0fx%.0f", fileName, device.model, os, screenSize.width, screenSize.height]; 43 | 44 | NSMutableCharacterSet *invalidCharacters = [NSMutableCharacterSet new]; 45 | [invalidCharacters formUnionWithCharacterSet:[NSCharacterSet whitespaceCharacterSet]]; 46 | [invalidCharacters formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]]; 47 | NSArray *validComponents = [fileName componentsSeparatedByCharactersInSet:invalidCharacters]; 48 | fileName = [validComponents componentsJoinedByString:@"_"]; 49 | 50 | return fileName; 51 | } -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWCaptureSpy.m: -------------------------------------------------------------------------------- 1 | #import "KWCaptureSpy.h" 2 | 3 | #import "KWObjCUtilities.h" 4 | #import "KWNull.h" 5 | #import "KWValue.h" 6 | #import "NSInvocation+KiwiAdditions.h" 7 | #import "NSMethodSignature+KiwiAdditions.h" 8 | 9 | @interface KWCaptureSpy() 10 | 11 | @property (nonatomic, strong) id argument; 12 | 13 | @end 14 | 15 | @implementation KWCaptureSpy { 16 | NSUInteger _argumentIndex; 17 | } 18 | 19 | - (id)initWithArgumentIndex:(NSUInteger)index { 20 | self = [super init]; 21 | if (self) { 22 | _argumentIndex = index; 23 | } 24 | return self; 25 | } 26 | 27 | - (id)argument { 28 | if (!_argument) { 29 | @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Argument requested has yet to be captured." userInfo:nil]; 30 | } 31 | 32 | if(_argument == [KWNull null]) { 33 | return nil; 34 | } 35 | else { 36 | return _argument; 37 | } 38 | } 39 | 40 | - (void)object:(id)anObject didReceiveInvocation:(NSInvocation *)anInvocation { 41 | if (!_argument) { 42 | NSMethodSignature *signature = [anInvocation methodSignature]; 43 | const char *objCType = [signature messageArgumentTypeAtIndex:_argumentIndex]; 44 | if (KWObjCTypeIsObject(objCType) || KWObjCTypeIsClass(objCType)) { 45 | void* argumentBuffer = NULL; 46 | [anInvocation getMessageArgument:&argumentBuffer atIndex:_argumentIndex]; 47 | id argument = (__bridge id)argumentBuffer; 48 | if (KWObjCTypeIsBlock(objCType)) { 49 | _argument = [argument copy]; 50 | } else { 51 | if(argument == nil) { 52 | _argument = [KWNull null]; 53 | } else { 54 | _argument = argument; 55 | } 56 | } 57 | } else { 58 | NSData *data = [anInvocation messageArgumentDataAtIndex:_argumentIndex]; 59 | _argument = [KWValue valueWithBytes:[data bytes] objCType:objCType]; 60 | } 61 | } 62 | } 63 | 64 | @end 65 | -------------------------------------------------------------------------------- /Example/BinAnimation/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Example/BinAnimation/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinAnimation_OneOrSomeViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BinAnimation_OneOrSomeViewController.m 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/12/21. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinAnimation_OneOrSomeViewController.h" 10 | #include "BinExamplePublic.h" 11 | 12 | @interface BinAnimation_OneOrSomeViewController () 13 | 14 | @property (nonatomic, strong) NSMutableArray *layerArr; 15 | 16 | @end 17 | 18 | @implementation BinAnimation_OneOrSomeViewController 19 | 20 | - (void)viewDidLoad { 21 | [super viewDidLoad]; 22 | // Do any additional setup after loading the view. 23 | 24 | [self.animationlabel removeFromSuperview]; 25 | self.animationlabel = nil; 26 | self.animationArr = @[@"one animation", @"same animations(have to wait for a while)", ]; 27 | 28 | self.layerArr = [NSMutableArray array]; 29 | for (NSInteger i = 0; i < 324; i++) { 30 | UIView *view = [[UIView alloc] initWithFrame:CGRectMake(12.5+20*(i%18), 12.5+20*(i/18), 10, 10)]; 31 | view.backgroundColor = bin_tintColor1(); 32 | [self.view addSubview:view]; 33 | [self.layerArr addObject:view.layer]; 34 | } 35 | } 36 | 37 | - (void)tableViewDidClick:(NSString *)animationStr { 38 | NSUInteger index = [self.animationArr indexOfObject:animationStr]; 39 | switch (index) { 40 | case 0: 41 | [self.layerArr bin_addOneAnimation_sync:^(BinAnimationFounder *founder) { 42 | founder.toKeyframe.scaleX(0.2).scaleY(0.2).keyTime(1.0).autoreverses(YES); 43 | }]; 44 | break; 45 | case 1: 46 | [self.layerArr bin_addSameAnimation_sync:^(BinAnimationFounder *founder) { 47 | founder.toKeyframe.scaleX(0.2).scaleY(0.2).keyTime(1.0).autoreverses(YES); 48 | }]; 49 | break; 50 | 51 | default: 52 | break; 53 | } 54 | } 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Core/KWExampleSuiteBuilder.h: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KiwiConfiguration.h" 8 | #import "KWBlock.h" 9 | 10 | @class KWCallSite; 11 | @class KWExample; 12 | @class KWExampleSuite; 13 | @class KWContextNode; 14 | 15 | @interface KWExampleSuiteBuilder : NSObject 16 | 17 | #pragma mark - Initializing 18 | 19 | + (id)sharedExampleSuiteBuilder; 20 | 21 | #pragma mark - Building Example Groups 22 | 23 | @property (nonatomic, readonly) BOOL isBuildingExampleSuite; 24 | @property (nonatomic, strong, readonly) KWExampleSuite *currentExampleSuite; 25 | @property (nonatomic, strong) KWExample *currentExample; 26 | @property (nonatomic, strong) KWCallSite *focusedCallSite; 27 | 28 | //spec file name:line number of callsite 29 | - (void)focusWithURI:(NSString *)nodeUrl; 30 | - (KWExampleSuite *)buildExampleSuite:(void (^)(void))buildingBlock; 31 | 32 | - (void)pushContextNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; 33 | - (void)popContextNode; 34 | - (void)setRegisterMatchersNodeWithCallSite:(KWCallSite *)aCallSite namespacePrefix:(NSString *)aNamespacePrefix; 35 | - (void)setBeforeAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 36 | - (void)setAfterAllNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 37 | - (void)setBeforeEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 38 | - (void)setAfterEachNodeWithCallSite:(KWCallSite *)aCallSite block:(void (^)(void))block; 39 | - (void)addLetNodeWithCallSite:(KWCallSite *)aCallSite objectRef:(id *)anObjectRef symbolName:(NSString *)aSymbolName block:(id (^)(void))block; 40 | - (void)addItNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription block:(void (^)(void))block; 41 | - (void)addPendingNodeWithCallSite:(KWCallSite *)aCallSite description:(NSString *)aDescription; 42 | 43 | - (BOOL)isFocused; 44 | - (BOOL)foundFocus; 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /Example/BinAnimation/BinAnimationViewController/BinKeyframeAnimationViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // BinKeyframeAnimationViewController.m 3 | // BinAnimation_Example 4 | // 5 | // Created by angBin on 2018/10/19. 6 | // Copyright © 2018 angBin. All rights reserved. 7 | // 8 | 9 | #import "BinKeyframeAnimationViewController.h" 10 | #import "BinExamplePublic.h" 11 | 12 | @interface BinKeyframeAnimationViewController () 13 | 14 | @end 15 | 16 | @implementation BinKeyframeAnimationViewController 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | // Do any additional setup after loading the view. 21 | 22 | self.animationArr = @[@"translation", @"scale", @"rotation", @"combination(translation+rotation)", ]; 23 | } 24 | 25 | - (void)tableViewDidClick:(NSString *)animationStr { 26 | NSUInteger index = [self.animationArr indexOfObject:animationStr]; 27 | switch (index) { 28 | case 0: 29 | [self.animationlabel.layer bin_addAnimation_sync:^(BinAnimationFounder *founder) { 30 | founder.toKeyframe.translationY(200).keyTime(1.0).autoreverses(YES); 31 | }]; 32 | break; 33 | case 1: 34 | [self.animationlabel.layer bin_addAnimation_sync:^(BinAnimationFounder *founder) { 35 | founder.toKeyframe.scaleX(0.2).scaleY(0.2).keyTime(1.0).autoreverses(YES); 36 | }]; 37 | break; 38 | case 2: 39 | [self.animationlabel.layer bin_addAnimation_sync:^(BinAnimationFounder *founder) { 40 | founder.toKeyframe.rotationZ(M_PI).keyTime(1.0).autoreverses(YES); 41 | }]; 42 | break; 43 | case 3: 44 | [self.animationlabel.layer bin_addAnimation_sync:^(BinAnimationFounder *founder) { 45 | founder.toKeyframe.translationY(200).scaleXYZ(0.2, 0.2, 1.0).rotationZ(M_PI).keyTime(1.0).autoreverses(YES); 46 | }]; 47 | break; 48 | 49 | default: 50 | break; 51 | } 52 | } 53 | 54 | @end 55 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWEqualMatcher.m: -------------------------------------------------------------------------------- 1 | // 2 | // Licensed under the terms in License.txt 3 | // 4 | // Copyright 2010 Allen Ding. All rights reserved. 5 | // 6 | 7 | #import "KWEqualMatcher.h" 8 | #import "KWFormatter.h" 9 | #import "KWValue.h" 10 | 11 | @interface KWEqualMatcher() 12 | 13 | #pragma mark - Properties 14 | 15 | @property (nonatomic, readwrite, strong) id otherSubject; 16 | 17 | @end 18 | 19 | @implementation KWEqualMatcher 20 | 21 | #pragma mark - Initializing 22 | 23 | 24 | #pragma mark - Properties 25 | 26 | @synthesize otherSubject; 27 | 28 | #pragma mark - Getting Matcher Strings 29 | 30 | + (NSArray *)matcherStrings { 31 | return @[@"equal:"]; 32 | } 33 | 34 | #pragma mark - Matching 35 | 36 | - (BOOL)evaluate { 37 | /** handle this as a special case; KWValue supports NSNumber equality but not vice-versa **/ 38 | if ([self.subject isKindOfClass:[NSNumber class]] && [self.otherSubject isKindOfClass:[KWValue class]]) { 39 | return [self.otherSubject isEqual:self.subject]; 40 | } 41 | return [self.subject isEqual:self.otherSubject]; 42 | } 43 | 44 | #pragma mark - Getting Failure Messages 45 | 46 | - (NSString *)failureMessageForShould { 47 | return [NSString stringWithFormat:@"expected subject to equal %@, got %@", 48 | [KWFormatter formatObjectIncludingClass:self.otherSubject], 49 | [KWFormatter formatObjectIncludingClass:self.subject]]; 50 | } 51 | 52 | - (NSString *)failureMessageForShouldNot { 53 | return [NSString stringWithFormat:@"expected subject not to equal %@", 54 | [KWFormatter formatObjectIncludingClass:self.otherSubject]]; 55 | } 56 | 57 | - (NSString *)description 58 | { 59 | return [NSString stringWithFormat:@"equal %@", [KWFormatter formatObjectIncludingClass:self.otherSubject]]; 60 | } 61 | 62 | #pragma mark - Configuring Matchers 63 | 64 | - (void)equal:(id)anObject { 65 | self.otherSubject = anObject; 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /Example/Pods/Kiwi/Classes/Matchers/KWGenericMatchingAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+KiwiAdditions.m 3 | // Kiwi 4 | // 5 | // Created by Luke Redpath on 24/01/2011. 6 | // Copyright 2011 Allen Ding. All rights reserved. 7 | // 8 | 9 | #import "KWGenericMatchingAdditions.h" 10 | #import "KWGenericMatcher.h" 11 | #import "KWGenericMatchEvaluator.h" 12 | 13 | @implementation NSObject (KiwiGenericMatchingAdditions) 14 | 15 | - (BOOL)isEqualOrMatches:(id)object { 16 | if ([KWGenericMatchEvaluator isGenericMatcher:self]) { 17 | return [KWGenericMatchEvaluator genericMatcher:self matches:object]; 18 | } 19 | return [self isEqual:object]; 20 | } 21 | 22 | @end 23 | 24 | @implementation NSArray (KiwiGenericMatchingAdditions) 25 | 26 | - (BOOL)containsObjectEqualToOrMatching:(id)object { 27 | if ([KWGenericMatchEvaluator isGenericMatcher:object]) { 28 | return [self containsObjectMatching:object]; 29 | } 30 | return [self containsObject:object]; 31 | } 32 | 33 | - (BOOL)containsObjectMatching:(id)matcher { 34 | NSIndexSet *indexSet = [self indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) { 35 | BOOL matches = [KWGenericMatchEvaluator genericMatcher:matcher matches:obj]; 36 | if (matches) { 37 | *stop = YES; 38 | } 39 | return matches; 40 | }]; 41 | 42 | return (indexSet.count > 0); 43 | } 44 | 45 | @end 46 | 47 | @implementation NSSet (KiwiGenericMatchingAdditions) 48 | 49 | - (BOOL)containsObjectEqualToOrMatching:(id)object { 50 | if ([KWGenericMatchEvaluator isGenericMatcher:object]) { 51 | return [[self allObjects] containsObjectMatching:object]; 52 | } 53 | return [self containsObject:object]; 54 | } 55 | 56 | @end 57 | 58 | @implementation NSOrderedSet (KiwiGenericMatchingAdditions) 59 | 60 | - (BOOL)containsObjectEqualToOrMatching:(id)object { 61 | if ([KWGenericMatchEvaluator isGenericMatcher:object]) { 62 | return [[self array] containsObjectMatching:object]; 63 | } 64 | return [self containsObject:object]; 65 | } 66 | 67 | @end 68 | -------------------------------------------------------------------------------- /Example/BinAnimation/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } 99 | --------------------------------------------------------------------------------