diff --git a/BinaryProjects/ANSDK.xcodeproj/project.pbxproj b/BinaryProjects/ANSDK.xcodeproj/project.pbxproj index 9f6c31b28..8b84ef793 100644 --- a/BinaryProjects/ANSDK.xcodeproj/project.pbxproj +++ b/BinaryProjects/ANSDK.xcodeproj/project.pbxproj @@ -11,9 +11,6 @@ 8A0EFA8B1B4356F600196294 /* ANAdAdapterBaseYahoo.h in Copy Files */ = {isa = PBXBuildFile; fileRef = 8A9687211B433A3300D9399B /* ANAdAdapterBaseYahoo.h */; }; 8A0EFA8E1B4357E900196294 /* ANAdAdapterBannerYahoo.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A0EFA8D1B4357E900196294 /* ANAdAdapterBannerYahoo.m */; }; 8A0EFA911B4357FB00196294 /* ANAdAdapterInterstitialYahoo.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A0EFA901B4357FB00196294 /* ANAdAdapterInterstitialYahoo.m */; }; - 8A2F48241A2E255600B0EA05 /* ANOpenInExternalBrowserActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A2F48211A2E255600B0EA05 /* ANOpenInExternalBrowserActivity.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A2F48251A2E255600B0EA05 /* ANOpenInExternalBrowserActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A2F48221A2E255600B0EA05 /* ANOpenInExternalBrowserActivity.m */; }; - 8A2F48261A2E255600B0EA05 /* ANOpenInExternalBrowserActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A2F48221A2E255600B0EA05 /* ANOpenInExternalBrowserActivity.m */; }; 8A2F483D1A2E33B000B0EA05 /* compass.png in Resources */ = {isa = PBXBuildFile; fileRef = 8A2F483C1A2E33B000B0EA05 /* compass.png */; }; 8A3601271B39B51300B7BB62 /* ANBrowserViewController_SizeClasses.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8A3601261B39B2E000B7BB62 /* ANBrowserViewController_SizeClasses.xib */; }; 8A3B378119D623C300CE24A5 /* ANSDKResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = EC48177B1845046A0066BBFE /* ANSDKResources.bundle */; }; @@ -47,9 +44,68 @@ 8A6D2E8D1A44A751003CE77A /* interstitial_flat_closebox@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8A6D2E841A44A5D3003CE77A /* interstitial_flat_closebox@3x.png */; }; 8A6D2E8E1A44A751003CE77A /* interstitial_flat_closebox@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8A6D2E871A44A62A003CE77A /* interstitial_flat_closebox@2x.png */; }; 8A6D2E8F1A44A751003CE77A /* interstitial_flat_closebox.png in Resources */ = {isa = PBXBuildFile; fileRef = 8A6D2E881A44A62A003CE77A /* interstitial_flat_closebox.png */; }; + 8A73FA311BD6B34E00D18188 /* ANAdFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9B21BD6B34D00D18188 /* ANAdFetcher.m */; }; + 8A73FA321BD6B34E00D18188 /* ANAdFetcherResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9B41BD6B34D00D18188 /* ANAdFetcherResponse.m */; }; + 8A73FA331BD6B34E00D18188 /* ANAdRequestUrl.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9B61BD6B34D00D18188 /* ANAdRequestUrl.m */; }; + 8A73FA341BD6B34E00D18188 /* ANAdServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9B81BD6B34D00D18188 /* ANAdServerResponse.m */; }; + 8A73FA351BD6B34E00D18188 /* ANAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9B91BD6B34D00D18188 /* ANAdView.m */; }; + 8A73FA361BD6B34E00D18188 /* ANAdWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9BC1BD6B34D00D18188 /* ANAdWebViewController.m */; }; + 8A73FA371BD6B34E00D18188 /* ANANJAMImplementation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9BE1BD6B34D00D18188 /* ANANJAMImplementation.m */; }; + 8A73FA381BD6B34E00D18188 /* ANBannerAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9BF1BD6B34D00D18188 /* ANBannerAdView.m */; }; + 8A73FA391BD6B34E00D18188 /* ANBrowserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9C11BD6B34D00D18188 /* ANBrowserViewController.m */; }; + 8A73FA3A1BD6B34E00D18188 /* ANCircularAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9C31BD6B34D00D18188 /* ANCircularAnimationView.m */; }; + 8A73FA3B1BD6B34E00D18188 /* ANClickOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9C51BD6B34D00D18188 /* ANClickOverlayView.m */; }; + 8A73FA3C1BD6B34E00D18188 /* ANGlobal.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9C71BD6B34D00D18188 /* ANGlobal.m */; }; + 8A73FA3D1BD6B34E00D18188 /* ANInterstitialAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9C81BD6B34D00D18188 /* ANInterstitialAd.m */; }; + 8A73FA3E1BD6B34E00D18188 /* ANInterstitialAdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9CA1BD6B34D00D18188 /* ANInterstitialAdViewController.m */; }; + 8A73FA3F1BD6B34E00D18188 /* ANLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9CB1BD6B34D00D18188 /* ANLocation.m */; }; + 8A73FA401BD6B34E00D18188 /* ANLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9CD1BD6B34D00D18188 /* ANLogging.m */; }; + 8A73FA411BD6B34E00D18188 /* ANLogManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9CE1BD6B34D00D18188 /* ANLogManager.m */; }; + 8A73FA421BD6B34E00D18188 /* ANMediatedAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9D01BD6B34D00D18188 /* ANMediatedAd.m */; }; + 8A73FA431BD6B34E00D18188 /* ANMediationAdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9D21BD6B34D00D18188 /* ANMediationAdViewController.m */; }; + 8A73FA441BD6B34E00D18188 /* ANMediationContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9D41BD6B34D00D18188 /* ANMediationContainerView.m */; }; + 8A73FA451BD6B34E00D18188 /* ANOpenInExternalBrowserActivity.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9D61BD6B34D00D18188 /* ANOpenInExternalBrowserActivity.m */; }; + 8A73FA461BD6B34E00D18188 /* ANPBBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9D81BD6B34D00D18188 /* ANPBBuffer.m */; }; + 8A73FA471BD6B34E00D18188 /* ANPBContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9DA1BD6B34D00D18188 /* ANPBContainerView.m */; }; + 8A73FA481BD6B34E00D18188 /* ANPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9DC1BD6B34D00D18188 /* ANPlayerView.m */; }; + 8A73FA491BD6B34E00D18188 /* ANReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9DE1BD6B34D00D18188 /* ANReachability.m */; }; + 8A73FA4A1BD6B34E00D18188 /* ANStandardAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9E01BD6B34D00D18188 /* ANStandardAd.m */; }; + 8A73FA4B1BD6B34E00D18188 /* ANTargetingParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9E11BD6B34D00D18188 /* ANTargetingParameters.m */; }; + 8A73FA4C1BD6B34E00D18188 /* ANVideoAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9E31BD6B34D00D18188 /* ANVideoAd.m */; }; + 8A73FA4D1BD6B34E00D18188 /* ANVideoPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9E51BD6B34D00D18188 /* ANVideoPlayerViewController.m */; }; + 8A73FA4E1BD6B34E00D18188 /* ANVolumeButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9E71BD6B34D00D18188 /* ANVolumeButtonView.m */; }; + 8A73FA4F1BD6B34E00D18188 /* ANMRAIDCalendarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9EA1BD6B34D00D18188 /* ANMRAIDCalendarManager.m */; }; + 8A73FA501BD6B34E00D18188 /* ANMRAIDContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9EC1BD6B34D00D18188 /* ANMRAIDContainerView.m */; }; + 8A73FA511BD6B34E00D18188 /* ANMRAIDExpandProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9EE1BD6B34D00D18188 /* ANMRAIDExpandProperties.m */; }; + 8A73FA521BD6B34E00D18188 /* ANMRAIDExpandViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9F01BD6B34D00D18188 /* ANMRAIDExpandViewController.m */; }; + 8A73FA531BD6B34E00D18188 /* ANMRAIDJavascriptUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9F21BD6B34D00D18188 /* ANMRAIDJavascriptUtil.m */; }; + 8A73FA541BD6B34E00D18188 /* ANMRAIDOrientationProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9F41BD6B34D00D18188 /* ANMRAIDOrientationProperties.m */; }; + 8A73FA551BD6B34E00D18188 /* ANMRAIDResizeProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9F61BD6B34D00D18188 /* ANMRAIDResizeProperties.m */; }; + 8A73FA561BD6B34E00D18188 /* ANMRAIDResizeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9F81BD6B34D00D18188 /* ANMRAIDResizeView.m */; }; + 8A73FA571BD6B34E00D18188 /* ANMRAIDResizeViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9FA1BD6B34D00D18188 /* ANMRAIDResizeViewManager.m */; }; + 8A73FA581BD6B34E00D18188 /* ANMRAIDUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9FC1BD6B34D00D18188 /* ANMRAIDUtil.m */; }; + 8A73FA591BD6B34E00D18188 /* ANInLine.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73F9FF1BD6B34D00D18188 /* ANInLine.m */; }; + 8A73FA5A1BD6B34E00D18188 /* ANVast.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA011BD6B34D00D18188 /* ANVast.m */; }; + 8A73FA5B1BD6B34E00D18188 /* ANVastDataModelInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA031BD6B34D00D18188 /* ANVastDataModelInterface.m */; }; + 8A73FA5C1BD6B34E00D18188 /* ANWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA051BD6B34D00D18188 /* ANWrapper.m */; }; + 8A73FA5D1BD6B34E00D18188 /* ANAdSystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA081BD6B34D00D18188 /* ANAdSystem.m */; }; + 8A73FA5E1BD6B34E00D18188 /* ANImpression.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA0A1BD6B34D00D18188 /* ANImpression.m */; }; + 8A73FA5F1BD6B34E00D18188 /* ANCreative.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA0D1BD6B34D00D18188 /* ANCreative.m */; }; + 8A73FA601BD6B34E00D18188 /* ANLinear.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA0F1BD6B34D00D18188 /* ANLinear.m */; }; + 8A73FA611BD6B34E00D18188 /* ANNonLinearAds.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA111BD6B34D00D18188 /* ANNonLinearAds.m */; }; + 8A73FA621BD6B34E00D18188 /* ANStaticResource.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA131BD6B34D00D18188 /* ANStaticResource.m */; }; + 8A73FA631BD6B34E00D18188 /* ANTracking.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA151BD6B34D00D18188 /* ANTracking.m */; }; + 8A73FA641BD6B34E00D18188 /* AnCompanion.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA181BD6B34D00D18188 /* AnCompanion.m */; }; + 8A73FA651BD6B34E00D18188 /* ANVideoClicks.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA1B1BD6B34D00D18188 /* ANVideoClicks.m */; }; + 8A73FA661BD6B34E00D18188 /* ANMediaFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA1E1BD6B34D00D18188 /* ANMediaFile.m */; }; + 8A73FA671BD6B34E00D18188 /* ANCustomClick.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA211BD6B34D00D18188 /* ANCustomClick.m */; }; + 8A73FA681BD6B34E00D18188 /* ANNonLinear.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A73FA241BD6B34D00D18188 /* ANNonLinear.m */; }; 8A7FB9511B0527E800C90859 /* ANAdAdapterBaseChartboost.h in Copy Files */ = {isa = PBXBuildFile; fileRef = 8A949AD21ADF1D8B00D83DCE /* ANAdAdapterBaseChartboost.h */; }; 8A82FDF61A30F36C00A267A0 /* ANNativeImpressionTrackerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A82FDF41A30F36B00A267A0 /* ANNativeImpressionTrackerManager.m */; }; 8A84E42E1A25350800C60EAB /* ANNativeAdResponse+PrivateMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A84E42A1A2534F300C60EAB /* ANNativeAdResponse+PrivateMethods.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 8A87BF351BD9443000281EA9 /* ANUniversalTagRequestBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A87BF341BD9443000281EA9 /* ANUniversalTagRequestBuilder.m */; }; + 8A87BF4B1BD9471600281EA9 /* ANUniversalTagAdServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A87BF4A1BD9471600281EA9 /* ANUniversalTagAdServerResponse.m */; }; + 8A87BF501BD961EB00281EA9 /* ANInterstitialAdFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A87BF4F1BD961EB00281EA9 /* ANInterstitialAdFetcher.m */; }; 8A8DEFA21AD5C03D00742AD7 /* ANAdAdapterBaseInMobi.h in Copy Files */ = {isa = PBXBuildFile; fileRef = 8AA5B4E51AA8B7F800522E1C /* ANAdAdapterBaseInMobi.h */; }; 8A8DEFA31AD5C04700742AD7 /* ANAdAdapterBaseAdColony.h in Copy Files */ = {isa = PBXBuildFile; fileRef = 8A8E0FDA1AD432B7004C5C50 /* ANAdAdapterBaseAdColony.h */; }; 8A8DEFA41AD5C05300742AD7 /* ANAdAdapterBaseVungle.h in Copy Files */ = {isa = PBXBuildFile; fileRef = 8AD7C4DC1AD2FF070049C997 /* ANAdAdapterBaseVungle.h */; }; @@ -91,21 +147,6 @@ 8A9AEDC81A1BF88200C58BDA /* NSTimer+ANCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE4EA98194B768A0069D934 /* NSTimer+ANCategory.h */; settings = {ATTRIBUTES = (Private, ); }; }; 8A9AEDC91A1BF88200C58BDA /* UIView+ANCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE4EA9A194B768A0069D934 /* UIView+ANCategory.h */; settings = {ATTRIBUTES = (Private, ); }; }; 8A9AEDCA1A1BF88200C58BDA /* UIWebView+ANCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = ECE4EA9C194B768A0069D934 /* UIWebView+ANCategory.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDCB1A1BF88200C58BDA /* ANAdFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD6189E1981C11F00AC0780 /* ANAdFetcher.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDCC1A1BF88200C58BDA /* ANAdRequestUrl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618A01981C11F00AC0780 /* ANAdRequestUrl.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDCE1A1BF88200C58BDA /* ANAdViewInternalDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618A51981C11F00AC0780 /* ANAdViewInternalDelegate.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDD01A1BF88200C58BDA /* ANANJAMImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618A81981C11F00AC0780 /* ANANJAMImplementation.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDD21A1BF88200C58BDA /* ANBrowserViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618AC1981C11F00AC0780 /* ANBrowserViewController.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDD31A1BF88200C58BDA /* ANClickOverlayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618AE1981C11F00AC0780 /* ANClickOverlayView.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDD41A1BF88200C58BDA /* ANGlobal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618B01981C11F00AC0780 /* ANGlobal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDD51A1BF88200C58BDA /* ANInterstitialAdViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618B31981C11F00AC0780 /* ANInterstitialAdViewController.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDD61A1BF88200C58BDA /* ANLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618B61981C11F00AC0780 /* ANLogging.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDD71A1BF88200C58BDA /* ANMediatedAd.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618B91981C11F00AC0780 /* ANMediatedAd.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDD81A1BF88200C58BDA /* ANMediationAdViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618BB1981C11F00AC0780 /* ANMediationAdViewController.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDD91A1BF88200C58BDA /* ANMediationContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618BD1981C11F00AC0780 /* ANMediationContainerView.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDDC1A1BF88200C58BDA /* ANPBBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618C21981C11F00AC0780 /* ANPBBuffer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDDD1A1BF88300C58BDA /* ANPBContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618C41981C11F00AC0780 /* ANPBContainerView.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A9AEDDE1A1BF88300C58BDA /* ANReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AD618C61981C11F00AC0780 /* ANReachability.h */; settings = {ATTRIBUTES = (Private, ); }; }; 8A9AEDE01A1BF88300C58BDA /* ANNativeAdFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AB8761E1A0994310022D9A5 /* ANNativeAdFetcher.h */; settings = {ATTRIBUTES = (Private, ); }; }; 8A9AEDE11A1BF88300C58BDA /* ANNativeAdImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AB876201A0994310022D9A5 /* ANNativeAdImageCache.h */; settings = {ATTRIBUTES = (Private, ); }; }; 8A9AEDE31A1BF88300C58BDA /* ANNativeAdRequestUrlBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AB876241A0994310022D9A5 /* ANNativeAdRequestUrlBuilder.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -116,26 +157,6 @@ 8A9AEDEA1A1BF99D00C58BDA /* NSTimer+ANCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EA99194B768A0069D934 /* NSTimer+ANCategory.m */; }; 8A9AEDEB1A1BF99D00C58BDA /* UIView+ANCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EA9B194B768A0069D934 /* UIView+ANCategory.m */; }; 8A9AEDEC1A1BF99D00C58BDA /* UIWebView+ANCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = ECE4EA9D194B768A0069D934 /* UIWebView+ANCategory.m */; }; - 8A9AEDED1A1BF99D00C58BDA /* ANAdFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD6189F1981C11F00AC0780 /* ANAdFetcher.m */; }; - 8A9AEDEE1A1BF99D00C58BDA /* ANAdRequestUrl.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618A11981C11F00AC0780 /* ANAdRequestUrl.m */; }; - 8A9AEDF01A1BF99D00C58BDA /* ANAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618A41981C11F00AC0780 /* ANAdView.m */; }; - 8A9AEDF21A1BF99D00C58BDA /* ANANJAMImplementation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618A91981C11F00AC0780 /* ANANJAMImplementation.m */; }; - 8A9AEDF31A1BF99D00C58BDA /* ANBannerAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618AA1981C11F00AC0780 /* ANBannerAdView.m */; }; - 8A9AEDF41A1BF99D00C58BDA /* ANBrowserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618AD1981C11F00AC0780 /* ANBrowserViewController.m */; }; - 8A9AEDF51A1BF99D00C58BDA /* ANClickOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618AF1981C11F00AC0780 /* ANClickOverlayView.m */; }; - 8A9AEDF61A1BF99D00C58BDA /* ANGlobal.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B11981C11F00AC0780 /* ANGlobal.m */; }; - 8A9AEDF71A1BF99D00C58BDA /* ANInterstitialAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B21981C11F00AC0780 /* ANInterstitialAd.m */; }; - 8A9AEDF81A1BF99D00C58BDA /* ANInterstitialAdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B41981C11F00AC0780 /* ANInterstitialAdViewController.m */; }; - 8A9AEDF91A1BF99D00C58BDA /* ANLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B51981C11F00AC0780 /* ANLocation.m */; }; - 8A9AEDFA1A1BF99D00C58BDA /* ANLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B71981C11F00AC0780 /* ANLogging.m */; }; - 8A9AEDFB1A1BF99D00C58BDA /* ANLogManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B81981C11F00AC0780 /* ANLogManager.m */; }; - 8A9AEDFC1A1BF99D00C58BDA /* ANMediatedAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618BA1981C11F00AC0780 /* ANMediatedAd.m */; }; - 8A9AEDFD1A1BF99D00C58BDA /* ANMediationAdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618BC1981C11F00AC0780 /* ANMediationAdViewController.m */; }; - 8A9AEDFE1A1BF99D00C58BDA /* ANMediationContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618BE1981C11F00AC0780 /* ANMediationContainerView.m */; }; - 8A9AEE001A1BF99D00C58BDA /* ANPBBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618C31981C11F00AC0780 /* ANPBBuffer.m */; }; - 8A9AEE011A1BF99D00C58BDA /* ANPBContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618C51981C11F00AC0780 /* ANPBContainerView.m */; }; - 8A9AEE021A1BF99D00C58BDA /* ANReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618C71981C11F00AC0780 /* ANReachability.m */; }; - 8A9AEE031A1BF99D00C58BDA /* ANTargetingParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618C81981C11F00AC0780 /* ANTargetingParameters.m */; }; 8A9AEE051A1BF99D00C58BDA /* ANNativeAdFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AB8761F1A0994310022D9A5 /* ANNativeAdFetcher.m */; }; 8A9AEE061A1BF99D00C58BDA /* ANNativeAdImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AB876211A0994310022D9A5 /* ANNativeAdImageCache.m */; }; 8A9AEE071A1BF99D00C58BDA /* ANNativeAdRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AB876231A0994310022D9A5 /* ANNativeAdRequest.m */; }; @@ -149,60 +170,19 @@ 8AA5B4E31AA8B74E00522E1C /* ANAdAdapterInterstitialInMobi.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AA5B4E01AA8B74E00522E1C /* ANAdAdapterInterstitialInMobi.m */; }; 8AA5B4E41AA8B74E00522E1C /* ANAdAdapterNativeInMobi.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AA5B4E21AA8B74E00522E1C /* ANAdAdapterNativeInMobi.m */; }; 8AA5B4E71AA8B7F800522E1C /* ANAdAdapterBaseInMobi.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AA5B4E61AA8B7F800522E1C /* ANAdAdapterBaseInMobi.m */; }; - 8AC65F4C1A40DE63006BCF39 /* ANMRAIDCalendarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F381A40DE63006BCF39 /* ANMRAIDCalendarManager.m */; }; - 8AC65F4E1A40DE63006BCF39 /* ANMRAIDContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F3A1A40DE63006BCF39 /* ANMRAIDContainerView.m */; }; - 8AC65F501A40DE63006BCF39 /* ANMRAIDExpandProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F3C1A40DE63006BCF39 /* ANMRAIDExpandProperties.m */; }; - 8AC65F521A40DE63006BCF39 /* ANMRAIDExpandViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F3E1A40DE63006BCF39 /* ANMRAIDExpandViewController.m */; }; - 8AC65F541A40DE63006BCF39 /* ANMRAIDJavascriptUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F401A40DE63006BCF39 /* ANMRAIDJavascriptUtil.m */; }; - 8AC65F561A40DE63006BCF39 /* ANMRAIDOrientationProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F421A40DE63006BCF39 /* ANMRAIDOrientationProperties.m */; }; - 8AC65F581A40DE63006BCF39 /* ANMRAIDResizeProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F441A40DE63006BCF39 /* ANMRAIDResizeProperties.m */; }; - 8AC65F5A1A40DE63006BCF39 /* ANMRAIDResizeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F461A40DE63006BCF39 /* ANMRAIDResizeView.m */; }; - 8AC65F5C1A40DE63006BCF39 /* ANMRAIDResizeViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F481A40DE63006BCF39 /* ANMRAIDResizeViewManager.m */; }; - 8AC65F5E1A40DE63006BCF39 /* ANMRAIDUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F4A1A40DE63006BCF39 /* ANMRAIDUtil.m */; }; - 8AC65F5F1A40DE74006BCF39 /* ANMRAIDCalendarManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AC65F371A40DE63006BCF39 /* ANMRAIDCalendarManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8AC65F601A40DE74006BCF39 /* ANMRAIDCalendarManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F381A40DE63006BCF39 /* ANMRAIDCalendarManager.m */; }; - 8AC65F611A40DE74006BCF39 /* ANMRAIDContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AC65F391A40DE63006BCF39 /* ANMRAIDContainerView.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8AC65F621A40DE74006BCF39 /* ANMRAIDContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F3A1A40DE63006BCF39 /* ANMRAIDContainerView.m */; }; - 8AC65F631A40DE74006BCF39 /* ANMRAIDExpandProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AC65F3B1A40DE63006BCF39 /* ANMRAIDExpandProperties.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8AC65F641A40DE74006BCF39 /* ANMRAIDExpandProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F3C1A40DE63006BCF39 /* ANMRAIDExpandProperties.m */; }; - 8AC65F651A40DE74006BCF39 /* ANMRAIDExpandViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AC65F3D1A40DE63006BCF39 /* ANMRAIDExpandViewController.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8AC65F661A40DE74006BCF39 /* ANMRAIDExpandViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F3E1A40DE63006BCF39 /* ANMRAIDExpandViewController.m */; }; - 8AC65F671A40DE74006BCF39 /* ANMRAIDJavascriptUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AC65F3F1A40DE63006BCF39 /* ANMRAIDJavascriptUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8AC65F681A40DE74006BCF39 /* ANMRAIDJavascriptUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F401A40DE63006BCF39 /* ANMRAIDJavascriptUtil.m */; }; - 8AC65F691A40DE74006BCF39 /* ANMRAIDOrientationProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AC65F411A40DE63006BCF39 /* ANMRAIDOrientationProperties.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8AC65F6A1A40DE74006BCF39 /* ANMRAIDOrientationProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F421A40DE63006BCF39 /* ANMRAIDOrientationProperties.m */; }; - 8AC65F6B1A40DE74006BCF39 /* ANMRAIDResizeProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AC65F431A40DE63006BCF39 /* ANMRAIDResizeProperties.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8AC65F6C1A40DE74006BCF39 /* ANMRAIDResizeProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F441A40DE63006BCF39 /* ANMRAIDResizeProperties.m */; }; - 8AC65F6D1A40DE74006BCF39 /* ANMRAIDResizeView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AC65F451A40DE63006BCF39 /* ANMRAIDResizeView.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8AC65F6E1A40DE74006BCF39 /* ANMRAIDResizeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F461A40DE63006BCF39 /* ANMRAIDResizeView.m */; }; - 8AC65F6F1A40DE74006BCF39 /* ANMRAIDResizeViewManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AC65F471A40DE63006BCF39 /* ANMRAIDResizeViewManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8AC65F701A40DE74006BCF39 /* ANMRAIDResizeViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F481A40DE63006BCF39 /* ANMRAIDResizeViewManager.m */; }; - 8AC65F711A40DE74006BCF39 /* ANMRAIDUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AC65F491A40DE63006BCF39 /* ANMRAIDUtil.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8AC65F721A40DE74006BCF39 /* ANMRAIDUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC65F4A1A40DE63006BCF39 /* ANMRAIDUtil.m */; }; - 8AC7C5391A3B5CEF00AA5548 /* ANAdWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC7C5371A3B5CEF00AA5548 /* ANAdWebViewController.m */; }; + 8AAD5D161BD6C0E300B4CD53 /* ANXML+HTTP.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AAD5D131BD6C0E300B4CD53 /* ANXML+HTTP.m */; }; + 8AAD5D171BD6C0E300B4CD53 /* ANXML.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AAD5D151BD6C0E300B4CD53 /* ANXML.m */; }; + 8ABC3FED1BE9195B0099501F /* ANVASTUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ABC3FEC1BE9195B0099501F /* ANVASTUtil.m */; }; + 8ABC3FF41BE91B530099501F /* mute-off.png in Resources */ = {isa = PBXBuildFile; fileRef = 8ABC3FEE1BE91B530099501F /* mute-off.png */; }; + 8ABC3FF51BE91B530099501F /* mute-off@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8ABC3FEF1BE91B530099501F /* mute-off@2x.png */; }; + 8ABC3FF61BE91B530099501F /* mute-off@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8ABC3FF01BE91B530099501F /* mute-off@3x.png */; }; + 8ABC3FF71BE91B530099501F /* mute-on.png in Resources */ = {isa = PBXBuildFile; fileRef = 8ABC3FF11BE91B530099501F /* mute-on.png */; }; + 8ABC3FF81BE91B530099501F /* mute-on@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8ABC3FF21BE91B530099501F /* mute-on@2x.png */; }; + 8ABC3FF91BE91B530099501F /* mute-on@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8ABC3FF31BE91B530099501F /* mute-on@3x.png */; }; + 8ABC3FFC1BE91D910099501F /* ANVast+ANCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ABC3FFB1BE91D910099501F /* ANVast+ANCategory.m */; }; 8AD5155D19D216E6002E53D6 /* ANAdAdapterBannerAmazon.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD5155619D216E6002E53D6 /* ANAdAdapterBannerAmazon.m */; }; 8AD5155E19D216E6002E53D6 /* ANAdAdapterBaseAmazon.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD5155819D216E6002E53D6 /* ANAdAdapterBaseAmazon.m */; }; 8AD5155F19D216E6002E53D6 /* ANAdAdapterInterstitialAmazon.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD5155A19D216E6002E53D6 /* ANAdAdapterInterstitialAmazon.m */; }; - 8AD618CB1981C11F00AC0780 /* ANAdFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD6189F1981C11F00AC0780 /* ANAdFetcher.m */; }; - 8AD618CC1981C11F00AC0780 /* ANAdRequestUrl.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618A11981C11F00AC0780 /* ANAdRequestUrl.m */; }; - 8AD618CE1981C11F00AC0780 /* ANAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618A41981C11F00AC0780 /* ANAdView.m */; }; - 8AD618D01981C11F00AC0780 /* ANANJAMImplementation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618A91981C11F00AC0780 /* ANANJAMImplementation.m */; }; - 8AD618D11981C11F00AC0780 /* ANBannerAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618AA1981C11F00AC0780 /* ANBannerAdView.m */; }; - 8AD618D21981C11F00AC0780 /* ANBrowserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618AD1981C11F00AC0780 /* ANBrowserViewController.m */; }; - 8AD618D31981C11F00AC0780 /* ANClickOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618AF1981C11F00AC0780 /* ANClickOverlayView.m */; }; - 8AD618D41981C11F00AC0780 /* ANGlobal.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B11981C11F00AC0780 /* ANGlobal.m */; }; - 8AD618D51981C11F00AC0780 /* ANInterstitialAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B21981C11F00AC0780 /* ANInterstitialAd.m */; }; - 8AD618D61981C11F00AC0780 /* ANInterstitialAdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B41981C11F00AC0780 /* ANInterstitialAdViewController.m */; }; - 8AD618D71981C11F00AC0780 /* ANLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B51981C11F00AC0780 /* ANLocation.m */; }; - 8AD618D81981C11F00AC0780 /* ANLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B71981C11F00AC0780 /* ANLogging.m */; }; - 8AD618D91981C11F00AC0780 /* ANLogManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618B81981C11F00AC0780 /* ANLogManager.m */; }; - 8AD618DA1981C11F00AC0780 /* ANMediatedAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618BA1981C11F00AC0780 /* ANMediatedAd.m */; }; - 8AD618DB1981C11F00AC0780 /* ANMediationAdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618BC1981C11F00AC0780 /* ANMediationAdViewController.m */; }; - 8AD618DC1981C11F00AC0780 /* ANMediationContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618BE1981C11F00AC0780 /* ANMediationContainerView.m */; }; - 8AD618DE1981C11F00AC0780 /* ANPBBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618C31981C11F00AC0780 /* ANPBBuffer.m */; }; - 8AD618DF1981C11F00AC0780 /* ANPBContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618C51981C11F00AC0780 /* ANPBContainerView.m */; }; - 8AD618E01981C11F00AC0780 /* ANReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618C71981C11F00AC0780 /* ANReachability.m */; }; - 8AD618E11981C11F00AC0780 /* ANTargetingParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD618C81981C11F00AC0780 /* ANTargetingParameters.m */; }; 8AD618E31981C19100AC0780 /* appnexus_logo_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 8AD618991981C10700AC0780 /* appnexus_logo_icon.png */; }; 8AD618E41981C19500AC0780 /* appnexus_logo_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8AD6189A1981C10700AC0780 /* appnexus_logo_icon@2x.png */; }; 8AD7C4DB1AD2FB430049C997 /* ANAdAdapterInterstitialVungle.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD7C4DA1AD2FB430049C997 /* ANAdAdapterInterstitialVungle.m */; }; @@ -226,22 +206,14 @@ 8AE2D86719CC9B3A00001B70 /* ANGADCustomInterstitialAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AE2D86519CC9B3A00001B70 /* ANGADCustomInterstitialAd.m */; }; 8AE2D86F19CC9B7300001B70 /* ANMoPubMediationBanner.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AE2D86C19CC9B7300001B70 /* ANMoPubMediationBanner.m */; }; 8AE2D87019CC9B7300001B70 /* ANMoPubMediationInterstitial.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AE2D86E19CC9B7300001B70 /* ANMoPubMediationInterstitial.m */; }; + 8AE3E1561C441F8E004AA151 /* ANSSMStandardAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AE3E1551C441F8E004AA151 /* ANSSMStandardAd.m */; }; + 8AE3E1591C441FA6004AA151 /* ANSSMVideoAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AE3E1581C441FA6004AA151 /* ANSSMVideoAd.m */; }; 8AE5E11E1A2FDC7700FDE858 /* ANAdView+PrivateMethods.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AE5E11C1A2FDC7700FDE858 /* ANAdView+PrivateMethods.h */; settings = {ATTRIBUTES = (Private, ); }; }; 8AE7AD9E1A7AC4E5009E2F2F /* EventKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8AE7AD9D1A7AC4E5009E2F2F /* EventKitUI.framework */; }; - 8AE7AD9F1A7AC4F6009E2F2F /* ANAdWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AC7C5371A3B5CEF00AA5548 /* ANAdWebViewController.m */; }; 8AF366BD19D492F30097019F /* ANSDKResources.bundle in Copy Files */ = {isa = PBXBuildFile; fileRef = EC48177B1845046A0066BBFE /* ANSDKResources.bundle */; }; 8AF3C19D1A361CC30018FB6A /* ANNativeImpressionTrackerInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AF3C19B1A361CC30018FB6A /* ANNativeImpressionTrackerInfo.m */; }; 8AF3C19F1A3631460018FB6A /* ANNativeImpressionTrackerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A82FDF41A30F36B00A267A0 /* ANNativeImpressionTrackerManager.m */; }; 8AF3C1A01A3631490018FB6A /* ANNativeImpressionTrackerInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AF3C19B1A361CC30018FB6A /* ANNativeImpressionTrackerInfo.m */; }; - 8AF5A87F1ACC60D50089C529 /* ANAdFetcherResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF5A8791ACC60D50089C529 /* ANAdFetcherResponse.h */; }; - 8AF5A8801ACC60D50089C529 /* ANAdFetcherResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AF5A87A1ACC60D50089C529 /* ANAdFetcherResponse.m */; }; - 8AF5A8811ACC60D50089C529 /* ANAdFetcherResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AF5A87A1ACC60D50089C529 /* ANAdFetcherResponse.m */; }; - 8AF5A8821ACC60D50089C529 /* ANAdServerResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF5A87B1ACC60D50089C529 /* ANAdServerResponse.h */; }; - 8AF5A8831ACC60D50089C529 /* ANAdServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AF5A87C1ACC60D50089C529 /* ANAdServerResponse.m */; }; - 8AF5A8841ACC60D50089C529 /* ANAdServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AF5A87C1ACC60D50089C529 /* ANAdServerResponse.m */; }; - 8AF5A8851ACC60D50089C529 /* ANStandardAd.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF5A87D1ACC60D50089C529 /* ANStandardAd.h */; }; - 8AF5A8861ACC60D50089C529 /* ANStandardAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AF5A87E1ACC60D50089C529 /* ANStandardAd.m */; }; - 8AF5A8871ACC60D50089C529 /* ANStandardAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AF5A87E1ACC60D50089C529 /* ANStandardAd.m */; }; 8AF9F08D19DA131F00758111 /* ANAdAdapterBaseAmazon.h in Copy Files */ = {isa = PBXBuildFile; fileRef = 8AD5155719D216E6002E53D6 /* ANAdAdapterBaseAmazon.h */; }; 8AFC045F1A2E74AC00BEA485 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8AFC045E1A2E74AC00BEA485 /* UIKit.framework */; }; 8AFC04611A2E74C800BEA485 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8AFC04601A2E74C800BEA485 /* CoreGraphics.framework */; }; @@ -580,8 +552,6 @@ 8A1482481AD3371C0046F1B9 /* AdColony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AdColony.framework; sourceTree = ""; }; 8A1482571AD337320046F1B9 /* libANSDKAdColonyAdapter.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libANSDKAdColonyAdapter.a; sourceTree = BUILT_PRODUCTS_DIR; }; 8A2BD4001B66F6450000DB66 /* MMAdSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MMAdSDK.framework; sourceTree = ""; }; - 8A2F48211A2E255600B0EA05 /* ANOpenInExternalBrowserActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANOpenInExternalBrowserActivity.h; sourceTree = ""; }; - 8A2F48221A2E255600B0EA05 /* ANOpenInExternalBrowserActivity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANOpenInExternalBrowserActivity.m; sourceTree = ""; }; 8A2F483C1A2E33B000B0EA05 /* compass.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = compass.png; sourceTree = ""; }; 8A35B89619FEB5EC0016C81F /* ANNativeAdRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ANNativeAdRequest.h; path = native/ANNativeAdRequest.h; sourceTree = ""; }; 8A35B89919FEB8A40016C81F /* ANNativeAdResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ANNativeAdResponse.h; path = native/ANNativeAdResponse.h; sourceTree = ""; }; @@ -631,9 +601,122 @@ 8A6D2E841A44A5D3003CE77A /* interstitial_flat_closebox@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "interstitial_flat_closebox@3x.png"; sourceTree = ""; }; 8A6D2E871A44A62A003CE77A /* interstitial_flat_closebox@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "interstitial_flat_closebox@2x.png"; sourceTree = ""; }; 8A6D2E881A44A62A003CE77A /* interstitial_flat_closebox.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = interstitial_flat_closebox.png; sourceTree = ""; }; + 8A73F9B11BD6B34D00D18188 /* ANAdFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdFetcher.h; sourceTree = ""; }; + 8A73F9B21BD6B34D00D18188 /* ANAdFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdFetcher.m; sourceTree = ""; }; + 8A73F9B31BD6B34D00D18188 /* ANAdFetcherResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdFetcherResponse.h; sourceTree = ""; }; + 8A73F9B41BD6B34D00D18188 /* ANAdFetcherResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdFetcherResponse.m; sourceTree = ""; }; + 8A73F9B51BD6B34D00D18188 /* ANAdRequestUrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdRequestUrl.h; sourceTree = ""; }; + 8A73F9B61BD6B34D00D18188 /* ANAdRequestUrl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdRequestUrl.m; sourceTree = ""; }; + 8A73F9B71BD6B34D00D18188 /* ANAdServerResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdServerResponse.h; sourceTree = ""; }; + 8A73F9B81BD6B34D00D18188 /* ANAdServerResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdServerResponse.m; sourceTree = ""; }; + 8A73F9B91BD6B34D00D18188 /* ANAdView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdView.m; sourceTree = ""; }; + 8A73F9BA1BD6B34D00D18188 /* ANAdViewInternalDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdViewInternalDelegate.h; sourceTree = ""; }; + 8A73F9BB1BD6B34D00D18188 /* ANAdWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdWebViewController.h; sourceTree = ""; }; + 8A73F9BC1BD6B34D00D18188 /* ANAdWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdWebViewController.m; sourceTree = ""; }; + 8A73F9BD1BD6B34D00D18188 /* ANANJAMImplementation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANANJAMImplementation.h; sourceTree = ""; }; + 8A73F9BE1BD6B34D00D18188 /* ANANJAMImplementation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANANJAMImplementation.m; sourceTree = ""; }; + 8A73F9BF1BD6B34D00D18188 /* ANBannerAdView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANBannerAdView.m; sourceTree = ""; }; + 8A73F9C01BD6B34D00D18188 /* ANBrowserViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANBrowserViewController.h; sourceTree = ""; }; + 8A73F9C11BD6B34D00D18188 /* ANBrowserViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANBrowserViewController.m; sourceTree = ""; }; + 8A73F9C21BD6B34D00D18188 /* ANCircularAnimationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANCircularAnimationView.h; sourceTree = ""; }; + 8A73F9C31BD6B34D00D18188 /* ANCircularAnimationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANCircularAnimationView.m; sourceTree = ""; }; + 8A73F9C41BD6B34D00D18188 /* ANClickOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANClickOverlayView.h; sourceTree = ""; }; + 8A73F9C51BD6B34D00D18188 /* ANClickOverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANClickOverlayView.m; sourceTree = ""; }; + 8A73F9C61BD6B34D00D18188 /* ANGlobal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANGlobal.h; sourceTree = ""; }; + 8A73F9C71BD6B34D00D18188 /* ANGlobal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANGlobal.m; sourceTree = ""; }; + 8A73F9C81BD6B34D00D18188 /* ANInterstitialAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANInterstitialAd.m; sourceTree = ""; }; + 8A73F9C91BD6B34D00D18188 /* ANInterstitialAdViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANInterstitialAdViewController.h; sourceTree = ""; }; + 8A73F9CA1BD6B34D00D18188 /* ANInterstitialAdViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANInterstitialAdViewController.m; sourceTree = ""; }; + 8A73F9CB1BD6B34D00D18188 /* ANLocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANLocation.m; sourceTree = ""; }; + 8A73F9CC1BD6B34D00D18188 /* ANLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANLogging.h; sourceTree = ""; }; + 8A73F9CD1BD6B34D00D18188 /* ANLogging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANLogging.m; sourceTree = ""; }; + 8A73F9CE1BD6B34D00D18188 /* ANLogManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANLogManager.m; sourceTree = ""; }; + 8A73F9CF1BD6B34D00D18188 /* ANMediatedAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMediatedAd.h; sourceTree = ""; }; + 8A73F9D01BD6B34D00D18188 /* ANMediatedAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMediatedAd.m; sourceTree = ""; }; + 8A73F9D11BD6B34D00D18188 /* ANMediationAdViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMediationAdViewController.h; sourceTree = ""; }; + 8A73F9D21BD6B34D00D18188 /* ANMediationAdViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMediationAdViewController.m; sourceTree = ""; }; + 8A73F9D31BD6B34D00D18188 /* ANMediationContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMediationContainerView.h; sourceTree = ""; }; + 8A73F9D41BD6B34D00D18188 /* ANMediationContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMediationContainerView.m; sourceTree = ""; }; + 8A73F9D51BD6B34D00D18188 /* ANOpenInExternalBrowserActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANOpenInExternalBrowserActivity.h; sourceTree = ""; }; + 8A73F9D61BD6B34D00D18188 /* ANOpenInExternalBrowserActivity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANOpenInExternalBrowserActivity.m; sourceTree = ""; }; + 8A73F9D71BD6B34D00D18188 /* ANPBBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANPBBuffer.h; sourceTree = ""; }; + 8A73F9D81BD6B34D00D18188 /* ANPBBuffer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANPBBuffer.m; sourceTree = ""; }; + 8A73F9D91BD6B34D00D18188 /* ANPBContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANPBContainerView.h; sourceTree = ""; }; + 8A73F9DA1BD6B34D00D18188 /* ANPBContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANPBContainerView.m; sourceTree = ""; }; + 8A73F9DB1BD6B34D00D18188 /* ANPlayerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANPlayerView.h; sourceTree = ""; }; + 8A73F9DC1BD6B34D00D18188 /* ANPlayerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANPlayerView.m; sourceTree = ""; }; + 8A73F9DD1BD6B34D00D18188 /* ANReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANReachability.h; sourceTree = ""; }; + 8A73F9DE1BD6B34D00D18188 /* ANReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANReachability.m; sourceTree = ""; }; + 8A73F9DF1BD6B34D00D18188 /* ANStandardAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANStandardAd.h; sourceTree = ""; }; + 8A73F9E01BD6B34D00D18188 /* ANStandardAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANStandardAd.m; sourceTree = ""; }; + 8A73F9E11BD6B34D00D18188 /* ANTargetingParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTargetingParameters.m; sourceTree = ""; }; + 8A73F9E21BD6B34D00D18188 /* ANVideoAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANVideoAd.h; sourceTree = ""; }; + 8A73F9E31BD6B34D00D18188 /* ANVideoAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANVideoAd.m; sourceTree = ""; }; + 8A73F9E41BD6B34D00D18188 /* ANVideoPlayerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANVideoPlayerViewController.h; sourceTree = ""; }; + 8A73F9E51BD6B34D00D18188 /* ANVideoPlayerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANVideoPlayerViewController.m; sourceTree = ""; }; + 8A73F9E61BD6B34D00D18188 /* ANVolumeButtonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANVolumeButtonView.h; sourceTree = ""; }; + 8A73F9E71BD6B34D00D18188 /* ANVolumeButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANVolumeButtonView.m; sourceTree = ""; }; + 8A73F9E91BD6B34D00D18188 /* ANMRAIDCalendarManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDCalendarManager.h; sourceTree = ""; }; + 8A73F9EA1BD6B34D00D18188 /* ANMRAIDCalendarManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDCalendarManager.m; sourceTree = ""; }; + 8A73F9EB1BD6B34D00D18188 /* ANMRAIDContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDContainerView.h; sourceTree = ""; }; + 8A73F9EC1BD6B34D00D18188 /* ANMRAIDContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDContainerView.m; sourceTree = ""; }; + 8A73F9ED1BD6B34D00D18188 /* ANMRAIDExpandProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDExpandProperties.h; sourceTree = ""; }; + 8A73F9EE1BD6B34D00D18188 /* ANMRAIDExpandProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDExpandProperties.m; sourceTree = ""; }; + 8A73F9EF1BD6B34D00D18188 /* ANMRAIDExpandViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDExpandViewController.h; sourceTree = ""; }; + 8A73F9F01BD6B34D00D18188 /* ANMRAIDExpandViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDExpandViewController.m; sourceTree = ""; }; + 8A73F9F11BD6B34D00D18188 /* ANMRAIDJavascriptUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDJavascriptUtil.h; sourceTree = ""; }; + 8A73F9F21BD6B34D00D18188 /* ANMRAIDJavascriptUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDJavascriptUtil.m; sourceTree = ""; }; + 8A73F9F31BD6B34D00D18188 /* ANMRAIDOrientationProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDOrientationProperties.h; sourceTree = ""; }; + 8A73F9F41BD6B34D00D18188 /* ANMRAIDOrientationProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDOrientationProperties.m; sourceTree = ""; }; + 8A73F9F51BD6B34D00D18188 /* ANMRAIDResizeProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDResizeProperties.h; sourceTree = ""; }; + 8A73F9F61BD6B34D00D18188 /* ANMRAIDResizeProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDResizeProperties.m; sourceTree = ""; }; + 8A73F9F71BD6B34D00D18188 /* ANMRAIDResizeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDResizeView.h; sourceTree = ""; }; + 8A73F9F81BD6B34D00D18188 /* ANMRAIDResizeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDResizeView.m; sourceTree = ""; }; + 8A73F9F91BD6B34D00D18188 /* ANMRAIDResizeViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDResizeViewManager.h; sourceTree = ""; }; + 8A73F9FA1BD6B34D00D18188 /* ANMRAIDResizeViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDResizeViewManager.m; sourceTree = ""; }; + 8A73F9FB1BD6B34D00D18188 /* ANMRAIDUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDUtil.h; sourceTree = ""; }; + 8A73F9FC1BD6B34D00D18188 /* ANMRAIDUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDUtil.m; sourceTree = ""; }; + 8A73F9FE1BD6B34D00D18188 /* ANInLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANInLine.h; sourceTree = ""; }; + 8A73F9FF1BD6B34D00D18188 /* ANInLine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANInLine.m; sourceTree = ""; }; + 8A73FA001BD6B34D00D18188 /* ANVast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANVast.h; sourceTree = ""; }; + 8A73FA011BD6B34D00D18188 /* ANVast.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANVast.m; sourceTree = ""; }; + 8A73FA021BD6B34D00D18188 /* ANVastDataModelInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANVastDataModelInterface.h; sourceTree = ""; }; + 8A73FA031BD6B34D00D18188 /* ANVastDataModelInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANVastDataModelInterface.m; sourceTree = ""; }; + 8A73FA041BD6B34D00D18188 /* ANWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANWrapper.h; sourceTree = ""; }; + 8A73FA051BD6B34D00D18188 /* ANWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANWrapper.m; sourceTree = ""; }; + 8A73FA071BD6B34D00D18188 /* ANAdSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdSystem.h; sourceTree = ""; }; + 8A73FA081BD6B34D00D18188 /* ANAdSystem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdSystem.m; sourceTree = ""; }; + 8A73FA091BD6B34D00D18188 /* ANImpression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANImpression.h; sourceTree = ""; }; + 8A73FA0A1BD6B34D00D18188 /* ANImpression.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANImpression.m; sourceTree = ""; }; + 8A73FA0C1BD6B34D00D18188 /* ANCreative.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANCreative.h; sourceTree = ""; }; + 8A73FA0D1BD6B34D00D18188 /* ANCreative.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANCreative.m; sourceTree = ""; }; + 8A73FA0E1BD6B34D00D18188 /* ANLinear.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANLinear.h; sourceTree = ""; }; + 8A73FA0F1BD6B34D00D18188 /* ANLinear.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANLinear.m; sourceTree = ""; }; + 8A73FA101BD6B34D00D18188 /* ANNonLinearAds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANNonLinearAds.h; sourceTree = ""; }; + 8A73FA111BD6B34D00D18188 /* ANNonLinearAds.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANNonLinearAds.m; sourceTree = ""; }; + 8A73FA121BD6B34D00D18188 /* ANStaticResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANStaticResource.h; sourceTree = ""; }; + 8A73FA131BD6B34D00D18188 /* ANStaticResource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANStaticResource.m; sourceTree = ""; }; + 8A73FA141BD6B34D00D18188 /* ANTracking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANTracking.h; sourceTree = ""; }; + 8A73FA151BD6B34D00D18188 /* ANTracking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTracking.m; sourceTree = ""; }; + 8A73FA171BD6B34D00D18188 /* AnCompanion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnCompanion.h; sourceTree = ""; }; + 8A73FA181BD6B34D00D18188 /* AnCompanion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AnCompanion.m; sourceTree = ""; }; + 8A73FA1A1BD6B34D00D18188 /* ANVideoClicks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANVideoClicks.h; sourceTree = ""; }; + 8A73FA1B1BD6B34D00D18188 /* ANVideoClicks.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANVideoClicks.m; sourceTree = ""; }; + 8A73FA1D1BD6B34D00D18188 /* ANMediaFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMediaFile.h; sourceTree = ""; }; + 8A73FA1E1BD6B34D00D18188 /* ANMediaFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMediaFile.m; sourceTree = ""; }; + 8A73FA201BD6B34D00D18188 /* ANCustomClick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANCustomClick.h; sourceTree = ""; }; + 8A73FA211BD6B34D00D18188 /* ANCustomClick.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANCustomClick.m; sourceTree = ""; }; + 8A73FA231BD6B34D00D18188 /* ANNonLinear.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANNonLinear.h; sourceTree = ""; }; + 8A73FA241BD6B34D00D18188 /* ANNonLinear.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANNonLinear.m; sourceTree = ""; }; 8A82FDF31A30F36B00A267A0 /* ANNativeImpressionTrackerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANNativeImpressionTrackerManager.h; sourceTree = ""; }; 8A82FDF41A30F36B00A267A0 /* ANNativeImpressionTrackerManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANNativeImpressionTrackerManager.m; sourceTree = ""; }; 8A84E42A1A2534F300C60EAB /* ANNativeAdResponse+PrivateMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ANNativeAdResponse+PrivateMethods.h"; sourceTree = ""; }; + 8A87BF331BD9443000281EA9 /* ANUniversalTagRequestBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANUniversalTagRequestBuilder.h; sourceTree = ""; }; + 8A87BF341BD9443000281EA9 /* ANUniversalTagRequestBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANUniversalTagRequestBuilder.m; sourceTree = ""; }; + 8A87BF491BD9471600281EA9 /* ANUniversalTagAdServerResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANUniversalTagAdServerResponse.h; sourceTree = ""; }; + 8A87BF4A1BD9471600281EA9 /* ANUniversalTagAdServerResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANUniversalTagAdServerResponse.m; sourceTree = ""; }; + 8A87BF4E1BD961EB00281EA9 /* ANInterstitialAdFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANInterstitialAdFetcher.h; sourceTree = ""; }; + 8A87BF4F1BD961EB00281EA9 /* ANInterstitialAdFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANInterstitialAdFetcher.m; sourceTree = ""; }; 8A893ED41BFBD713007AC313 /* FABKitProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FABKitProtocol.h; sourceTree = ""; }; 8A893ED51BFBD713007AC313 /* libMoPubSDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libMoPubSDK.a; sourceTree = ""; }; 8A893ED61BFBD713007AC313 /* MoPub-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MoPub-Bridging-Header.h"; sourceTree = ""; }; @@ -761,6 +844,10 @@ 8AA5B4E21AA8B74E00522E1C /* ANAdAdapterNativeInMobi.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterNativeInMobi.m; sourceTree = ""; }; 8AA5B4E51AA8B7F800522E1C /* ANAdAdapterBaseInMobi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdAdapterBaseInMobi.h; sourceTree = ""; }; 8AA5B4E61AA8B7F800522E1C /* ANAdAdapterBaseInMobi.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterBaseInMobi.m; sourceTree = ""; }; + 8AAD5D121BD6C0E300B4CD53 /* ANXML+HTTP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ANXML+HTTP.h"; sourceTree = ""; }; + 8AAD5D131BD6C0E300B4CD53 /* ANXML+HTTP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ANXML+HTTP.m"; sourceTree = ""; }; + 8AAD5D141BD6C0E300B4CD53 /* ANXML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANXML.h; sourceTree = ""; }; + 8AAD5D151BD6C0E300B4CD53 /* ANXML.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANXML.m; sourceTree = ""; }; 8AB8761E1A0994310022D9A5 /* ANNativeAdFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANNativeAdFetcher.h; sourceTree = ""; }; 8AB8761F1A0994310022D9A5 /* ANNativeAdFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANNativeAdFetcher.m; sourceTree = ""; }; 8AB876201A0994310022D9A5 /* ANNativeAdImageCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANNativeAdImageCache.h; sourceTree = ""; }; @@ -776,28 +863,16 @@ 8AB8762E1A0994310022D9A5 /* ANNativeMediatedAdResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANNativeMediatedAdResponse.m; sourceTree = ""; }; 8ABB76691A00385C00FEAD9D /* ANAdConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdConstants.h; sourceTree = ""; }; 8ABB766D1A004DBD00FEAD9D /* ANNativeAdStarRating.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ANNativeAdStarRating.h; path = native/ANNativeAdStarRating.h; sourceTree = ""; }; - 8AC65F371A40DE63006BCF39 /* ANMRAIDCalendarManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDCalendarManager.h; sourceTree = ""; }; - 8AC65F381A40DE63006BCF39 /* ANMRAIDCalendarManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDCalendarManager.m; sourceTree = ""; }; - 8AC65F391A40DE63006BCF39 /* ANMRAIDContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDContainerView.h; sourceTree = ""; }; - 8AC65F3A1A40DE63006BCF39 /* ANMRAIDContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDContainerView.m; sourceTree = ""; }; - 8AC65F3B1A40DE63006BCF39 /* ANMRAIDExpandProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDExpandProperties.h; sourceTree = ""; }; - 8AC65F3C1A40DE63006BCF39 /* ANMRAIDExpandProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDExpandProperties.m; sourceTree = ""; }; - 8AC65F3D1A40DE63006BCF39 /* ANMRAIDExpandViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDExpandViewController.h; sourceTree = ""; }; - 8AC65F3E1A40DE63006BCF39 /* ANMRAIDExpandViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDExpandViewController.m; sourceTree = ""; }; - 8AC65F3F1A40DE63006BCF39 /* ANMRAIDJavascriptUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDJavascriptUtil.h; sourceTree = ""; }; - 8AC65F401A40DE63006BCF39 /* ANMRAIDJavascriptUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDJavascriptUtil.m; sourceTree = ""; }; - 8AC65F411A40DE63006BCF39 /* ANMRAIDOrientationProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDOrientationProperties.h; sourceTree = ""; }; - 8AC65F421A40DE63006BCF39 /* ANMRAIDOrientationProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDOrientationProperties.m; sourceTree = ""; }; - 8AC65F431A40DE63006BCF39 /* ANMRAIDResizeProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDResizeProperties.h; sourceTree = ""; }; - 8AC65F441A40DE63006BCF39 /* ANMRAIDResizeProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDResizeProperties.m; sourceTree = ""; }; - 8AC65F451A40DE63006BCF39 /* ANMRAIDResizeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDResizeView.h; sourceTree = ""; }; - 8AC65F461A40DE63006BCF39 /* ANMRAIDResizeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDResizeView.m; sourceTree = ""; }; - 8AC65F471A40DE63006BCF39 /* ANMRAIDResizeViewManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDResizeViewManager.h; sourceTree = ""; }; - 8AC65F481A40DE63006BCF39 /* ANMRAIDResizeViewManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDResizeViewManager.m; sourceTree = ""; }; - 8AC65F491A40DE63006BCF39 /* ANMRAIDUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMRAIDUtil.h; sourceTree = ""; }; - 8AC65F4A1A40DE63006BCF39 /* ANMRAIDUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMRAIDUtil.m; sourceTree = ""; }; - 8AC7C5361A3B5CEF00AA5548 /* ANAdWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdWebViewController.h; sourceTree = ""; }; - 8AC7C5371A3B5CEF00AA5548 /* ANAdWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdWebViewController.m; sourceTree = ""; }; + 8ABC3FEB1BE9195B0099501F /* ANVASTUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANVASTUtil.h; sourceTree = ""; }; + 8ABC3FEC1BE9195B0099501F /* ANVASTUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANVASTUtil.m; sourceTree = ""; }; + 8ABC3FEE1BE91B530099501F /* mute-off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mute-off.png"; sourceTree = ""; }; + 8ABC3FEF1BE91B530099501F /* mute-off@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mute-off@2x.png"; sourceTree = ""; }; + 8ABC3FF01BE91B530099501F /* mute-off@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mute-off@3x.png"; sourceTree = ""; }; + 8ABC3FF11BE91B530099501F /* mute-on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mute-on.png"; sourceTree = ""; }; + 8ABC3FF21BE91B530099501F /* mute-on@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mute-on@2x.png"; sourceTree = ""; }; + 8ABC3FF31BE91B530099501F /* mute-on@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mute-on@3x.png"; sourceTree = ""; }; + 8ABC3FFA1BE91D910099501F /* ANVast+ANCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ANVast+ANCategory.h"; sourceTree = ""; }; + 8ABC3FFB1BE91D910099501F /* ANVast+ANCategory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ANVast+ANCategory.m"; sourceTree = ""; }; 8AD5154019D214CA002E53D6 /* libANSDKAmazonAdapter.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libANSDKAmazonAdapter.a; sourceTree = BUILT_PRODUCTS_DIR; }; 8AD5155519D216E6002E53D6 /* ANAdAdapterBannerAmazon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdAdapterBannerAmazon.h; sourceTree = ""; }; 8AD5155619D216E6002E53D6 /* ANAdAdapterBannerAmazon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterBannerAmazon.m; sourceTree = ""; }; @@ -808,41 +883,6 @@ 8AD5156019D21706002E53D6 /* Amazon.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Amazon.pch; sourceTree = ""; }; 8AD618991981C10700AC0780 /* appnexus_logo_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = appnexus_logo_icon.png; sourceTree = ""; }; 8AD6189A1981C10700AC0780 /* appnexus_logo_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "appnexus_logo_icon@2x.png"; sourceTree = ""; }; - 8AD6189E1981C11F00AC0780 /* ANAdFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdFetcher.h; sourceTree = ""; }; - 8AD6189F1981C11F00AC0780 /* ANAdFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdFetcher.m; sourceTree = ""; }; - 8AD618A01981C11F00AC0780 /* ANAdRequestUrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdRequestUrl.h; sourceTree = ""; }; - 8AD618A11981C11F00AC0780 /* ANAdRequestUrl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdRequestUrl.m; sourceTree = ""; }; - 8AD618A41981C11F00AC0780 /* ANAdView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdView.m; sourceTree = ""; }; - 8AD618A51981C11F00AC0780 /* ANAdViewInternalDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdViewInternalDelegate.h; sourceTree = ""; }; - 8AD618A81981C11F00AC0780 /* ANANJAMImplementation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANANJAMImplementation.h; sourceTree = ""; }; - 8AD618A91981C11F00AC0780 /* ANANJAMImplementation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANANJAMImplementation.m; sourceTree = ""; }; - 8AD618AA1981C11F00AC0780 /* ANBannerAdView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANBannerAdView.m; sourceTree = ""; }; - 8AD618AC1981C11F00AC0780 /* ANBrowserViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANBrowserViewController.h; sourceTree = ""; }; - 8AD618AD1981C11F00AC0780 /* ANBrowserViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANBrowserViewController.m; sourceTree = ""; }; - 8AD618AE1981C11F00AC0780 /* ANClickOverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANClickOverlayView.h; sourceTree = ""; }; - 8AD618AF1981C11F00AC0780 /* ANClickOverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANClickOverlayView.m; sourceTree = ""; }; - 8AD618B01981C11F00AC0780 /* ANGlobal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANGlobal.h; sourceTree = ""; }; - 8AD618B11981C11F00AC0780 /* ANGlobal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANGlobal.m; sourceTree = ""; }; - 8AD618B21981C11F00AC0780 /* ANInterstitialAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANInterstitialAd.m; sourceTree = ""; }; - 8AD618B31981C11F00AC0780 /* ANInterstitialAdViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANInterstitialAdViewController.h; sourceTree = ""; }; - 8AD618B41981C11F00AC0780 /* ANInterstitialAdViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANInterstitialAdViewController.m; sourceTree = ""; }; - 8AD618B51981C11F00AC0780 /* ANLocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANLocation.m; sourceTree = ""; }; - 8AD618B61981C11F00AC0780 /* ANLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANLogging.h; sourceTree = ""; }; - 8AD618B71981C11F00AC0780 /* ANLogging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANLogging.m; sourceTree = ""; }; - 8AD618B81981C11F00AC0780 /* ANLogManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANLogManager.m; sourceTree = ""; }; - 8AD618B91981C11F00AC0780 /* ANMediatedAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMediatedAd.h; sourceTree = ""; }; - 8AD618BA1981C11F00AC0780 /* ANMediatedAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMediatedAd.m; sourceTree = ""; }; - 8AD618BB1981C11F00AC0780 /* ANMediationAdViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMediationAdViewController.h; sourceTree = ""; }; - 8AD618BC1981C11F00AC0780 /* ANMediationAdViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMediationAdViewController.m; sourceTree = ""; }; - 8AD618BD1981C11F00AC0780 /* ANMediationContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANMediationContainerView.h; sourceTree = ""; }; - 8AD618BE1981C11F00AC0780 /* ANMediationContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANMediationContainerView.m; sourceTree = ""; }; - 8AD618C21981C11F00AC0780 /* ANPBBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANPBBuffer.h; sourceTree = ""; }; - 8AD618C31981C11F00AC0780 /* ANPBBuffer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANPBBuffer.m; sourceTree = ""; }; - 8AD618C41981C11F00AC0780 /* ANPBContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANPBContainerView.h; sourceTree = ""; }; - 8AD618C51981C11F00AC0780 /* ANPBContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANPBContainerView.m; sourceTree = ""; }; - 8AD618C61981C11F00AC0780 /* ANReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANReachability.h; sourceTree = ""; }; - 8AD618C71981C11F00AC0780 /* ANReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANReachability.m; sourceTree = ""; }; - 8AD618C81981C11F00AC0780 /* ANTargetingParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANTargetingParameters.m; sourceTree = ""; }; 8AD7C4D81AD2FABA0049C997 /* libANSDKVungleAdapter.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libANSDKVungleAdapter.a; sourceTree = BUILT_PRODUCTS_DIR; }; 8AD7C4D91AD2FB430049C997 /* ANAdAdapterInterstitialVungle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdAdapterInterstitialVungle.h; sourceTree = ""; }; 8AD7C4DA1AD2FB430049C997 /* ANAdAdapterInterstitialVungle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdAdapterInterstitialVungle.m; sourceTree = ""; }; @@ -898,6 +938,10 @@ 8AE2D86C19CC9B7300001B70 /* ANMoPubMediationBanner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ANMoPubMediationBanner.m; path = ../mediation/mediating/MoPub/ANMoPubMediationBanner.m; sourceTree = ""; }; 8AE2D86D19CC9B7300001B70 /* ANMoPubMediationInterstitial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ANMoPubMediationInterstitial.h; path = ../mediation/mediating/MoPub/ANMoPubMediationInterstitial.h; sourceTree = ""; }; 8AE2D86E19CC9B7300001B70 /* ANMoPubMediationInterstitial.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ANMoPubMediationInterstitial.m; path = ../mediation/mediating/MoPub/ANMoPubMediationInterstitial.m; sourceTree = ""; }; + 8AE3E1541C441F8E004AA151 /* ANSSMStandardAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANSSMStandardAd.h; sourceTree = ""; }; + 8AE3E1551C441F8E004AA151 /* ANSSMStandardAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANSSMStandardAd.m; sourceTree = ""; }; + 8AE3E1571C441FA6004AA151 /* ANSSMVideoAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANSSMVideoAd.h; sourceTree = ""; }; + 8AE3E1581C441FA6004AA151 /* ANSSMVideoAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANSSMVideoAd.m; sourceTree = ""; }; 8AE5E11C1A2FDC7700FDE858 /* ANAdView+PrivateMethods.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ANAdView+PrivateMethods.h"; sourceTree = ""; }; 8AE7AD9D1A7AC4E5009E2F2F /* EventKitUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = EventKitUI.framework; path = System/Library/Frameworks/EventKitUI.framework; sourceTree = SDKROOT; }; 8AE879FE1BDAD044001053D2 /* IMBanner.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IMBanner.h; sourceTree = ""; }; @@ -914,12 +958,6 @@ 8AEA6BE91A0BF43E009DB71B /* ANNativeAdDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ANNativeAdDelegate.h; path = native/ANNativeAdDelegate.h; sourceTree = ""; }; 8AF3C19A1A361CC30018FB6A /* ANNativeImpressionTrackerInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANNativeImpressionTrackerInfo.h; sourceTree = ""; }; 8AF3C19B1A361CC30018FB6A /* ANNativeImpressionTrackerInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANNativeImpressionTrackerInfo.m; sourceTree = ""; }; - 8AF5A8791ACC60D50089C529 /* ANAdFetcherResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdFetcherResponse.h; sourceTree = ""; }; - 8AF5A87A1ACC60D50089C529 /* ANAdFetcherResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdFetcherResponse.m; sourceTree = ""; }; - 8AF5A87B1ACC60D50089C529 /* ANAdServerResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANAdServerResponse.h; sourceTree = ""; }; - 8AF5A87C1ACC60D50089C529 /* ANAdServerResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANAdServerResponse.m; sourceTree = ""; }; - 8AF5A87D1ACC60D50089C529 /* ANStandardAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANStandardAd.h; sourceTree = ""; }; - 8AF5A87E1ACC60D50089C529 /* ANStandardAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANStandardAd.m; sourceTree = ""; }; 8AFC045E1A2E74AC00BEA485 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 8AFC04601A2E74C800BEA485 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 8AFC04621A2E74F500BEA485 /* EventKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = EventKit.framework; path = System/Library/Frameworks/EventKit.framework; sourceTree = SDKROOT; }; @@ -1177,6 +1215,205 @@ path = VdopiaSDK; sourceTree = ""; }; + 8A73F9B01BD6B34D00D18188 /* internal */ = { + isa = PBXGroup; + children = ( + 8A73F9B11BD6B34D00D18188 /* ANAdFetcher.h */, + 8A73F9B21BD6B34D00D18188 /* ANAdFetcher.m */, + 8A73F9B31BD6B34D00D18188 /* ANAdFetcherResponse.h */, + 8A73F9B41BD6B34D00D18188 /* ANAdFetcherResponse.m */, + 8A73F9B51BD6B34D00D18188 /* ANAdRequestUrl.h */, + 8A73F9B61BD6B34D00D18188 /* ANAdRequestUrl.m */, + 8A73F9B71BD6B34D00D18188 /* ANAdServerResponse.h */, + 8A73F9B81BD6B34D00D18188 /* ANAdServerResponse.m */, + 8A73F9B91BD6B34D00D18188 /* ANAdView.m */, + 8A73F9BA1BD6B34D00D18188 /* ANAdViewInternalDelegate.h */, + 8A73F9BB1BD6B34D00D18188 /* ANAdWebViewController.h */, + 8A73F9BC1BD6B34D00D18188 /* ANAdWebViewController.m */, + 8A73F9BD1BD6B34D00D18188 /* ANANJAMImplementation.h */, + 8A73F9BE1BD6B34D00D18188 /* ANANJAMImplementation.m */, + 8A73F9BF1BD6B34D00D18188 /* ANBannerAdView.m */, + 8A73F9C01BD6B34D00D18188 /* ANBrowserViewController.h */, + 8A73F9C11BD6B34D00D18188 /* ANBrowserViewController.m */, + 8A73F9C21BD6B34D00D18188 /* ANCircularAnimationView.h */, + 8A73F9C31BD6B34D00D18188 /* ANCircularAnimationView.m */, + 8A73F9C41BD6B34D00D18188 /* ANClickOverlayView.h */, + 8A73F9C51BD6B34D00D18188 /* ANClickOverlayView.m */, + 8A73F9C61BD6B34D00D18188 /* ANGlobal.h */, + 8A73F9C71BD6B34D00D18188 /* ANGlobal.m */, + 8A73F9C81BD6B34D00D18188 /* ANInterstitialAd.m */, + 8A87BF4E1BD961EB00281EA9 /* ANInterstitialAdFetcher.h */, + 8A87BF4F1BD961EB00281EA9 /* ANInterstitialAdFetcher.m */, + 8A73F9C91BD6B34D00D18188 /* ANInterstitialAdViewController.h */, + 8A73F9CA1BD6B34D00D18188 /* ANInterstitialAdViewController.m */, + 8A73F9CB1BD6B34D00D18188 /* ANLocation.m */, + 8A73F9CC1BD6B34D00D18188 /* ANLogging.h */, + 8A73F9CD1BD6B34D00D18188 /* ANLogging.m */, + 8A73F9CE1BD6B34D00D18188 /* ANLogManager.m */, + 8A73F9CF1BD6B34D00D18188 /* ANMediatedAd.h */, + 8A73F9D01BD6B34D00D18188 /* ANMediatedAd.m */, + 8A73F9D11BD6B34D00D18188 /* ANMediationAdViewController.h */, + 8A73F9D21BD6B34D00D18188 /* ANMediationAdViewController.m */, + 8A73F9D31BD6B34D00D18188 /* ANMediationContainerView.h */, + 8A73F9D41BD6B34D00D18188 /* ANMediationContainerView.m */, + 8A73F9D51BD6B34D00D18188 /* ANOpenInExternalBrowserActivity.h */, + 8A73F9D61BD6B34D00D18188 /* ANOpenInExternalBrowserActivity.m */, + 8A73F9D71BD6B34D00D18188 /* ANPBBuffer.h */, + 8A73F9D81BD6B34D00D18188 /* ANPBBuffer.m */, + 8A73F9D91BD6B34D00D18188 /* ANPBContainerView.h */, + 8A73F9DA1BD6B34D00D18188 /* ANPBContainerView.m */, + 8A73F9DB1BD6B34D00D18188 /* ANPlayerView.h */, + 8A73F9DC1BD6B34D00D18188 /* ANPlayerView.m */, + 8A73F9DD1BD6B34D00D18188 /* ANReachability.h */, + 8A73F9DE1BD6B34D00D18188 /* ANReachability.m */, + 8AE3E1541C441F8E004AA151 /* ANSSMStandardAd.h */, + 8AE3E1551C441F8E004AA151 /* ANSSMStandardAd.m */, + 8AE3E1571C441FA6004AA151 /* ANSSMVideoAd.h */, + 8AE3E1581C441FA6004AA151 /* ANSSMVideoAd.m */, + 8A73F9DF1BD6B34D00D18188 /* ANStandardAd.h */, + 8A73F9E01BD6B34D00D18188 /* ANStandardAd.m */, + 8A73F9E11BD6B34D00D18188 /* ANTargetingParameters.m */, + 8A87BF491BD9471600281EA9 /* ANUniversalTagAdServerResponse.h */, + 8A87BF4A1BD9471600281EA9 /* ANUniversalTagAdServerResponse.m */, + 8A87BF331BD9443000281EA9 /* ANUniversalTagRequestBuilder.h */, + 8A87BF341BD9443000281EA9 /* ANUniversalTagRequestBuilder.m */, + 8ABC3FFA1BE91D910099501F /* ANVast+ANCategory.h */, + 8ABC3FFB1BE91D910099501F /* ANVast+ANCategory.m */, + 8ABC3FEB1BE9195B0099501F /* ANVASTUtil.h */, + 8ABC3FEC1BE9195B0099501F /* ANVASTUtil.m */, + 8A73F9E21BD6B34D00D18188 /* ANVideoAd.h */, + 8A73F9E31BD6B34D00D18188 /* ANVideoAd.m */, + 8A73F9E41BD6B34D00D18188 /* ANVideoPlayerViewController.h */, + 8A73F9E51BD6B34D00D18188 /* ANVideoPlayerViewController.m */, + 8A73F9E61BD6B34D00D18188 /* ANVolumeButtonView.h */, + 8A73F9E71BD6B34D00D18188 /* ANVolumeButtonView.m */, + 8A73F9E81BD6B34D00D18188 /* MRAID */, + ); + path = internal; + sourceTree = ""; + }; + 8A73F9E81BD6B34D00D18188 /* MRAID */ = { + isa = PBXGroup; + children = ( + 8A73F9E91BD6B34D00D18188 /* ANMRAIDCalendarManager.h */, + 8A73F9EA1BD6B34D00D18188 /* ANMRAIDCalendarManager.m */, + 8A73F9EB1BD6B34D00D18188 /* ANMRAIDContainerView.h */, + 8A73F9EC1BD6B34D00D18188 /* ANMRAIDContainerView.m */, + 8A73F9ED1BD6B34D00D18188 /* ANMRAIDExpandProperties.h */, + 8A73F9EE1BD6B34D00D18188 /* ANMRAIDExpandProperties.m */, + 8A73F9EF1BD6B34D00D18188 /* ANMRAIDExpandViewController.h */, + 8A73F9F01BD6B34D00D18188 /* ANMRAIDExpandViewController.m */, + 8A73F9F11BD6B34D00D18188 /* ANMRAIDJavascriptUtil.h */, + 8A73F9F21BD6B34D00D18188 /* ANMRAIDJavascriptUtil.m */, + 8A73F9F31BD6B34D00D18188 /* ANMRAIDOrientationProperties.h */, + 8A73F9F41BD6B34D00D18188 /* ANMRAIDOrientationProperties.m */, + 8A73F9F51BD6B34D00D18188 /* ANMRAIDResizeProperties.h */, + 8A73F9F61BD6B34D00D18188 /* ANMRAIDResizeProperties.m */, + 8A73F9F71BD6B34D00D18188 /* ANMRAIDResizeView.h */, + 8A73F9F81BD6B34D00D18188 /* ANMRAIDResizeView.m */, + 8A73F9F91BD6B34D00D18188 /* ANMRAIDResizeViewManager.h */, + 8A73F9FA1BD6B34D00D18188 /* ANMRAIDResizeViewManager.m */, + 8A73F9FB1BD6B34D00D18188 /* ANMRAIDUtil.h */, + 8A73F9FC1BD6B34D00D18188 /* ANMRAIDUtil.m */, + ); + path = MRAID; + sourceTree = ""; + }; + 8A73F9FD1BD6B34D00D18188 /* VastDataModel */ = { + isa = PBXGroup; + children = ( + 8A73F9FE1BD6B34D00D18188 /* ANInLine.h */, + 8A73F9FF1BD6B34D00D18188 /* ANInLine.m */, + 8A73FA001BD6B34D00D18188 /* ANVast.h */, + 8A73FA011BD6B34D00D18188 /* ANVast.m */, + 8A73FA021BD6B34D00D18188 /* ANVastDataModelInterface.h */, + 8A73FA031BD6B34D00D18188 /* ANVastDataModelInterface.m */, + 8A73FA041BD6B34D00D18188 /* ANWrapper.h */, + 8A73FA051BD6B34D00D18188 /* ANWrapper.m */, + 8A73FA061BD6B34D00D18188 /* Inline */, + ); + path = VastDataModel; + sourceTree = ""; + }; + 8A73FA061BD6B34D00D18188 /* Inline */ = { + isa = PBXGroup; + children = ( + 8A73FA071BD6B34D00D18188 /* ANAdSystem.h */, + 8A73FA081BD6B34D00D18188 /* ANAdSystem.m */, + 8A73FA091BD6B34D00D18188 /* ANImpression.h */, + 8A73FA0A1BD6B34D00D18188 /* ANImpression.m */, + 8A73FA0B1BD6B34D00D18188 /* Creatives */, + ); + path = Inline; + sourceTree = ""; + }; + 8A73FA0B1BD6B34D00D18188 /* Creatives */ = { + isa = PBXGroup; + children = ( + 8A73FA0C1BD6B34D00D18188 /* ANCreative.h */, + 8A73FA0D1BD6B34D00D18188 /* ANCreative.m */, + 8A73FA0E1BD6B34D00D18188 /* ANLinear.h */, + 8A73FA0F1BD6B34D00D18188 /* ANLinear.m */, + 8A73FA101BD6B34D00D18188 /* ANNonLinearAds.h */, + 8A73FA111BD6B34D00D18188 /* ANNonLinearAds.m */, + 8A73FA121BD6B34D00D18188 /* ANStaticResource.h */, + 8A73FA131BD6B34D00D18188 /* ANStaticResource.m */, + 8A73FA141BD6B34D00D18188 /* ANTracking.h */, + 8A73FA151BD6B34D00D18188 /* ANTracking.m */, + 8A73FA161BD6B34D00D18188 /* CompanionAds */, + 8A73FA191BD6B34D00D18188 /* Linear */, + 8A73FA221BD6B34D00D18188 /* NonLinearAds */, + ); + path = Creatives; + sourceTree = ""; + }; + 8A73FA161BD6B34D00D18188 /* CompanionAds */ = { + isa = PBXGroup; + children = ( + 8A73FA171BD6B34D00D18188 /* AnCompanion.h */, + 8A73FA181BD6B34D00D18188 /* AnCompanion.m */, + ); + path = CompanionAds; + sourceTree = ""; + }; + 8A73FA191BD6B34D00D18188 /* Linear */ = { + isa = PBXGroup; + children = ( + 8A73FA1A1BD6B34D00D18188 /* ANVideoClicks.h */, + 8A73FA1B1BD6B34D00D18188 /* ANVideoClicks.m */, + 8A73FA1C1BD6B34D00D18188 /* MediaFiles */, + 8A73FA1F1BD6B34D00D18188 /* VideoClicks */, + ); + path = Linear; + sourceTree = ""; + }; + 8A73FA1C1BD6B34D00D18188 /* MediaFiles */ = { + isa = PBXGroup; + children = ( + 8A73FA1D1BD6B34D00D18188 /* ANMediaFile.h */, + 8A73FA1E1BD6B34D00D18188 /* ANMediaFile.m */, + ); + path = MediaFiles; + sourceTree = ""; + }; + 8A73FA1F1BD6B34D00D18188 /* VideoClicks */ = { + isa = PBXGroup; + children = ( + 8A73FA201BD6B34D00D18188 /* ANCustomClick.h */, + 8A73FA211BD6B34D00D18188 /* ANCustomClick.m */, + ); + path = VideoClicks; + sourceTree = ""; + }; + 8A73FA221BD6B34D00D18188 /* NonLinearAds */ = { + isa = PBXGroup; + children = ( + 8A73FA231BD6B34D00D18188 /* ANNonLinear.h */, + 8A73FA241BD6B34D00D18188 /* ANNonLinear.m */, + ); + path = NonLinearAds; + sourceTree = ""; + }; 8A893ED31BFBD713007AC313 /* MoPubSDK */ = { isa = PBXGroup; children = ( @@ -1450,6 +1687,17 @@ path = ../mediation/mediatedviews/InMobi; sourceTree = ""; }; + 8AAD5D111BD6C0E300B4CD53 /* XMLParsing */ = { + isa = PBXGroup; + children = ( + 8AAD5D141BD6C0E300B4CD53 /* ANXML.h */, + 8AAD5D151BD6C0E300B4CD53 /* ANXML.m */, + 8AAD5D121BD6C0E300B4CD53 /* ANXML+HTTP.h */, + 8AAD5D131BD6C0E300B4CD53 /* ANXML+HTTP.m */, + ); + path = XMLParsing; + sourceTree = ""; + }; 8AB8761B1A0994310022D9A5 /* internal */ = { isa = PBXGroup; children = ( @@ -1479,33 +1727,6 @@ path = native/internal; sourceTree = ""; }; - 8AC65F361A40DE63006BCF39 /* MRAID */ = { - isa = PBXGroup; - children = ( - 8AC65F371A40DE63006BCF39 /* ANMRAIDCalendarManager.h */, - 8AC65F381A40DE63006BCF39 /* ANMRAIDCalendarManager.m */, - 8AC65F391A40DE63006BCF39 /* ANMRAIDContainerView.h */, - 8AC65F3A1A40DE63006BCF39 /* ANMRAIDContainerView.m */, - 8AC65F3B1A40DE63006BCF39 /* ANMRAIDExpandProperties.h */, - 8AC65F3C1A40DE63006BCF39 /* ANMRAIDExpandProperties.m */, - 8AC65F3D1A40DE63006BCF39 /* ANMRAIDExpandViewController.h */, - 8AC65F3E1A40DE63006BCF39 /* ANMRAIDExpandViewController.m */, - 8AC65F3F1A40DE63006BCF39 /* ANMRAIDJavascriptUtil.h */, - 8AC65F401A40DE63006BCF39 /* ANMRAIDJavascriptUtil.m */, - 8AC65F411A40DE63006BCF39 /* ANMRAIDOrientationProperties.h */, - 8AC65F421A40DE63006BCF39 /* ANMRAIDOrientationProperties.m */, - 8AC65F431A40DE63006BCF39 /* ANMRAIDResizeProperties.h */, - 8AC65F441A40DE63006BCF39 /* ANMRAIDResizeProperties.m */, - 8AC65F451A40DE63006BCF39 /* ANMRAIDResizeView.h */, - 8AC65F461A40DE63006BCF39 /* ANMRAIDResizeView.m */, - 8AC65F471A40DE63006BCF39 /* ANMRAIDResizeViewManager.h */, - 8AC65F481A40DE63006BCF39 /* ANMRAIDResizeViewManager.m */, - 8AC65F491A40DE63006BCF39 /* ANMRAIDUtil.h */, - 8AC65F4A1A40DE63006BCF39 /* ANMRAIDUtil.m */, - ); - path = MRAID; - sourceTree = ""; - }; 8AD5155119D216E6002E53D6 /* Amazon */ = { isa = PBXGroup; children = ( @@ -1523,59 +1744,6 @@ path = ../mediation/mediatedviews/Amazon; sourceTree = ""; }; - 8AD6189D1981C11F00AC0780 /* internal */ = { - isa = PBXGroup; - children = ( - 8AD6189E1981C11F00AC0780 /* ANAdFetcher.h */, - 8AD6189F1981C11F00AC0780 /* ANAdFetcher.m */, - 8AF5A8791ACC60D50089C529 /* ANAdFetcherResponse.h */, - 8AF5A87A1ACC60D50089C529 /* ANAdFetcherResponse.m */, - 8AD618A01981C11F00AC0780 /* ANAdRequestUrl.h */, - 8AD618A11981C11F00AC0780 /* ANAdRequestUrl.m */, - 8AF5A87B1ACC60D50089C529 /* ANAdServerResponse.h */, - 8AF5A87C1ACC60D50089C529 /* ANAdServerResponse.m */, - 8AD618A41981C11F00AC0780 /* ANAdView.m */, - 8AD618A51981C11F00AC0780 /* ANAdViewInternalDelegate.h */, - 8AC7C5361A3B5CEF00AA5548 /* ANAdWebViewController.h */, - 8AC7C5371A3B5CEF00AA5548 /* ANAdWebViewController.m */, - 8AD618A81981C11F00AC0780 /* ANANJAMImplementation.h */, - 8AD618A91981C11F00AC0780 /* ANANJAMImplementation.m */, - 8AD618AA1981C11F00AC0780 /* ANBannerAdView.m */, - 8AD618AC1981C11F00AC0780 /* ANBrowserViewController.h */, - 8AD618AD1981C11F00AC0780 /* ANBrowserViewController.m */, - 8AD618AE1981C11F00AC0780 /* ANClickOverlayView.h */, - 8AD618AF1981C11F00AC0780 /* ANClickOverlayView.m */, - 8AD618B01981C11F00AC0780 /* ANGlobal.h */, - 8AD618B11981C11F00AC0780 /* ANGlobal.m */, - 8AD618B21981C11F00AC0780 /* ANInterstitialAd.m */, - 8AD618B31981C11F00AC0780 /* ANInterstitialAdViewController.h */, - 8AD618B41981C11F00AC0780 /* ANInterstitialAdViewController.m */, - 8AD618B51981C11F00AC0780 /* ANLocation.m */, - 8AD618B61981C11F00AC0780 /* ANLogging.h */, - 8AD618B71981C11F00AC0780 /* ANLogging.m */, - 8AD618B81981C11F00AC0780 /* ANLogManager.m */, - 8AD618B91981C11F00AC0780 /* ANMediatedAd.h */, - 8AD618BA1981C11F00AC0780 /* ANMediatedAd.m */, - 8AD618BB1981C11F00AC0780 /* ANMediationAdViewController.h */, - 8AD618BC1981C11F00AC0780 /* ANMediationAdViewController.m */, - 8AD618BD1981C11F00AC0780 /* ANMediationContainerView.h */, - 8AD618BE1981C11F00AC0780 /* ANMediationContainerView.m */, - 8A2F48211A2E255600B0EA05 /* ANOpenInExternalBrowserActivity.h */, - 8A2F48221A2E255600B0EA05 /* ANOpenInExternalBrowserActivity.m */, - 8AD618C21981C11F00AC0780 /* ANPBBuffer.h */, - 8AD618C31981C11F00AC0780 /* ANPBBuffer.m */, - 8AD618C41981C11F00AC0780 /* ANPBContainerView.h */, - 8AD618C51981C11F00AC0780 /* ANPBContainerView.m */, - 8AD618C61981C11F00AC0780 /* ANReachability.h */, - 8AD618C71981C11F00AC0780 /* ANReachability.m */, - 8AF5A87D1ACC60D50089C529 /* ANStandardAd.h */, - 8AF5A87E1ACC60D50089C529 /* ANStandardAd.m */, - 8AD618C81981C11F00AC0780 /* ANTargetingParameters.m */, - 8AC65F361A40DE63006BCF39 /* MRAID */, - ); - path = internal; - sourceTree = ""; - }; 8AD7C4C51AD2FA0E0049C997 /* Vungle */ = { isa = PBXGroup; children = ( @@ -1828,9 +1996,11 @@ ECE4EA93194B768A0069D934 /* ANLogManager.h */, ECE4EA94194B768A0069D934 /* ANTargetingParameters.h */, ECE4EA95194B768A0069D934 /* Categories */, - 8AD6189D1981C11F00AC0780 /* internal */, + 8A73F9B01BD6B34D00D18188 /* internal */, 8A35B87919FEAAE30016C81F /* native */, ECE4EACA194B768A0069D934 /* Resources */, + 8A73F9FD1BD6B34D00D18188 /* VastDataModel */, + 8AAD5D111BD6C0E300B4CD53 /* XMLParsing */, ); name = ANSDK; path = ../sdk; @@ -1872,26 +2042,32 @@ ECE4EACF194B768A0069D934 /* images */ = { isa = PBXGroup; children = ( - 8AD618991981C10700AC0780 /* appnexus_logo_icon.png */, - 8AD6189A1981C10700AC0780 /* appnexus_logo_icon@2x.png */, 8A4FF3A61A2F8AFE0000E4CC /* an_arrow_left.png */, 8A4FF3A51A2F8AFE0000E4CC /* an_arrow_left@2x.png */, 8A4FF3A31A2F8ACC0000E4CC /* an_arrow_left@3x.png */, 8A4FF3AC1A2F8CE50000E4CC /* an_arrow_right.png */, 8A4FF3AB1A2F8CE50000E4CC /* an_arrow_right@2x.png */, 8A4FF3A91A2F8CC10000E4CC /* an_arrow_right@3x.png */, + 8AD618991981C10700AC0780 /* appnexus_logo_icon.png */, + 8AD6189A1981C10700AC0780 /* appnexus_logo_icon@2x.png */, 8A2F483C1A2E33B000B0EA05 /* compass.png */, 8A4FF3A01A2F72D00000E4CC /* compass@2x.png */, 8A6CD9261A96B2FD0060BCF4 /* compass@3x.png */, ECE4EAD2194B768A0069D934 /* interstitial_closebox.png */, ECE4EAD3194B768A0069D934 /* interstitial_closebox@2x.png */, + 8A6D2E881A44A62A003CE77A /* interstitial_flat_closebox.png */, + 8A6D2E871A44A62A003CE77A /* interstitial_flat_closebox@2x.png */, + 8A6D2E841A44A5D3003CE77A /* interstitial_flat_closebox@3x.png */, + 8ABC3FEE1BE91B530099501F /* mute-off.png */, + 8ABC3FEF1BE91B530099501F /* mute-off@2x.png */, + 8ABC3FF01BE91B530099501F /* mute-off@3x.png */, + 8ABC3FF11BE91B530099501F /* mute-on.png */, + 8ABC3FF21BE91B530099501F /* mute-on@2x.png */, + 8ABC3FF31BE91B530099501F /* mute-on@3x.png */, ECE4EAD4194B768A0069D934 /* UIButtonBarArrowLeft.png */, ECE4EAD5194B768A0069D934 /* UIButtonBarArrowLeft@2x.png */, ECE4EAD6194B768A0069D934 /* UIButtonBarArrowRight.png */, ECE4EAD7194B768A0069D934 /* UIButtonBarArrowRight@2x.png */, - 8A6D2E841A44A5D3003CE77A /* interstitial_flat_closebox@3x.png */, - 8A6D2E871A44A62A003CE77A /* interstitial_flat_closebox@2x.png */, - 8A6D2E881A44A62A003CE77A /* interstitial_flat_closebox.png */, ); path = images; sourceTree = ""; @@ -1925,37 +2101,8 @@ 8A9AEDC81A1BF88200C58BDA /* NSTimer+ANCategory.h in Headers */, 8A9AEDC91A1BF88200C58BDA /* UIView+ANCategory.h in Headers */, 8A9AEDCA1A1BF88200C58BDA /* UIWebView+ANCategory.h in Headers */, - 8A9AEDCB1A1BF88200C58BDA /* ANAdFetcher.h in Headers */, - 8A9AEDCC1A1BF88200C58BDA /* ANAdRequestUrl.h in Headers */, - 8A9AEDCE1A1BF88200C58BDA /* ANAdViewInternalDelegate.h in Headers */, - 8A9AEDD01A1BF88200C58BDA /* ANANJAMImplementation.h in Headers */, - 8A9AEDD21A1BF88200C58BDA /* ANBrowserViewController.h in Headers */, - 8AF5A87F1ACC60D50089C529 /* ANAdFetcherResponse.h in Headers */, - 8AF5A8851ACC60D50089C529 /* ANStandardAd.h in Headers */, - 8A9AEDD31A1BF88200C58BDA /* ANClickOverlayView.h in Headers */, - 8A9AEDD41A1BF88200C58BDA /* ANGlobal.h in Headers */, - 8A9AEDD51A1BF88200C58BDA /* ANInterstitialAdViewController.h in Headers */, - 8A9AEDD61A1BF88200C58BDA /* ANLogging.h in Headers */, - 8A9AEDD71A1BF88200C58BDA /* ANMediatedAd.h in Headers */, - 8A9AEDD81A1BF88200C58BDA /* ANMediationAdViewController.h in Headers */, - 8A9AEDD91A1BF88200C58BDA /* ANMediationContainerView.h in Headers */, 8A84E42E1A25350800C60EAB /* ANNativeAdResponse+PrivateMethods.h in Headers */, - 8AC65F611A40DE74006BCF39 /* ANMRAIDContainerView.h in Headers */, - 8AC65F711A40DE74006BCF39 /* ANMRAIDUtil.h in Headers */, - 8AF5A8821ACC60D50089C529 /* ANAdServerResponse.h in Headers */, - 8AC65F631A40DE74006BCF39 /* ANMRAIDExpandProperties.h in Headers */, - 8AC65F6B1A40DE74006BCF39 /* ANMRAIDResizeProperties.h in Headers */, - 8AC65F6F1A40DE74006BCF39 /* ANMRAIDResizeViewManager.h in Headers */, 8AE5E11E1A2FDC7700FDE858 /* ANAdView+PrivateMethods.h in Headers */, - 8AC65F5F1A40DE74006BCF39 /* ANMRAIDCalendarManager.h in Headers */, - 8AC65F691A40DE74006BCF39 /* ANMRAIDOrientationProperties.h in Headers */, - 8A2F48241A2E255600B0EA05 /* ANOpenInExternalBrowserActivity.h in Headers */, - 8AC65F671A40DE74006BCF39 /* ANMRAIDJavascriptUtil.h in Headers */, - 8AC65F651A40DE74006BCF39 /* ANMRAIDExpandViewController.h in Headers */, - 8AC65F6D1A40DE74006BCF39 /* ANMRAIDResizeView.h in Headers */, - 8A9AEDDC1A1BF88200C58BDA /* ANPBBuffer.h in Headers */, - 8A9AEDDD1A1BF88300C58BDA /* ANPBContainerView.h in Headers */, - 8A9AEDDE1A1BF88300C58BDA /* ANReachability.h in Headers */, 8A9AEDE01A1BF88300C58BDA /* ANNativeAdFetcher.h in Headers */, 8A9AEDE11A1BF88300C58BDA /* ANNativeAdImageCache.h in Headers */, 8A9AEDE31A1BF88300C58BDA /* ANNativeAdRequestUrlBuilder.h in Headers */, @@ -2448,6 +2595,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 8ABC3FF51BE91B530099501F /* mute-off@2x.png in Resources */, 8A6D2E8E1A44A751003CE77A /* interstitial_flat_closebox@2x.png in Resources */, 8AD618E41981C19500AC0780 /* appnexus_logo_icon@2x.png in Resources */, 8AD618E31981C19100AC0780 /* appnexus_logo_icon.png in Resources */, @@ -2459,17 +2607,22 @@ 8A4FF3A41A2F8ACC0000E4CC /* an_arrow_left@3x.png in Resources */, 8A4FF3A81A2F8AFE0000E4CC /* an_arrow_left.png in Resources */, ECE4EB09194B76960069D934 /* interstitial_closebox.png in Resources */, + 8ABC3FF61BE91B530099501F /* mute-off@3x.png in Resources */, + 8ABC3FF91BE91B530099501F /* mute-on@3x.png in Resources */, 8A4FF3AE1A2F8CE50000E4CC /* an_arrow_right.png in Resources */, ECE4EB0A194B76960069D934 /* interstitial_closebox@2x.png in Resources */, 8A4FF3AD1A2F8CE50000E4CC /* an_arrow_right@2x.png in Resources */, + 8ABC3FF81BE91B530099501F /* mute-on@2x.png in Resources */, ECE4EB0B194B76960069D934 /* UIButtonBarArrowLeft.png in Resources */, ECE4EB0C194B76960069D934 /* UIButtonBarArrowLeft@2x.png in Resources */, 8A4FF3A71A2F8AFE0000E4CC /* an_arrow_left@2x.png in Resources */, ECE4EB0D194B76960069D934 /* UIButtonBarArrowRight.png in Resources */, + 8ABC3FF41BE91B530099501F /* mute-off.png in Resources */, 8A4FF3A11A2F72D00000E4CC /* compass@2x.png in Resources */, ECE4EB0E194B76960069D934 /* UIButtonBarArrowRight@2x.png in Resources */, 8A6D2E8F1A44A751003CE77A /* interstitial_flat_closebox.png in Resources */, ECE4EB05194B76960069D934 /* anjam.js in Resources */, + 8ABC3FF71BE91B530099501F /* mute-on.png in Resources */, ECE4EB10194B76960069D934 /* sdkjs.js in Resources */, ECE4EB06194B76960069D934 /* errors.strings in Resources */, 8A2F483D1A2E33B000B0EA05 /* compass.png in Resources */, @@ -2534,46 +2687,13 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8AE7AD9F1A7AC4F6009E2F2F /* ANAdWebViewController.m in Sources */, 8A9AEDE81A1BF99D00C58BDA /* ANBannerAdView+ANContentViewTransitions.m in Sources */, 8A9AEDE91A1BF99D00C58BDA /* NSString+ANCategory.m in Sources */, 8A9AEDEA1A1BF99D00C58BDA /* NSTimer+ANCategory.m in Sources */, - 8AC65F6E1A40DE74006BCF39 /* ANMRAIDResizeView.m in Sources */, 8A9AEDEB1A1BF99D00C58BDA /* UIView+ANCategory.m in Sources */, - 8A2F48261A2E255600B0EA05 /* ANOpenInExternalBrowserActivity.m in Sources */, 8A9AEDEC1A1BF99D00C58BDA /* UIWebView+ANCategory.m in Sources */, - 8A9AEDED1A1BF99D00C58BDA /* ANAdFetcher.m in Sources */, 8A598F8D1A1EA061009BA879 /* ANNativeStandardAdResponse.m in Sources */, - 8A9AEDEE1A1BF99D00C58BDA /* ANAdRequestUrl.m in Sources */, - 8AC65F601A40DE74006BCF39 /* ANMRAIDCalendarManager.m in Sources */, - 8A9AEDF01A1BF99D00C58BDA /* ANAdView.m in Sources */, - 8AC65F721A40DE74006BCF39 /* ANMRAIDUtil.m in Sources */, - 8AC65F6C1A40DE74006BCF39 /* ANMRAIDResizeProperties.m in Sources */, - 8A9AEDF21A1BF99D00C58BDA /* ANANJAMImplementation.m in Sources */, - 8AF5A8811ACC60D50089C529 /* ANAdFetcherResponse.m in Sources */, - 8AC65F6A1A40DE74006BCF39 /* ANMRAIDOrientationProperties.m in Sources */, - 8A9AEDF31A1BF99D00C58BDA /* ANBannerAdView.m in Sources */, - 8A9AEDF41A1BF99D00C58BDA /* ANBrowserViewController.m in Sources */, - 8AC65F641A40DE74006BCF39 /* ANMRAIDExpandProperties.m in Sources */, 8AF3C1A01A3631490018FB6A /* ANNativeImpressionTrackerInfo.m in Sources */, - 8A9AEDF51A1BF99D00C58BDA /* ANClickOverlayView.m in Sources */, - 8A9AEDF61A1BF99D00C58BDA /* ANGlobal.m in Sources */, - 8A9AEDF71A1BF99D00C58BDA /* ANInterstitialAd.m in Sources */, - 8A9AEDF81A1BF99D00C58BDA /* ANInterstitialAdViewController.m in Sources */, - 8A9AEDF91A1BF99D00C58BDA /* ANLocation.m in Sources */, - 8AC65F661A40DE74006BCF39 /* ANMRAIDExpandViewController.m in Sources */, - 8AC65F681A40DE74006BCF39 /* ANMRAIDJavascriptUtil.m in Sources */, - 8A9AEDFA1A1BF99D00C58BDA /* ANLogging.m in Sources */, - 8A9AEDFB1A1BF99D00C58BDA /* ANLogManager.m in Sources */, - 8AC65F701A40DE74006BCF39 /* ANMRAIDResizeViewManager.m in Sources */, - 8A9AEDFC1A1BF99D00C58BDA /* ANMediatedAd.m in Sources */, - 8A9AEDFD1A1BF99D00C58BDA /* ANMediationAdViewController.m in Sources */, - 8AF5A8871ACC60D50089C529 /* ANStandardAd.m in Sources */, - 8A9AEDFE1A1BF99D00C58BDA /* ANMediationContainerView.m in Sources */, - 8A9AEE001A1BF99D00C58BDA /* ANPBBuffer.m in Sources */, - 8A9AEE011A1BF99D00C58BDA /* ANPBContainerView.m in Sources */, - 8A9AEE021A1BF99D00C58BDA /* ANReachability.m in Sources */, - 8A9AEE031A1BF99D00C58BDA /* ANTargetingParameters.m in Sources */, 8A9AEE051A1BF99D00C58BDA /* ANNativeAdFetcher.m in Sources */, 8A9AEE061A1BF99D00C58BDA /* ANNativeAdImageCache.m in Sources */, 8AF3C19F1A3631460018FB6A /* ANNativeImpressionTrackerManager.m in Sources */, @@ -2584,8 +2704,6 @@ 8A9AEE0D1A1BF99D00C58BDA /* ANNativeMediatedAdController.m in Sources */, 8A9AEE0E1A1BF99D00C58BDA /* ANNativeMediatedAdResponse.m in Sources */, 8A9AEE0F1A1BF99D00C58BDA /* UIView+ANNativeAdCategory.m in Sources */, - 8AC65F621A40DE74006BCF39 /* ANMRAIDContainerView.m in Sources */, - 8AF5A8841ACC60D50089C529 /* ANAdServerResponse.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2692,58 +2810,88 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8AD618D51981C11F00AC0780 /* ANInterstitialAd.m in Sources */, - 8AD618DA1981C11F00AC0780 /* ANMediatedAd.m in Sources */, - 8AC65F5A1A40DE63006BCF39 /* ANMRAIDResizeView.m in Sources */, - 8AC65F561A40DE63006BCF39 /* ANMRAIDOrientationProperties.m in Sources */, - 8AC65F501A40DE63006BCF39 /* ANMRAIDExpandProperties.m in Sources */, - 8A2F48251A2E255600B0EA05 /* ANOpenInExternalBrowserActivity.m in Sources */, + 8A73FA5A1BD6B34E00D18188 /* ANVast.m in Sources */, + 8A73FA651BD6B34E00D18188 /* ANVideoClicks.m in Sources */, ECE4EADA194B768A0069D934 /* NSString+ANCategory.m in Sources */, - 8AD618E11981C11F00AC0780 /* ANTargetingParameters.m in Sources */, - 8AC65F5C1A40DE63006BCF39 /* ANMRAIDResizeViewManager.m in Sources */, + 8ABC3FFC1BE91D910099501F /* ANVast+ANCategory.m in Sources */, + 8A73FA5B1BD6B34E00D18188 /* ANVastDataModelInterface.m in Sources */, + 8A73FA3B1BD6B34E00D18188 /* ANClickOverlayView.m in Sources */, + 8A73FA4D1BD6B34E00D18188 /* ANVideoPlayerViewController.m in Sources */, + 8A73FA631BD6B34E00D18188 /* ANTracking.m in Sources */, 8A598F8C1A1EA061009BA879 /* ANNativeStandardAdResponse.m in Sources */, - 8AD618CB1981C11F00AC0780 /* ANAdFetcher.m in Sources */, - 8AD618D61981C11F00AC0780 /* ANInterstitialAdViewController.m in Sources */, + 8A73FA4A1BD6B34E00D18188 /* ANStandardAd.m in Sources */, + 8A73FA381BD6B34E00D18188 /* ANBannerAdView.m in Sources */, + 8A73FA451BD6B34E00D18188 /* ANOpenInExternalBrowserActivity.m in Sources */, 8A82FDF61A30F36C00A267A0 /* ANNativeImpressionTrackerManager.m in Sources */, + 8A73FA5C1BD6B34E00D18188 /* ANWrapper.m in Sources */, + 8A73FA331BD6B34E00D18188 /* ANAdRequestUrl.m in Sources */, + 8AE3E1591C441FA6004AA151 /* ANSSMVideoAd.m in Sources */, + 8A73FA351BD6B34E00D18188 /* ANAdView.m in Sources */, + 8A87BF4B1BD9471600281EA9 /* ANUniversalTagAdServerResponse.m in Sources */, + 8A73FA421BD6B34E00D18188 /* ANMediatedAd.m in Sources */, 8A6385E31A14336000280054 /* ANNativeAdRequestUrlBuilder.m in Sources */, - 8AC65F521A40DE63006BCF39 /* ANMRAIDExpandViewController.m in Sources */, + 8A73FA461BD6B34E00D18188 /* ANPBBuffer.m in Sources */, + 8A73FA4E1BD6B34E00D18188 /* ANVolumeButtonView.m in Sources */, + 8A73FA3E1BD6B34E00D18188 /* ANInterstitialAdViewController.m in Sources */, + 8A73FA371BD6B34E00D18188 /* ANANJAMImplementation.m in Sources */, + 8AE3E1561C441F8E004AA151 /* ANSSMStandardAd.m in Sources */, + 8A73FA521BD6B34E00D18188 /* ANMRAIDExpandViewController.m in Sources */, + 8A73FA391BD6B34E00D18188 /* ANBrowserViewController.m in Sources */, + 8A73FA601BD6B34E00D18188 /* ANLinear.m in Sources */, + 8A73FA661BD6B34E00D18188 /* ANMediaFile.m in Sources */, ECE4EADB194B768A0069D934 /* NSTimer+ANCategory.m in Sources */, - 8AF5A8801ACC60D50089C529 /* ANAdFetcherResponse.m in Sources */, - 8AD618D01981C11F00AC0780 /* ANANJAMImplementation.m in Sources */, - 8AD618DC1981C11F00AC0780 /* ANMediationContainerView.m in Sources */, + 8A73FA3A1BD6B34E00D18188 /* ANCircularAnimationView.m in Sources */, + 8A73FA681BD6B34E00D18188 /* ANNonLinear.m in Sources */, + 8A73FA501BD6B34E00D18188 /* ANMRAIDContainerView.m in Sources */, 8A6385E61A14336000280054 /* ANNativeMediatedAdController.m in Sources */, 8A6385E11A14336000280054 /* ANNativeAdStarRating.m in Sources */, - 8AC65F541A40DE63006BCF39 /* ANMRAIDJavascriptUtil.m in Sources */, - 8AD618DE1981C11F00AC0780 /* ANPBBuffer.m in Sources */, - 8AD618D21981C11F00AC0780 /* ANBrowserViewController.m in Sources */, - 8AC7C5391A3B5CEF00AA5548 /* ANAdWebViewController.m in Sources */, - 8AD618CE1981C11F00AC0780 /* ANAdView.m in Sources */, - 8AD618D81981C11F00AC0780 /* ANLogging.m in Sources */, - 8AD618CC1981C11F00AC0780 /* ANAdRequestUrl.m in Sources */, - 8AD618DB1981C11F00AC0780 /* ANMediationAdViewController.m in Sources */, - 8AD618D11981C11F00AC0780 /* ANBannerAdView.m in Sources */, - 8AD618D31981C11F00AC0780 /* ANClickOverlayView.m in Sources */, - 8AD618DF1981C11F00AC0780 /* ANPBContainerView.m in Sources */, + 8A73FA561BD6B34E00D18188 /* ANMRAIDResizeView.m in Sources */, + 8A73FA441BD6B34E00D18188 /* ANMediationContainerView.m in Sources */, + 8A73FA3F1BD6B34E00D18188 /* ANLocation.m in Sources */, 8AF3C19D1A361CC30018FB6A /* ANNativeImpressionTrackerInfo.m in Sources */, + 8A73FA3D1BD6B34E00D18188 /* ANInterstitialAd.m in Sources */, + 8A73FA551BD6B34E00D18188 /* ANMRAIDResizeProperties.m in Sources */, 8A3EC16E19B8FD9A0049CD29 /* ANBannerAdView+ANContentViewTransitions.m in Sources */, - 8AF5A8861ACC60D50089C529 /* ANStandardAd.m in Sources */, + 8A73FA611BD6B34E00D18188 /* ANNonLinearAds.m in Sources */, + 8A73FA481BD6B34E00D18188 /* ANPlayerView.m in Sources */, + 8A73FA311BD6B34E00D18188 /* ANAdFetcher.m in Sources */, + 8A73FA581BD6B34E00D18188 /* ANMRAIDUtil.m in Sources */, 8A6385E91A14336000280054 /* UIView+ANNativeAdCategory.m in Sources */, + 8A73FA571BD6B34E00D18188 /* ANMRAIDResizeViewManager.m in Sources */, 8A6385E21A14336000280054 /* ANNativeAdRequest.m in Sources */, - 8AC65F581A40DE63006BCF39 /* ANMRAIDResizeProperties.m in Sources */, + 8A73FA511BD6B34E00D18188 /* ANMRAIDExpandProperties.m in Sources */, + 8A73FA491BD6B34E00D18188 /* ANReachability.m in Sources */, + 8A73FA5F1BD6B34E00D18188 /* ANCreative.m in Sources */, + 8AAD5D161BD6C0E300B4CD53 /* ANXML+HTTP.m in Sources */, + 8ABC3FED1BE9195B0099501F /* ANVASTUtil.m in Sources */, ECE4EADD194B768A0069D934 /* UIWebView+ANCategory.m in Sources */, - 8AD618E01981C11F00AC0780 /* ANReachability.m in Sources */, + 8A73FA3C1BD6B34E00D18188 /* ANGlobal.m in Sources */, + 8A73FA431BD6B34E00D18188 /* ANMediationAdViewController.m in Sources */, + 8A73FA471BD6B34E00D18188 /* ANPBContainerView.m in Sources */, 8A6385E01A14336000280054 /* ANNativeAdImageCache.m in Sources */, - 8AC65F4C1A40DE63006BCF39 /* ANMRAIDCalendarManager.m in Sources */, + 8A73FA5D1BD6B34E00D18188 /* ANAdSystem.m in Sources */, + 8A73FA4F1BD6B34E00D18188 /* ANMRAIDCalendarManager.m in Sources */, ECE4EADC194B768A0069D934 /* UIView+ANCategory.m in Sources */, - 8AC65F5E1A40DE63006BCF39 /* ANMRAIDUtil.m in Sources */, - 8AC65F4E1A40DE63006BCF39 /* ANMRAIDContainerView.m in Sources */, + 8A87BF351BD9443000281EA9 /* ANUniversalTagRequestBuilder.m in Sources */, + 8A73FA641BD6B34E00D18188 /* AnCompanion.m in Sources */, + 8A73FA321BD6B34E00D18188 /* ANAdFetcherResponse.m in Sources */, + 8A73FA341BD6B34E00D18188 /* ANAdServerResponse.m in Sources */, + 8AAD5D171BD6C0E300B4CD53 /* ANXML.m in Sources */, + 8A73FA4C1BD6B34E00D18188 /* ANVideoAd.m in Sources */, + 8A73FA401BD6B34E00D18188 /* ANLogging.m in Sources */, + 8A73FA4B1BD6B34E00D18188 /* ANTargetingParameters.m in Sources */, + 8A73FA5E1BD6B34E00D18188 /* ANImpression.m in Sources */, + 8A73FA541BD6B34E00D18188 /* ANMRAIDOrientationProperties.m in Sources */, 8A6385DF1A14336000280054 /* ANNativeAdFetcher.m in Sources */, - 8AD618D71981C11F00AC0780 /* ANLocation.m in Sources */, 8A6385E71A14336000280054 /* ANNativeMediatedAdResponse.m in Sources */, + 8A73FA411BD6B34E00D18188 /* ANLogManager.m in Sources */, + 8A73FA671BD6B34E00D18188 /* ANCustomClick.m in Sources */, + 8A73FA621BD6B34E00D18188 /* ANStaticResource.m in Sources */, 8A6385E41A14336000280054 /* ANNativeAdResponse.m in Sources */, - 8AD618D41981C11F00AC0780 /* ANGlobal.m in Sources */, - 8AD618D91981C11F00AC0780 /* ANLogManager.m in Sources */, - 8AF5A8831ACC60D50089C529 /* ANAdServerResponse.m in Sources */, + 8A73FA591BD6B34E00D18188 /* ANInLine.m in Sources */, + 8A73FA361BD6B34E00D18188 /* ANAdWebViewController.m in Sources */, + 8A73FA531BD6B34E00D18188 /* ANMRAIDJavascriptUtil.m in Sources */, + 8A87BF501BD961EB00281EA9 /* ANInterstitialAdFetcher.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand.xcodeproj/project.pbxproj b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand.xcodeproj/project.pbxproj new file mode 100644 index 000000000..b323acc53 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand.xcodeproj/project.pbxproj @@ -0,0 +1,869 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 496007961BFEDA0D00B50A1F /* libKIF.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 496007801BFED7AB00B50A1F /* libKIF.a */; }; + 4960079B1BFEDAF400B50A1F /* DisplayVideoAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 4960079A1BFEDAF400B50A1F /* DisplayVideoAd.m */; }; + 496007A01BFF2A6E00B50A1F /* ANSDKResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8A0D45291BF1615D0097D925 /* ANSDKResources.bundle */; }; + 8A00B20C1BF1634000818A2A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A00B2011BF1633F00818A2A /* AppDelegate.m */; }; + 8A00B20D1BF1634000818A2A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8A00B2021BF1633F00818A2A /* Assets.xcassets */; }; + 8A00B20E1BF1634000818A2A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8A00B2031BF1633F00818A2A /* LaunchScreen.storyboard */; }; + 8A00B20F1BF1634000818A2A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8A00B2051BF1634000818A2A /* Main.storyboard */; }; + 8A00B2111BF1634000818A2A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A00B2081BF1634000818A2A /* main.m */; }; + 8A00B2121BF1634000818A2A /* nqr@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8A00B2091BF1634000818A2A /* nqr@2x.png */; }; + 8A00B2131BF1634000818A2A /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A00B20B1BF1634000818A2A /* ViewController.m */; }; + 8A0D45481BF161870097D925 /* libANSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A0D45271BF1615D0097D925 /* libANSDK.a */; }; + 8A0D45491BF1618D0097D925 /* ANSDKResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8A0D45291BF1615D0097D925 /* ANSDKResources.bundle */; }; + EF8E4FDA1C101C8600FD711C /* PlayerDelegateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EF8E4FD91C101C8600FD711C /* PlayerDelegateTests.m */; }; + EFAA6F9E1C04270700C3C83B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EFAA6F9D1C04270700C3C83B /* CoreGraphics.framework */; }; + EFDD763B1C047BED0073ACC4 /* VolumeClickTest.m in Sources */ = {isa = PBXBuildFile; fileRef = EFDD763A1C047BED0073ACC4 /* VolumeClickTest.m */; }; + EFDD763E1C047D9B0073ACC4 /* PlayerClickTest.m in Sources */ = {isa = PBXBuildFile; fileRef = EFDD763D1C047D9B0073ACC4 /* PlayerClickTest.m */; }; + EFDD76411C047E7A0073ACC4 /* CloseVideoTest.m in Sources */ = {isa = PBXBuildFile; fileRef = EFDD76401C047E7A0073ACC4 /* CloseVideoTest.m */; }; + EFF21EC71C0C60F100766443 /* OpenInInAppBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = EFF21EC61C0C60F100766443 /* OpenInInAppBrowser.m */; }; + EFF21ECA1C0C614400766443 /* OpenInNativeBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = EFF21EC91C0C614400766443 /* OpenInNativeBrowser.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 4960077F1BFED7AB00B50A1F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 496007661BFED7AB00B50A1F /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EABD46AA1857A0C700A5F081; + remoteInfo = KIF; + }; + 496007811BFED7AB00B50A1F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 496007661BFED7AB00B50A1F /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EB60ECC1177F8C83005A041A; + remoteInfo = "Test Host"; + }; + 496007831BFED7AB00B50A1F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 496007661BFED7AB00B50A1F /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EABD46CD1857A0F300A5F081; + remoteInfo = "KIF Tests"; + }; + 496007851BFED7AB00B50A1F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 496007661BFED7AB00B50A1F /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 9CC9673B1AD4B1B600576D13; + remoteInfo = KIFFramework; + }; + 496007911BFED9B100B50A1F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A87BED91BD941E900281EA9 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8A87BEE01BD941E900281EA9; + remoteInfo = InterstitialUnifiedDemand; + }; + 8A0D45261BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EC3E5CDC1843C6D50070315E; + remoteInfo = ANSDK; + }; + 8A0D45281BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EC48177B1845046A0066BBFE; + remoteInfo = ANSDKResources; + }; + 8A0D452A1BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8AE2D6D119CC874B00001B70; + remoteInfo = ANSDKGoogleAdMobAdapter; + }; + 8A0D452C1BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8AE2D70219CC878300001B70; + remoteInfo = ANSDKiAdAdapter; + }; + 8A0D452E1BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8AE2D73319CC879900001B70; + remoteInfo = ANSDKMillennialMediaAdapter; + }; + 8A0D45301BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8AE2D76419CC87B200001B70; + remoteInfo = ANSDKMoPubAdapter; + }; + 8A0D45321BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8AE2D79519CC87CC00001B70; + remoteInfo = ANSDKFacebookAdapter; + }; + 8A0D45341BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8AD5154019D214CA002E53D6; + remoteInfo = ANSDKAmazonAdapter; + }; + 8A0D45361BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8AA5B4C41AA8B4A500522E1C; + remoteInfo = ANSDKInMobiAdapter; + }; + 8A0D45381BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8A4B96B51ACD9A4C00FFEB2A; + remoteInfo = ANSDKVdopiaAdapter; + }; + 8A0D453A1BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8A1482571AD337320046F1B9; + remoteInfo = ANSDKAdColonyAdapter; + }; + 8A0D453C1BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8AD7C4D81AD2FABA0049C997; + remoteInfo = ANSDKVungleAdapter; + }; + 8A0D453E1BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8A949ACE1ADF131500D83DCE; + remoteInfo = ANSDKChartboostAdapter; + }; + 8A0D45401BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8A96871A1B43314E00D9399B; + remoteInfo = ANSDKYahooAdapter; + }; + 8A0D45421BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8AE2D85319CC9A6F00001B70; + remoteInfo = ANAdapterForGoogleAdMobSDK; + }; + 8A0D45441BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8AE2D86119CC9B0F00001B70; + remoteInfo = ANAdapterForMoPubSDK; + }; + 8A0D45461BF1615D0097D925 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8A9AED8C1A1BE84F00C58BDA; + remoteInfo = AppNexusSDK; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 496007661BFED7AB00B50A1F /* KIF.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = KIF.xcodeproj; path = "KIF-master/KIF.xcodeproj"; sourceTree = ""; }; + 4960078C1BFED9B100B50A1F /* InterstitialUnifiedDemandTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = InterstitialUnifiedDemandTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 496007901BFED9B100B50A1F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 496007991BFEDAF400B50A1F /* DisplayVideoAd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DisplayVideoAd.h; path = DisplayVideoAd/DisplayVideoAd.h; sourceTree = ""; }; + 4960079A1BFEDAF400B50A1F /* DisplayVideoAd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DisplayVideoAd.m; path = DisplayVideoAd/DisplayVideoAd.m; sourceTree = ""; }; + 8A00B2001BF1633F00818A2A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 8A00B2011BF1633F00818A2A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 8A00B2021BF1633F00818A2A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 8A00B2041BF1633F00818A2A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 8A00B2061BF1634000818A2A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 8A00B2071BF1634000818A2A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8A00B2081BF1634000818A2A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 8A00B2091BF1634000818A2A /* nqr@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nqr@2x.png"; sourceTree = ""; }; + 8A00B20A1BF1634000818A2A /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 8A00B20B1BF1634000818A2A /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ANSDK.xcodeproj; path = ../../BinaryProjects/ANSDK.xcodeproj; sourceTree = ""; }; + 8A87BEE11BD941E900281EA9 /* InterstitialUnifiedDemand.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = InterstitialUnifiedDemand.app; sourceTree = BUILT_PRODUCTS_DIR; }; + EF8E4FD81C101C8600FD711C /* PlayerDelegateTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlayerDelegateTests.h; path = DisplayVideoAd/PlayerDelegateTests.h; sourceTree = ""; }; + EF8E4FD91C101C8600FD711C /* PlayerDelegateTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PlayerDelegateTests.m; path = DisplayVideoAd/PlayerDelegateTests.m; sourceTree = ""; }; + EFAA6F9D1C04270700C3C83B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + EFDD76391C047BED0073ACC4 /* VolumeClickTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VolumeClickTest.h; path = VideoClicks/VolumeClickTest.h; sourceTree = ""; }; + EFDD763A1C047BED0073ACC4 /* VolumeClickTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VolumeClickTest.m; path = VideoClicks/VolumeClickTest.m; sourceTree = ""; }; + EFDD763C1C047D9B0073ACC4 /* PlayerClickTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlayerClickTest.h; path = VideoClicks/PlayerClickTest.h; sourceTree = ""; }; + EFDD763D1C047D9B0073ACC4 /* PlayerClickTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PlayerClickTest.m; path = VideoClicks/PlayerClickTest.m; sourceTree = ""; }; + EFDD763F1C047E7A0073ACC4 /* CloseVideoTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CloseVideoTest.h; path = VideoClicks/CloseVideoTest.h; sourceTree = ""; }; + EFDD76401C047E7A0073ACC4 /* CloseVideoTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CloseVideoTest.m; path = VideoClicks/CloseVideoTest.m; sourceTree = ""; }; + EFF21EC51C0C60F100766443 /* OpenInInAppBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenInInAppBrowser.h; path = OpenInBrowser/OpenInInAppBrowser.h; sourceTree = ""; }; + EFF21EC61C0C60F100766443 /* OpenInInAppBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenInInAppBrowser.m; path = OpenInBrowser/OpenInInAppBrowser.m; sourceTree = ""; }; + EFF21EC81C0C614400766443 /* OpenInNativeBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenInNativeBrowser.h; path = OpenInBrowser/OpenInNativeBrowser.h; sourceTree = ""; }; + EFF21EC91C0C614400766443 /* OpenInNativeBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenInNativeBrowser.m; path = OpenInBrowser/OpenInNativeBrowser.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 496007891BFED9B100B50A1F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EFAA6F9E1C04270700C3C83B /* CoreGraphics.framework in Frameworks */, + 496007961BFEDA0D00B50A1F /* libKIF.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8A87BEDE1BD941E900281EA9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8A0D45481BF161870097D925 /* libANSDK.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 496007671BFED7AB00B50A1F /* Products */ = { + isa = PBXGroup; + children = ( + 496007801BFED7AB00B50A1F /* libKIF.a */, + 496007821BFED7AB00B50A1F /* Test Host.app */, + 496007841BFED7AB00B50A1F /* KIF Tests - XCTest.xctest */, + 496007861BFED7AB00B50A1F /* KIF.framework */, + ); + name = Products; + sourceTree = ""; + }; + 4960078D1BFED9B100B50A1F /* InterstitialUnifiedDemandTests */ = { + isa = PBXGroup; + children = ( + EFB35A721C47E123000596E2 /* UTAdRequest */, + EFF21EAB1C0C5B0F00766443 /* OpenClickInBrowser */, + 496007901BFED9B100B50A1F /* Info.plist */, + EFDD76351C0478BC0073ACC4 /* VideoClicks */, + 4960079C1BFEDAFE00B50A1F /* DisplayVideoAd */, + ); + path = InterstitialUnifiedDemandTests; + sourceTree = ""; + }; + 4960079C1BFEDAFE00B50A1F /* DisplayVideoAd */ = { + isa = PBXGroup; + children = ( + 496007991BFEDAF400B50A1F /* DisplayVideoAd.h */, + 4960079A1BFEDAF400B50A1F /* DisplayVideoAd.m */, + EF8E4FD81C101C8600FD711C /* PlayerDelegateTests.h */, + EF8E4FD91C101C8600FD711C /* PlayerDelegateTests.m */, + ); + name = DisplayVideoAd; + sourceTree = ""; + }; + 8A00B1FF1BF1633F00818A2A /* InterstitialUnifiedDemand */ = { + isa = PBXGroup; + children = ( + 8A00B2001BF1633F00818A2A /* AppDelegate.h */, + 8A00B2011BF1633F00818A2A /* AppDelegate.m */, + 8A00B2021BF1633F00818A2A /* Assets.xcassets */, + 8A00B2031BF1633F00818A2A /* LaunchScreen.storyboard */, + 8A00B2051BF1634000818A2A /* Main.storyboard */, + 8A00B2071BF1634000818A2A /* Info.plist */, + 8A00B2081BF1634000818A2A /* main.m */, + 8A00B2091BF1634000818A2A /* nqr@2x.png */, + 8A00B20A1BF1634000818A2A /* ViewController.h */, + 8A00B20B1BF1634000818A2A /* ViewController.m */, + ); + path = InterstitialUnifiedDemand; + sourceTree = ""; + }; + 8A0D45131BF1615D0097D925 /* Products */ = { + isa = PBXGroup; + children = ( + 8A0D45271BF1615D0097D925 /* libANSDK.a */, + 8A0D45291BF1615D0097D925 /* ANSDKResources.bundle */, + 8A0D452B1BF1615D0097D925 /* libANSDKGoogleAdMobAdapter.a */, + 8A0D452D1BF1615D0097D925 /* libANSDKiAdAdapter.a */, + 8A0D452F1BF1615D0097D925 /* libANSDKMillennialMediaAdapter.a */, + 8A0D45311BF1615D0097D925 /* libANSDKMoPubAdapter.a */, + 8A0D45331BF1615D0097D925 /* libANSDKFacebookAdapter.a */, + 8A0D45351BF1615D0097D925 /* libANSDKAmazonAdapter.a */, + 8A0D45371BF1615D0097D925 /* libANSDKInMobiAdapter.a */, + 8A0D45391BF1615D0097D925 /* libANSDKVdopiaAdapter.a */, + 8A0D453B1BF1615D0097D925 /* libANSDKAdColonyAdapter.a */, + 8A0D453D1BF1615D0097D925 /* libANSDKVungleAdapter.a */, + 8A0D453F1BF1615D0097D925 /* libANSDKChartboostAdapter.a */, + 8A0D45411BF1615D0097D925 /* libANSDKYahooAdapter.a */, + 8A0D45431BF1615D0097D925 /* libANAdapterForGoogleAdMobSDK.a */, + 8A0D45451BF1615D0097D925 /* libANAdapterForMoPubSDK.a */, + 8A0D45471BF1615D0097D925 /* AppNexusSDK.framework */, + ); + name = Products; + sourceTree = ""; + }; + 8A87BED81BD941E900281EA9 = { + isa = PBXGroup; + children = ( + EFAA6F9D1C04270700C3C83B /* CoreGraphics.framework */, + 496007661BFED7AB00B50A1F /* KIF.xcodeproj */, + 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */, + 8A00B1FF1BF1633F00818A2A /* InterstitialUnifiedDemand */, + 4960078D1BFED9B100B50A1F /* InterstitialUnifiedDemandTests */, + 8A87BEE21BD941E900281EA9 /* Products */, + ); + sourceTree = ""; + }; + 8A87BEE21BD941E900281EA9 /* Products */ = { + isa = PBXGroup; + children = ( + 8A87BEE11BD941E900281EA9 /* InterstitialUnifiedDemand.app */, + 4960078C1BFED9B100B50A1F /* InterstitialUnifiedDemandTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + EFB35A721C47E123000596E2 /* UTAdRequest */ = { + isa = PBXGroup; + children = ( + ); + path = UTAdRequest; + sourceTree = ""; + }; + EFDD76351C0478BC0073ACC4 /* VideoClicks */ = { + isa = PBXGroup; + children = ( + EFDD76391C047BED0073ACC4 /* VolumeClickTest.h */, + EFDD763A1C047BED0073ACC4 /* VolumeClickTest.m */, + EFDD763C1C047D9B0073ACC4 /* PlayerClickTest.h */, + EFDD763D1C047D9B0073ACC4 /* PlayerClickTest.m */, + EFDD763F1C047E7A0073ACC4 /* CloseVideoTest.h */, + EFDD76401C047E7A0073ACC4 /* CloseVideoTest.m */, + ); + name = VideoClicks; + sourceTree = ""; + }; + EFF21EAB1C0C5B0F00766443 /* OpenClickInBrowser */ = { + isa = PBXGroup; + children = ( + EFF21EC51C0C60F100766443 /* OpenInInAppBrowser.h */, + EFF21EC61C0C60F100766443 /* OpenInInAppBrowser.m */, + EFF21EC81C0C614400766443 /* OpenInNativeBrowser.h */, + EFF21EC91C0C614400766443 /* OpenInNativeBrowser.m */, + ); + name = OpenClickInBrowser; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 4960078B1BFED9B100B50A1F /* InterstitialUnifiedDemandTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 496007931BFED9B100B50A1F /* Build configuration list for PBXNativeTarget "InterstitialUnifiedDemandTests" */; + buildPhases = ( + 496007881BFED9B100B50A1F /* Sources */, + 496007891BFED9B100B50A1F /* Frameworks */, + 4960078A1BFED9B100B50A1F /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 496007921BFED9B100B50A1F /* PBXTargetDependency */, + ); + name = InterstitialUnifiedDemandTests; + productName = InterstitialUnifiedDemandTests; + productReference = 4960078C1BFED9B100B50A1F /* InterstitialUnifiedDemandTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 8A87BEE01BD941E900281EA9 /* InterstitialUnifiedDemand */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8A87BEF81BD941E900281EA9 /* Build configuration list for PBXNativeTarget "InterstitialUnifiedDemand" */; + buildPhases = ( + 8A87BEDD1BD941E900281EA9 /* Sources */, + 8A87BEDE1BD941E900281EA9 /* Frameworks */, + 8A87BEDF1BD941E900281EA9 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = InterstitialUnifiedDemand; + productName = VASTInterstitialDemo; + productReference = 8A87BEE11BD941E900281EA9 /* InterstitialUnifiedDemand.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 8A87BED91BD941E900281EA9 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0700; + ORGANIZATIONNAME = "APPNEXUS INC"; + TargetAttributes = { + 4960078B1BFED9B100B50A1F = { + CreatedOnToolsVersion = 7.0; + DevelopmentTeam = TBFU6QDZMS; + TestTargetID = 8A87BEE01BD941E900281EA9; + }; + 8A87BEE01BD941E900281EA9 = { + CreatedOnToolsVersion = 7.0; + DevelopmentTeam = HR94J6TSB3; + }; + }; + }; + buildConfigurationList = 8A87BEDC1BD941E900281EA9 /* Build configuration list for PBXProject "InterstitialUnifiedDemand" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 8A87BED81BD941E900281EA9; + productRefGroup = 8A87BEE21BD941E900281EA9 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 8A0D45131BF1615D0097D925 /* Products */; + ProjectRef = 8A0D45121BF1615D0097D925 /* ANSDK.xcodeproj */; + }, + { + ProductGroup = 496007671BFED7AB00B50A1F /* Products */; + ProjectRef = 496007661BFED7AB00B50A1F /* KIF.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 8A87BEE01BD941E900281EA9 /* InterstitialUnifiedDemand */, + 4960078B1BFED9B100B50A1F /* InterstitialUnifiedDemandTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 496007801BFED7AB00B50A1F /* libKIF.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libKIF.a; + remoteRef = 4960077F1BFED7AB00B50A1F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 496007821BFED7AB00B50A1F /* Test Host.app */ = { + isa = PBXReferenceProxy; + fileType = wrapper.application; + path = "Test Host.app"; + remoteRef = 496007811BFED7AB00B50A1F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 496007841BFED7AB00B50A1F /* KIF Tests - XCTest.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "KIF Tests - XCTest.xctest"; + remoteRef = 496007831BFED7AB00B50A1F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 496007861BFED7AB00B50A1F /* KIF.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = KIF.framework; + remoteRef = 496007851BFED7AB00B50A1F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D45271BF1615D0097D925 /* libANSDK.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANSDK.a; + remoteRef = 8A0D45261BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D45291BF1615D0097D925 /* ANSDKResources.bundle */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = ANSDKResources.bundle; + remoteRef = 8A0D45281BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D452B1BF1615D0097D925 /* libANSDKGoogleAdMobAdapter.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANSDKGoogleAdMobAdapter.a; + remoteRef = 8A0D452A1BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D452D1BF1615D0097D925 /* libANSDKiAdAdapter.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANSDKiAdAdapter.a; + remoteRef = 8A0D452C1BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D452F1BF1615D0097D925 /* libANSDKMillennialMediaAdapter.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANSDKMillennialMediaAdapter.a; + remoteRef = 8A0D452E1BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D45311BF1615D0097D925 /* libANSDKMoPubAdapter.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANSDKMoPubAdapter.a; + remoteRef = 8A0D45301BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D45331BF1615D0097D925 /* libANSDKFacebookAdapter.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANSDKFacebookAdapter.a; + remoteRef = 8A0D45321BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D45351BF1615D0097D925 /* libANSDKAmazonAdapter.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANSDKAmazonAdapter.a; + remoteRef = 8A0D45341BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D45371BF1615D0097D925 /* libANSDKInMobiAdapter.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANSDKInMobiAdapter.a; + remoteRef = 8A0D45361BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D45391BF1615D0097D925 /* libANSDKVdopiaAdapter.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANSDKVdopiaAdapter.a; + remoteRef = 8A0D45381BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D453B1BF1615D0097D925 /* libANSDKAdColonyAdapter.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANSDKAdColonyAdapter.a; + remoteRef = 8A0D453A1BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D453D1BF1615D0097D925 /* libANSDKVungleAdapter.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANSDKVungleAdapter.a; + remoteRef = 8A0D453C1BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D453F1BF1615D0097D925 /* libANSDKChartboostAdapter.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANSDKChartboostAdapter.a; + remoteRef = 8A0D453E1BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D45411BF1615D0097D925 /* libANSDKYahooAdapter.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANSDKYahooAdapter.a; + remoteRef = 8A0D45401BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D45431BF1615D0097D925 /* libANAdapterForGoogleAdMobSDK.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANAdapterForGoogleAdMobSDK.a; + remoteRef = 8A0D45421BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D45451BF1615D0097D925 /* libANAdapterForMoPubSDK.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libANAdapterForMoPubSDK.a; + remoteRef = 8A0D45441BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 8A0D45471BF1615D0097D925 /* AppNexusSDK.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = AppNexusSDK.framework; + remoteRef = 8A0D45461BF1615D0097D925 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 4960078A1BFED9B100B50A1F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 496007A01BFF2A6E00B50A1F /* ANSDKResources.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8A87BEDF1BD941E900281EA9 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8A00B20E1BF1634000818A2A /* LaunchScreen.storyboard in Resources */, + 8A00B20D1BF1634000818A2A /* Assets.xcassets in Resources */, + 8A0D45491BF1618D0097D925 /* ANSDKResources.bundle in Resources */, + 8A00B2121BF1634000818A2A /* nqr@2x.png in Resources */, + 8A00B20F1BF1634000818A2A /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 496007881BFED9B100B50A1F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EFF21ECA1C0C614400766443 /* OpenInNativeBrowser.m in Sources */, + EFDD76411C047E7A0073ACC4 /* CloseVideoTest.m in Sources */, + EFDD763B1C047BED0073ACC4 /* VolumeClickTest.m in Sources */, + EF8E4FDA1C101C8600FD711C /* PlayerDelegateTests.m in Sources */, + 4960079B1BFEDAF400B50A1F /* DisplayVideoAd.m in Sources */, + EFDD763E1C047D9B0073ACC4 /* PlayerClickTest.m in Sources */, + EFF21EC71C0C60F100766443 /* OpenInInAppBrowser.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8A87BEDD1BD941E900281EA9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8A00B2131BF1634000818A2A /* ViewController.m in Sources */, + 8A00B2111BF1634000818A2A /* main.m in Sources */, + 8A00B20C1BF1634000818A2A /* AppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 496007921BFED9B100B50A1F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8A87BEE01BD941E900281EA9 /* InterstitialUnifiedDemand */; + targetProxy = 496007911BFED9B100B50A1F /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 8A00B2031BF1633F00818A2A /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 8A00B2041BF1633F00818A2A /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; + 8A00B2051BF1634000818A2A /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 8A00B2061BF1634000818A2A /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 496007941BFED9B100B50A1F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../../sdk"; + INFOPLIST_FILE = InterstitialUnifiedDemandTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ( + "-ObjC", + "-framework", + IOKit, + ); + PRODUCT_BUNDLE_IDENTIFIER = com.appNexus.InterstitialUnifiedDemandTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/InterstitialUnifiedDemand.app/InterstitialUnifiedDemand"; + }; + name = Debug; + }; + 496007951BFED9B100B50A1F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../../sdk"; + INFOPLIST_FILE = InterstitialUnifiedDemandTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ( + "-ObjC", + "-framework", + IOKit, + ); + PRODUCT_BUNDLE_IDENTIFIER = com.appNexus.InterstitialUnifiedDemandTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/InterstitialUnifiedDemand.app/InterstitialUnifiedDemand"; + }; + name = Release; + }; + 8A87BEF61BD941E900281EA9 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 8A87BEF71BD941E900281EA9 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 8A87BEF91BD941E900281EA9 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../../sdk"; + INFOPLIST_FILE = InterstitialUnifiedDemand/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = com.appNexus.InterstitialUnifiedDemand; + PRODUCT_NAME = InterstitialUnifiedDemand; + PROVISIONING_PROFILE = ""; + }; + name = Debug; + }; + 8A87BEFA1BD941E900281EA9 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../../sdk"; + INFOPLIST_FILE = InterstitialUnifiedDemand/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = com.appNexus.InterstitialUnifiedDemand; + PRODUCT_NAME = InterstitialUnifiedDemand; + PROVISIONING_PROFILE = ""; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 496007931BFED9B100B50A1F /* Build configuration list for PBXNativeTarget "InterstitialUnifiedDemandTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 496007941BFED9B100B50A1F /* Debug */, + 496007951BFED9B100B50A1F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 8A87BEDC1BD941E900281EA9 /* Build configuration list for PBXProject "InterstitialUnifiedDemand" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8A87BEF61BD941E900281EA9 /* Debug */, + 8A87BEF71BD941E900281EA9 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 8A87BEF81BD941E900281EA9 /* Build configuration list for PBXNativeTarget "InterstitialUnifiedDemand" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8A87BEF91BD941E900281EA9 /* Debug */, + 8A87BEFA1BD941E900281EA9 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 8A87BED91BD941E900281EA9 /* Project object */; +} diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/AppDelegate.h b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/AppDelegate.h new file mode 100644 index 000000000..4017d8d95 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/AppDelegate.h @@ -0,0 +1,17 @@ +// +// AppDelegate.h +// VASTInterstitialDemo +// +// Created by Jose Cabal-Ugaz on 10/22/15. +// Copyright © 2015 AppNexus. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/AppDelegate.m b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/AppDelegate.m new file mode 100644 index 000000000..95fc1b2ad --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/AppDelegate.m @@ -0,0 +1,46 @@ +// +// AppDelegate.m +// VASTInterstitialDemo +// +// Created by Jose Cabal-Ugaz on 10/22/15. +// Copyright © 2015 AppNexus. All rights reserved. +// + +#import "AppDelegate.h" +#import + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. +} + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..0bcee3d12 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,80 @@ +{ + "images" : [ + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-Small@2x-1.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-Small@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-Small-40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-Small-40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-60@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-Small.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-Small@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-Small-40.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-Small-40@2x-1.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-76.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-76@2x.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png new file mode 100644 index 000000000..885a326c8 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png differ diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png new file mode 100644 index 000000000..a16920751 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png differ diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-76.png b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-76.png new file mode 100644 index 000000000..bb1f1aeb2 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-76.png differ diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png new file mode 100644 index 000000000..1a5e11f23 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png differ diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small-40.png b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small-40.png new file mode 100644 index 000000000..220e9eb05 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small-40.png differ diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x-1.png b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x-1.png new file mode 100644 index 000000000..2677ad581 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x-1.png differ diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png new file mode 100644 index 000000000..2677ad581 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png differ diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png new file mode 100644 index 000000000..885a326c8 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png differ diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small.png b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small.png new file mode 100644 index 000000000..c32f3f083 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small.png differ diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png new file mode 100644 index 000000000..22c8ff8d4 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png differ diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png new file mode 100644 index 000000000..22c8ff8d4 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png differ diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png new file mode 100644 index 000000000..19ea2a3e0 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png differ diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/Contents.json b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/Contents.json new file mode 100644 index 000000000..da4a164c9 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Base.lproj/LaunchScreen.storyboard b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..81583180e --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Base.lproj/Main.storyboard b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Base.lproj/Main.storyboard new file mode 100644 index 000000000..190c947e1 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Base.lproj/Main.storyboard @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Info.plist b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Info.plist new file mode 100644 index 000000000..47e2b6883 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/Info.plist @@ -0,0 +1,56 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UIRequiresFullScreen + + UIStatusBarHidden + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/ViewController.h b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/ViewController.h new file mode 100644 index 000000000..14e96d846 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/ViewController.h @@ -0,0 +1,15 @@ +// +// ViewController.h +// VASTInterstitialDemo +// +// Created by Jose Cabal-Ugaz on 10/22/15. +// Copyright © 2015 AppNexus. All rights reserved. +// + +#import + +@interface ViewController : UIViewController + + +@end + diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/ViewController.m b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/ViewController.m new file mode 100644 index 000000000..3fe19283e --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/ViewController.m @@ -0,0 +1,121 @@ +// +// ViewController.m +// VASTInterstitialDemo +// +// Created by Jose Cabal-Ugaz on 10/22/15. +// Copyright © 2015 AppNexus. All rights reserved. +// + +#import "ViewController.h" +#import "ANInterstitialAd.h" +#import "ANLogManager.h" + +@interface ViewController () + +@property (nonatomic) ANInterstitialAd *interstitialAd; + +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + [ANLogManager setANLogLevel:ANLogLevelAll]; + // VAST Placement + self.interstitialAd = [[ANInterstitialAd alloc] initWithPlacementId:@"5778861"]; + // HTML Placement +// self.interstitialAd = [[ANInterstitialAd alloc] initWithPlacementId:@"2140061"]; + self.interstitialAd.closeDelay = 5.0; + self.interstitialAd.opensInNativeBrowser = NO; + self.interstitialAd.shouldServePublicServiceAnnouncements = YES; + self.interstitialAd.delegate = self; + self.interstitialAd.videoAdDelegate = self; + self.view.accessibilityLabel = @"interstitial"; +} + +- (void)adDidReceiveAd:(id)ad { + NSLog(@"adDidReceiveAd"); +} + +- (void)ad:(id)ad requestFailedWithError:(NSError *)error { + NSLog(@"ad:requestFailedWithError:"); +} + +- (IBAction)onTap:(UITapGestureRecognizer *)sender { + [self.interstitialAd displayAdFromViewController:self]; + [self.interstitialAd loadAd]; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + NSLog(@"view did appear"); +} + +- (BOOL)prefersStatusBarHidden { + return YES; +} + +- (UIInterfaceOrientationMask)supportedInterfaceOrientations { + return UIInterfaceOrientationMaskPortrait; +} + +#pragma mark - VideoDelegates + +- (void)adStartedPlayingVideo:(id)ad{ + NSLog(@"App: video started playing."); +} + +- (void)adPausedVideo:(id)ad{ + NSLog(@"App: video paused."); +} + +- (void)adResumedVideo:(id)ad{ + NSLog(@"App: video Resumed."); +} + +- (void)adWasClicked:(id)ad{ + NSLog(@"App: video was clicked."); +} + +- (void)adWillClose:(id)ad{ + NSLog(@"App: video will close."); +} + +- (void)adDidClose:(id)ad{ + NSLog(@"App: video did close."); +} + +- (void)adMuted:(BOOL)isMuted withAd:(id)ad{ + NSLog(@"App: video muted: %i", isMuted); +} + +- (void)adSkippedVideo:(id)ad{ + NSLog(@"App: video Skipped."); +} + +- (void)adFinishedPlayingCompleteVideo:(id)ad{ + NSLog(@"App: video finished playing."); +} + +- (void)adFinishedQuartileEvent:(ANVideoEvent)videoEvent withAd:(id)ad{ + switch (videoEvent) { + case ANVideoEventQuartileFirst: + NSLog(@"App: First Quartile."); + break; + case ANVideoEventQuartileMidPoint: + NSLog(@"App: MidPoint Quartile."); + break; + case ANVideoEventQuartileThird: + NSLog(@"App: Third Quartile."); + break; + default: + NSLog(@"App: Event not handled."); + break; + } +} + +- (void)adWillLeaveApplication:(id)ad{ + NSLog(@"App: ad will leave application."); +} + +@end \ No newline at end of file diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/main.m b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/main.m new file mode 100644 index 000000000..6e4abc0dd --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/main.m @@ -0,0 +1,16 @@ +// +// main.m +// VASTInterstitialDemo +// +// Created by Jose Cabal-Ugaz on 10/22/15. +// Copyright © 2015 AppNexus. All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/nqr@2x.png b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/nqr@2x.png new file mode 100644 index 000000000..6e26d9b57 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemand/nqr@2x.png differ diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/DisplayVideoAd/DisplayVideoAd.h b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/DisplayVideoAd/DisplayVideoAd.h new file mode 100644 index 000000000..3bb93be01 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/DisplayVideoAd/DisplayVideoAd.h @@ -0,0 +1,22 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ + +#import + +@interface DisplayVideoAd : KIFTestCase + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/DisplayVideoAd/DisplayVideoAd.m b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/DisplayVideoAd/DisplayVideoAd.m new file mode 100644 index 000000000..eecbf370e --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/DisplayVideoAd/DisplayVideoAd.m @@ -0,0 +1,117 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ + +#define interstitial [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"interstitial"] +#define player [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"player"] + +#import "DisplayVideoAd.h" +#import +#import "ANInterstitialAd.h" + +@interface DisplayVideoAd() +@end + +@implementation DisplayVideoAd + +static ANInterstitialAd *interstitialAdView; + ++ (void)setUp{ + [super setUp]; +} + ++ (void)tearDown{ + [super tearDown]; + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + [controller dismissViewControllerAnimated:NO completion:nil]; + interstitialAdView.delegate = nil; + interstitialAdView.videoAdDelegate = nil; + interstitialAdView = nil; +} + +- (void) test1SetUp{ + + [tester waitForViewWithAccessibilityLabel:@"interstitial"]; + [self setupDelegatesForVideo]; + + int breakCounter = 5; + + while (interstitial && breakCounter--) { + [self performClickOnInterstitial]; + [tester waitForTimeInterval:2.0]; + } + + if (!interstitial) { + [tester waitForViewWithAccessibilityLabel:@"player"]; + if (!player) { + NSLog(@"Test: Not able to load the video."); + } + } + + XCTAssertNil(interstitial, @"Could not load video."); +} + +- (void) test3ExistenceOfCloseCountDownTimerAtTopRight{ + XCTAssertNil(interstitial, @"Video could not be loaded."); + UIView *circularView = [tester waitForViewWithAccessibilityLabel:@"close button"]; + CGRect superViewFrame = circularView.superview.frame; + CGRect testFrame = CGRectMake(superViewFrame.size.width - 75, superViewFrame.origin.y, 50, 75); + XCTAssertTrue(CGRectContainsPoint(testFrame, circularView.frame.origin), @"Countdown timer not found at top right position."); +} + +- (void) test2ExistenceOfVolumeView{ + XCTAssertNil(interstitial, @"Video could not be loaded."); + [tester waitForViewWithAccessibilityLabel:@"player"]; + [tester waitForViewWithAccessibilityLabel:@"volume button"]; +} + +- (void) test4ExistenceOfVolumeButtonAtBottomRight{ + XCTAssertNil(interstitial, @"Video could not be loaded."); + UIView *volumeView = [tester waitForViewWithAccessibilityLabel:@"volume button"]; + CGRect superViewFrame = volumeView.superview.superview.frame; + CGRect testFrame = CGRectMake(superViewFrame.size.width - 75, superViewFrame.size.height-75, 50, 50); + + CGPoint point = [volumeView convertPoint:volumeView.superview.center toView:volumeView.superview]; + + XCTAssertTrue(CGRectContainsPoint(testFrame, point), @"Volume button not found at bottom right position."); +} + +-(void) setupDelegatesForVideo{ + + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + if (controller) { + SEL aSelector = NSSelectorFromString(@"interstitialAd"); + interstitialAdView = (ANInterstitialAd *)[controller performSelector:aSelector]; + interstitialAdView.delegate = self; + interstitialAdView.videoAdDelegate = self; + } +} + +- (void) performClickOnInterstitial{ + if (interstitial) { + [tester tapViewWithAccessibilityLabel:@"interstitial"]; + } +} + +- (void)adDidReceiveAd:(id)ad{ + NSLog(@"Test: ad received ad."); +} + +- (void)ad:(id)ad requestFailedWithError:(NSError *)error{ + NSLog(@"Test: request failed with error."); +} + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/DisplayVideoAd/PlayerDelegateTests.h b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/DisplayVideoAd/PlayerDelegateTests.h new file mode 100644 index 000000000..eb3b46c5b --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/DisplayVideoAd/PlayerDelegateTests.h @@ -0,0 +1,22 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ + +#import + +@interface PlayerDelegateTests : KIFTestCase + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/DisplayVideoAd/PlayerDelegateTests.m b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/DisplayVideoAd/PlayerDelegateTests.m new file mode 100644 index 000000000..2fd54622d --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/DisplayVideoAd/PlayerDelegateTests.m @@ -0,0 +1,151 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ +#define interstitial [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"interstitial"] +#define player [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"player"] + +#import "PlayerDelegateTests.h" +#import +#import "ANInterstitialAd.h" + +@interface PlayerDelegateTests() +@end + +@implementation PlayerDelegateTests + +static BOOL isAdStartedPlayingVideo; +static BOOL isFirstQuartileDone; +static BOOL isMidPointQuartileDone; +static BOOL isthirdQuartileDone; +static BOOL isCreativeViewDone; +static BOOL isPlayingCompelete; + +static ANInterstitialAd *interstitialAdView; +static XCTestExpectation *expectation; + ++ (void)setUp{ + [super setUp]; +} + ++ (void)tearDown{ + [super tearDown]; + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + [controller dismissViewControllerAnimated:NO completion:nil]; + interstitialAdView.delegate = nil; + interstitialAdView.videoAdDelegate = nil; + interstitialAdView = nil; + isAdStartedPlayingVideo = NO; + isCreativeViewDone = NO; + isFirstQuartileDone = NO; + isMidPointQuartileDone = NO; + isthirdQuartileDone = NO; + isPlayingCompelete = NO; + expectation = nil; +} + +- (void)test1PrepareForDisplay{ + [tester waitForViewWithAccessibilityLabel:@"interstitial"]; + [self setupDelegatesForVideo]; + + int breakCounter = 5; + + while (interstitial && breakCounter--) { + [self performClickOnInterstitial]; + [tester waitForTimeInterval:2.0]; + } + + if (!interstitial) { + [tester waitForViewWithAccessibilityLabel:@"player"]; + if (!player) { + NSLog(@"Test: Not able to load the video."); + } + } + + XCTAssertNil(interstitial, @"Failed to load video"); + +} + +- (void) test2PlayerRelatedDelegates{ + + + XCTAssertNil(interstitial, @"Failed to load video"); + + expectation = [self expectationWithDescription:@"wait for all delegates to fire"]; + [self waitForExpectationsWithTimeout:100.0 handler:nil]; + + XCTAssertTrue(isAdStartedPlayingVideo, @"Ad failed to start video."); + XCTAssertTrue(isFirstQuartileDone, @"Ad did not play till first quartile."); + XCTAssertTrue(isMidPointQuartileDone, @"Ad did not play till mid point quartile."); + XCTAssertTrue(isthirdQuartileDone, @"Ad did not play till third quartile."); + XCTAssertTrue(isPlayingCompelete, @"Ad did not finish playing video till the end."); +} + +-(void) setupDelegatesForVideo{ + + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + if (controller) { + SEL aSelector = NSSelectorFromString(@"interstitialAd"); + interstitialAdView = (ANInterstitialAd *)[controller performSelector:aSelector]; + interstitialAdView.delegate = self; + interstitialAdView.videoAdDelegate = self; + } +} + +- (void) performClickOnInterstitial{ + if (interstitial) { + [tester tapViewWithAccessibilityLabel:@"interstitial"]; + } +} + +- (void)adDidReceiveAd:(id)ad{ + NSLog(@"Test: ad receive ad"); +} + +- (void)ad:(id)ad requestFailedWithError:(NSError *)error{ + NSLog(@"Test: request failed with error."); +} + +- (void)adStartedPlayingVideo:(id)ad{ + NSLog(@"Test: video ad started playing video."); + isAdStartedPlayingVideo = YES; +} + +- (void)adFinishedQuartileEvent:(ANVideoEvent)videoEvent withAd:(id)ad{ + switch (videoEvent) { + case ANVideoEventQuartileFirst: + NSLog(@"Test: First Quartile"); + isFirstQuartileDone = YES; + break; + case ANVideoEventQuartileMidPoint: + NSLog(@"Test: Mid Point"); + isMidPointQuartileDone = YES; + break; + case ANVideoEventQuartileThird: + NSLog(@"Test: Third Quartile"); + isthirdQuartileDone = YES; + break; + default: + break; + } +} + +- (void)adFinishedPlayingCompleteVideo:(id)ad{ + NSLog(@"Test: Video finished playing complete video."); + isPlayingCompelete = YES; + [expectation fulfill]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/Info.plist b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/Info.plist new file mode 100644 index 000000000..ba72822e8 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/OpenInBrowser/OpenInInAppBrowser.h b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/OpenInBrowser/OpenInInAppBrowser.h new file mode 100644 index 000000000..524879643 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/OpenInBrowser/OpenInInAppBrowser.h @@ -0,0 +1,22 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ + +#import + +@interface OpenInInAppBrowser : KIFTestCase + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/OpenInBrowser/OpenInInAppBrowser.m b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/OpenInBrowser/OpenInInAppBrowser.m new file mode 100644 index 000000000..158e800fe --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/OpenInBrowser/OpenInInAppBrowser.m @@ -0,0 +1,126 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ + +#define interstitial [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"interstitial"] +#define player [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"player"] + +#import "OpenInInAppBrowser.h" +#import +#import "ANInterstitialAd.h" + +@interface OpenInInAppBrowser() +@end + +@implementation OpenInInAppBrowser + +static BOOL isDelegateFired; + +static ANInterstitialAd *interstitialAdView; +static XCTestExpectation *expectation; + ++ (void)setUp{ + [super setUp]; + isDelegateFired = NO; +} + ++ (void)tearDown{ + [super tearDown]; + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + [controller dismissViewControllerAnimated:NO completion:nil]; + interstitialAdView.delegate = nil; + interstitialAdView.videoAdDelegate = nil; + interstitialAdView = nil; + expectation = nil; +} + +- (void)test1PrepareForDisplay{ + + [tester waitForViewWithAccessibilityLabel:@"interstitial"]; + + [self setupDelegatesForVideo]; + + int breakCounter = 5; + + while (interstitial && breakCounter--) { + [self performClickOnInterstitial]; + [tester waitForTimeInterval:2.0]; + } + + if (!interstitial) { + [tester waitForViewWithAccessibilityLabel:@"player"]; + if (!player) { + NSLog(@"Test: Not able to load the video."); + } + } + + XCTAssertNil(interstitial, @"Failed ot load video."); +} + +- (void) test2OpenClickInInAppBrowser{ + + XCTAssertNil(interstitial, @"Failed to load video."); + + expectation = [self expectationWithDescription:@"Waiting for player to be clicked."]; + + [tester waitForViewWithAccessibilityLabel:@"player"]; + [tester tapViewWithAccessibilityLabel:@"player"]; + + [self performSelector:@selector(notifyExpectation) withObject:nil afterDelay:3.0]; + [self waitForExpectationsWithTimeout:6.0 handler:nil]; + + XCTAssertFalse(isDelegateFired, @"Click opened in Native Browser. failed case."); + +} + +-(void) setupDelegatesForVideo{ + + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + if (controller) { + SEL aSelector = NSSelectorFromString(@"interstitialAd"); + interstitialAdView = (ANInterstitialAd *)[controller performSelector:aSelector]; + interstitialAdView.opensInNativeBrowser = NO; + interstitialAdView.delegate = self; + interstitialAdView.videoAdDelegate = self; + } +} + +- (void) performClickOnInterstitial{ + if (interstitial) { + [tester tapViewWithAccessibilityLabel:@"interstitial"]; + } +} + +- (void)adWillLeaveApplication:(id)ad{ + NSLog(@"Test: ad will leave application."); + isDelegateFired = YES; +} + +- (void) notifyExpectation{ + if (!isDelegateFired) { + [expectation fulfill]; + } +} + +- (void)adDidReceiveAd:(id)ad{ + NSLog(@"Test: ad receive ad"); +} + +- (void)ad:(id)ad requestFailedWithError:(NSError *)error{ + NSLog(@"Test: request failed with error."); +} + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/OpenInBrowser/OpenInNativeBrowser.h b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/OpenInBrowser/OpenInNativeBrowser.h new file mode 100644 index 000000000..353ecb6ca --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/OpenInBrowser/OpenInNativeBrowser.h @@ -0,0 +1,22 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ + +#import + +@interface OpenInNativeBrowser : KIFTestCase + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/OpenInBrowser/OpenInNativeBrowser.m b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/OpenInBrowser/OpenInNativeBrowser.m new file mode 100644 index 000000000..1d943e101 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/OpenInBrowser/OpenInNativeBrowser.m @@ -0,0 +1,120 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ + +#define interstitial [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"interstitial"] +#define player [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"player"] + +#import "OpenInNativeBrowser.h" +#import +#import "ANInterstitialAd.h" + +@interface OpenInNativeBrowser() +@end + +@implementation OpenInNativeBrowser + +static BOOL isDelegateFired; + +static ANInterstitialAd *interstitialAdView; +static XCTestExpectation *expectation; + ++ (void)setUp{ + [super setUp]; + isDelegateFired = NO; +} + ++ (void)tearDown{ + [super tearDown]; + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + [controller dismissViewControllerAnimated:NO completion:nil]; + interstitialAdView.delegate = nil; + interstitialAdView.videoAdDelegate = nil; + interstitialAdView = nil; + expectation = nil; +} + +- (void)test1PrepareForDisplay{ + + [tester waitForViewWithAccessibilityLabel:@"interstitial"]; + [self setupDelegatesForVideo]; + + int breakCounter = 5; + + while (interstitial && breakCounter--) { + [self performClickOnInterstitial]; + [tester waitForTimeInterval:2.0]; + } + + if (!interstitial) { + [tester waitForViewWithAccessibilityLabel:@"player"]; + if (!player) { + NSLog(@"Test: Not able to load the video."); + } + } + + XCTAssertNil(interstitial, @"Failed to load video."); +} + +// TODO: Find a new way to test click-through to the in-app browser +//- (void) test2OpenClickInNativeBrowser{ +// +// XCTAssertNil(interstitial, @"Failed to load video."); +// +// expectation = [self expectationWithDescription:@"Waiting for player to be clicked."]; +// +// [tester tapViewWithAccessibilityLabel:@"player"]; +// +// [self waitForExpectationsWithTimeout:5.0 handler:nil]; +// +// XCTAssertTrue(isDelegateFired, @"Failed."); +// +//} + +-(void) setupDelegatesForVideo{ + + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + if (controller) { + SEL aSelector = NSSelectorFromString(@"interstitialAd"); + interstitialAdView = (ANInterstitialAd *)[controller performSelector:aSelector]; + interstitialAdView.opensInNativeBrowser = YES; + interstitialAdView.delegate = self; + interstitialAdView.videoAdDelegate = self; + } +} + +- (void) performClickOnInterstitial{ + if (interstitial) { + [tester tapViewWithAccessibilityLabel:@"interstitial"]; + } +} + +- (void)adWillLeaveApplication:(id)ad{ + NSLog(@"Test: ad will leave application"); + isDelegateFired = YES; + [expectation fulfill]; +} + +- (void)adDidReceiveAd:(id)ad{ + NSLog(@"Test: ad receive ad"); +} + +- (void)ad:(id)ad requestFailedWithError:(NSError *)error{ + NSLog(@"Test: request failed with error."); +} + + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/CloseVideoTest.h b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/CloseVideoTest.h new file mode 100644 index 000000000..e73c86bb0 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/CloseVideoTest.h @@ -0,0 +1,22 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ + +#import + +@interface CloseVideoTest : KIFTestCase + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/CloseVideoTest.m b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/CloseVideoTest.m new file mode 100644 index 000000000..37d8cae0e --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/CloseVideoTest.m @@ -0,0 +1,125 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ + +#define interstitial [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"interstitial"] +#define player [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"player"] + +#import "CloseVideoTest.h" +#import +#import "ANInterstitialAd.h" + +@interface CloseVideoTest() + +@end + +@implementation CloseVideoTest + +static BOOL isCloseButtonClicked; +static ANInterstitialAd *interstitialAdView; +static XCTestExpectation *expectation; + ++ (void)setUp{ + [super setUp]; + isCloseButtonClicked = NO; +} + ++ (void)tearDown{ + [super tearDown]; + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + [controller dismissViewControllerAnimated:NO completion:nil]; + interstitialAdView.delegate = nil; + interstitialAdView.videoAdDelegate = nil; + interstitialAdView = nil; + expectation = nil; +} + +- (void)test1PrepareForDisplay{ + [tester waitForViewWithAccessibilityLabel:@"interstitial"]; + [self setupDelegatesForVideo]; + + int breakCounter = 5; + + while (interstitial && breakCounter--) { + [self performClickOnInterstitial]; + [tester waitForTimeInterval:2.0]; + } + + if (!interstitial) { + [tester waitForViewWithAccessibilityLabel:@"player"]; + if (!player) { + NSLog(@"Test: Not able to load the video."); + } + } + + XCTAssertNil(interstitial, @"Failed to load video"); +} + +- (void) test2ClickOnClose{ + + XCTAssertNil(interstitial, @"Failed to load video"); + + expectation = [self expectationWithDescription:@"Waiting for Close button to be clicked."]; + + [tester waitForViewWithAccessibilityLabel:@"close button"]; + [tester tapViewWithAccessibilityLabel:@"close button"]; + + [self waitForExpectationsWithTimeout:5.0 handler:nil]; + + XCTAssertTrue(isCloseButtonClicked, @"Failed."); + +} + +-(void) setupDelegatesForVideo{ + + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + if (controller) { + SEL aSelector = NSSelectorFromString(@"interstitialAd"); + interstitialAdView = (ANInterstitialAd *)[controller performSelector:aSelector]; + interstitialAdView.delegate = self; + interstitialAdView.videoAdDelegate = self; + } +} + +- (void) performClickOnInterstitial{ + if (interstitial) { + [tester tapViewWithAccessibilityLabel:@"interstitial"]; + } +} + +- (void)adSkippedVideo:(id)ad{ + NSLog(@"Test: Ad Skipped Video."); +} + +- (void)adWillClose:(id)ad{ + NSLog(@"Test: Ad will close now."); +} + +- (void)adDidClose:(id)ad{ + NSLog(@"Test: Ad Did close now."); + isCloseButtonClicked = YES; + [expectation fulfill]; +} + +- (void)adDidReceiveAd:(id)ad{ + NSLog(@"Test: ad receive ad"); +} + +- (void)ad:(id)ad requestFailedWithError:(NSError *)error{ + NSLog(@"Test: request failed with error."); +} + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/PlayerClickTest.h b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/PlayerClickTest.h new file mode 100644 index 000000000..e72a0e2b7 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/PlayerClickTest.h @@ -0,0 +1,22 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ + +#import + +@interface PlayerClickTest : KIFTestCase + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/PlayerClickTest.m b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/PlayerClickTest.m new file mode 100644 index 000000000..0a2d6bae4 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/PlayerClickTest.m @@ -0,0 +1,121 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ + +#define interstitial [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"interstitial"] +#define player [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"player"] + +#import "PlayerClickTest.h" +#import +#import "ANInterstitialAd.h" + +@interface PlayerClickTest() +@end + +@implementation PlayerClickTest + +static BOOL isPlayerClicked; + +static ANInterstitialAd *interstitialAdView; +static XCTestExpectation *expectation; + ++ (void)setUp{ + [super setUp]; + isPlayerClicked = NO; +} + ++ (void)tearDown{ + [super tearDown]; + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + [controller dismissViewControllerAnimated:NO completion:nil]; + + interstitialAdView.delegate = nil; + interstitialAdView.videoAdDelegate = nil; + interstitialAdView = nil; + expectation = nil; +} + +- (void)test1PrepareForDisplay{ + [tester waitForViewWithAccessibilityLabel:@"interstitial"]; + [self setupDelegatesForVideo]; + + int breakCounter = 5; + + while (interstitial && breakCounter--) { + [self performClickOnInterstitial]; + [tester waitForTimeInterval:2.0]; + } + + if (!interstitial) { + [tester waitForViewWithAccessibilityLabel:@"player"]; + if (!player) { + NSLog(@"Test: Not able to load the video."); + } + } + + XCTAssertNil(interstitial, @"Failed to load video."); +} + +- (void) test2ClickOnPlayer{ + + XCTAssertNil(interstitial, @"Failed to load video."); + + expectation = [self expectationWithDescription:@"Waiting for player to be clicked."]; + + [tester tapViewWithAccessibilityLabel:@"player"]; + + [self waitForExpectationsWithTimeout:5.0 handler:nil]; + + XCTAssertTrue(isPlayerClicked, @"Failed to perform click on video."); + +} + +-(void) setupDelegatesForVideo{ + + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + if (controller) { + SEL aSelector = NSSelectorFromString(@"interstitialAd"); + interstitialAdView = (ANInterstitialAd *)[controller performSelector:aSelector]; + interstitialAdView.delegate = self; + interstitialAdView.videoAdDelegate = self; + } +} + +- (void) performClickOnInterstitial{ + if (interstitial) { + [tester tapViewWithAccessibilityLabel:@"interstitial"]; + } +} + +-(void)adPausedVideo:(id)ad{ + NSLog(@"Test: Ad was paused."); +} + +- (void)adWasClicked:(id)ad{ + NSLog(@"Test: Ad was clicked."); + isPlayerClicked = YES; + [expectation fulfill]; +} + +- (void)adDidReceiveAd:(id)ad{ + NSLog(@"Test: ad receive ad"); +} + +- (void)ad:(id)ad requestFailedWithError:(NSError *)error{ + NSLog(@"Test: request failed with error."); +} + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/VolumeClickTest.h b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/VolumeClickTest.h new file mode 100644 index 000000000..fc8876c28 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/VolumeClickTest.h @@ -0,0 +1,22 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ + +#import + +@interface VolumeClickTest : KIFTestCase + +@end diff --git a/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/VolumeClickTest.m b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/VolumeClickTest.m new file mode 100644 index 000000000..1900cd068 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/InterstitialUnifiedDemandTests/VideoClicks/VolumeClickTest.m @@ -0,0 +1,140 @@ +/* Copyright 2015 APPNEXUS INC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + + See the License for the specific language governing permissions and + limitations under the License. + + */ + +#define interstitial [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"interstitial"] +#define player [[[UIApplication sharedApplication] keyWindow] accessibilityElementWithLabel:@"player"] + +#import "VolumeClickTest.h" +#import +#import "ANInterstitialAd.h" + +@interface VolumeClickTest() +@end + +@implementation VolumeClickTest + +static BOOL isVolumeButtonClicked; + +static ANInterstitialAd *interstitialAdView; +static XCTestExpectation *expectation; + ++ (void)setUp{ + [super setUp]; + isVolumeButtonClicked = NO; +} + ++ (void)tearDown{ + [super tearDown]; + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + [controller dismissViewControllerAnimated:NO completion:nil]; + interstitialAdView.delegate = nil; + interstitialAdView.videoAdDelegate = nil; + interstitialAdView = nil; +} + +- (void)tearDown{ + [super tearDown]; + isVolumeButtonClicked = NO; + expectation = nil; +} + +- (void)test1PrepareForVolumeTesting{ + [tester waitForViewWithAccessibilityLabel:@"interstitial"]; + [self setupDelegatesForVideo]; + + int breakCounter = 5; + + while (interstitial && breakCounter--) { + [self performClickOnInterstitial]; + [tester waitForTimeInterval:3.0]; + } + + + if (!interstitial) { + [tester waitForViewWithAccessibilityLabel:@"player"]; + if (!player) { + NSLog(@"Test: Not able to load the video."); + } + } + + XCTAssertNil(interstitial, @"Failed to load video."); +} + +- (void) test2UnmuteVolume{ + + XCTAssertNil(interstitial, @"Failed to load video."); + + expectation = [self expectationWithDescription:@"Waiting to unmute volume."]; + + [tester waitForViewWithAccessibilityLabel:@"player"]; + [self tapOnVolumeButton]; + + [self waitForExpectationsWithTimeout:5.0 handler:nil]; + + XCTAssertTrue(isVolumeButtonClicked, @"failed to unmute volume."); +} + +- (void) tapOnVolumeButton{ + [tester tapViewWithAccessibilityLabel:@"volume button"]; +} + +- (void) test3MuteVolume{ + + XCTAssertNil(interstitial, @"Failed to load video."); + + expectation = [self expectationWithDescription:@"Waiting to mute volume."]; + + [self tapOnVolumeButton]; + + [self waitForExpectationsWithTimeout:5.0 handler:nil]; + + XCTAssertTrue(isVolumeButtonClicked, @"failed to mute volume."); + +} + +-(void) setupDelegatesForVideo{ + + UIViewController *controller = [[[UIApplication sharedApplication] keyWindow] rootViewController]; + if (controller) { + SEL aSelector = NSSelectorFromString(@"interstitialAd"); + interstitialAdView = (ANInterstitialAd *)[controller performSelector:aSelector]; + interstitialAdView.delegate = self; + interstitialAdView.videoAdDelegate = self; + } +} + +- (void) performClickOnInterstitial{ + if (interstitial) { + [tester tapViewWithAccessibilityLabel:@"interstitial"]; + } +} + +- (void)adMuted:(BOOL)isMuted withAd:(id)ad{ + NSLog(@"Test: Ad was %@", isMuted?@"Muted":@"Unmuted"); + isVolumeButtonClicked = YES; + [expectation fulfill]; +} + +- (void)adDidReceiveAd:(id)ad{ + NSLog(@"Test: ad receive ad"); +} + +- (void)ad:(id)ad requestFailedWithError:(NSError *)error{ + NSLog(@"Test: request failed with error."); +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/.gitignore b/examples/InterstitialUnifiedDemand/KIF-master/.gitignore new file mode 100755 index 000000000..238abff20 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/.gitignore @@ -0,0 +1,25 @@ +#Ignore the Mac OS X .DS_Store files +.DS_Store + +#Ignore user-specific settings +*.mode1v3 +*.mode2v3 +*.pbxuser +*.perspectivev3 +xcuserdata +project.xcworkspace + +#Ignore textmate build errors +*.tm_build_errors + +#Ignore temp nibs and swap files +*.swp +*~.nib + +#Ignore the build, since we don't want archived builds +build + +.gitattributes + +*.orig +DerivedData/* diff --git a/examples/InterstitialUnifiedDemand/KIF-master/.travis.yml b/examples/InterstitialUnifiedDemand/KIF-master/.travis.yml new file mode 100755 index 000000000..ab1b11ca0 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/.travis.yml @@ -0,0 +1,16 @@ +language: objective-c +osx_image: xcode7 +env: + matrix: + - 'DESTINATION="platform=iOS Simulator,name=iPhone 6,OS=8.4"' + - 'DESTINATION="platform=iOS Simulator,name=iPhone 6,OS=9.0"' + +before_install: + - xcrun simctl list + - brew update || brew update +install: + - brew install coreutils + - gem install xcpretty --no-rdoc --no-ri --no-document --quiet +script: + - open -b com.apple.iphonesimulator # Workaround https://github.com/travis-ci/travis-ci/issues/3040 + - gstdbuf -o 0 xcodebuild test -scheme KIF -destination "${DESTINATION}" | xcpretty -c && exit ${PIPESTATUS[0]} diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/CGGeometry-KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/CGGeometry-KIFAdditions.h new file mode 100755 index 000000000..a1e94fb0c --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/CGGeometry-KIFAdditions.h @@ -0,0 +1,18 @@ +// +// CGGeometry-KIFAdditions.h +// KIF +// +// Created by Eric Firestone on 5/22/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +CG_INLINE CGPoint CGPointCenteredInRect(CGRect bounds) { + return CGPointMake(bounds.origin.x + bounds.size.width * 0.5f, bounds.origin.y + bounds.size.height * 0.5f); +} + +CG_INLINE CGPoint CGPointMidPoint(CGPoint point1, CGPoint point2) { + return CGPointMake((point1.x + point2.x) / 2.0f, (point1.y + point2.y) / 2.0f); +} diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/CGGeometry-KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/CGGeometry-KIFAdditions.m new file mode 100755 index 000000000..bb4062b1e --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/CGGeometry-KIFAdditions.m @@ -0,0 +1,11 @@ +// +// CGGeometry-KIFAdditions.m +// KIF +// +// Created by Eric Firestone on 5/22/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "CGGeometry-KIFAdditions.h" + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/LoadableCategory.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/LoadableCategory.h new file mode 100755 index 000000000..92259bb37 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/LoadableCategory.h @@ -0,0 +1,18 @@ +// +// LoadableCategory.h +// KIF +// +// Created by Karl Stenerud on 7/16/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +/** Make all categories in the current file loadable without using -load-all. + * + * Normally, compilers will skip linking files that contain only categories. + * Adding a call to this macro adds a dummy class, which causes the linker + * to add the file. + * + * @param UNIQUE_NAME A globally unique name. + */ +#define MAKE_CATEGORIES_LOADABLE(UNIQUE_NAME) @interface FORCELOAD_##UNIQUE_NAME : NSObject @end @implementation FORCELOAD_##UNIQUE_NAME @end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSBundle-KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSBundle-KIFAdditions.h new file mode 100755 index 000000000..60cbe68b6 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSBundle-KIFAdditions.h @@ -0,0 +1,15 @@ +// +// NSBundle+KIFAdditions.h +// KIF +// +// Created by Brian Nickel on 7/27/13. +// +// + +#import + +@interface NSBundle (KIFAdditions) + ++ (NSBundle *)KIFTestBundle; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSBundle-KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSBundle-KIFAdditions.m new file mode 100755 index 000000000..8b34f6968 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSBundle-KIFAdditions.m @@ -0,0 +1,27 @@ +// +// NSBundle+KIFAdditions.m +// KIF +// +// Created by Brian Nickel on 7/27/13. +// +// + +#import "NSBundle-KIFAdditions.h" +#import "KIFTestCase.h" +#import "LoadableCategory.h" + +MAKE_CATEGORIES_LOADABLE(NSBundle_KIFAdditions) + +@implementation NSBundle (KIFAdditions) + ++ (NSBundle *)KIFTestBundle +{ + static NSBundle *bundle; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + bundle = [self bundleForClass:[KIFTestCase class]]; + }); + return bundle; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSError-KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSError-KIFAdditions.h new file mode 100755 index 000000000..923256091 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSError-KIFAdditions.h @@ -0,0 +1,16 @@ +// +// NSError+KIFAdditions.h +// KIF +// +// Created by Brian Nickel on 7/27/13. +// +// + +#import + +@interface NSError (KIFAdditions) + ++ (instancetype)KIFErrorWithUnderlyingError:(NSError *)underlyingError format:(NSString *)format, ... NS_FORMAT_FUNCTION(2,3); ++ (instancetype)KIFErrorWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2); + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSError-KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSError-KIFAdditions.m new file mode 100755 index 000000000..226309fd0 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSError-KIFAdditions.m @@ -0,0 +1,39 @@ +// +// NSError+KIFAdditions.m +// KIF +// +// Created by Brian Nickel on 7/27/13. +// +// + +#import "NSError-KIFAdditions.h" +#import "LoadableCategory.h" +#import "KIFTestActor.h" + +MAKE_CATEGORIES_LOADABLE(NSError_KIFAdditions) + +@implementation NSError (KIFAdditions) + ++ (instancetype)KIFErrorWithFormat:(NSString *)format, ... +{ + va_list args; + va_start(args, format); + NSString *description = [[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + return [self errorWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:@{NSLocalizedDescriptionKey: description}]; +} + ++ (instancetype)KIFErrorWithUnderlyingError:(NSError *)underlyingError format:(NSString *)format, ... +{ + va_list args; + va_start(args, format); + NSString *description = [[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + NSDictionary *userInfo = [[NSDictionary alloc] initWithObjectsAndKeys:description, NSLocalizedDescriptionKey, underlyingError, NSUnderlyingErrorKey, nil]; + + return [self errorWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:userInfo]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSException-KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSException-KIFAdditions.h new file mode 100755 index 000000000..487fc0b59 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSException-KIFAdditions.h @@ -0,0 +1,15 @@ +// +// NSException-KIFAdditions.h +// KIF +// +// Created by Tony DiPasquale on 12/20/13. +// +// + +#import + +@interface NSException (KIFAdditions) + ++ (NSException *)failureInFile:(NSString *)file atLine:(NSInteger)line withDescription:(NSString *)formatString, ...; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSException-KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSException-KIFAdditions.m new file mode 100755 index 000000000..55bcc2167 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSException-KIFAdditions.m @@ -0,0 +1,28 @@ +// +// NSException-KIFAdditions.m +// KIF +// +// Created by Tony DiPasquale on 12/20/13. +// +// + +#import "NSException-KIFAdditions.h" + +@implementation NSException (KIFAdditions) + ++ (NSException *)failureInFile:(NSString *)file atLine:(NSInteger)line withDescription:(NSString *)formatString, ... +{ + va_list argumentList; + va_start(argumentList, formatString); + + NSString *reason = [[NSString alloc] initWithFormat:formatString arguments:argumentList]; + + va_end(argumentList); + + return [NSException exceptionWithName:@"KIFFailureException" + reason: reason + userInfo:@{@"FilenameKey": file, + @"LineNumberKey": @(line)}]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSFileManager-KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSFileManager-KIFAdditions.h new file mode 100755 index 000000000..5875d54a4 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSFileManager-KIFAdditions.h @@ -0,0 +1,18 @@ +// +// NSFileManager-KIFAdditions.h +// KIF +// +// Created by Michael Thole on 6/1/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + + +@interface NSFileManager (KIFAdditions) + +- (NSString *)createUserDirectory:(NSSearchPathDirectory)searchPath; +- (BOOL)recursivelyCreateDirectory:(NSString *)path; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSFileManager-KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSFileManager-KIFAdditions.m new file mode 100755 index 000000000..b41f4a543 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/NSFileManager-KIFAdditions.m @@ -0,0 +1,67 @@ +// +// NSFileManager-KIFAdditions.m +// KIF +// +// Created by Michael Thole on 6/1/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "NSFileManager-KIFAdditions.h" +#import "LoadableCategory.h" + + +MAKE_CATEGORIES_LOADABLE(NSFileManager_KIFAdditions) + + +@implementation NSFileManager (KIFAdditions) + +#pragma mark Public Methods + +- (NSString *)createUserDirectory:(NSSearchPathDirectory)searchPath; +{ + NSArray *paths = NSSearchPathForDirectoriesInDomains(searchPath, NSUserDomainMask, YES); + if (!paths.count) { + return nil; + } + + NSString *rootDirectory = paths[0]; + + BOOL isDir; + BOOL created = NO; + if ([self fileExistsAtPath:rootDirectory isDirectory:&isDir] && isDir) { + created = YES; + } else { + created = [self recursivelyCreateDirectory:rootDirectory]; + } + + return created ? rootDirectory : nil; +} + +- (BOOL)recursivelyCreateDirectory:(NSString *)path; +{ + BOOL isDir = NO; + BOOL isParentADir = NO; + NSString *parentDir = nil; + + if (![self fileExistsAtPath:path isDirectory:&isDir]) { + // if file doesn't exist, first create parent + parentDir = [path stringByDeletingLastPathComponent]; + + if (!parentDir.length || [parentDir isEqualToString:@"/"]) { + isParentADir = YES; + } else { + isParentADir = [self recursivelyCreateDirectory:parentDir]; + } + + if (isParentADir) { + isDir = [self createDirectoryAtPath:path withIntermediateDirectories:NO attributes:nil error:nil]; + } else { + return NO; + } + } + + return isDir; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIAccessibilityElement-KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIAccessibilityElement-KIFAdditions.h new file mode 100755 index 000000000..d8aee6c3a --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIAccessibilityElement-KIFAdditions.h @@ -0,0 +1,69 @@ +// +// UIAccessibilityElement-KIFAdditions.h +// KIF +// +// Created by Eric Firestone on 5/23/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + + +@interface UIAccessibilityElement (KIFAdditions) + +/*! + @abstract Finds the first view that the accessibility element is part of. + @discussion There is not always a one-to-one mapping between views and accessibility elements. Accessibility elements may not even map to the view you will expect. For instance, table view cell accessibility elements return the @c UITableView and keyboard keys map to the keyboard as a whole. + + @param element The accessibility element. + @return The first matching @c UIView as determined by the accessibility API. + */ ++ (UIView *)viewContainingAccessibilityElement:(UIAccessibilityElement *)element; + +/*! + @abstract Finds an accessibility element and view with a matching label, value, and traits, optionally passing a tappability test. + @discussion This method combines @c +accessibilityElementWithLabel:value:traits:error: and @c +viewContainingAccessibilityElement:tappable:error: for convenience. + @param foundElement The found accessibility element or @c nil if the method returns @c NO. Can be @c NULL. + @param foundView The first matching view for @c foundElement as determined by the accessibility API or @c nil if the view is hidden or fails the tappability test. Can be @c NULL. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + @param error A reference to an error object to be populated when no matching element or view is found. Can be @c NULL. + @result @c YES if the element and view were found. Otherwise @c NO. + */ ++ (BOOL)accessibilityElement:(out UIAccessibilityElement **)foundElement view:(out UIView **)foundView withLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits tappable:(BOOL)mustBeTappable error:(out NSError **)error; + +/*! + @abstract Finds an accessibility element with a matching label, value, and traits. + @discussion This functionality is identical to -[UIApplication accessibilityElementWithLabel:accessibilityValue:traits:] except that it detailed error messaging in the case where the element cannot be found. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + @param error A reference to an error object to be populated when no element is found. Can be @c NULL. + @return The found accessibility element. If @c nil see the @c error for a detailed reason. + */ ++ (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits error:(out NSError **)error; + +/*! + @abstract Finds an accessibility element and view where the element passes the predicate, optionally passing a tappability test. + @param foundElement The found accessibility element or @c nil if the method returns @c NO. Can be @c NULL. + @param foundView The first matching view for @c foundElement as determined by the accessibility API or @c nil if the view is hidden or fails the tappability test. Can be @c NULL. + @param predicate The predicate to test the accessibility element on. + @param error A reference to an error object to be populated when no matching element or view is found. Can be @c NULL. + @result @c YES if the element and view were found. Otherwise @c NO. + */ ++ (BOOL)accessibilityElement:(out UIAccessibilityElement **)foundElement view:(out UIView **)foundView withElementMatchingPredicate:(NSPredicate *)predicate tappable:(BOOL)mustBeTappable error:(out NSError **)error; + +/*! + @abstract Finds and attempts to make visible a view for a given accessibility element. + @discussion If the element is found, off screen, and is inside a scroll view, this method will attempt to programmatically scroll the view onto the screen before performing any logic as to if the view is tappable. + + @param element The accessibility element. + @param mustBeTappable If @c YES, a tappability test will be performed. + @param error A reference to an error object to be populated when no element is found. Can be @c NULL. + @return The first matching view as determined by the accessibility API or nil if the view is hidden or fails the tappability test. + */ ++ (UIView *)viewContainingAccessibilityElement:(UIAccessibilityElement *)element tappable:(BOOL)mustBeTappable error:(NSError **)error; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIAccessibilityElement-KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIAccessibilityElement-KIFAdditions.m new file mode 100755 index 000000000..d0c877414 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIAccessibilityElement-KIFAdditions.m @@ -0,0 +1,177 @@ +// +// UIAccessibilityElement-KIFAdditions.m +// KIF +// +// Created by Eric Firestone on 5/23/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "NSError-KIFAdditions.h" +#import "UIAccessibilityElement-KIFAdditions.h" +#import "UIApplication-KIFAdditions.h" +#import "UIScrollView-KIFAdditions.h" +#import "UIView-KIFAdditions.h" +#import "LoadableCategory.h" +#import "KIFTestActor.h" + +MAKE_CATEGORIES_LOADABLE(UIAccessibilityElement_KIFAdditions) + + +@implementation UIAccessibilityElement (KIFAdditions) + ++ (UIView *)viewContainingAccessibilityElement:(UIAccessibilityElement *)element; +{ + while (element && ![element isKindOfClass:[UIView class]]) { + // Sometimes accessibilityContainer will return a view that's too far up the view hierarchy + // UIAccessibilityElement instances will sometimes respond to view, so try to use that and then fall back to accessibilityContainer + id view = [element respondsToSelector:@selector(view)] ? [(id)element view] : nil; + + if (view) { + element = view; + } else { + element = [element accessibilityContainer]; + } + } + + return (UIView *)element; +} + ++ (BOOL)accessibilityElement:(out UIAccessibilityElement **)foundElement view:(out UIView **)foundView withLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits tappable:(BOOL)mustBeTappable error:(out NSError **)error; +{ + UIAccessibilityElement *element = [self accessibilityElementWithLabel:label value:value traits:traits error:error]; + if (!element) { + return NO; + } + + UIView *view = [self viewContainingAccessibilityElement:element tappable:mustBeTappable error:error]; + if (!view) { + return NO; + } + + if (foundElement) { *foundElement = element; } + if (foundView) { *foundView = view; } + return YES; +} + ++ (BOOL)accessibilityElement:(out UIAccessibilityElement **)foundElement view:(out UIView **)foundView withElementMatchingPredicate:(NSPredicate *)predicate tappable:(BOOL)mustBeTappable error:(out NSError **)error; +{ + UIAccessibilityElement *element = [[UIApplication sharedApplication] accessibilityElementMatchingBlock:^BOOL(UIAccessibilityElement *element) { + return [predicate evaluateWithObject:element]; + }]; + + if (!element) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Could not find view matching: %@", predicate]; + } + return NO; + } + + UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element tappable:mustBeTappable error:error]; + if (!view) { + return NO; + } + + if (foundElement) { *foundElement = element; } + if (foundView) { *foundView = view; } + return YES; +} + ++ (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits error:(out NSError **)error; +{ + UIAccessibilityElement *element = [[UIApplication sharedApplication] accessibilityElementWithLabel:label accessibilityValue:value traits:traits]; + if (element || !error) { + return element; + } + + element = [[UIApplication sharedApplication] accessibilityElementWithLabel:label accessibilityValue:nil traits:traits]; + // For purposes of a better error message, see if we can find the view, just not a view with the specified value. + if (value && element) { + *error = [NSError KIFErrorWithFormat:@"Found an accessibility element with the label \"%@\", but with the value \"%@\", not \"%@\"", label, element.accessibilityValue, value]; + return nil; + } + + // Check the traits, too. + element = [[UIApplication sharedApplication] accessibilityElementWithLabel:label accessibilityValue:nil traits:UIAccessibilityTraitNone]; + if (traits != UIAccessibilityTraitNone && element) { + *error = [NSError KIFErrorWithFormat:@"Found an accessibility element with the label \"%@\", but not with the traits \"%llu\"", label, traits]; + return nil; + } + + *error = [NSError KIFErrorWithFormat:@"Failed to find accessibility element with the label \"%@\"", label]; + return nil; +} + ++ (UIView *)viewContainingAccessibilityElement:(UIAccessibilityElement *)element tappable:(BOOL)mustBeTappable error:(NSError **)error; +{ + // Small safety mechanism. If someone calls this method after a failing call to accessibilityElementWithLabel:..., we don't want to wipe out the error message. + if (!element && error && *error) { + return nil; + } + + // Make sure the element is visible + UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; + if (!view) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Cannot find view containing accessibility element with the label \"%@\"", element.accessibilityLabel]; + } + return nil; + } + + // Scroll the view (and superviews) to be visible if necessary + UIView *superview = (UIScrollView *)view; + while (superview) { + // Fix for iOS7 table view cells containing scroll views + if ([superview.superview isKindOfClass:[UITableViewCell class]]) { + break; + } + + if ([superview isKindOfClass:[UIScrollView class]]) { + UIScrollView *scrollView = (UIScrollView *)superview; + + if (((UIAccessibilityElement *)view == element) && ![view isKindOfClass:[UITableViewCell class]]) { + [scrollView scrollViewToVisible:view animated:YES]; + } else { + CGRect elementFrame = [view.window convertRect:element.accessibilityFrame toView:scrollView]; + CGRect visibleRect = CGRectMake(scrollView.contentOffset.x, scrollView.contentOffset.y, CGRectGetWidth(scrollView.bounds), CGRectGetHeight(scrollView.bounds)); + + // Only call scrollRectToVisible if the element isn't already visible + // iOS 8 will sometimes incorrectly scroll table views so the element scrolls out of view + if (!CGRectContainsRect(visibleRect, elementFrame)) { + [scrollView scrollRectToVisible:elementFrame animated:YES]; + } + } + + // Give the scroll view a small amount of time to perform the scroll. + CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.3, false); + } + + superview = superview.superview; + } + + if ([[UIApplication sharedApplication] isIgnoringInteractionEvents]) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Application is ignoring interaction events"]; + } + return nil; + } + + // If we don't require tappability, at least make sure it's not hidden + if ([view isHidden]) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Accessibility element with label \"%@\" is hidden.", element.accessibilityLabel]; + } + return nil; + } + + if (mustBeTappable && !view.isProbablyTappable) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Accessibility element with label \"%@\" is not tappable. It may be blocked by other views.", element.accessibilityLabel]; + } + return nil; + } + + return view; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIApplication-KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIApplication-KIFAdditions.h new file mode 100755 index 000000000..bc44aa28e --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIApplication-KIFAdditions.h @@ -0,0 +1,111 @@ +// +// UIApplication-KIFAdditions.h +// KIF +// +// Created by Eric Firestone on 5/20/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +#define UIApplicationCurrentRunMode ([[UIApplication sharedApplication] currentRunLoopMode]) + +/*! + @abstract When mocking @c -openURL:, this notification is posted. + */ +UIKIT_EXTERN NSString *const UIApplicationDidMockOpenURLNotification; + +/*! + @abstract When mocking @c -canOpenURL:, this notification is posted. + */ +UIKIT_EXTERN NSString *const UIApplicationDidMockCanOpenURLNotification; + +/*! + @abstract The key for the opened URL in the @c UIApplicationDidMockOpenURLNotification notification. + */ +UIKIT_EXTERN NSString *const UIApplicationOpenedURLKey; + +@interface UIApplication (KIFAdditions) + +/*! + @abstract Finds an accessibility element with a matching label, value, and traits across all windows in the application starting at the frontmost window. + @param label The accessibility label of the element to search for. + @param value The accessibility value of the element to search for. If @c nil, all values will be accepted. + @param traits The accessibility traits of the element to search for. Elements that do not include at least these traits are ignored. + @return The found accessibility element or @c nil if the element could not be found. + */ +- (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label accessibilityValue:(NSString *)value traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Finds an accessibility element where @c matchBlock returns @c YES, across all windows in the application starting at the fronmost window. + @discussion This method should be used if @c accessibilityElementWithLabel:accessibilityValue:traits: does not meet your requirements. For example, if you are searching for an element that begins with a pattern or if of a certain view type. + @param matchBlock A block to be performed on each element to see if it passes. + */ +- (UIAccessibilityElement *)accessibilityElementMatchingBlock:(BOOL(^)(UIAccessibilityElement *))matchBlock; + +/*! + @returns The window containing the keyboard or @c nil if the keyboard is not visible. + */ +- (UIWindow *)keyboardWindow; + +/*! + @returns The topmost window containing a @c UIDatePicker. + */ +- (UIWindow *)datePickerWindow; + +/*! + @returns The topmost window containing a @c UIPickerView. + */ +- (UIWindow *)pickerViewWindow; + +/*! + @returns The topmost window containing a @c UIDimmingView. + */ +- (UIWindow *)dimmingViewWindow; + +/*! + @returns All windows in the application, including the key window even if it does not appear in @c -windows. + */ +- (NSArray *)windowsWithKeyWindow; + +/*! + @abstract Writes a screenshot to disk. + @discussion This method only works if the @c KIF_SCREENSHOTS environment variable is set. + @param lineNumber The line number in the code at which the screenshot was taken. + @param filename The name of the file in which the screenshot was taken. + @param description An optional description of the scene being captured. + @param error If the method returns @c YES, this optional parameter provides additional information as to why it failed. + @returns @c YES if the screenshot was written to disk, otherwise @c NO. + */ +- (BOOL)writeScreenshotForLine:(NSUInteger)lineNumber inFile:(NSString *)filename description:(NSString *)description error:(NSError **)error; + +/*! + @returns The current run loop mode. + */ +- (CFStringRef)currentRunLoopMode; + +/*! + @abstract Swizzles the run loop modes so KIF can better switch between them. + */ ++ (void)swizzleRunLoop; + +/*! + @abstract Starts mocking requests to @c -openURL:, announcing all requests with a notification. + @discussion After calling this method, whenever @c -openURL: is called a notification named @c UIApplicationDidMockOpenURLNotification with the URL in the @c UIApplicationOpenedURL will be raised and the normal behavior will be cancelled. + @param returnValue The value to return when @c -openURL: is called. + */ ++ (void)startMockingOpenURLWithReturnValue:(BOOL)returnValue; + +/*! + @abstract Stops the application from mocking requests to @c -openURL:. + */ ++ (void)stopMockingOpenURL; + +@end + +@interface UIApplication (Private) +- (UIWindow *)statusBarWindow; +@property(getter=isStatusBarHidden) BOOL statusBarHidden; +@end + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIApplication-KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIApplication-KIFAdditions.m new file mode 100755 index 000000000..bafaee3d1 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIApplication-KIFAdditions.m @@ -0,0 +1,281 @@ +// +// UIApplication-KIFAdditions.m +// KIF +// +// Created by Eric Firestone on 5/20/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "UIApplication-KIFAdditions.h" +#import "LoadableCategory.h" +#import "UIView-KIFAdditions.h" +#import "NSError-KIFAdditions.h" +#import +#import +#import + +MAKE_CATEGORIES_LOADABLE(UIApplication_KIFAdditions) + +static BOOL _KIF_UIApplicationMockOpenURL = NO; +static BOOL _KIF_UIApplicationMockOpenURL_returnValue = NO; + +@interface UIApplication (Undocumented) +- (void)pushRunLoopMode:(id)arg1; +- (void)pushRunLoopMode:(id)arg1 requester:(id)requester; +- (void)popRunLoopMode:(id)arg1; +- (void)popRunLoopMode:(id)arg1 requester:(id)requester; +@end + +NSString *const UIApplicationDidMockOpenURLNotification = @"UIApplicationDidMockOpenURLNotification"; +NSString *const UIApplicationDidMockCanOpenURLNotification = @"UIApplicationDidMockCanOpenURLNotification"; +NSString *const UIApplicationOpenedURLKey = @"UIApplicationOpenedURL"; +static const void *KIFRunLoopModesKey = &KIFRunLoopModesKey; + +@implementation UIApplication (KIFAdditions) + +#pragma mark - Finding elements + +- (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label accessibilityValue:(NSString *)value traits:(UIAccessibilityTraits)traits; +{ + // Go through the array of windows in reverse order to process the frontmost window first. + // When several elements with the same accessibilitylabel are present the one in front will be picked. + for (UIWindow *window in [self.windowsWithKeyWindow reverseObjectEnumerator]) { + UIAccessibilityElement *element = [window accessibilityElementWithLabel:label accessibilityValue:value traits:traits]; + if (element) { + return element; + } + } + + return nil; +} + +- (UIAccessibilityElement *)accessibilityElementMatchingBlock:(BOOL(^)(UIAccessibilityElement *))matchBlock; +{ + for (UIWindow *window in [self.windowsWithKeyWindow reverseObjectEnumerator]) { + UIAccessibilityElement *element = [window accessibilityElementMatchingBlock:matchBlock]; + if (element) { + return element; + } + } + + return nil; +} + +#pragma mark - Interesting windows + +- (UIWindow *)keyboardWindow; +{ + for (UIWindow *window in self.windowsWithKeyWindow) { + if ([NSStringFromClass([window class]) isEqual:@"UITextEffectsWindow"]) { + return window; + } + } + + return nil; +} + +- (UIWindow *)datePickerWindow; +{ + return [self getWindowForSubviewClass:@"UIDatePicker"]; +} + +- (UIWindow *)pickerViewWindow; +{ + return [self getWindowForSubviewClass:@"UIPickerView"]; +} + +- (UIWindow *)dimmingViewWindow; +{ + return [self getWindowForSubviewClass:@"UIDimmingView"]; +} + +- (UIWindow *)getWindowForSubviewClass:(NSString*)className; +{ + for (UIWindow *window in self.windowsWithKeyWindow) { + NSArray *subViews = [window subviewsWithClassNameOrSuperClassNamePrefix:className]; + if (subViews.count > 0) { + return window; + } + } + + return nil; +} + +- (NSArray *)windowsWithKeyWindow +{ + NSMutableArray *windows = self.windows.mutableCopy; + UIWindow *keyWindow = self.keyWindow; + if (![windows containsObject:keyWindow]) { + [windows addObject:keyWindow]; + } + return windows; +} + +#pragma mark - Screenshotting + +- (BOOL)writeScreenshotForLine:(NSUInteger)lineNumber inFile:(NSString *)filename description:(NSString *)description error:(NSError **)error; +{ + NSString *outputPath = [[[NSProcessInfo processInfo] environment] objectForKey:@"KIF_SCREENSHOTS"]; + if (!outputPath) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Screenshot path not defined. Please set KIF_SCREENSHOTS environment variable."]; + } + return NO; + } + + NSArray *windows = [self windowsWithKeyWindow]; + if (windows.count == 0) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Could not take screenshot. No windows were available."]; + } + return NO; + } + + UIGraphicsBeginImageContextWithOptions([[windows objectAtIndex:0] bounds].size, YES, 0); + for (UIWindow *window in windows) { + //avoid https://github.com/kif-framework/KIF/issues/679 + if (window.hidden) { + continue; + } + + if ([window respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) { + [window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES]; + } else { + [window.layer renderInContext:UIGraphicsGetCurrentContext()]; + } + } + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + outputPath = [outputPath stringByExpandingTildeInPath]; + + NSError *directoryCreationError = nil; + if (![[NSFileManager defaultManager] createDirectoryAtPath:outputPath withIntermediateDirectories:YES attributes:nil error:&directoryCreationError]) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Couldn't create directory at path %@ (details: %@)", outputPath, directoryCreationError]; + } + return NO; + } + + NSString *imageName = [NSString stringWithFormat:@"%@, line %lu", [filename lastPathComponent], (unsigned long)lineNumber]; + if (description) { + imageName = [imageName stringByAppendingFormat:@", %@", description]; + } + + outputPath = [outputPath stringByAppendingPathComponent:imageName]; + outputPath = [outputPath stringByAppendingPathExtension:@"png"]; + + if (![UIImagePNGRepresentation(image) writeToFile:outputPath atomically:YES]) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Could not write file at path %@", outputPath]; + } + return NO; + } + + return YES; +} + +#pragma mark - Run loop monitoring + +- (NSMutableArray *)KIF_runLoopModes; +{ + NSMutableArray *modes = objc_getAssociatedObject(self, KIFRunLoopModesKey); + if (!modes) { + modes = [NSMutableArray arrayWithObject:(id)kCFRunLoopDefaultMode]; + objc_setAssociatedObject(self, KIFRunLoopModesKey, modes, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return modes; +} + +- (CFStringRef)currentRunLoopMode; +{ + return (__bridge CFStringRef)[self KIF_runLoopModes].lastObject; +} + +- (void)KIF_pushRunLoopMode:(NSString *)mode; +{ + [[self KIF_runLoopModes] addObject:mode]; + [self KIF_pushRunLoopMode:mode]; +} + +- (void)KIF_pushRunLoopMode:(NSString *)mode requester:(id)requester; +{ + [[self KIF_runLoopModes] addObject:mode]; + [self KIF_pushRunLoopMode:mode requester:requester]; +} + +- (void)KIF_popRunLoopMode:(NSString *)mode; +{ + [[self KIF_runLoopModes] removeLastObject]; + [self KIF_popRunLoopMode:mode]; +} + + +- (void)KIF_popRunLoopMode:(NSString *)mode requester:(id)requester; +{ + [[self KIF_runLoopModes] removeLastObject]; + [self KIF_popRunLoopMode:mode requester:requester]; +} + +- (BOOL)KIF_openURL:(NSURL *)URL; +{ + if (_KIF_UIApplicationMockOpenURL) { + [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidMockOpenURLNotification object:self userInfo:@{UIApplicationOpenedURLKey: URL}]; + return _KIF_UIApplicationMockOpenURL_returnValue; + } else { + return [self KIF_openURL:URL]; + } +} + +- (BOOL)KIF_canOpenURL:(NSURL *)URL; +{ + if (_KIF_UIApplicationMockOpenURL) { + [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidMockCanOpenURLNotification object:self userInfo:@{UIApplicationOpenedURLKey: URL}]; + return _KIF_UIApplicationMockOpenURL_returnValue; + } else { + return [self KIF_canOpenURL:URL]; + } +} + +static inline void Swizzle(Class c, SEL orig, SEL new) +{ + Method origMethod = class_getInstanceMethod(c, orig); + Method newMethod = class_getInstanceMethod(c, new); + if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) + class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)); + else + method_exchangeImplementations(origMethod, newMethod); +} + ++ (void)swizzleRunLoop; +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + Swizzle(self, @selector(pushRunLoopMode:), @selector(KIF_pushRunLoopMode:)); + Swizzle(self, @selector(pushRunLoopMode:requester:), @selector(KIF_pushRunLoopMode:requester:)); + Swizzle(self, @selector(popRunLoopMode:), @selector(KIF_popRunLoopMode:)); + Swizzle(self, @selector(popRunLoopMode:requester:), @selector(KIF_popRunLoopMode:requester:)); + }); +} + +#pragma mark - openURL mocking + ++ (void)startMockingOpenURLWithReturnValue:(BOOL)returnValue; +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + Swizzle(self, @selector(openURL:), @selector(KIF_openURL:)); + Swizzle(self, @selector(canOpenURL:), @selector(KIF_canOpenURL:)); + }); + + _KIF_UIApplicationMockOpenURL = YES; + _KIF_UIApplicationMockOpenURL_returnValue = returnValue; +} + ++ (void)stopMockingOpenURL; +{ + _KIF_UIApplicationMockOpenURL = NO; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIEvent+KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIEvent+KIFAdditions.h new file mode 100755 index 000000000..bbbbc823f --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIEvent+KIFAdditions.h @@ -0,0 +1,19 @@ +// +// UIEvent+KIFAdditions.h +// KIF +// +// Created by Thomas on 3/1/15. +// +// + +#import + +// Exposes methods of UITouchesEvent so that the compiler doesn't complain +@interface UIEvent (KIFAdditionsPrivateHeaders) +- (void)_addTouch:(UITouch *)touch forDelayedDelivery:(BOOL)arg2; +- (void)_clearTouches; +@end + +@interface UIEvent (KIFAdditions) +- (void)kif_setEventWithTouches:(NSArray *)touches; +@end \ No newline at end of file diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIEvent+KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIEvent+KIFAdditions.m new file mode 100755 index 000000000..ec438aefb --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIEvent+KIFAdditions.m @@ -0,0 +1,90 @@ +// +// UIEvent+KIFAdditions.m +// KIF +// +// Created by Thomas on 3/1/15. +// +// + +#import "UIEvent+KIFAdditions.h" +#import "LoadableCategory.h" +#import "IOHIDEvent+KIF.h" + +MAKE_CATEGORIES_LOADABLE(UIEvent_KIFAdditions) + +// +// GSEvent is an undeclared object. We don't need to use it ourselves but some +// Apple APIs (UIScrollView in particular) require the x and y fields to be present. +// +@interface KIFGSEventProxy : NSObject +{ +@public + unsigned int flags; + unsigned int type; + unsigned int ignored1; + float x1; + float y1; + float x2; + float y2; + unsigned int ignored2[10]; + unsigned int ignored3[7]; + float sizeX; + float sizeY; + float x3; + float y3; + unsigned int ignored4[3]; +} +@end + +@implementation KIFGSEventProxy +@end + +typedef struct __GSEvent * GSEventRef; + +@interface UIEvent (KIFAdditionsMorePrivateHeaders) +- (void)_setGSEvent:(GSEventRef)event; +- (void)_setHIDEvent:(IOHIDEventRef)event; +- (void)_setTimestamp:(NSTimeInterval)timestemp; +@end + +@implementation UIEvent (KIFAdditions) + +- (void)kif_setEventWithTouches:(NSArray *)touches +{ + NSOperatingSystemVersion iOS8 = {8, 0, 0}; + if ([NSProcessInfo instancesRespondToSelector:@selector(isOperatingSystemAtLeastVersion:)] + && [[NSProcessInfo new] isOperatingSystemAtLeastVersion:iOS8]) { + [self kif_setIOHIDEventWithTouches:touches]; + } else { + [self kif_setGSEventWithTouches:touches]; + } +} + +- (void)kif_setGSEventWithTouches:(NSArray *)touches +{ + UITouch *touch = touches[0]; + CGPoint location = [touch locationInView:touch.window]; + KIFGSEventProxy *gsEventProxy = [[KIFGSEventProxy alloc] init]; + gsEventProxy->x1 = location.x; + gsEventProxy->y1 = location.y; + gsEventProxy->x2 = location.x; + gsEventProxy->y2 = location.y; + gsEventProxy->x3 = location.x; + gsEventProxy->y3 = location.y; + gsEventProxy->sizeX = 1.0; + gsEventProxy->sizeY = 1.0; + gsEventProxy->flags = ([touch phase] == UITouchPhaseEnded) ? 0x1010180 : 0x3010180; + gsEventProxy->type = 3001; + + [self _setGSEvent:(GSEventRef)gsEventProxy]; + + [self _setTimestamp:(((UITouch*)touches[0]).timestamp)]; +} + +- (void)kif_setIOHIDEventWithTouches:(NSArray *)touches +{ + IOHIDEventRef event = kif_IOHIDEventWithTouches(touches); + [self _setHIDEvent:event]; +} + +@end \ No newline at end of file diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIScrollView-KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIScrollView-KIFAdditions.h new file mode 100755 index 000000000..a97480e02 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIScrollView-KIFAdditions.h @@ -0,0 +1,17 @@ +// +// UIScrollView-KIFAdditions.h +// KIF +// +// Created by Eric Firestone on 5/22/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + + +@interface UIScrollView (KIFAdditions) + +- (void)scrollViewToVisible:(UIView *)view animated:(BOOL)animated; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIScrollView-KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIScrollView-KIFAdditions.m new file mode 100755 index 000000000..a1e224516 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIScrollView-KIFAdditions.m @@ -0,0 +1,44 @@ +// +// UIScrollView-KIFAdditions.m +// KIF +// +// Created by Eric Firestone on 5/22/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "UIScrollView-KIFAdditions.h" +#import "LoadableCategory.h" +#import "UIApplication-KIFAdditions.h" +#import "UIView-KIFAdditions.h" + + +MAKE_CATEGORIES_LOADABLE(UIScrollView_KIFAdditions) + + +@implementation UIScrollView (KIFAdditions) + +- (void)scrollViewToVisible:(UIView *)view animated:(BOOL)animated; +{ + CGRect viewFrame = [self convertRect:view.bounds fromView:view]; + CGPoint contentOffset = self.contentOffset; + + if (CGRectGetMaxX(viewFrame) > self.contentOffset.x + CGRectGetWidth(self.bounds)) { + contentOffset.x = MIN(CGRectGetMaxX(viewFrame) - CGRectGetWidth(self.bounds), CGRectGetMinX(viewFrame)); + } else if (CGRectGetMinX(viewFrame) < self.contentOffset.x) { + contentOffset.x = MAX(CGRectGetMaxX(viewFrame) - CGRectGetWidth(self.bounds), CGRectGetMinX(viewFrame)); + } + + if (CGRectGetMaxY(viewFrame) > self.contentOffset.y + CGRectGetHeight(self.bounds)) { + contentOffset.y = MIN(CGRectGetMaxY(viewFrame) - CGRectGetHeight(self.bounds), CGRectGetMinY(viewFrame)); + } else if (CGRectGetMinY(viewFrame) < self.contentOffset.y) { + contentOffset.y = MAX(CGRectGetMaxY(viewFrame) - CGRectGetHeight(self.bounds), CGRectGetMinY(viewFrame)); + } + + if (!CGPointEqualToPoint(contentOffset, self.contentOffset)) { + [self setContentOffset:contentOffset animated:animated]; + CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.2, false); + } +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UITableView-KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UITableView-KIFAdditions.h new file mode 100755 index 000000000..5dfc98791 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UITableView-KIFAdditions.h @@ -0,0 +1,16 @@ +// +// UITableView-KIFAdditions.h +// KIF +// +// Created by Hilton Campbell on 4/12/14. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +@interface UITableView (KIFAdditions) + +- (BOOL)dragCell:(UITableViewCell *)cell toIndexPath:(NSIndexPath *)indexPath error:(NSError **)error; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UITableView-KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UITableView-KIFAdditions.m new file mode 100755 index 000000000..e3bbab061 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UITableView-KIFAdditions.m @@ -0,0 +1,87 @@ +// +// UITableView-KIFAdditions.m +// KIF +// +// Created by Hilton Campbell on 4/12/14. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "UITableView-KIFAdditions.h" +#import "UIView-KIFAdditions.h" +#import "UIApplication-KIFAdditions.h" +#import "UITouch-KIFAdditions.h" +#import "CGGeometry-KIFAdditions.h" +#import "NSError-KIFAdditions.h" + +@implementation UITableView (KIFAdditions) + +#define DRAG_STEP_DISTANCE 5 + +- (BOOL)dragCell:(UITableViewCell *)cell toIndexPath:(NSIndexPath *)indexPath error:(NSError **)error; +{ + UIView *sourceReorderControl = [[cell subviewsWithClassNameOrSuperClassNamePrefix:@"UITableViewCellReorderControl"] lastObject]; + if (!sourceReorderControl) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Failed to find reorder control for cell"]; + } + return NO; + } + + CGPoint sourcePoint = [self convertPoint:CGPointCenteredInRect(sourceReorderControl.bounds) fromView:sourceReorderControl]; + + // If section < 0, search from the end of the table. + if (indexPath.section < 0) { + indexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:self.numberOfSections + indexPath.section]; + } + + // If row < 0, search from the end of the section. + if (indexPath.row < 0) { + indexPath = [NSIndexPath indexPathForRow:[self numberOfRowsInSection:indexPath.section] + indexPath.row inSection:indexPath.section]; + } + + CGPoint destinationPoint = CGPointMake(sourcePoint.x, CGPointCenteredInRect([self rectForRowAtIndexPath:indexPath]).y); + + // Create the touch (there should only be one touch object for the whole drag) + UITouch *touch = [[UITouch alloc] initAtPoint:sourcePoint inView:self]; + [touch setPhaseAndUpdateTimestamp:UITouchPhaseBegan]; + + UIEvent *eventDown = [self eventWithTouch:touch]; + [[UIApplication sharedApplication] sendEvent:eventDown]; + + // Hold long enough to enter reordering mode + CFRunLoopRunInMode(UIApplicationCurrentRunMode, 0.2, false); + + CGPoint currentLocation = sourcePoint; + while (currentLocation.y < destinationPoint.y - DRAG_STEP_DISTANCE || currentLocation.y > destinationPoint.y + DRAG_STEP_DISTANCE) { + if (currentLocation.y < destinationPoint.y) { + currentLocation.y += DRAG_STEP_DISTANCE; + } else { + currentLocation.y -= DRAG_STEP_DISTANCE; + } + + [touch setLocationInWindow:[self.window convertPoint:currentLocation fromView:self]]; + [touch setPhaseAndUpdateTimestamp:UITouchPhaseMoved]; + + UIEvent *eventDrag = [self eventWithTouch:touch]; + [[UIApplication sharedApplication] sendEvent:eventDrag]; + + CFRunLoopRunInMode(UIApplicationCurrentRunMode, 0.01, false); + } + + // Hold long enough for the animations to catch up + CFRunLoopRunInMode(UIApplicationCurrentRunMode, 0.2, false); + + [touch setPhaseAndUpdateTimestamp:UITouchPhaseEnded]; + + UIEvent *eventUp = [self eventWithTouch:touch]; + [[UIApplication sharedApplication] sendEvent:eventUp]; + + // Dispatching the event doesn't actually update the first responder, so fake it + if (touch.view == self && [self canBecomeFirstResponder]) { + [self becomeFirstResponder]; + } + return YES; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UITouch-KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UITouch-KIFAdditions.h new file mode 100755 index 000000000..ea8dc350c --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UITouch-KIFAdditions.h @@ -0,0 +1,21 @@ +// +// UITouch-KIFAdditions.h +// KIF +// +// Created by Eric Firestone on 5/20/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + + +@interface UITouch (KIFAdditions) + +- (id)initInView:(UIView *)view; +- (id)initAtPoint:(CGPoint)point inView:(UIView *)view; + +- (void)setLocationInWindow:(CGPoint)location; +- (void)setPhaseAndUpdateTimestamp:(UITouchPhase)phase; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UITouch-KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UITouch-KIFAdditions.m new file mode 100755 index 000000000..4b6840059 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UITouch-KIFAdditions.m @@ -0,0 +1,112 @@ +// +// UITouch-KIFAdditions.m +// KIF +// +// Created by Eric Firestone on 5/20/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "UITouch-KIFAdditions.h" +#import "LoadableCategory.h" +#import +#import "IOHIDEvent+KIF.h" + +MAKE_CATEGORIES_LOADABLE(UITouch_KIFAdditions) + +typedef struct { + unsigned int _firstTouchForView:1; + unsigned int _isTap:1; + unsigned int _isDelayed:1; + unsigned int _sentTouchesEnded:1; + unsigned int _abandonForwardingRecord:1; +} UITouchFlags; + +@interface UITouch () + + +- (void)setWindow:(UIWindow *)window; +- (void)setView:(UIView *)view; +- (void)setTapCount:(NSUInteger)tapCount; +- (void)setIsTap:(BOOL)isTap; +- (void)setTimestamp:(NSTimeInterval)timestamp; +- (void)setPhase:(UITouchPhase)touchPhase; +- (void)setGestureView:(UIView *)view; +- (void)_setLocationInWindow:(CGPoint)location resetPrevious:(BOOL)resetPrevious; +- (void)_setIsFirstTouchForView:(BOOL)firstTouchForView; + +- (void)_setHidEvent:(IOHIDEventRef)event; + +@end + +@implementation UITouch (KIFAdditions) + +- (id)initInView:(UIView *)view; +{ + CGRect frame = view.frame; + CGPoint centerPoint = CGPointMake(frame.size.width * 0.5f, frame.size.height * 0.5f); + return [self initAtPoint:centerPoint inView:view]; +} + +- (id)initAtPoint:(CGPoint)point inWindow:(UIWindow *)window; +{ + self = [super init]; + if (self == nil) { + return nil; + } + + // Create a fake tap touch + [self setWindow:window]; // Wipes out some values. Needs to be first. + + [self setTapCount:1]; + [self _setLocationInWindow:point resetPrevious:YES]; + + UIView *hitTestView = [window hitTest:point withEvent:nil]; + + [self setView:hitTestView]; + [self setPhase:UITouchPhaseBegan]; + [self _setIsFirstTouchForView:YES]; + [self setIsTap:YES]; + [self setTimestamp:[[NSProcessInfo processInfo] systemUptime]]; + + if ([self respondsToSelector:@selector(setGestureView:)]) { + [self setGestureView:hitTestView]; + } + + // Starting with iOS 9, internal IOHIDEvent must be set for UITouch object + NSOperatingSystemVersion iOS9 = {9, 0, 0}; + if ([NSProcessInfo instancesRespondToSelector:@selector(isOperatingSystemAtLeastVersion:)] && [[NSProcessInfo new] isOperatingSystemAtLeastVersion:iOS9]) { + [self kif_setHidEvent]; + } + + return self; +} + +- (id)initAtPoint:(CGPoint)point inView:(UIView *)view; +{ + return [self initAtPoint:[view.window convertPoint:point fromView:view] inWindow:view.window]; +} + +// +// setLocationInWindow: +// +// Setter to allow access to the _locationInWindow member. +// +- (void)setLocationInWindow:(CGPoint)location +{ + [self setTimestamp:[[NSProcessInfo processInfo] systemUptime]]; + [self _setLocationInWindow:location resetPrevious:NO]; +} + +- (void)setPhaseAndUpdateTimestamp:(UITouchPhase)phase +{ + [self setTimestamp:[[NSProcessInfo processInfo] systemUptime]]; + [self setPhase:phase]; +} + +- (void)kif_setHidEvent { + IOHIDEventRef event = kif_IOHIDEventWithTouches(@[self]); + [self _setHidEvent:event]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIView-Debugging.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIView-Debugging.h new file mode 100755 index 000000000..cb7cfdf0e --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIView-Debugging.h @@ -0,0 +1,22 @@ +// +// UIView+Debugging.h +// KIF +// +// Created by Graeme Arthur on 02/05/15. +// + +#import +#import + +@interface UIView (Debugging) +/*! + @abstract Prints the view hiererchy, starting from the top window(s), along with accessibility information, which is more related to KIF than the usual information given by the 'description' method. + */ ++(void)printViewHierarchy; + +/*! + @abstract Prints the view hiererchy, starting from this view, along with accessibility information, which is more related to KIF than the usual information given by the 'description' method. + */ +-(void)printViewHierarchy; + +@end \ No newline at end of file diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIView-Debugging.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIView-Debugging.m new file mode 100755 index 000000000..96d860028 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIView-Debugging.m @@ -0,0 +1,207 @@ +// +// UIView+Debugging.m +// KIF +// +// Created by Graeme Arthur on 02/05/15. +// + +#import "UIView-Debugging.h" + +@implementation UIView (Debugging) + ++(void)printViewHierarchy { + NSArray* windows = [UIApplication sharedApplication].windows; + if(windows.count == 1) { + [windows[0] printViewHierarchy]; + } else { + //more than one window, also print some information about each window + for (UIWindow* window in windows) { + printf("Window level %f", window.windowLevel); + if(window.isKeyWindow) printf(" (key window)"); + printf("\n"); + [window printViewHierarchy]; + printf("\n"); + } + } +} + +- (void)printViewHierarchy { + [self printViewHierarchyWithIndentation:0]; +} + +- (void)printViewHierarchyWithIndentation:(int)indent { + [self printIndentation:indent]; + [self printClassName]; + + [self printAccessibilityInfo]; + + if(self.hidden) { + printf(" (invisible)"); + } + + if([self isKindOfClass:[UIImageView class]]) { + [self printImageHighlightedState]; + } + + if([self isKindOfClass:[UIControl class]]) { + [self printControlState]; + } + printf("\n"); + + [self printAccessibilityElementsWithIndentation:indent]; + + for (UIView *subview in self.subviews) { + [subview printViewHierarchyWithIndentation:indent+1]; + } +} + +- (void)printIndentation:(int)indent { + for(int i = 0; i < indent; ++i) { + printf("|\t"); + } +} + +- (void)printClassName { + NSString* name = NSStringFromClass([self class]); + printf("%s", name.UTF8String); +} + +- (void)printAccessibilityInfo { + NSString* label = self.accessibilityLabel; + NSString* identifier = self.accessibilityIdentifier; + if(label != nil) { + printf(", label: %s", label.UTF8String); + } else if(identifier != nil) { + printf(", identifier: %s", identifier.UTF8String); + } +} + +- (void)printImageHighlightedState { + if(((UIImageView*)self).highlighted) { + printf(" (highlighted)"); + } else { + printf(" (not highlighted)"); + } +} + +- (void)printControlState { + UIControl* ctrl = (UIControl*)self; + ctrl.enabled ? printf(" (enabled)") : printf(" (not enabled)"); + ctrl.selected ? printf(" (selected)") : printf(" (not selected)"); + ctrl.highlighted ? printf(" (highlighted)") : printf(" (not highlighted)"); +} + +- (void)printAccessibilityElementsWithIndentation:(int)indent { + NSInteger numOfAccElements = self.accessibilityElementCount; + if(numOfAccElements != NSNotFound) { + for (NSInteger i = 0; i < numOfAccElements; ++i) { + [self printIndentation:indent]; + UIAccessibilityElement *e = [(UIAccessibilityElement*)self accessibilityElementAtIndex:i]; + printf("%s, label: %s", NSStringFromClass([e class]).UTF8String, e.accessibilityLabel.UTF8String); + if(e.accessibilityValue && e.accessibilityValue.length > 0) { + printf(", value: %s", e.accessibilityValue.UTF8String); + } + if(e.accessibilityHint && e.accessibilityHint.length > 0) { + printf(", hint: %s", e.accessibilityHint.UTF8String); + } + printf(", "); + [self printAccessibilityTraits:e.accessibilityTraits]; + printf("\n"); + } + } +} + +- (void)printAccessibilityTraits:(UIAccessibilityTraits)traits { + + printf("traits: "); + bool didPrintOne = false; + if(traits == UIAccessibilityTraitNone) { + printf("none"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitButton) { + if(didPrintOne) printf(", "); + printf("button"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitLink) { + if(didPrintOne) printf(", "); + printf("link"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitHeader) { + if(didPrintOne) printf(", "); + printf("header"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitSearchField) { + if(didPrintOne) printf(", "); + printf("search field"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitImage) { + if(didPrintOne) printf(", "); + printf("image"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitSelected) { + if(didPrintOne) printf(", "); + printf("selected"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitPlaysSound) { + if(didPrintOne) printf(", "); + printf("plays sound"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitKeyboardKey) { + if(didPrintOne) printf(", "); + printf("keyboard key"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitStaticText) { + if(didPrintOne) printf(", "); + printf("static text"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitSummaryElement) { + if(didPrintOne) printf(", "); + printf("summary element"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitNotEnabled) { + if(didPrintOne) printf(", "); + printf("not enabled"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitUpdatesFrequently) { + if(didPrintOne) printf(", "); + printf("updates frequently"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitStartsMediaSession) { + if(didPrintOne) printf(", "); + printf("starts media session"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitAdjustable) { + if(didPrintOne) printf(", "); + printf("adjustable"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitAllowsDirectInteraction) { + if(didPrintOne) printf(", "); + printf("allows direct interaction"); + didPrintOne = true; + } + if(traits & UIAccessibilityTraitCausesPageTurn) { + if(didPrintOne) printf(", "); + printf("causes page turn"); + didPrintOne = true; + } + if(!didPrintOne) { + printf("unknown flags (0x%llx)", traits); + } +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIView-KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIView-KIFAdditions.h new file mode 100755 index 000000000..746fde0be --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIView-KIFAdditions.h @@ -0,0 +1,118 @@ +// +// UIView-KIFAdditions.h +// KIF +// +// Created by Eric Firestone on 5/20/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +extern double KIFDegreesToRadians(double deg); +extern double KIFRadiansToDegrees(double rad); + +typedef CGPoint KIFDisplacement; + +@interface UIView (KIFAdditions) + +@property (nonatomic, readonly, getter=isProbablyTappable) BOOL probablyTappable; + +- (BOOL)isDescendantOfFirstResponder; +- (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label; +- (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; +- (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label accessibilityValue:(NSString *)value traits:(UIAccessibilityTraits)traits; + +/*! + @method accessibilityElementMatchingBlock: + @abstract Finds the descendent accessibility element that matches the conditions defined by the match block. + @param matchBlock A block which returns YES for matching elements. + @result The matching accessibility element. + */ +- (UIAccessibilityElement *)accessibilityElementMatchingBlock:(BOOL(^)(UIAccessibilityElement *))matchBlock; + +- (UIView *)subviewWithClassNamePrefix:(NSString *)prefix __deprecated; +- (NSArray *)subviewsWithClassNamePrefix:(NSString *)prefix; +- (UIView *)subviewWithClassNameOrSuperClassNamePrefix:(NSString *)prefix __deprecated; +- (NSArray *)subviewsWithClassNameOrSuperClassNamePrefix:(NSString *)prefix; + +- (void)flash; +- (void)tap; +- (void)tapAtPoint:(CGPoint)point; +- (void)twoFingerTapAtPoint:(CGPoint)point; +- (void)longPressAtPoint:(CGPoint)point duration:(NSTimeInterval)duration; + +/*! + @method dragFromPoint:toPoint: + @abstract Simulates dragging a finger on the screen between the given points. + @discussion Causes the application to dispatch a sequence of touch events which simulate dragging a finger from startPoint to endPoint. + @param startPoint The point at which to start the drag, in the coordinate system of the receiver. + @param endPoint The point at which to end the drag, in the coordinate system of the receiver. + */ +- (void)dragFromPoint:(CGPoint)startPoint toPoint:(CGPoint)endPoint; +- (void)dragFromPoint:(CGPoint)startPoint toPoint:(CGPoint)endPoint steps:(NSUInteger)stepCount; +- (void)dragFromPoint:(CGPoint)startPoint displacement:(KIFDisplacement)displacement steps:(NSUInteger)stepCount; +- (void)dragAlongPathWithPoints:(CGPoint *)points count:(NSInteger)count; +- (void)twoFingerPanFromPoint:(CGPoint)startPoint toPoint:(CGPoint)toPoint steps:(NSUInteger)stepCount; +- (void)pinchAtPoint:(CGPoint)centerPoint distance:(CGFloat)distance steps:(NSUInteger)stepCount; +- (void)zoomAtPoint:(CGPoint)centerPoint distance:(CGFloat)distance steps:(NSUInteger)stepCount; +- (void)twoFingerRotateAtPoint:(CGPoint)centerPoint angle:(CGFloat)angleInDegrees; +/*! + @method isTappableWithHitTestResultView: + @abstract Easy hook to override whether a hit test result makes a view tappable. + @discussion Some times, your view hierarchies involve putting overlays over views that would otherwise be tappable. Since KIF doesn't know about these exceptions, you can override this method as a convenient way of hooking in to the check for something being tappable. Your implementation will probably want to call up to super. + @param hitView The view -hitTest: returned when trying to tap on a point inside your view's bounds + @result Whether or not the view is tappable. + */ +- (BOOL)isTappableWithHitTestResultView:(UIView *)hitView; + +/*! + @method isTappableInRect: + @abstract Whether or not the receiver can be tapped inside the given rectangular area. + @discussion Determines whether or not tapping within the given rectangle would actually hit the receiver or one of its children. This is useful for determining if the view is actually on screen and enabled. + @param rect A rectangle specifying an area in the receiver in the receiver's frame coordinates. + @result Whether or not the view is tappable. + */ +- (BOOL)isTappableInRect:(CGRect)rect; + +/*! + @method tappablePointInRect:(CGRect)rect; + @abstract Finds a point in the receiver that is tappable. + @discussion Finds a tappable point in the receiver, where tappable is defined as a point that, when tapped, will hit the receiver. + @param rect A rectangle specifying an area in the receiver in the receiver's frame coordinates. + @result A tappable point in the receivers frame coordinates. + */ +- (CGPoint)tappablePointInRect:(CGRect)rect; + +- (UIEvent *)eventWithTouch:(UITouch *)touch; + +/*! + @abstract Evaluates if user interaction is enabled including edge cases. + */ +- (BOOL)isUserInteractionActuallyEnabled; + +/*! + @abstract Evaluates if the view and all its superviews are visible. + */ +- (BOOL)isVisibleInViewHierarchy; + +/*! + @method performBlockOnDescendentViews: + @abstract Calls a block on the view itself and on all its descendent views. + @param block The block that will be called on the views. Stop the traversation of the views by assigning YES to the stop-parameter of the block. + */ +- (void)performBlockOnDescendentViews:(void (^)(UIView *view, BOOL *stop))block; + +/*! + @method performBlockOnAscendentViews: + @abstract Calls a block on the view itself and on all its superviews. + @param block The block that will be called on the views. Stop the traversation of the views by assigning YES to the stop-parameter of the block. + */ +- (void)performBlockOnAscendentViews:(void (^)(UIView *view, BOOL *stop))block; + +/*! + @abstract Returns either the current window or another window if a transform is applied. Returns `nil` if all windows in the application have transforms. + */ +@property (nonatomic, readonly) UIWindow *windowOrIdentityWindow; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIView-KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIView-KIFAdditions.m new file mode 100755 index 000000000..0293f4953 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIView-KIFAdditions.m @@ -0,0 +1,901 @@ +// +// UIView-KIFAdditions.m +// KIF +// +// Created by Eric Firestone on 5/20/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "UIView-KIFAdditions.h" +#import "CGGeometry-KIFAdditions.h" +#import "UIAccessibilityElement-KIFAdditions.h" +#import "UIApplication-KIFAdditions.h" +#import "UITouch-KIFAdditions.h" +#import +#import "UIEvent+KIFAdditions.h" + +double KIFDegreesToRadians(double deg) { + return (deg) / 180.0 * M_PI; +} + +double KIFRadiansToDegrees(double rad) { + return ((rad) * (180.0 / M_PI)); +} + +static CGFloat const kTwoFingerConstantWidth = 40; + +@interface UIApplication (KIFAdditionsPrivate) +- (UIEvent *)_touchesEvent; +@end + +@interface NSObject (UIWebDocumentViewInternal) + +- (void)tapInteractionWithLocation:(CGPoint)point; + +@end + +// On iOS 6 the accessibility label may contain line breaks, so when trying to find the +// element, these line breaks are necessary. But on iOS 7 the system replaces them with +// spaces. So the same test breaks on either iOS 6 or iOS 7. iOS8 befuddles this again by +//limiting replacement to spaces in between strings. To work around this replace +// the line breaks in both and try again. +NS_INLINE BOOL StringsMatchExceptLineBreaks(NSString *expected, NSString *actual) { + if (expected == actual) { + return YES; + } + + if (expected.length != actual.length) { + return NO; + } + + if ([expected isEqualToString:actual]) { + return YES; + } + + if ([expected rangeOfString:@"\n"].location == NSNotFound && + [actual rangeOfString:@"\n"].location == NSNotFound) { + return NO; + } + + for (NSUInteger i = 0; i < expected.length; i ++) { + unichar expectedChar = [expected characterAtIndex:i]; + unichar actualChar = [actual characterAtIndex:i]; + if (expectedChar != actualChar && + !(expectedChar == '\n' && actualChar == ' ') && + !(expectedChar == ' ' && actualChar == '\n')) { + return NO; + } + } + + return YES; +} + + +@implementation UIView (KIFAdditions) + ++ (NSSet *)classesToSkipAccessibilitySearchRecursion +{ + static NSSet *classesToSkip; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + // UIDatePicker contains hundreds of thousands of placeholder accessibility elements that aren't useful to KIF, + // so don't recurse into a date picker when searching for matching accessibility elements + classesToSkip = [[NSSet alloc] initWithObjects:[UIDatePicker class], nil]; + }); + + return classesToSkip; +} + +- (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label +{ + return [self accessibilityElementWithLabel:label traits:UIAccessibilityTraitNone]; +} + +- (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; +{ + return [self accessibilityElementWithLabel:label accessibilityValue:nil traits:traits]; +} + +- (UIAccessibilityElement *)accessibilityElementWithLabel:(NSString *)label accessibilityValue:(NSString *)value traits:(UIAccessibilityTraits)traits; +{ + return [self accessibilityElementMatchingBlock:^(UIAccessibilityElement *element) { + + // TODO: This is a temporary fix for an SDK defect. + NSString *accessibilityValue = nil; + @try { + accessibilityValue = element.accessibilityValue; + } + @catch (NSException *exception) { + NSLog(@"KIF: Unable to access accessibilityValue for element %@ because of exception: %@", element, exception.reason); + } + + if ([accessibilityValue isKindOfClass:[NSAttributedString class]]) { + accessibilityValue = [(NSAttributedString *)accessibilityValue string]; + } + + BOOL labelsMatch = StringsMatchExceptLineBreaks(label, element.accessibilityLabel); + BOOL traitsMatch = ((element.accessibilityTraits) & traits) == traits; + BOOL valuesMatch = !value || [value isEqual:accessibilityValue]; + + return (BOOL)(labelsMatch && traitsMatch && valuesMatch); + }]; +} + +- (UIAccessibilityElement *)accessibilityElementMatchingBlock:(BOOL(^)(UIAccessibilityElement *))matchBlock; +{ + return [self accessibilityElementMatchingBlock:matchBlock notHidden:YES]; +} + +- (UIAccessibilityElement *)accessibilityElementMatchingBlock:(BOOL(^)(UIAccessibilityElement *))matchBlock notHidden:(BOOL)notHidden; +{ + if (notHidden && self.hidden) { + return nil; + } + + // In case multiple elements with the same label exist, prefer ones that are currently visible + UIAccessibilityElement *matchingButOccludedElement = nil; + + BOOL elementMatches = matchBlock((UIAccessibilityElement *)self); + + if (elementMatches) { + if (self.isTappable) { + return (UIAccessibilityElement *)self; + } else { + matchingButOccludedElement = (UIAccessibilityElement *)self; + } + } + + if ([[[self class] classesToSkipAccessibilitySearchRecursion] containsObject:[self class]]) { + return matchingButOccludedElement; + } + + // Check the subviews first. Even if the receiver says it's an accessibility container, + // the returned objects are UIAccessibilityElementMockViews (which aren't actually views) + // rather than the real subviews it contains. We want the real views if possible. + // UITableViewCell is such an offender. + for (UIView *view in [self.subviews reverseObjectEnumerator]) { + UIAccessibilityElement *element = [view accessibilityElementMatchingBlock:matchBlock]; + if (!element) { + continue; + } + + UIView *viewForElement = [UIAccessibilityElement viewContainingAccessibilityElement:element]; + CGRect accessibilityFrame = [viewForElement.window convertRect:element.accessibilityFrame toView:viewForElement]; + + if ([viewForElement isTappableInRect:accessibilityFrame]) { + return element; + } else { + matchingButOccludedElement = element; + } + } + + NSMutableArray *elementStack = [NSMutableArray arrayWithObject:self]; + + while (elementStack.count) { + UIAccessibilityElement *element = [elementStack lastObject]; + [elementStack removeLastObject]; + + BOOL elementMatches = matchBlock(element); + + if (elementMatches) { + UIView *viewForElement = [UIAccessibilityElement viewContainingAccessibilityElement:element]; + CGRect accessibilityFrame = [viewForElement.window convertRect:element.accessibilityFrame toView:viewForElement]; + + if ([viewForElement isTappableInRect:accessibilityFrame]) { + return element; + } else { + matchingButOccludedElement = element; + continue; + } + } + + // If the view is an accessibility container, and we didn't find a matching subview, + // then check the actual accessibility elements + NSInteger accessibilityElementCount = element.accessibilityElementCount; + if (accessibilityElementCount == 0 || accessibilityElementCount == NSNotFound) { + continue; + } + + for (NSInteger accessibilityElementIndex = 0; accessibilityElementIndex < accessibilityElementCount; accessibilityElementIndex++) { + UIAccessibilityElement *subelement = [element accessibilityElementAtIndex:accessibilityElementIndex]; + + if (subelement) { + // Skip table view cell accessibility elements, they're handled below + if ([subelement isKindOfClass:NSClassFromString(@"UITableViewCellAccessibilityElement")]) { + continue; + } + + [elementStack addObject:subelement]; + } + } + } + + if (!matchingButOccludedElement) { + if ([self isKindOfClass:[UITableView class]]) { + UITableView *tableView = (UITableView *)self; + + // Because of a bug in [UITableView indexPathsForVisibleRows] http://openradar.appspot.com/radar?id=5191284490764288 + // We use [UITableView visibleCells] to determine the index path of the visible cells + NSMutableArray *indexPathsForVisibleRows = [[NSMutableArray alloc] init]; + [[tableView visibleCells] enumerateObjectsUsingBlock:^(UITableViewCell *cell, NSUInteger idx, BOOL *stop) { + NSIndexPath *indexPath = [tableView indexPathForCell:cell]; + if (indexPath) { + [indexPathsForVisibleRows addObject:indexPath]; + } + }]; + + for (NSUInteger section = 0, numberOfSections = [tableView numberOfSections]; section < numberOfSections; section++) { + for (NSUInteger row = 0, numberOfRows = [tableView numberOfRowsInSection:section]; row < numberOfRows; row++) { + // Skip visible rows because they are already handled + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section]; + if ([indexPathsForVisibleRows containsObject:indexPath]) { + continue; + } + + @autoreleasepool { + // Get the cell directly from the dataSource because UITableView will only vend visible cells + UITableViewCell *cell = [tableView.dataSource tableView:tableView cellForRowAtIndexPath:indexPath]; + + UIAccessibilityElement *element = [cell accessibilityElementMatchingBlock:matchBlock notHidden:NO]; + + // Remove the cell from the table view so that it doesn't stick around + [cell removeFromSuperview]; + + // Skip this cell if it isn't the one we're looking for + if (!element) { + continue; + } + } + + // Scroll to the cell and wait for the animation to complete + [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:YES]; + CFRunLoopRunInMode(UIApplicationCurrentRunMode, 0.5, false); + + // Now try finding the element again + return [self accessibilityElementMatchingBlock:matchBlock]; + } + } + } else if ([self isKindOfClass:[UICollectionView class]]) { + UICollectionView *collectionView = (UICollectionView *)self; + + NSArray *indexPathsForVisibleItems = [collectionView indexPathsForVisibleItems]; + + for (NSUInteger section = 0, numberOfSections = [collectionView numberOfSections]; section < numberOfSections; section++) { + for (NSUInteger item = 0, numberOfItems = [collectionView numberOfItemsInSection:section]; item < numberOfItems; item++) { + // Skip visible items because they are already handled + NSIndexPath *indexPath = [NSIndexPath indexPathForItem:item inSection:section]; + if ([indexPathsForVisibleItems containsObject:indexPath]) { + continue; + } + + @autoreleasepool { + // Get the cell directly from the dataSource because UICollectionView will only vend visible cells + UICollectionViewCell *cell = [collectionView.dataSource collectionView:collectionView cellForItemAtIndexPath:indexPath]; + + UIAccessibilityElement *element = [cell accessibilityElementMatchingBlock:matchBlock notHidden:NO]; + + // Remove the cell from the collection view so that it doesn't stick around + [cell removeFromSuperview]; + + // Skip this cell if it isn't the one we're looking for + // Sometimes we get cells with no size here which can cause an endless loop, so we ignore those + if (!element || CGSizeEqualToSize(cell.frame.size, CGSizeZero)) { + continue; + } + } + + // Scroll to the cell and wait for the animation to complete + [collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionNone animated:YES]; + CFRunLoopRunInMode(UIApplicationCurrentRunMode, 0.5, false); + + // Now try finding the element again + return [self accessibilityElementMatchingBlock:matchBlock]; + } + } + } + } + + return matchingButOccludedElement; +} + +- (UIView *)subviewWithClassNamePrefix:(NSString *)prefix; +{ + NSArray *subviews = [self subviewsWithClassNamePrefix:prefix]; + if ([subviews count] == 0) { + return nil; + } + + return subviews[0]; +} + +- (NSArray *)subviewsWithClassNamePrefix:(NSString *)prefix; +{ + NSMutableArray *result = [NSMutableArray array]; + + // Breadth-first population of matching subviews + // First traverse the next level of subviews, adding matches. + for (UIView *view in self.subviews) { + if ([NSStringFromClass([view class]) hasPrefix:prefix]) { + [result addObject:view]; + } + } + + // Now traverse the subviews of the subviews, adding matches. + for (UIView *view in self.subviews) { + NSArray *matchingSubviews = [view subviewsWithClassNamePrefix:prefix]; + [result addObjectsFromArray:matchingSubviews]; + } + + return result; +} + +- (UIView *)subviewWithClassNameOrSuperClassNamePrefix:(NSString *)prefix; +{ + NSArray *subviews = [self subviewsWithClassNameOrSuperClassNamePrefix:prefix]; + if ([subviews count] == 0) { + return nil; + } + + return subviews[0]; +} + +- (NSArray *)subviewsWithClassNameOrSuperClassNamePrefix:(NSString *)prefix; +{ + NSMutableArray * result = [NSMutableArray array]; + + // Breadth-first population of matching subviews + // First traverse the next level of subviews, adding matches + for (UIView *view in self.subviews) { + Class klass = [view class]; + while (klass) { + if ([NSStringFromClass(klass) hasPrefix:prefix]) { + [result addObject:view]; + break; + } + + klass = [klass superclass]; + } + } + + // Now traverse the subviews of the subviews, adding matches + for (UIView *view in self.subviews) { + NSArray * matchingSubviews = [view subviewsWithClassNameOrSuperClassNamePrefix:prefix]; + [result addObjectsFromArray:matchingSubviews]; + } + + return result; +} + + +- (BOOL)isDescendantOfFirstResponder; +{ + if ([self isFirstResponder]) { + return YES; + } + return [self.superview isDescendantOfFirstResponder]; +} + +- (void)flash; +{ + UIColor *originalBackgroundColor = self.backgroundColor; + for (NSUInteger i = 0; i < 5; i++) { + self.backgroundColor = [UIColor yellowColor]; + CFRunLoopRunInMode(kCFRunLoopDefaultMode, .05, false); + self.backgroundColor = [UIColor blueColor]; + CFRunLoopRunInMode(kCFRunLoopDefaultMode, .05, false); + } + self.backgroundColor = originalBackgroundColor; +} + +- (void)tap; +{ + CGPoint centerPoint = CGPointMake(self.frame.size.width * 0.5f, self.frame.size.height * 0.5f); + + [self tapAtPoint:centerPoint]; +} + +- (void)tapAtPoint:(CGPoint)point; +{ + // Web views don't handle touches in a normal fashion, but they do have a method we can call to tap them + // This may not be necessary anymore. We didn't properly support controls that used gesture recognizers + // when this was added, but we now do. It needs to be tested before we can get rid of it. + id /*UIWebBrowserView*/ webBrowserView = nil; + + if ([NSStringFromClass([self class]) isEqual:@"UIWebBrowserView"]) { + webBrowserView = self; + } else if ([self isKindOfClass:[UIWebView class]]) { + id webViewInternal = [self valueForKey:@"_internal"]; + webBrowserView = [webViewInternal valueForKey:@"browserView"]; + } + + if (webBrowserView) { + [webBrowserView tapInteractionWithLocation:point]; + return; + } + + // Handle touches in the normal way for other views + UITouch *touch = [[UITouch alloc] initAtPoint:point inView:self]; + [touch setPhaseAndUpdateTimestamp:UITouchPhaseBegan]; + + UIEvent *event = [self eventWithTouch:touch]; + + [[UIApplication sharedApplication] sendEvent:event]; + + [touch setPhaseAndUpdateTimestamp:UITouchPhaseEnded]; + [[UIApplication sharedApplication] sendEvent:event]; + + // Dispatching the event doesn't actually update the first responder, so fake it + if ([touch.view isDescendantOfView:self] && [self canBecomeFirstResponder]) { + [self becomeFirstResponder]; + } + +} + +- (void)twoFingerTapAtPoint:(CGPoint)point { + CGPoint finger1 = CGPointMake(point.x - kTwoFingerConstantWidth, point.y - kTwoFingerConstantWidth); + CGPoint finger2 = CGPointMake(point.x + kTwoFingerConstantWidth, point.y + kTwoFingerConstantWidth); + UITouch *touch1 = [[UITouch alloc] initAtPoint:finger1 inView:self]; + UITouch *touch2 = [[UITouch alloc] initAtPoint:finger2 inView:self]; + [touch1 setPhaseAndUpdateTimestamp:UITouchPhaseBegan]; + [touch2 setPhaseAndUpdateTimestamp:UITouchPhaseBegan]; + + UIEvent *event = [self eventWithTouches:@[touch1, touch2]]; + [[UIApplication sharedApplication] sendEvent:event]; + + [touch1 setPhaseAndUpdateTimestamp:UITouchPhaseEnded]; + [touch2 setPhaseAndUpdateTimestamp:UITouchPhaseEnded]; + + [[UIApplication sharedApplication] sendEvent:event]; +} + +#define DRAG_TOUCH_DELAY 0.01 + +- (void)longPressAtPoint:(CGPoint)point duration:(NSTimeInterval)duration +{ + UITouch *touch = [[UITouch alloc] initAtPoint:point inView:self]; + [touch setPhaseAndUpdateTimestamp:UITouchPhaseBegan]; + + UIEvent *eventDown = [self eventWithTouch:touch]; + [[UIApplication sharedApplication] sendEvent:eventDown]; + + CFRunLoopRunInMode(kCFRunLoopDefaultMode, DRAG_TOUCH_DELAY, false); + + for (NSTimeInterval timeSpent = DRAG_TOUCH_DELAY; timeSpent < duration; timeSpent += DRAG_TOUCH_DELAY) + { + [touch setPhaseAndUpdateTimestamp:UITouchPhaseStationary]; + + UIEvent *eventStillDown = [self eventWithTouch:touch]; + [[UIApplication sharedApplication] sendEvent:eventStillDown]; + + CFRunLoopRunInMode(kCFRunLoopDefaultMode, DRAG_TOUCH_DELAY, false); + } + + [touch setPhaseAndUpdateTimestamp:UITouchPhaseEnded]; + UIEvent *eventUp = [self eventWithTouch:touch]; + [[UIApplication sharedApplication] sendEvent:eventUp]; + + // Dispatching the event doesn't actually update the first responder, so fake it + if ([touch.view isDescendantOfView:self] && [self canBecomeFirstResponder]) { + [self becomeFirstResponder]; + } + +} + +- (void)dragFromPoint:(CGPoint)startPoint toPoint:(CGPoint)endPoint; +{ + [self dragFromPoint:startPoint toPoint:endPoint steps:3]; +} + + +- (void)dragFromPoint:(CGPoint)startPoint toPoint:(CGPoint)endPoint steps:(NSUInteger)stepCount; +{ + KIFDisplacement displacement = CGPointMake(endPoint.x - startPoint.x, endPoint.y - startPoint.y); + [self dragFromPoint:startPoint displacement:displacement steps:stepCount]; +} + +- (void)dragFromPoint:(CGPoint)startPoint displacement:(KIFDisplacement)displacement steps:(NSUInteger)stepCount; +{ + CGPoint endPoint = CGPointMake(startPoint.x + displacement.x, startPoint.y + displacement.y); + NSArray *path = [self pointsFromStartPoint:startPoint toPoint:endPoint steps:stepCount]; + [self dragPointsAlongPaths:@[path]]; +} + +- (void)dragAlongPathWithPoints:(CGPoint *)points count:(NSInteger)count; +{ + // convert point array into NSArray with NSValue + NSMutableArray *array = [NSMutableArray array]; + for (int i = 0; i < count; i++) + { + [array addObject:[NSValue valueWithCGPoint:points[i]]]; + } + [self dragPointsAlongPaths:@[[array copy]]]; +} + +- (void)dragPointsAlongPaths:(NSArray *)arrayOfPaths { + // must have at least one path, and each path must have the same number of points + if (arrayOfPaths.count == 0) + { + return; + } + + // all paths must have similar number of points + NSUInteger pointsInPath = [arrayOfPaths[0] count]; + for (NSArray *path in arrayOfPaths) + { + if (path.count != pointsInPath) + { + return; + } + } + + NSMutableArray *touches = [NSMutableArray array]; + + for (NSUInteger pointIndex = 0; pointIndex < pointsInPath; pointIndex++) { + // create initial touch event and send touch down event + if (pointIndex == 0) + { + for (NSArray *path in arrayOfPaths) + { + CGPoint point = [path[pointIndex] CGPointValue]; + UITouch *touch = [[UITouch alloc] initAtPoint:point inView:self]; + [touch setPhaseAndUpdateTimestamp:UITouchPhaseBegan]; + [touches addObject:touch]; + } + UIEvent *eventDown = [self eventWithTouches:[NSArray arrayWithArray:touches]]; + [[UIApplication sharedApplication] sendEvent:eventDown]; + + CFRunLoopRunInMode(UIApplicationCurrentRunMode, DRAG_TOUCH_DELAY, false); + } + else + { + UITouch *touch; + for (NSUInteger pathIndex = 0; pathIndex < arrayOfPaths.count; pathIndex++) + { + NSArray *path = arrayOfPaths[pathIndex]; + CGPoint point = [path[pointIndex] CGPointValue]; + touch = touches[pathIndex]; + [touch setLocationInWindow:[self.window convertPoint:point fromView:self]]; + [touch setPhaseAndUpdateTimestamp:UITouchPhaseMoved]; + } + UIEvent *event = [self eventWithTouches:[NSArray arrayWithArray:touches]]; + [[UIApplication sharedApplication] sendEvent:event]; + + CFRunLoopRunInMode(UIApplicationCurrentRunMode, DRAG_TOUCH_DELAY, false); + + // The last point needs to also send a phase ended touch. + if (pointIndex == pointsInPath - 1) { + for (UITouch * touch in touches) { + [touch setPhaseAndUpdateTimestamp:UITouchPhaseEnded]; + UIEvent *eventUp = [self eventWithTouch:touch]; + [[UIApplication sharedApplication] sendEvent:eventUp]; + + } + + } + } + } + + // Dispatching the event doesn't actually update the first responder, so fake it + if ([touches[0] view] == self && [self canBecomeFirstResponder]) { + [self becomeFirstResponder]; + } + + while (UIApplicationCurrentRunMode != kCFRunLoopDefaultMode) { + CFRunLoopRunInMode(UIApplicationCurrentRunMode, 0.1, false); + } +} + +- (void)twoFingerPanFromPoint:(CGPoint)startPoint toPoint:(CGPoint)toPoint steps:(NSUInteger)stepCount { + //estimate the first finger to be diagonally up and left from the center + CGPoint finger1Start = CGPointMake(startPoint.x - kTwoFingerConstantWidth, + startPoint.y - kTwoFingerConstantWidth); + CGPoint finger1End = CGPointMake(toPoint.x - kTwoFingerConstantWidth, + toPoint.y - kTwoFingerConstantWidth); + //estimate the second finger to be diagonally down and right from the center + CGPoint finger2Start = CGPointMake(startPoint.x + kTwoFingerConstantWidth, + startPoint.y + kTwoFingerConstantWidth); + CGPoint finger2End = CGPointMake(toPoint.x + kTwoFingerConstantWidth, + toPoint.y + kTwoFingerConstantWidth); + NSArray *finger1Path = [self pointsFromStartPoint:finger1Start toPoint:finger1End steps:stepCount]; + NSArray *finger2Path = [self pointsFromStartPoint:finger2Start toPoint:finger2End steps:stepCount]; + NSArray *paths = @[finger1Path, finger2Path]; + + [self dragPointsAlongPaths:paths]; +} + +- (void)pinchAtPoint:(CGPoint)centerPoint distance:(CGFloat)distance steps:(NSUInteger)stepCount { + //estimate the first finger to be on the left + CGPoint finger1Start = CGPointMake(centerPoint.x - kTwoFingerConstantWidth - distance, centerPoint.y); + CGPoint finger1End = CGPointMake(centerPoint.x - kTwoFingerConstantWidth, centerPoint.y); + //estimate the second finger to be on the right + CGPoint finger2Start = CGPointMake(centerPoint.x + kTwoFingerConstantWidth + distance, centerPoint.y); + CGPoint finger2End = CGPointMake(centerPoint.x + kTwoFingerConstantWidth, centerPoint.y); + NSArray *finger1Path = [self pointsFromStartPoint:finger1Start toPoint:finger1End steps:stepCount]; + NSArray *finger2Path = [self pointsFromStartPoint:finger2Start toPoint:finger2End steps:stepCount]; + NSArray *paths = @[finger1Path, finger2Path]; + + [self dragPointsAlongPaths:paths]; +} + +- (void)zoomAtPoint:(CGPoint)centerPoint distance:(CGFloat)distance steps:(NSUInteger)stepCount { + //estimate the first finger to be on the left + CGPoint finger1Start = CGPointMake(centerPoint.x - kTwoFingerConstantWidth, centerPoint.y); + CGPoint finger1End = CGPointMake(centerPoint.x - kTwoFingerConstantWidth - distance, centerPoint.y); + //estimate the second finger to be on the right + CGPoint finger2Start = CGPointMake(centerPoint.x + kTwoFingerConstantWidth, centerPoint.y); + CGPoint finger2End = CGPointMake(centerPoint.x + kTwoFingerConstantWidth + distance, centerPoint.y); + NSArray *finger1Path = [self pointsFromStartPoint:finger1Start toPoint:finger1End steps:stepCount]; + NSArray *finger2Path = [self pointsFromStartPoint:finger2Start toPoint:finger2End steps:stepCount]; + NSArray *paths = @[finger1Path, finger2Path]; + + [self dragPointsAlongPaths:paths]; +} + +- (void)twoFingerRotateAtPoint:(CGPoint)centerPoint angle:(CGFloat)angleInDegrees { + NSInteger stepCount = ABS(angleInDegrees)/2; // very rough approximation. 90deg = ~45 steps, 360 deg = ~180 steps + CGFloat radius = kTwoFingerConstantWidth*2; + double angleInRadians = KIFDegreesToRadians(angleInDegrees); + + NSMutableArray *finger1Path = [NSMutableArray array]; + NSMutableArray *finger2Path = [NSMutableArray array]; + for (NSUInteger i = 0; i < stepCount; i++) { + double currentAngle = 0; + if (i == stepCount - 1) { + currentAngle = angleInRadians; // do not interpolate for the last step for maximum accuracy + } + else { + double interpolation = i/(double)stepCount; + currentAngle = interpolation * angleInRadians; + } + // interpolate betwen 0 and the target rotation + CGPoint offset1 = CGPointMake(radius * cos(currentAngle), radius * sin(currentAngle)); + CGPoint offset2 = CGPointMake(-offset1.x, -offset1.y); // second finger is just opposite of the first + + CGPoint finger1 = CGPointMake(centerPoint.x + offset1.x, centerPoint.y + offset1.y); + CGPoint finger2 = CGPointMake(centerPoint.x + offset2.x, centerPoint.y + offset2.y); + + [finger1Path addObject:[NSValue valueWithCGPoint:finger1]]; + [finger2Path addObject:[NSValue valueWithCGPoint:finger2]]; + } + [self dragPointsAlongPaths:@[[finger1Path copy], [finger2Path copy]]]; +} + +- (NSArray *)pointsFromStartPoint:(CGPoint)startPoint toPoint:(CGPoint)toPoint steps:(NSUInteger)stepCount { + + CGPoint displacement = CGPointMake(toPoint.x - startPoint.x, toPoint.y - startPoint.y); + NSMutableArray *points = [NSMutableArray array]; + + for (NSUInteger i = 0; i < stepCount; i++) { + CGFloat progress = ((CGFloat)i)/(stepCount - 1); + CGPoint point = CGPointMake(startPoint.x + (progress * displacement.x), + startPoint.y + (progress * displacement.y)); + [points addObject:[NSValue valueWithCGPoint:point]]; + } + return [NSArray arrayWithArray:points]; +} + +- (BOOL)isProbablyTappable +{ + // There are some issues with the tappability check in UIWebViews, so if the view is a UIWebView we will just skip the check. + return [NSStringFromClass([self class]) isEqualToString:@"UIWebBrowserView"] || self.isTappable; +} + +// Is this view currently on screen? +- (BOOL)isTappable; +{ + return ([self hasTapGestureRecognizer] || + [self isTappableInRect:self.bounds]); +} + +- (BOOL)hasTapGestureRecognizer +{ + __block BOOL hasTapGestureRecognizer = NO; + + [self.gestureRecognizers enumerateObjectsUsingBlock:^(id obj, + NSUInteger idx, + BOOL *stop) { + if ([obj isKindOfClass:[UITapGestureRecognizer class]]) { + hasTapGestureRecognizer = YES; + + if (stop != NULL) { + *stop = YES; + } + } + }]; + + return hasTapGestureRecognizer; +} + +- (BOOL)isTappableInRect:(CGRect)rect; +{ + CGPoint tappablePoint = [self tappablePointInRect:rect]; + + return !isnan(tappablePoint.x); +} + +- (BOOL)isTappableWithHitTestResultView:(UIView *)hitView; +{ + // Special case for UIControls, which may have subviews which don't respond to -hitTest:, + // but which are tappable. In this case the hit view will be the containing + // UIControl, and it will forward the tap to the appropriate subview. + // This applies with UISegmentedControl which contains UISegment views (a private UIView + // representing a single segment). + if ([hitView isKindOfClass:[UIControl class]] && [self isDescendantOfView:hitView]) { + return YES; + } + + // Button views in the nav bar (a private class derived from UINavigationItemView), do not return + // themselves in a -hitTest:. Instead they return the nav bar. + if ([hitView isKindOfClass:[UINavigationBar class]] && [self isNavigationItemView] && [self isDescendantOfView:hitView]) { + return YES; + } + + return [hitView isDescendantOfView:self]; +} + +- (CGPoint)tappablePointInRect:(CGRect)rect; +{ + // Start at the top and recurse down + CGRect frame = [self.window convertRect:rect fromView:self]; + + UIView *hitView = nil; + CGPoint tapPoint = CGPointZero; + + // Mid point + tapPoint = CGPointCenteredInRect(frame); + hitView = [self.window hitTest:tapPoint withEvent:nil]; + if ([self isTappableWithHitTestResultView:hitView]) { + return [self.window convertPoint:tapPoint toView:self]; + } + + // Top left + tapPoint = CGPointMake(frame.origin.x + 1.0f, frame.origin.y + 1.0f); + hitView = [self.window hitTest:tapPoint withEvent:nil]; + if ([self isTappableWithHitTestResultView:hitView]) { + return [self.window convertPoint:tapPoint toView:self]; + } + + // Top right + tapPoint = CGPointMake(frame.origin.x + frame.size.width - 1.0f, frame.origin.y + 1.0f); + hitView = [self.window hitTest:tapPoint withEvent:nil]; + if ([self isTappableWithHitTestResultView:hitView]) { + return [self.window convertPoint:tapPoint toView:self]; + } + + // Bottom left + tapPoint = CGPointMake(frame.origin.x + 1.0f, frame.origin.y + frame.size.height - 1.0f); + hitView = [self.window hitTest:tapPoint withEvent:nil]; + if ([self isTappableWithHitTestResultView:hitView]) { + return [self.window convertPoint:tapPoint toView:self]; + } + + // Bottom right + tapPoint = CGPointMake(frame.origin.x + frame.size.width - 1.0f, frame.origin.y + frame.size.height - 1.0f); + hitView = [self.window hitTest:tapPoint withEvent:nil]; + if ([self isTappableWithHitTestResultView:hitView]) { + return [self.window convertPoint:tapPoint toView:self]; + } + + return CGPointMake(NAN, NAN); +} + +- (UIEvent *)eventWithTouches:(NSArray *)touches +{ + // _touchesEvent is a private selector, interface is exposed in UIApplication(KIFAdditionsPrivate) + UIEvent *event = [[UIApplication sharedApplication] _touchesEvent]; + + [event _clearTouches]; + [event kif_setEventWithTouches:touches]; + + for (UITouch *aTouch in touches) { + [event _addTouch:aTouch forDelayedDelivery:NO]; + } + + return event; +} + +- (UIEvent *)eventWithTouch:(UITouch *)touch; +{ + NSArray *touches = touch ? @[touch] : nil; + return [self eventWithTouches:touches]; +} + +- (BOOL)isUserInteractionActuallyEnabled; +{ + BOOL isUserInteractionEnabled = self.userInteractionEnabled; + + // Navigation item views don't have user interaction enabled, but their parent nav bar does and will forward the event + if (!isUserInteractionEnabled && [self isNavigationItemView]) { + // If this view is inside a nav bar, and the nav bar is enabled, then consider it enabled + UIView *navBar = [self superview]; + while (navBar && ![navBar isKindOfClass:[UINavigationBar class]]) { + navBar = [navBar superview]; + } + if (navBar && navBar.userInteractionEnabled) { + isUserInteractionEnabled = YES; + } + } + + // UIActionsheet Buttons have UIButtonLabels with userInteractionEnabled=NO inside, + // grab the superview UINavigationButton instead. + if (!isUserInteractionEnabled && [self isKindOfClass:NSClassFromString(@"UIButtonLabel")]) { + UIView *button = [self superview]; + while (button && ![button isKindOfClass:NSClassFromString(@"UINavigationButton")]) { + button = [button superview]; + } + if (button && button.userInteractionEnabled) { + isUserInteractionEnabled = YES; + } + } + + return isUserInteractionEnabled; +} + +- (BOOL)isNavigationItemView; +{ + return [self isKindOfClass:NSClassFromString(@"UINavigationItemView")] || [self isKindOfClass:NSClassFromString(@"_UINavigationBarBackIndicatorView")]; +} + +- (UIWindow *)windowOrIdentityWindow +{ + if (CGAffineTransformIsIdentity(self.window.transform)) { + return self.window; + } + + for (UIWindow *window in [[UIApplication sharedApplication] windowsWithKeyWindow]) { + if (CGAffineTransformIsIdentity(window.transform)) { + return window; + } + } + + return nil; +} + +- (BOOL)isVisibleInViewHierarchy +{ + __block BOOL result = YES; + [self performBlockOnAscendentViews:^(UIView *view, BOOL *stop) { + if (view.isHidden) { + result = NO; + if (stop != NULL) { + *stop = YES; + } + } + }]; + return result; +} + +- (void)performBlockOnDescendentViews:(void (^)(UIView *view, BOOL *stop))block +{ + BOOL stop = NO; + [self performBlockOnDescendentViews:block stop:&stop]; +} + +- (void)performBlockOnDescendentViews:(void (^)(UIView *view, BOOL *stop))block stop:(BOOL *)stop +{ + block(self, stop); + if (*stop) { + return; + } + + for (UIView *view in self.subviews) { + [view performBlockOnDescendentViews:block stop:stop]; + if (*stop) { + return; + } + } +} + +- (void)performBlockOnAscendentViews:(void (^)(UIView *view, BOOL *stop))block +{ + BOOL stop = NO; + UIView *checkedView = self; + while(checkedView && stop == NO) { + block(checkedView, &stop); + checkedView = checkedView.superview; + } +} + + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIWindow-KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIWindow-KIFAdditions.h new file mode 100755 index 000000000..64c9b2c40 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIWindow-KIFAdditions.h @@ -0,0 +1,17 @@ +// +// UIWindow-KIFAdditions.h +// KIF +// +// Created by Eric Firestone on 5/20/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + + +@interface UIWindow (KIFAdditions) + +- (UIResponder *)firstResponder; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIWindow-KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIWindow-KIFAdditions.m new file mode 100755 index 000000000..893b49e1e --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/UIWindow-KIFAdditions.m @@ -0,0 +1,15 @@ +// +// UIWindow-KIFAdditions.m +// KIF +// +// Created by Eric Firestone on 5/20/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "UIWindow-KIFAdditions.h" + + +//@implementation UIWindow (KIFAdditions) +// +//@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/XCTestCase-KIFAdditions.h b/examples/InterstitialUnifiedDemand/KIF-master/Additions/XCTestCase-KIFAdditions.h new file mode 100755 index 000000000..64f966c07 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/XCTestCase-KIFAdditions.h @@ -0,0 +1,14 @@ +// +// XCTestCase-KIFAdditions.h +// KIF +// +// Created by Tony DiPasquale on 12/9/13. +// +// + +#import +#import "KIFTestActor.h" + +@interface XCTestCase (KIFAdditions) + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Additions/XCTestCase-KIFAdditions.m b/examples/InterstitialUnifiedDemand/KIF-master/Additions/XCTestCase-KIFAdditions.m new file mode 100755 index 000000000..01e8aff25 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Additions/XCTestCase-KIFAdditions.m @@ -0,0 +1,94 @@ +// +// XCTestCase-KIFAdditions.m +// KIF +// +// Created by Tony DiPasquale on 12/9/13. +// +// + +#import "XCTestCase-KIFAdditions.h" +#import "LoadableCategory.h" +#import "UIApplication-KIFAdditions.h" +#import + +MAKE_CATEGORIES_LOADABLE(TestCase_KIFAdditions) + +static inline void Swizzle(Class c, SEL orig, SEL new) +{ + Method origMethod = class_getInstanceMethod(c, orig); + Method newMethod = class_getInstanceMethod(c, new); + if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) + class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod)); + else + method_exchangeImplementations(origMethod, newMethod); +} + +@interface XCTestCase () +- (void)_recordUnexpectedFailureWithDescription:(id)arg1 exception:(id)arg2; +@end + +@implementation XCTestCase (KIFAdditions) + +- (void)failWithException:(NSException *)exception stopTest:(BOOL)stop +{ + self.continueAfterFailure = YES; + + [self recordFailureWithDescription:exception.description inFile:exception.userInfo[@"FilenameKey"] atLine:[exception.userInfo[@"LineNumberKey"] unsignedIntegerValue] expected:NO]; + + if (stop) { + [self writeScreenshotForException:exception]; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + Swizzle([XCTestCase class], @selector(_recordUnexpectedFailureWithDescription:exception:), @selector(KIF_recordUnexpectedFailureWithDescription:exception:)); + }); + [exception raise]; + } +} + +- (void)failWithExceptions:(NSArray *)exceptions stopTest:(BOOL)stop +{ + NSException *lastException = exceptions.lastObject; + for (NSException *exception in exceptions) { + [self failWithException:exception stopTest:(exception == lastException ? stop : NO)]; + } +} + +- (void)KIF_recordUnexpectedFailureWithDescription:(id)arg1 exception:(NSException *)arg2 +{ + if (![[arg2 name] isEqualToString:@"KIFFailureException"]) { + [self KIF_recordUnexpectedFailureWithDescription:arg1 exception:arg2]; + } +} + +- (void)writeScreenshotForException:(NSException *)exception; +{ + [[UIApplication sharedApplication] writeScreenshotForLine:[exception.userInfo[@"LineNumberKey"] unsignedIntegerValue] inFile:exception.userInfo[@"FilenameKey"] description:nil error:NULL]; +} + +@end + +#ifdef __IPHONE_8_0 + +@interface XCTestSuite () +- (void)_recordUnexpectedFailureForTestRun:(id)arg1 description:(id)arg2 exception:(id)arg3; +@end + +@implementation XCTestSuite (KIFAdditions) + ++ (void)load +{ + Swizzle([XCTestSuite class], @selector(_recordUnexpectedFailureForTestRun:description:exception:), @selector(KIF_recordUnexpectedFailureForTestRun:description:exception:)); +} + +- (void)KIF_recordUnexpectedFailureForTestRun:(XCTestSuiteRun *)arg1 description:(id)arg2 exception:(NSException *)arg3 +{ + if (![[arg3 name] isEqualToString:@"KIFFailureException"]) { + [self KIF_recordUnexpectedFailureForTestRun:arg1 description:arg2 exception:arg3]; + } else { + [arg1 recordFailureWithDescription:[NSString stringWithFormat:@"Test suite stopped on fatal error: %@", arg3.description] inFile:arg3.userInfo[@"FilenameKey"] atLine:[arg3.userInfo[@"LineNumberKey"] unsignedIntegerValue] expected:NO]; + } +} + +@end + +#endif diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/IOHIDEvent+KIF.h b/examples/InterstitialUnifiedDemand/KIF-master/Classes/IOHIDEvent+KIF.h new file mode 100755 index 000000000..b9253ee83 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/IOHIDEvent+KIF.h @@ -0,0 +1,11 @@ +// +// IOHIDEvent+KIF.h +// KIF +// +// Created by Thomas Bonnin on 7/6/15. +// +// + +typedef struct __IOHIDEvent * IOHIDEventRef; +IOHIDEventRef kif_IOHIDEventWithTouches(NSArray *touches); + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/IOHIDEvent+KIF.m b/examples/InterstitialUnifiedDemand/KIF-master/Classes/IOHIDEvent+KIF.m new file mode 100755 index 000000000..737cc8a8f --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/IOHIDEvent+KIF.m @@ -0,0 +1,188 @@ +// +// IOHIDEvent+KIF.m +// KIF +// +// Created by Thomas Bonnin on 7/6/15. +// +// + +#import +#import "IOHIDEvent+KIF.h" +#import + +#define IOHIDEventFieldBase(type) (type << 16) +#ifdef __LP64__ +typedef double IOHIDFloat; +#else +typedef float IOHIDFloat; +#endif +typedef UInt32 IOOptionBits; +typedef uint32_t IOHIDDigitizerTransducerType; +typedef uint32_t IOHIDEventField; +typedef uint32_t IOHIDEventType; + +void IOHIDEventAppendEvent(IOHIDEventRef event, IOHIDEventRef childEvent); +void IOHIDEventSetIntegerValue(IOHIDEventRef event, IOHIDEventField field, int value); +void IOHIDEventSetSenderID(IOHIDEventRef event, uint64_t sender); + +enum { + kIOHIDDigitizerTransducerTypeStylus = 0, + kIOHIDDigitizerTransducerTypePuck, + kIOHIDDigitizerTransducerTypeFinger, + kIOHIDDigitizerTransducerTypeHand +}; + +enum { + kIOHIDEventTypeNULL, // 0 + kIOHIDEventTypeVendorDefined, + kIOHIDEventTypeButton, + kIOHIDEventTypeKeyboard, + kIOHIDEventTypeTranslation, + kIOHIDEventTypeRotation, // 5 + kIOHIDEventTypeScroll, + kIOHIDEventTypeScale, + kIOHIDEventTypeZoom, + kIOHIDEventTypeVelocity, + kIOHIDEventTypeOrientation, // 10 + kIOHIDEventTypeDigitizer, + kIOHIDEventTypeAmbientLightSensor, + kIOHIDEventTypeAccelerometer, + kIOHIDEventTypeProximity, + kIOHIDEventTypeTemperature, // 15 + kIOHIDEventTypeNavigationSwipe, + kIOHIDEventTypePointer, + kIOHIDEventTypeProgress, + kIOHIDEventTypeMultiAxisPointer, + kIOHIDEventTypeGyro, // 20 + kIOHIDEventTypeCompass, + kIOHIDEventTypeZoomToggle, + kIOHIDEventTypeDockSwipe, // just like kIOHIDEventTypeNavigationSwipe, but intended for consumption by Dock + kIOHIDEventTypeSymbolicHotKey, + kIOHIDEventTypePower, // 25 + kIOHIDEventTypeLED, + kIOHIDEventTypeFluidTouchGesture, // This will eventually superseed Navagation and Dock swipes + kIOHIDEventTypeBoundaryScroll, + kIOHIDEventTypeBiometric, + kIOHIDEventTypeUnicode, // 30 + kIOHIDEventTypeAtmosphericPressure, + kIOHIDEventTypeUndefined, + kIOHIDEventTypeCount, // This should always be last + + + // DEPRECATED: + kIOHIDEventTypeSwipe = kIOHIDEventTypeNavigationSwipe, + kIOHIDEventTypeMouse = kIOHIDEventTypePointer +}; + +enum { + kIOHIDDigitizerEventRange = 0x00000001, + kIOHIDDigitizerEventTouch = 0x00000002, + kIOHIDDigitizerEventPosition = 0x00000004, + kIOHIDDigitizerEventStop = 0x00000008, + kIOHIDDigitizerEventPeak = 0x00000010, + kIOHIDDigitizerEventIdentity = 0x00000020, + kIOHIDDigitizerEventAttribute = 0x00000040, + kIOHIDDigitizerEventCancel = 0x00000080, + kIOHIDDigitizerEventStart = 0x00000100, + kIOHIDDigitizerEventResting = 0x00000200, + kIOHIDDigitizerEventSwipeUp = 0x01000000, + kIOHIDDigitizerEventSwipeDown = 0x02000000, + kIOHIDDigitizerEventSwipeLeft = 0x04000000, + kIOHIDDigitizerEventSwipeRight = 0x08000000, + kIOHIDDigitizerEventSwipeMask = 0xFF000000, +}; +enum { + kIOHIDEventFieldDigitizerX = IOHIDEventFieldBase(kIOHIDEventTypeDigitizer), + kIOHIDEventFieldDigitizerY, + kIOHIDEventFieldDigitizerZ, + kIOHIDEventFieldDigitizerButtonMask, + kIOHIDEventFieldDigitizerType, + kIOHIDEventFieldDigitizerIndex, + kIOHIDEventFieldDigitizerIdentity, + kIOHIDEventFieldDigitizerEventMask, + kIOHIDEventFieldDigitizerRange, + kIOHIDEventFieldDigitizerTouch, + kIOHIDEventFieldDigitizerPressure, + kIOHIDEventFieldDigitizerAuxiliaryPressure, //BarrelPressure + kIOHIDEventFieldDigitizerTwist, + kIOHIDEventFieldDigitizerTiltX, + kIOHIDEventFieldDigitizerTiltY, + kIOHIDEventFieldDigitizerAltitude, + kIOHIDEventFieldDigitizerAzimuth, + kIOHIDEventFieldDigitizerQuality, + kIOHIDEventFieldDigitizerDensity, + kIOHIDEventFieldDigitizerIrregularity, + kIOHIDEventFieldDigitizerMajorRadius, + kIOHIDEventFieldDigitizerMinorRadius, + kIOHIDEventFieldDigitizerCollection, + kIOHIDEventFieldDigitizerCollectionChord, + kIOHIDEventFieldDigitizerChildEventMask, + kIOHIDEventFieldDigitizerIsDisplayIntegrated, + kIOHIDEventFieldDigitizerQualityRadiiAccuracy, +}; +IOHIDEventRef IOHIDEventCreateDigitizerEvent(CFAllocatorRef allocator, AbsoluteTime timeStamp, IOHIDDigitizerTransducerType type, + uint32_t index, uint32_t identity, uint32_t eventMask, uint32_t buttonMask, + IOHIDFloat x, IOHIDFloat y, IOHIDFloat z, IOHIDFloat tipPressure, IOHIDFloat barrelPressure, + Boolean range, Boolean touch, IOOptionBits options); +IOHIDEventRef IOHIDEventCreateDigitizerFingerEventWithQuality(CFAllocatorRef allocator, AbsoluteTime timeStamp, + uint32_t index, uint32_t identity, uint32_t eventMask, + IOHIDFloat x, IOHIDFloat y, IOHIDFloat z, IOHIDFloat tipPressure, IOHIDFloat twist, + IOHIDFloat minorRadius, IOHIDFloat majorRadius, IOHIDFloat quality, IOHIDFloat density, IOHIDFloat irregularity, + Boolean range, Boolean touch, IOOptionBits options); + +IOHIDEventRef kif_IOHIDEventWithTouches(NSArray *touches) { + uint64_t abTime = mach_absolute_time(); + AbsoluteTime timeStamp; + timeStamp.hi = (UInt32)(abTime >> 32); + timeStamp.lo = (UInt32)(abTime); + + IOHIDEventRef handEvent = IOHIDEventCreateDigitizerEvent(kCFAllocatorDefault, // allocator + timeStamp, // timestamp + kIOHIDDigitizerTransducerTypeHand, // type + 0, // index + 0, // identity + kIOHIDDigitizerEventTouch, // eventMask + 0, // buttonMask + 0, // x + 0, // y + 0, // z + 0, // tipPressure + 0, // barrelPressure + 0, // range + true, // touch + 0); // options + IOHIDEventSetIntegerValue(handEvent, kIOHIDEventFieldDigitizerIsDisplayIntegrated, true); + + for (UITouch *touch in touches) + { + uint32_t eventMask = (touch.phase == UITouchPhaseMoved) ? kIOHIDDigitizerEventPosition : (kIOHIDDigitizerEventRange | kIOHIDDigitizerEventTouch); + uint32_t isTouching = (touch.phase == UITouchPhaseEnded) ? 0 : 1; + + CGPoint touchLocation = [touch locationInView:touch.window]; + + IOHIDEventRef fingerEvent = IOHIDEventCreateDigitizerFingerEventWithQuality(kCFAllocatorDefault, // allocator + timeStamp, // timestamp + (UInt32)[touches indexOfObject:touch] + 1, //index + 2, // identity + eventMask, // eventMask + (IOHIDFloat)touchLocation.x, // x + (IOHIDFloat)touchLocation.y, // y + 0.0, // z + 0, // tipPressure + 0, // twist + 5.0, // minor radius + 5.0, // major radius + 1.0, // quality + 1.0, // density + 1.0, // irregularity + (IOHIDFloat)isTouching, // range + (IOHIDFloat)isTouching, // touch + 0); // options + IOHIDEventSetIntegerValue(fingerEvent, kIOHIDEventFieldDigitizerIsDisplayIntegrated, 1); + + IOHIDEventAppendEvent(handEvent, fingerEvent); + CFRelease(fingerEvent); + } + + return handEvent; +} \ No newline at end of file diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIF-Prefix.pch b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIF-Prefix.pch new file mode 100755 index 000000000..69b4274ea --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIF-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'KIF' target in the 'KIF' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIF-XCTestPrefix.pch b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIF-XCTestPrefix.pch new file mode 100755 index 000000000..51c42519c --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIF-XCTestPrefix.pch @@ -0,0 +1,8 @@ +// +// Prefix header for all source files of the 'KIF' target in the 'KIF' project +// + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIF.h b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIF.h new file mode 100755 index 000000000..a8c00a37b --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIF.h @@ -0,0 +1,16 @@ +// +// KIF.h +// KIF +// +// Created by Jim Puls on 12/21/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFTestActor.h" +#import "KIFTestCase.h" +#import "KIFSystemTestActor.h" +#import "KIFUITestActor.h" +#import "KIFUITestActor-ConditionalTests.h" + +#import "XCTestCase-KIFAdditions.h" diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFAccessibilityEnabler.h b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFAccessibilityEnabler.h new file mode 100755 index 000000000..ba77decb9 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFAccessibilityEnabler.h @@ -0,0 +1,13 @@ +// +// KIFAccessibilityEnabler.h +// KIF +// +// Created by Timothy Clem on 10/11/15. +// +// + +#import + +@interface KIFAccessibilityEnabler : NSObject + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFAccessibilityEnabler.m b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFAccessibilityEnabler.m new file mode 100755 index 000000000..ea1558ece --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFAccessibilityEnabler.m @@ -0,0 +1,115 @@ +// +// KIFAccessibilityEnabler.m +// KIF +// +// Created by Timothy Clem on 10/11/15. +// +// + +#import "KIFAccessibilityEnabler.h" +#import +#import + + +#if __IPHONE_OS_VERSION_MAX_ALLOWED < 90000 +@protocol XCTestObservation +@end + +@interface XCTestObservationCenter : NSObject ++ (XCTestObservationCenter *)sharedTestObservationCenter; +- (void)addTestObserver:(id )testObserver; +@end +#endif + + +@interface AccessibilitySettingsController +- (void)setAXInspectorEnabled:(NSNumber*)enabled specifier:(id)specifier; +- (NSNumber *)AXInspectorEnabled:(id)specifier; +@end + + +@interface KIFAccessibilityEnabler () + +@property (nonatomic, strong) id axSettingPrefController; +@property (nonatomic, strong) NSNumber *initialAccessibilityInspectorSetting; + +@end + + +@implementation KIFAccessibilityEnabler + ++ (void)load +{ + @autoreleasepool { + if ([XCTestObservationCenter respondsToSelector:@selector(sharedTestObservationCenter)]) { + XCTestObservationCenter *observationCenter = [XCTestObservationCenter sharedTestObservationCenter]; + [observationCenter addTestObserver:[self sharedAccessibilityEnabler]]; + } + } +} + ++ (instancetype)sharedAccessibilityEnabler +{ + static dispatch_once_t onceToken; + static KIFAccessibilityEnabler *_sharedAccessibilityEnabler; + dispatch_once(&onceToken, ^{ + _sharedAccessibilityEnabler = [[self alloc] init]; + }); + + return _sharedAccessibilityEnabler; +} + +- (void)_enableAccessibility +{ + NSDictionary *environment = [[NSProcessInfo processInfo] environment]; + NSString *simulatorRoot = [environment objectForKey:@"IPHONE_SIMULATOR_ROOT"]; + + NSString *appSupportLocation = @"/System/Library/PrivateFrameworks/AppSupport.framework/AppSupport"; + if (simulatorRoot) { + appSupportLocation = [simulatorRoot stringByAppendingString:appSupportLocation]; + } + + void *appSupportLibrary = dlopen([appSupportLocation fileSystemRepresentation], RTLD_LAZY); + + CFStringRef (*copySharedResourcesPreferencesDomainForDomain)(CFStringRef domain) = dlsym(appSupportLibrary, "CPCopySharedResourcesPreferencesDomainForDomain"); + + if (copySharedResourcesPreferencesDomainForDomain) { + CFStringRef accessibilityDomain = copySharedResourcesPreferencesDomainForDomain(CFSTR("com.apple.Accessibility")); + + if (accessibilityDomain) { + CFPreferencesSetValue(CFSTR("ApplicationAccessibilityEnabled"), kCFBooleanTrue, accessibilityDomain, kCFPreferencesAnyUser, kCFPreferencesAnyHost); + CFRelease(accessibilityDomain); + } + } + + NSString* accessibilitySettingsBundleLocation = @"/System/Library/PreferenceBundles/AccessibilitySettings.bundle/AccessibilitySettings"; + if (simulatorRoot) { + accessibilitySettingsBundleLocation = [simulatorRoot stringByAppendingString:accessibilitySettingsBundleLocation]; + } + const char *accessibilitySettingsBundlePath = [accessibilitySettingsBundleLocation fileSystemRepresentation]; + void* accessibilitySettingsBundle = dlopen(accessibilitySettingsBundlePath, RTLD_LAZY); + if (accessibilitySettingsBundle) { + Class axSettingsPrefControllerClass = NSClassFromString(@"AccessibilitySettingsController"); + self.axSettingPrefController = [[axSettingsPrefControllerClass alloc] init]; + + self.initialAccessibilityInspectorSetting = [self.axSettingPrefController AXInspectorEnabled:nil]; + [self.axSettingPrefController setAXInspectorEnabled:@(YES) specifier:nil]; + } +} + +- (void)_resetAccessibilityInspector +{ + [self.axSettingPrefController setAXInspectorEnabled:self.initialAccessibilityInspectorSetting specifier:nil]; +} + +- (void)testBundleWillStart:(NSBundle *)testBundle +{ + [self _enableAccessibility]; +} + +- (void)testBundleDidFinish:(NSBundle *)testBundle +{ + [self _resetAccessibilityInspector]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFSystemTestActor.h b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFSystemTestActor.h new file mode 100755 index 000000000..b5b5c2032 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFSystemTestActor.h @@ -0,0 +1,79 @@ +// +// KIFTester+Generic.h +// KIF +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFTestActor.h" +#import + +#define system KIFActorWithClass(KIFSystemTestActor) + +@interface KIFSystemTestActor : KIFTestActor + +/*! + @abstract Waits for a specific NSNotification. + @discussion Useful when a test requires an asynchronous task to complete, especially when that task does not trigger a visible change in the view hierarchy. + @param name The name of the NSNotification. + @param object The object to which the step should listen. Nil value will listen to all objects. + @return The detected NSNotification. + */ +- (NSNotification *)waitForNotificationName:(NSString*)name object:(id)object; + +/*! + @abstract Waits for a specific NSNotification, emitted during or after execution of a block. + @discussion Useful when step execution causes a notification to be emitted, but executes too quickly for waitForNotificationName: to observe it. + An observer will be registered for the notification before the block is executed. + @param name The name of the NSNotification. + @param object The object to which the step should listen. Nil value will listen to all objects. + @param block The block of code to be executed. + @return The detected NSNotification. + */ +- (NSNotification *)waitForNotificationName:(NSString *)name object:(id)object whileExecutingBlock:(void(^)())block; + +/*! + @abstract Simulates a memory warning. + */ +- (void)simulateMemoryWarning; + +/*! + @abstract Simulates a device rotation to a specific orentation from its last set orientation. + @discussion The first time this method is called, it will be from the device's natural orientation to the orientation described. + @param orientation The desired orientation. + */ +- (void)simulateDeviceRotationToOrientation:(UIDeviceOrientation)orientation; + +/*! + @abstract Waits for the application to request a specific URL while executing a block. + @param URLString The absolute string representation of the URL to detect. + @param block The block of code to be executed. + @param returnValue The value to return from @c +[UIApplication openURL:]. + */ +- (void)waitForApplicationToOpenURL:(NSString *)URLString whileExecutingBlock:(void(^)())block returning:(BOOL)returnValue; + +/*! + @abstract Waits for the application to request any URL while executing a block. + @param block The block of code to be executed. + @param returnValue The value to return from @c +[UIApplication openURL:]. + */ +- (void)waitForApplicationToOpenAnyURLWhileExecutingBlock:(void(^)())block returning:(BOOL)returnValue; + +/*! + @abstract Waits for the application to request any URL with the given URL Scheme while executing a block. + @param URLScheme The scheme component of the URL to detect. + @param block The block of code to be executed. + @param returnValue The value to return from @c +[UIApplication openURL:]. + */ +- (void)waitForApplicationToOpenURLWithScheme:(NSString *)URLScheme whileExecutingBlock:(void (^)())block returning:(BOOL)returnValue; + +/*! + @abstract Captured a screenshot of the current screen and writes it to disk with an optional description. + @discussion This step will fail if the @c KIF_SCREENSHOTS environment variable is not set or if the screenshot cannot be written to disk. + @param description A description to use when writing the file to disk. + */ +- (void)captureScreenshotWithDescription:(NSString *)description; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFSystemTestActor.m b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFSystemTestActor.m new file mode 100755 index 000000000..959e5dcea --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFSystemTestActor.m @@ -0,0 +1,115 @@ +// +// KIFTester+Generic.m +// KIF +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFSystemTestActor.h" +#import +#import "UIApplication-KIFAdditions.h" +#import "NSError-KIFAdditions.h" + +@implementation KIFSystemTestActor + +- (NSNotification *)waitForNotificationName:(NSString*)name object:(id)object +{ + return [self waitForNotificationName:name object:object whileExecutingBlock:nil]; +} + +- (NSNotification *)waitForNotificationName:(NSString *)name object:(id)object whileExecutingBlock:(void(^)())block +{ + return [self waitForNotificationName:name object:object whileExecutingBlock:block complete:nil]; +} + +- (NSNotification *)waitForNotificationName:(NSString *)name object:(id)object whileExecutingBlock:(void(^)())block complete:(void(^)())complete +{ + __block NSNotification *detectedNotification = nil; + id observer = [[NSNotificationCenter defaultCenter] addObserverForName:name object:object queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { + detectedNotification = note; + }]; + + if (block) { + block(); + } + + [self runBlock:^KIFTestStepResult(NSError **error) { + KIFTestWaitCondition(detectedNotification, error, @"Waiting for notification \"%@\"", name); + return KIFTestStepResultSuccess; + } complete:^(KIFTestStepResult result, NSError *error) { + [[NSNotificationCenter defaultCenter] removeObserver:observer]; + + if (complete) { + complete(); + } + }]; + + return detectedNotification; +} + +- (void)simulateMemoryWarning +{ + [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidReceiveMemoryWarningNotification object:[UIApplication sharedApplication]]; +} + +- (void)simulateDeviceRotationToOrientation:(UIDeviceOrientation)orientation +{ + [[UIDevice currentDevice] setValue:[NSNumber numberWithInt:orientation] forKey:@"orientation"]; +} + + +- (void)waitForApplicationToOpenAnyURLWhileExecutingBlock:(void (^)())block returning:(BOOL)returnValue +{ + [self waitForApplicationToOpenURL:nil whileExecutingBlock:block returning:returnValue]; +} + +- (void)waitForApplicationToOpenURLWithScheme:(NSString *)URLScheme whileExecutingBlock:(void (^)())block returning:(BOOL)returnValue { + [self waitForApplicationToOpenURLMatchingBlock:^(NSURL *actualURL){ + if (URLScheme && ![URLScheme isEqualToString:actualURL.scheme]) { + [self failWithError:[NSError KIFErrorWithFormat:@"Expected %@ to start with %@", actualURL.absoluteString, URLScheme] stopTest:YES]; + } + } whileExecutingBlock:block returning:returnValue]; +} + +- (void)waitForApplicationToOpenURL:(NSString *)URLString whileExecutingBlock:(void (^)())block returning:(BOOL)returnValue { + [self waitForApplicationToOpenURLMatchingBlock:^(NSURL *actualURL){ + + if (URLString && ![[actualURL absoluteString] isEqualToString:URLString]) { + [self failWithError:[NSError KIFErrorWithFormat:@"Expected %@, got %@", URLString, actualURL.absoluteString] stopTest:YES]; + } + } whileExecutingBlock:block returning:returnValue]; +} + +- (void)waitForApplicationToOpenURLMatchingBlock:(void (^)(NSURL *actualURL))URLMatcherBlock whileExecutingBlock:(void (^)())block returning:(BOOL)returnValue +{ + [UIApplication startMockingOpenURLWithReturnValue:returnValue]; + + id canOpenURLObserver = [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidMockCanOpenURLNotification object:[UIApplication sharedApplication] queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) { + if (URLMatcherBlock) { + NSURL *actualURL = [notification.userInfo objectForKey:UIApplicationOpenedURLKey]; + URLMatcherBlock(actualURL); + } + }]; + + NSNotification *notification = [self waitForNotificationName:UIApplicationDidMockOpenURLNotification object:[UIApplication sharedApplication] whileExecutingBlock:block complete:^{ + [UIApplication stopMockingOpenURL]; + [[NSNotificationCenter defaultCenter] removeObserver:canOpenURLObserver]; + }]; + + if (URLMatcherBlock) { + NSURL *actualURL = [notification.userInfo objectForKey:UIApplicationOpenedURLKey]; + URLMatcherBlock(actualURL); + } +} + +- (void)captureScreenshotWithDescription:(NSString *)description +{ + NSError *error; + if (![[UIApplication sharedApplication] writeScreenshotForLine:(NSUInteger)self.line inFile:self.file description:description error:&error]) { + [self failWithError:error stopTest:NO]; + } +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestActor.h b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestActor.h new file mode 100755 index 000000000..bbea43f50 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestActor.h @@ -0,0 +1,173 @@ +// +// KIFTester.h +// KIF +// +// Created by Brian Nickel on 12/13/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +#ifdef DEPRECATED_MSG_ATTRIBUTE +#define KIF_DEPRECATED(m) DEPRECATED_MSG_ATTRIBUTE(m) +#else +#define KIF_DEPRECATED(m) +#endif + +#define KIFActorWithClass(clazz) [clazz actorInFile:[NSString stringWithUTF8String:__FILE__] atLine:__LINE__ delegate:self] + +/*! + @define KIFTestCondition + @abstract Tests a condition and returns a failure result if the condition isn't true. + @discussion This is a useful macro for quickly evaluating conditions in a test step. If the condition is false then the current test step will be aborted with a failure result. + @param condition The condition to test. + @param error The NSError object to put the error string into. May be nil, but should usually be the error parameter from the test step execution block. + @param ... A string describing what the failure was that occurred. This may be a format string with additional arguments. + */ +#define KIFTestCondition(condition, error, ...) ({ \ +if (!(condition)) { \ +if (error) { \ +*error = [NSError errorWithDomain:@"KIFTest" code:KIFTestStepResultFailure userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:__VA_ARGS__], NSLocalizedDescriptionKey, nil]]; \ +} \ +return KIFTestStepResultFailure; \ +} \ +}) + +/*! + @define KIFTestWaitCondition + @abstract Tests a condition and returns a wait result if the condition isn't true. + @discussion This is a useful macro for quickly evaluating conditions in a test step. If the condition is false then the current test step will be aborted with a wait result, indicating that it should be called again in the near future. + @param condition The condition to test. + @param error The NSError object to put the error string into. May be nil, but should usually be the error parameter from the test step execution block. + @param ... A string describing why the step needs to wait. This is important since this reason will be considered the cause of a timeout error if the step requires waiting for too long. This may be a format string with additional arguments. + */ +#define KIFTestWaitCondition(condition, error, ...) ({ \ +if (!(condition)) { \ +if (error) { \ +*error = [NSError errorWithDomain:@"KIFTest" code:KIFTestStepResultWait userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:__VA_ARGS__], NSLocalizedDescriptionKey, nil]]; \ +} \ +return KIFTestStepResultWait; \ +} \ +}) + + +/*! + @enum KIFTestStepResult + @abstract Result codes from a test step. + @constant KIFTestStepResultFailure The step failed and the test controller should move to the next scenario. + @constant KIFTestStepResultSuccess The step succeeded and the test controller should move to the next step in the current scenario. + @constant KIFTestStepResultWait The test isn't ready yet and should be tried again after a short delay. + */ +typedef NS_ENUM(NSUInteger, KIFTestStepResult) { + KIFTestStepResultFailure = 0, + KIFTestStepResultSuccess, + KIFTestStepResultWait, +}; + +/*! + @typedef KIFTestExecutionBlock + @param error An error to fill out in the case of a failure or wait condition. Filling out this error is mandatory in these cases to ensure that testing output is useful. + @result A test result code. Returning KIFTestStepResultWait will cause the block to be tried again on the next iteration. + */ +typedef KIFTestStepResult (^KIFTestExecutionBlock)(NSError **error); + +/*! + @typedef KIFTestCompletionBlock + @param result The result of the test, either KIFTestStepResultSuccess or KIFTestStepResultFailure. + @param error An error provided by the test or nil if result is equal to KIFTestStepResultSuccess. + */ +typedef void (^KIFTestCompletionBlock)(KIFTestStepResult result, NSError *error); + +@protocol KIFTestActorDelegate; + +@interface KIFTestActor : NSObject + ++ (instancetype)actorInFile:(NSString *)file atLine:(NSInteger)line delegate:(id)delegate; + +@property (strong, nonatomic, readonly) NSString *file; +@property (nonatomic, readonly) NSInteger line; +@property (weak, nonatomic, readonly) id delegate; +@property (nonatomic) NSTimeInterval executionBlockTimeout; +@property (nonatomic) NSTimeInterval animationWaitingTimeout; + +- (instancetype)usingTimeout:(NSTimeInterval)executionBlockTimeout; + +- (void)runBlock:(KIFTestExecutionBlock)executionBlock complete:(KIFTestCompletionBlock)completionBlock timeout:(NSTimeInterval)timeout; +- (void)runBlock:(KIFTestExecutionBlock)executionBlock complete:(KIFTestCompletionBlock)completionBlock; +- (void)runBlock:(KIFTestExecutionBlock)executionBlock timeout:(NSTimeInterval)timeout; +- (void)runBlock:(KIFTestExecutionBlock)executionBlock; + + +/*! + @discussion Attempts to run the test block similar to -runBlock:complete:timeout: but does not halt the test on completion, instead returning NO on failure and providing an error description to the optional error parameter. + */ +- (BOOL)tryRunningBlock:(KIFTestExecutionBlock)executionBlock complete:(KIFTestCompletionBlock)completionBlock timeout:(NSTimeInterval)timeout error:(out NSError **)error; + +/*! + @method defaultAnimationWaitingTimeout + @abstract The default amount of time to wait for an animation to complete. + @discussion To change the default value of the timeout property, call +setDefaultAnimationWaitingTimeout: with a different value. + */ ++ (NSTimeInterval)defaultAnimationWaitingTimeout; + +/*! + @method setDefaultAnimationWaitingTimeout: + @abstract Sets the default amount of time to wait for an animation to complete. + */ ++ (void)setDefaultAnimationWaitingTimeout:(NSTimeInterval)newDefaultAnimationWaitingTimeout; + +/*! + @method defaultTimeout + @abstract The default amount of time to assign to execution blocks before assuming they failed. + @discussion To change the default value of the timeout property, call +setDefaultTimeout: with a different value. + */ ++ (NSTimeInterval)defaultTimeout; + +/*! + @method setDefaultTimeout: + @abstract Sets the default amount of time to assign to execution blocks before assuming they failed. + */ ++ (void)setDefaultTimeout:(NSTimeInterval)newDefaultTimeout; + +/*! + @method stepDelay + @abstract The amount of time that execution blocks use before trying again to met desired conditions. + @discussion To change the default value of the step delay property, call +setStepDelay: with a different value. + */ ++ (NSTimeInterval)stepDelay; + +/*! + @method setStepDelay: + @abstract Sets the amount of time that execution blocks use before trying again to met desired conditions. + */ ++ (void)setStepDelay:(NSTimeInterval)newStepDelay; + +/*! + @abstract Fails the test. + @discussion Mostly useful for test debugging or as a placeholder when building new tests. + */ +- (void)fail; + +- (void)failWithError:(NSError *)error stopTest:(BOOL)stopTest; + +/*! + @abstract Waits for a certain amount of time before returning. + @discussion In general when waiting for the app to get into a known state, it's better to use -waitForTappableViewWithAccessibilityLabel:, however this step may be useful in some situations as well. + @param timeInterval The number of seconds to wait before returning. + */ +- (void)waitForTimeInterval:(NSTimeInterval)timeInterval; + + + +@end + +@protocol KIFTestActorDelegate + +- (void)failWithException:(NSException *)exception stopTest:(BOOL)stop; +- (void)failWithExceptions:(NSArray *)exceptions stopTest:(BOOL)stop; + +@end + +@interface KIFTestActor (Delegate) +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestActor.m b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestActor.m new file mode 100755 index 000000000..8f9f5ac33 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestActor.m @@ -0,0 +1,180 @@ +// +// KIFTester.m +// KIF +// +// Created by Brian Nickel on 12/13/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import +#import "NSException-KIFAdditions.h" +#import "KIFTestActor.h" +#import "NSError-KIFAdditions.h" +#import +#import +#import "UIApplication-KIFAdditions.h" +#import "UIView-KIFAdditions.h" + +@implementation KIFTestActor + ++ (void)load +{ + @autoreleasepool { + NSLog(@"KIFTester loaded"); + [UIApplication swizzleRunLoop]; + } +} + +- (instancetype)initWithFile:(NSString *)file line:(NSInteger)line delegate:(id)delegate +{ + self = [super init]; + if (self) { + _file = file; + _line = line; + _delegate = delegate; + _executionBlockTimeout = [[self class] defaultTimeout]; + _animationWaitingTimeout = [[self class] defaultAnimationWaitingTimeout]; + } + return self; +} + ++ (instancetype)actorInFile:(NSString *)file atLine:(NSInteger)line delegate:(id)delegate +{ + return [[self alloc] initWithFile:file line:line delegate:delegate]; +} + +- (instancetype)usingTimeout:(NSTimeInterval)executionBlockTimeout +{ + self.executionBlockTimeout = executionBlockTimeout; + return self; +} + +- (BOOL)tryRunningBlock:(KIFTestExecutionBlock)executionBlock complete:(KIFTestCompletionBlock)completionBlock timeout:(NSTimeInterval)timeout error:(out NSError **)error +{ + NSDate *startDate = [NSDate date]; + KIFTestStepResult result; + NSError *internalError; + + while ((result = executionBlock(&internalError)) == KIFTestStepResultWait && -[startDate timeIntervalSinceNow] < timeout) { + CFRunLoopRunInMode([[UIApplication sharedApplication] currentRunLoopMode] ?: kCFRunLoopDefaultMode, KIFTestStepDelay, false); + } + + if (result == KIFTestStepResultWait) { + internalError = [NSError KIFErrorWithUnderlyingError:internalError format:@"The step timed out after %.2f seconds: %@", timeout, internalError.localizedDescription]; + result = KIFTestStepResultFailure; + } + + if (completionBlock) { + completionBlock(result, internalError); + } + + if (error) { + *error = internalError; + } + + return result != KIFTestStepResultFailure; +} + +- (void)runBlock:(KIFTestExecutionBlock)executionBlock complete:(KIFTestCompletionBlock)completionBlock timeout:(NSTimeInterval)timeout +{ + NSError *error = nil; + if (![self tryRunningBlock:executionBlock complete:completionBlock timeout:timeout error:&error]) { + [self failWithError:error stopTest:YES]; + } +} + +- (void)runBlock:(KIFTestExecutionBlock)executionBlock complete:(KIFTestCompletionBlock)completionBlock +{ + [self runBlock:executionBlock complete:completionBlock timeout:self.executionBlockTimeout]; +} + +- (void)runBlock:(KIFTestExecutionBlock)executionBlock timeout:(NSTimeInterval)timeout +{ + [self runBlock:executionBlock complete:nil timeout:timeout]; +} + +- (void)runBlock:(KIFTestExecutionBlock)executionBlock +{ + [self runBlock:executionBlock complete:nil]; +} + + +#pragma mark Class Methods + +static NSTimeInterval KIFTestStepDefaultAnimationWaitingTimeout = 0.5; +static NSTimeInterval KIFTestStepDefaultTimeout = 10.0; +static NSTimeInterval KIFTestStepDelay = 0.1; + ++ (NSTimeInterval)defaultAnimationWaitingTimeout +{ + return KIFTestStepDefaultAnimationWaitingTimeout; +} + ++ (void)setDefaultAnimationWaitingTimeout:(NSTimeInterval)newDefaultAnimationWaitingTimeout; +{ + KIFTestStepDefaultAnimationWaitingTimeout = newDefaultAnimationWaitingTimeout; +} + ++ (NSTimeInterval)defaultTimeout; +{ + return KIFTestStepDefaultTimeout; +} + ++ (void)setDefaultTimeout:(NSTimeInterval)newDefaultTimeout; +{ + KIFTestStepDefaultTimeout = newDefaultTimeout; +} + ++ (NSTimeInterval)stepDelay; +{ + return KIFTestStepDelay; +} + ++ (void)setStepDelay:(NSTimeInterval)newStepDelay; +{ + KIFTestStepDelay = newStepDelay; +} + +#pragma mark Generic tests + +- (void)fail +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + KIFTestCondition(NO, error, @"This test always fails"); + }]; +} + +- (void)failWithError:(NSError *)error stopTest:(BOOL)stopTest +{ + [self.delegate failWithException:[NSException failureInFile:self.file atLine:(int)self.line withDescription:error.localizedDescription] stopTest:stopTest]; +} + +- (void)waitForTimeInterval:(NSTimeInterval)timeInterval +{ + NSTimeInterval startTime = [NSDate timeIntervalSinceReferenceDate]; + + [self runBlock:^KIFTestStepResult(NSError **error) { + KIFTestWaitCondition((([NSDate timeIntervalSinceReferenceDate] - startTime) >= timeInterval), error, @"Waiting for time interval to expire."); + return KIFTestStepResultSuccess; + } timeout:timeInterval + 1]; +} + +@end + +@implementation KIFTestActor (Delegate) + +- (void)failWithException:(NSException *)exception stopTest:(BOOL)stop +{ + [self failWithExceptions:@[exception] stopTest:stop]; +} + +- (void)failWithExceptions:(NSArray *)exceptions stopTest:(BOOL)stop +{ + NSException *firstException = [exceptions objectAtIndex:0]; + NSException *newException = [NSException failureInFile:self.file atLine:(int)self.line withDescription:@"Failure in child step: %@", firstException.description]; + + [self.delegate failWithExceptions:[exceptions arrayByAddingObject:newException] stopTest:stop]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestCase.h b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestCase.h new file mode 100755 index 000000000..2823bdc6b --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestCase.h @@ -0,0 +1,48 @@ +// +// KIFTestCase.h +// KIF +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +/*! + * @abstract @c KIFTestCase subclasses @c XCTestCase to add setup and teardown steps that can be used to execute KIF test steps. + * @discussion This class provides four new methods: @c beforeAll and @c afterAll which run once before and after all tests and @c beforeEach and @c afterEach which run before and after every test. @c beforeEach and @c afterEach are guaranteed to run in the same instance as each test, but @c beforeAll and @c afterAll are not. As such, @c beforeEach can be used to set up instance variables while @c beforeAll can only be used to set up static variables. + */ +#import +#import "XCTestCase-KIFAdditions.h" +@interface KIFTestCase : XCTestCase + +/*! + * @abstract This method runs once before executing the first test in the class. + * @discussion This should be used for navigating to the starting point in the app where all tests will start from. Because this method is not guaranteed to run in the same instance as tests, it should not be used for setting up instance variables but can be used for setting up static variables. + */ +- (void)beforeAll; + +/*! + * @abstract This method runs before each test. + * @discussion This should be used for any common tasks required before each test. Because this method is guaranteed to run in the same instance as tests, it can be used for setting up instance variables. + */ +- (void)beforeEach; + +/*! + * @abstract This method runs after each test. + * @discussion This should be used for restoring the app to the state it was in before the test. This could include conditional logic to recover from failed tests. + */ +- (void)afterEach; + +/*! + * @abstract This method runs once after executing the last test in the class. + * @discussion This should be used for navigating back to the initial state of the app, where it was before @c beforeAll. This should also be used for tearing down any static methods created by @c beforeAll. + */ +- (void)afterAll; + +/*! + * @discussion When @c YES, rather than failing the test and advancing on the first failure, KIF will stop executing tests and begin spinning the run loop. This provides an opportunity for inspecting the state of the app when the failure occurred. + */ +@property (nonatomic, assign) BOOL stopTestsOnFirstBigFailure; + +@end + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestCase.m b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestCase.m new file mode 100755 index 000000000..c9a096c86 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestCase.m @@ -0,0 +1,132 @@ +// +// KIFTestCase.m +// KIF +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFTestCase.h" +#import +#import "UIApplication-KIFAdditions.h" +#import "KIFTestActor.h" + +#define SIG(class, selector) [class instanceMethodSignatureForSelector:selector] + +@implementation KIFTestCase +{ + NSException *_stoppingException; +} + +NSComparisonResult selectorSort(NSInvocation *invocOne, NSInvocation *invocTwo, void *reverse); + ++ (id)defaultTestSuite +{ + if (self == [KIFTestCase class]) { + // Don't run KIFTestCase "tests" + return nil; + } + + return [super defaultTestSuite]; +} + +- (id)initWithInvocation:(NSInvocation *)anInvocation; +{ + self = [super initWithInvocation:anInvocation]; + if (!self) { + return nil; + } + + self.continueAfterFailure = NO; + return self; +} + +- (void)beforeEach { } +- (void)afterEach { } +- (void)beforeAll { } +- (void)afterAll { } + +NSComparisonResult selectorSort(NSInvocation *invocOne, NSInvocation *invocTwo, void *reverse) { + + NSString *selectorOne = NSStringFromSelector([invocOne selector]); + NSString *selectorTwo = NSStringFromSelector([invocTwo selector]); + return [selectorOne compare:selectorTwo options:NSCaseInsensitiveSearch]; +} + ++ (NSArray *)testInvocations +{ + NSArray *disorderedInvoc = [super testInvocations]; + NSArray *newArray = [disorderedInvoc sortedArrayUsingFunction:selectorSort context:NULL]; + return newArray; +} + ++ (void)setUp +{ + [self performSetupTearDownWithSelector:@selector(beforeAll)]; +} + ++ (void)tearDown +{ + [self performSetupTearDownWithSelector:@selector(afterAll)]; +} + ++ (void)performSetupTearDownWithSelector:(SEL)selector +{ + KIFTestCase *testCase = [self testCaseWithSelector:selector]; + if ([testCase respondsToSelector:selector]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + [testCase performSelector:selector]; +#pragma clang diagnostic pop + } + + if (testCase->_stoppingException) { + [testCase->_stoppingException raise]; + } +} + +- (void)setUp; +{ + [super setUp]; + + if ([self isNotBeforeOrAfter]) { + [self beforeEach]; + } +} + +- (void)tearDown; +{ + if ([self isNotBeforeOrAfter]) { + [self afterEach]; + } + + [super tearDown]; +} + +- (BOOL)isNotBeforeOrAfter; +{ + SEL selector = self.invocation.selector; + return selector != @selector(beforeAll) && selector != @selector(afterAll); +} + +- (void)failWithException:(NSException *)exception stopTest:(BOOL)stop +{ + if (stop) { + _stoppingException = exception; + } + + if (stop && self.stopTestsOnFirstBigFailure) { + NSLog(@"Fatal failure encountered: %@", exception.description); + NSLog(@"Stopping tests since stopTestsOnFirstBigFailure = YES"); + + KIFTestActor *waiter = [[KIFTestActor alloc] init]; + [waiter waitForTimeInterval:[[NSDate distantFuture] timeIntervalSinceNow]]; + + return; + } else { + [super failWithException:exception stopTest:stop]; + } +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestStepValidation.h b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestStepValidation.h new file mode 100755 index 000000000..796e76165 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestStepValidation.h @@ -0,0 +1,51 @@ +// +// KIFTestStepValidation.h +// KIF +// +// Created by Brian Nickel on 7/27/13. +// +// + +#import +#import "KIFTestCase.h" + +#define __KIFFail XCTFail +#define __KIFAssertEqual XCTAssertEqual +#define __KIFAssertEqualObjects XCTAssertEqualObjects + +#define KIFExpectFailure(stmt) \ +{\ + _MockKIFTestActorDelegate *mockDelegate = [_MockKIFTestActorDelegate mockDelegate];\ + {\ + _MockKIFTestActorDelegate *self = mockDelegate;\ + @try { stmt; }\ + @catch (NSException *exception) { }\ + }\ + if (!mockDelegate.failed) {\ + __KIFFail(@"%s should have failed.", #stmt);\ + }\ +} + +#define KIFExpectFailureWithCount(stmt, cnt) \ +{\ + _MockKIFTestActorDelegate *mockDelegate = [_MockKIFTestActorDelegate mockDelegate];\ + {\ + _MockKIFTestActorDelegate *self = mockDelegate;\ + @try { stmt; }\ + @catch (NSException *exception) { }\ + }\ + if (!mockDelegate.failed) {\ + __KIFFail(@"%s should have failed.", #stmt);\ + }\ + __KIFAssertEqual((NSUInteger)cnt, mockDelegate.exceptions.count, @"Expected a different number of exceptions.");\ +} + + +@interface _MockKIFTestActorDelegate : NSObject +@property (nonatomic, assign) BOOL failed; +@property (nonatomic, strong) NSArray *exceptions; +@property (nonatomic, assign) BOOL stopped; + ++ (instancetype)mockDelegate; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestStepValidation.m b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestStepValidation.m new file mode 100755 index 000000000..9828503ae --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTestStepValidation.m @@ -0,0 +1,34 @@ +// +// KIFTestStepValidation.m +// KIF +// +// Created by Brian Nickel on 7/27/13. +// +// + +#import "KIFTestStepValidation.h" + +@implementation _MockKIFTestActorDelegate + +- (void)failWithException:(NSException *)exception stopTest:(BOOL)stop +{ + [self failWithExceptions:@[exception] stopTest:stop]; +} + +- (void)failWithExceptions:(NSArray *)exceptions stopTest:(BOOL)stop +{ + self.failed = YES; + self.exceptions = exceptions; + self.stopped = stop; + if (stop) { + [[exceptions objectAtIndex:0] raise]; + } +} + ++ (instancetype)mockDelegate +{ + return [[self alloc] init]; +} + + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTypist.h b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTypist.h new file mode 100755 index 000000000..b3a0866eb --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTypist.h @@ -0,0 +1,20 @@ +// +// KIFTypist.h +// KIF +// +// Created by Pete Hodgson on 8/12/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + + +@interface KIFTypist : NSObject + ++ (void)registerForNotifications; ++ (BOOL)keyboardHidden; ++ (BOOL)enterCharacter:(NSString *)characterString; ++ (void)setKeystrokeDelay:(NSTimeInterval)delay; ++ (BOOL)hasHardwareKeyboard; ++ (BOOL)hasKeyInputResponder; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTypist.m b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTypist.m new file mode 100755 index 000000000..bb5dc57cd --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFTypist.m @@ -0,0 +1,112 @@ +// +// KIFTypist.m +// KIF +// +// Created by Pete Hodgson on 8/12/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFTypist.h" +#import "UIApplication-KIFAdditions.h" +#import "UIView-KIFAdditions.h" +#import "CGGeometry-KIFAdditions.h" +#import "UIAccessibilityElement-KIFAdditions.h" + +@interface UIKeyboardImpl : NSObject ++ (UIKeyboardImpl *)sharedInstance; +- (void)addInputString:(NSString *)string; +- (void)deleteFromInput; +@property(getter=isInHardwareKeyboardMode) BOOL inHardwareKeyboardMode; +@property(retain) UIResponder * delegate; +@end + +static NSTimeInterval keystrokeDelay = 0.01f; + +@interface KIFTypist() +@property (nonatomic, assign) BOOL keyboardHidden; +@end + +@implementation KIFTypist + ++ (KIFTypist *)sharedTypist +{ + static dispatch_once_t once; + static KIFTypist *sharedObserver = nil; + dispatch_once(&once, ^{ + sharedObserver = [[self alloc] init]; + }); + return sharedObserver; +} + ++ (void)registerForNotifications { + [[self sharedTypist] registerForNotifications]; +} + +- (instancetype)init +{ + if ((self = [super init])) { + self.keyboardHidden = YES; + } + return self; +} + +- (void)registerForNotifications +{ + // Instead of listening to keyboard will show/hide notifications, this is more robust. When keyboard is split + // on a physical device, keyboard will show/hide notifications does not get fired, whereas this does. + __weak KIFTypist *weakSelf = self; + [[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardDidChangeFrameNotification + object:nil + queue:[NSOperationQueue mainQueue] + usingBlock:^(NSNotification *note) { + CGRect keyboardEndFrame = + [[note.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; + + CGRect screenRect = [[UIScreen mainScreen] bounds]; + + if (CGRectIntersectsRect(keyboardEndFrame, screenRect)) + { + weakSelf.keyboardHidden = NO; + } + else + { + weakSelf.keyboardHidden = YES; + } + }]; +} + ++ (BOOL)keyboardHidden +{ + return [self sharedTypist].keyboardHidden; +} + ++ (BOOL)enterCharacter:(NSString *)characterString; +{ + if ([characterString isEqualToString:@"\b"]) { + [[UIKeyboardImpl sharedInstance] deleteFromInput]; + } else { + [[UIKeyboardImpl sharedInstance] addInputString:characterString]; + } + + CFRunLoopRunInMode(kCFRunLoopDefaultMode, keystrokeDelay, false); + return YES; +} + ++ (void)setKeystrokeDelay:(NSTimeInterval)delay +{ + keystrokeDelay = delay; +} + ++ (BOOL)hasHardwareKeyboard +{ + return [UIKeyboardImpl sharedInstance].inHardwareKeyboardMode; +} + ++ (BOOL)hasKeyInputResponder +{ + return [UIKeyboardImpl sharedInstance].delegate != nil; +} + + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFUITestActor-ConditionalTests.h b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFUITestActor-ConditionalTests.h new file mode 100755 index 000000000..10cdc3349 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFUITestActor-ConditionalTests.h @@ -0,0 +1,68 @@ +// +// KIFUITestActor-ConditionalTests.h +// KIF +// +// Created by Brian Nickel on 7/24/14. +// +// + +#import "KIF.h" + +@interface KIFUITestActor (ConditionalTests) + +/*! + @abstract Checks if an accessibility element is visible on screen. + @discussion The view or accessibility element with the given label is searched in the view hierarchy. If the element isn't found, then NO is returned. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. + @param label The accessibility label of the element to wait for. + + If the view you want to check for is tappable, use the -tryFindingTappableViewWithAccessibilityLabel: methods instead as they provide a more strict test. + + */ +- (BOOL)tryFindingViewWithAccessibilityLabel:(NSString *)label error:(out NSError **)error; + +/*! + @abstract Checks if an accessibility element is visible on screen. + @discussion The view or accessibility element with the given label is searched in the view hierarchy. If the element isn't found, then NO is returned. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. + @param label The accessibility label of the element to wait for. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (BOOL)tryFindingViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits error:(out NSError **)error; + +/*! + @abstract Checks if an accessibility element is visible on screen. + @discussion The view or accessibility element with the given label is searched in the view hierarchy. If the element isn't found, then NO is returned. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (BOOL)tryFindingViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits error:(out NSError **)error; + +/*! + @abstract Checks if an accessibility element is visible on screen. + @discussion The view or accessibility element with the given label is searched in the view hierarchy. If the element isn't found, then NO is returned. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. + @param label The accessibility label of the element to wait for. + */ +- (BOOL)tryFindingTappableViewWithAccessibilityLabel:(NSString *)label error:(out NSError **)error; + +/*! + @abstract Checks if an accessibility element is visible on screen. + @discussion The view or accessibility element with the given label is searched in the view hierarchy. If the element isn't found, then NO is returned. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. + @param label The accessibility label of the element to wait for. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (BOOL)tryFindingTappableViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits error:(out NSError **)error; + +/*! + @abstract Checks if an accessibility element is visible on screen. + @discussion The view or accessibility element with the given label is searched in the view hierarchy. If the element isn't found, then NO is returned. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (BOOL)tryFindingTappableViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits error:(out NSError **)error; + +- (BOOL)tryFindingAccessibilityElement:(out UIAccessibilityElement **)element view:(out UIView **)view withIdentifier:(NSString *)identifier tappable:(BOOL)mustBeTappable error:(out NSError **)error; + +- (BOOL)tryFindingAccessibilityElement:(out UIAccessibilityElement **)element view:(out UIView **)view withElementMatchingPredicate:(NSPredicate *)predicate tappable:(BOOL)mustBeTappable error:(out NSError **)error; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFUITestActor-ConditionalTests.m b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFUITestActor-ConditionalTests.m new file mode 100755 index 000000000..d6226f0e4 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFUITestActor-ConditionalTests.m @@ -0,0 +1,73 @@ +// +// KIFUITestActor-ConditionalTests.m +// KIF +// +// Created by Brian Nickel on 7/24/14. +// +// + +#import "KIFUITestActor-ConditionalTests.h" +#import "UIAccessibilityElement-KIFAdditions.h" +#import "NSError-KIFAdditions.h" + +@implementation KIFUITestActor (ConditionalTests) + +- (BOOL)tryFindingViewWithAccessibilityLabel:(NSString *)label error:(out NSError **)error +{ + return [self tryFindingViewWithAccessibilityLabel:label value:nil traits:UIAccessibilityTraitNone tappable:NO error:error]; +} + +- (BOOL)tryFindingViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits error:(out NSError **)error +{ + return [self tryFindingViewWithAccessibilityLabel:label value:nil traits:traits tappable:NO error:error]; +} + +- (BOOL)tryFindingViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits error:(out NSError **)error +{ + return [self tryFindingViewWithAccessibilityLabel:label value:value traits:traits tappable:NO error:error]; +} + +- (BOOL)tryFindingTappableViewWithAccessibilityLabel:(NSString *)label error:(out NSError **)error +{ + return [self tryFindingViewWithAccessibilityLabel:label value:nil traits:UIAccessibilityTraitNone tappable:YES error:error]; +} + +- (BOOL)tryFindingTappableViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits error:(out NSError **)error +{ + return [self tryFindingViewWithAccessibilityLabel:label value:nil traits:traits tappable:YES error:error]; +} + +- (BOOL)tryFindingTappableViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits error:(out NSError **)error +{ + return [self tryFindingViewWithAccessibilityLabel:label value:value traits:traits tappable:YES error:error]; +} + +- (BOOL)tryFindingViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits tappable:(BOOL)mustBeTappable error:(out NSError **)error +{ + return [self tryFindingAccessibilityElement:NULL view:NULL withLabel:label value:value traits:traits tappable:mustBeTappable error:error]; +} + +- (BOOL)tryFindingAccessibilityElement:(out UIAccessibilityElement **)element view:(out UIView **)view withLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits tappable:(BOOL)mustBeTappable error:(out NSError **)error +{ + return [self tryRunningBlock:^KIFTestStepResult(NSError *__autoreleasing *error) { + return [UIAccessibilityElement accessibilityElement:element view:view withLabel:label value:value traits:traits tappable:mustBeTappable error:error] ? KIFTestStepResultSuccess : KIFTestStepResultWait; + } complete:nil timeout:1.0 error:error]; +} + +- (BOOL)tryFindingAccessibilityElement:(out UIAccessibilityElement **)element view:(out UIView **)view withIdentifier:(NSString *)identifier tappable:(BOOL)mustBeTappable error:(out NSError **)error +{ + if (![UIAccessibilityElement instancesRespondToSelector:@selector(accessibilityIdentifier)]) { + [self failWithError:[NSError KIFErrorWithFormat:@"Running test on platform that does not support accessibilityIdentifier"] stopTest:YES]; + } + + return [self tryFindingAccessibilityElement:element view:view withElementMatchingPredicate:[NSPredicate predicateWithFormat:@"accessibilityIdentifier = %@", identifier] tappable:mustBeTappable error:error]; +} + +- (BOOL)tryFindingAccessibilityElement:(out UIAccessibilityElement **)element view:(out UIView **)view withElementMatchingPredicate:(NSPredicate *)predicate tappable:(BOOL)mustBeTappable error:(out NSError **)error +{ + return [self tryRunningBlock:^KIFTestStepResult(NSError *__autoreleasing *error) { + return [UIAccessibilityElement accessibilityElement:element view:view withElementMatchingPredicate:predicate tappable:mustBeTappable error:error] ? KIFTestStepResultSuccess : KIFTestStepResultWait; + } complete:nil timeout:1.0 error:error]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFUITestActor.h b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFUITestActor.h new file mode 100755 index 000000000..61309a971 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFUITestActor.h @@ -0,0 +1,569 @@ +// +// KIFTester+UI.h +// KIF +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFTestActor.h" +#import +#import "UIView-KIFAdditions.h" + +#define tester KIFActorWithClass(KIFUITestActor) + +/*! + @enum KIFSwipeDirection + @abstract Directions in which to swipe. + @constant KIFSwipeDirectionRight Swipe to the right. + @constant KIFSwipeDirectionLeft Swipe to the left. + @constant KIFSwipeDirectionUp Swipe up. + @constant KIFSwipeDirectionDown Swipe down. + */ +typedef NS_ENUM(NSUInteger, KIFSwipeDirection) { + KIFSwipeDirectionRight, + KIFSwipeDirectionLeft, + KIFSwipeDirectionUp, + KIFSwipeDirectionDown +}; + +/*! + @enum KIFPickerType + @abstract Picker type to select values from. + @constant KIFUIPickerView UIPickerView type + @constant KIFUIDatePicker UIDatePicker type + */ +typedef NS_ENUM(NSUInteger, KIFPickerType) { + KIFUIPickerView, + KIFUIDatePicker +}; + +/*! + @enum KIFStepperDirection + @abstract Direction in which to increment or decrement the stepper. + @constant KIFStepperDirectionIncrement Increment the stepper + @constant KIFUIDatePicker Decrement the stepper + */ +typedef NS_ENUM(NSUInteger, KIFStepperDirection) { + KIFStepperDirectionIncrement, + KIFStepperDirectionDecrement +}; + +#define kKIFMajorSwipeDisplacement 200 +#define kKIFMinorSwipeDisplacement 5 + +static inline KIFDisplacement KIFDisplacementForSwipingInDirection(KIFSwipeDirection direction) +{ + switch (direction) + { + // As discovered on the Frank mailing lists, it won't register as a + // swipe if you move purely horizontally or vertically, so need a + // slight orthogonal offset too. + case KIFSwipeDirectionRight: + return CGPointMake(kKIFMajorSwipeDisplacement, kKIFMinorSwipeDisplacement); + case KIFSwipeDirectionLeft: + return CGPointMake(-kKIFMajorSwipeDisplacement, kKIFMinorSwipeDisplacement); + case KIFSwipeDirectionUp: + return CGPointMake(kKIFMinorSwipeDisplacement, -kKIFMajorSwipeDisplacement); + case KIFSwipeDirectionDown: + return CGPointMake(kKIFMinorSwipeDisplacement, kKIFMajorSwipeDisplacement); + } +} + +@interface KIFUITestActor : KIFTestActor + +/*! + @abstract Waits until a view or accessibility element is present. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element isn't found, then the step will attempt to wait until it is. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. + + If the view you want to wait for is tappable, use the -waitForTappableViewWithAccessibilityLabel: methods instead as they provide a more strict test. + @param label The accessibility label of the element to wait for. + */ +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Waits until a view or accessibility element is present. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element isn't found, then the step will attempt to wait until it is. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. + + If the view you want to wait for is tappable, use the -waitForTappableViewWithAccessibilityLabel: methods instead as they provide a more strict test. + @param label The accessibility label of the element to wait for. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; + + +/*! + @abstract Waits until a view or accessibility element is present. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element isn't found, then the step will attempt to wait until it is. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are ignored. + + If the view you want to wait for is tappable, use the -waitForTappableViewWithAccessibilityLabel: methods instead as they provide a more strict test. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + @result A configured test step. + */ +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Waits until a view or accessibility element is no longer present. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element is found, then the step will attempt to wait until it isn't. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are considered absent. + @param label The accessibility label of the element to wait for. + */ +- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Waits until a view or accessibility element is no longer present. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element is found, then the step will attempt to wait until it isn't. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are considered absent. + @param label The accessibility label of the element to wait for. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Waits until a view or accessibility element is no longer present. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element is found, then the step will attempt to wait until it isn't. Note that the view does not necessarily have to be visible on the screen, and may be behind another view or offscreen. Views with their hidden property set to YES are considered absent. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Waits until a view or accessibility element is present and available for tapping. + @discussion The view or accessibility element with the given label is found in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Whether or not a view is tappable is based on -[UIView hitTest:]. + @param label The accessibility label of the element to wait for. + */ +- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Waits until a view or accessibility element is present and available for tapping. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Whether or not a view is tappable is based on -[UIView hitTest:]. + @param label The accessibility label of the element to wait for. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Waits until a view or accessibility element is present and available for tapping. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Whether or not a view is tappable is based on -[UIView hitTest:]. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; + + +/*! + @abstract Waits for an accessibility element and its containing view based on a variety of criteria. + @discussion This method provides a more verbose API for achieving what is available in the waitForView/waitForTappableView family of methods, exposing both the found element and its containing view. The results can be used in other methods such as @c tapAccessibilityElement:inView: + @param element To be populated with the matching accessibility element when found. Can be NULL. + @param view To be populated with the matching view when found. Can be NULL. + @param label The accessibility label of the element to wait for. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + @param mustBeTappable If YES, only an element that can be tapped on will be returned. + */ +- (void)waitForAccessibilityElement:(UIAccessibilityElement **)element view:(out UIView **)view withLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits tappable:(BOOL)mustBeTappable; + +/*! + @abstract Waits for an accessibility element and its containing view based the accessibility identifier. + @discussion This method provides a more verbose API for achieving what is available in the waitForView/waitForTappableView family of methods, exposing both the found element and its containing view. The results can be used in other methods such as @c tapAccessibilityElement:inView: + @param element To be populated with the matching accessibility element when found. Can be NULL. + @param view To be populated with the matching view when found. Can be NULL. + @param identifier The accessibility identifier of the element to wait for. + @param mustBeTappable If YES, only an element that can be tapped on will be returned. + */ +- (void)waitForAccessibilityElement:(UIAccessibilityElement **)element view:(out UIView **)view withIdentifier:(NSString *)identifier tappable:(BOOL)mustBeTappable; + +/*! + @abstract Waits for an accessibility element and its containing view based on a predicate. + @discussion This method provides a more verbose API for achieving what is available in the waitForView/waitForTappableView family of methods, exposing both the found element and its containing view. The results can be used in other methods such as @c tapAccessibilityElement:inView: + + This method provides more flexability than @c waitForAccessibilityElement:view:withLabel:value:traits:tappable: but less precise error messages. This message will tell you why the method failed but not whether or not the element met some of the criteria. + @param element To be populated with the matching accessibility element when found. Can be NULL. + @param view To be populated with the matching view when found. Can be NULL. + @param predicate The predicate to match. + @param mustBeTappable If YES, only an element that can be tapped on will be returned. + */ +- (void)waitForAccessibilityElement:(UIAccessibilityElement **)element view:(out UIView **)view withElementMatchingPredicate:(NSPredicate *)predicate tappable:(BOOL)mustBeTappable; + +/*! + @abstract Tries to guess if there are any unfinished animations and waits for a certain amount of time to let them finish. + */ +- (void)waitForAnimationsToFinish; + +/*! + @abstract Tries to guess if there are any unfinished animations and waits for a certain amount of time to let them finish. + @param timeout The maximum duration the method waits to let the animations finish. + */ +- (void)waitForAnimationsToFinishWithTimeout:(NSTimeInterval)timeout; + +/*! + @abstract Taps a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element. + @param label The accessibility label of the element to tap. + */ +- (void)tapViewWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Taps a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element. + @param label The accessibility label of the element to tap. + @param traits The accessibility traits of the element to tap. Elements that do not include at least these traits are ignored. + */ +- (void)tapViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Taps a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element. + + This variation allows finding a particular instance of an accessibility element. For example, a table view might have multiple elements with the accessibility label of "Employee", but only one that also has the accessibility value of "Bob". + @param label The accessibility label of the element to tap. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to tap. Elements that do not include at least these traits are ignored. + */ +- (void)tapViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits; + +/*! + @abstract Taps a particular view in the view heirarchy. + @discussion Unlike the -tapViewWithAccessibilityLabel: family of methods, this method allows you to tap an arbitrary element. Combined with -waitForAccessibilityElement:view:withLabel:value:traits:tappable: or +[UIAccessibilityElement accessibilityElement:view:withLabel:value:traits:tappable:error:] this provides an opportunity for more complex logic. + @param element The accessibility element to tap. + @param view The view containing the accessibility element. + */ +- (void)tapAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)view; + +/*! + @abstract Taps the increment|decrement button of a UIStepper view in the view heirarchy. + @discussion Unlike the -tapViewWithAccessibilityLabel: family of methods, this method allows you to tap an arbitrary element. Combined with -waitForAccessibilityElement:view:withLabel:value:traits:tappable: or +[UIAccessibilityElement accessibilityElement:view:withLabel:value:traits:tappable:error:] this provides an opportunity for more complex logic. + @param element The accessibility element to tap. + @param view The view containing the accessibility element. + */ +- (void)tapStepperWithAccessibilityElement:(UIAccessibilityElement *)element increment: (KIFStepperDirection) stepperDirection inView:(UIView *)view; + +/*! + @abstract Taps the screen at a particular point. + @discussion Taps the screen at a specific point. In general you should use the factory steps that tap a view based on its accessibility label, but there are situations where it's not possible to access a view using accessibility mechanisms. This step is more lenient than the steps that use the accessibility label, and does not wait for any particular view to appear, or validate that the tapped view is enabled or has interaction enabled. Because this step doesn't doesn't validate that a view is present before tapping it, it's good practice to precede this step where possible with a -waitForViewWithAccessibilityLabel: with the label for another view that should appear on the same screen. + + @param screenPoint The point in screen coordinates to tap. Screen points originate from the top left of the screen. + */ +- (void)tapScreenAtPoint:(CGPoint)screenPoint; + +/*! + @abstract Performs a long press on a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, touch events are simulated in the center of the view or element. + @param label The accessibility label of the element to tap. + @param duration The length of time to long press the element. + */ +- (void)longPressViewWithAccessibilityLabel:(NSString *)label duration:(NSTimeInterval)duration; + +/*! + @abstract Performs a long press on a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, touch events are simulated in the center of the view or element. + + This variation allows finding a particular instance of an accessibility element. For example, a table view might have multiple elements with the accessibility label of "Employee", but only one that also has the accessibility value of "Bob". + @param label The accessibility label of the element to tap. + @param value The accessibility value of the element to tap. + @param duration The length of time to long press the element. + */ +- (void)longPressViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value duration:(NSTimeInterval)duration; + +- (void)longPressAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)view duration:(NSTimeInterval)duration; + +/*! + @abstract Performs a long press on a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, touch events are simulated in the center of the view or element. + + This variation allows finding a particular instance of an accessibility element. For example, a table view might have multiple elements with the accessibility label of "Employee", but only one that also has the accessibility value of "Bob". + @param label The accessibility label of the element to tap. + @param value The accessibility value of the element to tap. + @param traits The accessibility traits of the element to tap. Elements that do not include at least these traits are ignored. + @param duration The length of time to long press the element. + */ +- (void)longPressViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits duration:(NSTimeInterval)duration; + + +/*! + @abstract Waits for the software keyboard to be visible. + @discussion If input is also possible from a hardare keyboard @c waitForKeyInputReady may be more appropriate. + */ +- (void)waitForSoftwareKeyboard; +- (void)waitForKeyboard KIF_DEPRECATED("Use waitForSoftwareKeyboard or waitForKeyInputReady."); + +/*! + @abstract If present, waits for the software keyboard to dismiss. + */ +- (void)waitForAbsenceOfSoftwareKeyboard; +- (void)waitForAbsenceOfKeyboard KIF_DEPRECATED("Use waitForAbscenseOfSoftwareKeyboard."); + +/*! + @abstract Waits for the keyboard to be ready for input. This tests whether or not a hardware or software keyboard is available and if the keyboard has a responder to send events to. + */ +- (void)waitForKeyInputReady; + +/*! + @abstract Enters text into a the current first responder. + @discussion Text is entered into the view by simulating taps on the appropriate keyboard keys if the keyboard is already displayed. Useful to enter text in UIWebViews or components with no accessibility labels. + @param text The text to enter. + */ +- (void)enterTextIntoCurrentFirstResponder:(NSString *)text; +- (void)enterTextIntoCurrentFirstResponder:(NSString *)text fallbackView:(UIView *)fallbackView; + +/*! + @abstract Enters text into a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element, then text is entered into the view by simulating taps on the appropriate keyboard keys. + @param text The text to enter. + @param label The accessibility label of the element to type into. + */ +- (void)enterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Enters text into a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element, then text is entered into the view by simulating taps on the appropriate keyboard keys. + @param text The text to enter. + @param label The accessibility label of the element to type into. + @param traits The accessibility traits of the element to type into. Elements that do not include at least these traits are ignored. + @param expectedResult What the text value should be after entry, including any formatting done by the field. If this is nil, the "text" parameter will be used. + */ +- (void)enterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits expectedResult:(NSString *)expectedResult; + +- (void)clearTextFromFirstResponder; +- (void)clearTextFromViewWithAccessibilityLabel:(NSString *)label; +- (void)clearTextFromViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; +- (void)clearTextFromElement:(UIAccessibilityElement*)element inView:(UIView*)view; + +- (void)clearTextFromAndThenEnterTextIntoCurrentFirstResponder:(NSString *)text; +- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label; +- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits expectedResult:(NSString *)expectedResult; + +- (void)expectView:(UIView *)view toContainText:(NSString *)expectedResult; + +/*! + @abstract Selects an item from a currently visible picker view. + @discussion With a picker view already visible, this step will find an item with the given title, select that item, and tap the Done button. + @param title The title of the row to select. + */ +- (void)selectPickerViewRowWithTitle:(NSString *)title; + +/*! + @abstract Selects an item from a currently visible picker view in specified component. + @discussion With a picker view already visible, this step will find an item with the given title in given component, select that item, and tap the Done button. + @param title The title of the row to select. + @param component The component tester inteds to select the title in. + */ +- (void)selectPickerViewRowWithTitle:(NSString *)title inComponent:(NSInteger)component; + +/*! + @abstract Selects a value from a currently visible date picker view. + @discussion With a date picker view already visible, this step will select the different rotating weel values in order of how the array parameter is passed in. After it is done it will hide the date picker. It works with all 4 UIDatePickerMode* modes. The input parameter of type NSArray has to match in what order the date picker is displaying the values/columns. So if the locale is changing the input parameter has to be adjusted. Example: Mode: UIDatePickerModeDate, Locale: en_US, Input param: NSArray *date = @[@"June", @"17", @"1965"];. Example: Mode: UIDatePickerModeDate, Locale: de_DE, Input param: NSArray *date = @[@"17.", @"Juni", @"1965". + @param datePickerColumnValues Each element in the NSArray represents a rotating wheel in the date picker control. Elements from 0 - n are listed in the order of the rotating wheels, left to right. + */ +- (void) selectDatePickerValue:(NSArray*)datePickerColumnValues; + +/*! + @abstract Toggles a UISwitch into a specified position. + @discussion The UISwitch with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present, the step will return if it's already in the desired position. If the switch is tappable but not in the desired position, a tap event is simulated in the center of the view or element, toggling the switch into the desired position. + @param switchIsOn The desired position of the UISwitch. + @param label The accessibility label of the element to switch. + */ +- (void)setOn:(BOOL)switchIsOn forSwitchWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Slides a UISlider to a specified value. + @discussion The UISlider with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present, the step will attempt to drag the slider to the new value. The step will fail if it finds a view with the given accessibility label that is not a UISlider or if value is outside of the possible values. Because this step simulates drag events, the value reached may not be the exact value requested and the app may ignore the touch events if the movement is less than the drag gesture recognizer's minimum distance. + @param value The desired value of the UISlider. + @param label The accessibility label of the element to drag. + */ +- (void)setValue:(float)value forSliderWithAccessibilityLabel:(NSString *)label; +- (void)setValue:(float)value forSlider:(UISlider *)slider; + +/*! + @abstract Dismisses a popover on screen. + @discussion With a popover up, tap at the top-left corner of the screen. + */ +- (void)dismissPopover; + +/*! + @abstract Select a certain photo from the built in photo picker. + @discussion This set of steps expects that the photo picker has been initiated and that the sheet is up. From there it will tap the "Choose Photo" button and select the desired photo. + @param albumName The name of the album to select the photo from. (1-indexed) + @param row The row number in the album for the desired photo. (1-indexed) + @param column The column number in the album for the desired photo. + */ +- (void)choosePhotoInAlbum:(NSString *)albumName atRow:(NSInteger)row column:(NSInteger)column; + +/*! + @abstract Taps the row at indexPath in a table view with the given label. + @discussion This step will get the view with the specified accessibility label and tap the row at indexPath. + + For cases where you may need to work from the end of a table view rather than the beginning, negative sections count back from the end of the table view (-1 is the last section) and negative rows count back from the end of the section (-1 is the last row for that section). + + @param tableViewLabel Accessibility label of the table view. + @param indexPath Index path of the row to tap. + */ +- (void)tapRowInTableViewWithAccessibilityLabel:(NSString*)tableViewLabel atIndexPath:(NSIndexPath *)indexPath KIF_DEPRECATED("Use tapRowAtIndexPath:inTableViewWithAccessibilityIdentifier:"); + +/*! + @abstract Taps the row at indexPath in a table view with the given identifier. + @discussion This step will get the view with the specified accessibility identifier and tap the row at indexPath. + + For cases where you may need to work from the end of a table view rather than the beginning, negative sections count back from the end of the table view (-1 is the last section) and negative rows count back from the end of the section (-1 is the last row for that section). + + @param indexPath Index path of the row to tap. + @param identifier Accessibility identifier of the table view. + */ +- (void)tapRowAtIndexPath:(NSIndexPath *)indexPath inTableViewWithAccessibilityIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(5_0); + +/*! + @abstract Taps the item at indexPath in a collection view with the given identifier. + @discussion This step will get the view with the specified accessibility identifier and tap the item at indexPath. + + For cases where you may need to work from the end of a collection view rather than the beginning, negative sections count back from the end of the collection view (-1 is the last section) and negative items count back from the end of the section (-1 is the last item for that section). + + @param indexPath Index path of the item to tap. + @param identifier Accessibility identifier of the collection view. + */ +- (void)tapItemAtIndexPath:(NSIndexPath *)indexPath inCollectionViewWithAccessibilityIdentifier:(NSString *)identifier; + +/*! + @abstract Taps a stepper to either increment or decrement the stepper. Presumed that - (minus) to decrement is on the left. + @discussion This will locate the left or right half of the stepper and perform a calculated click. + @param label The accessibility identifier of the view to interact with. + @param stepperDirection The direction in which to change the value of the stepper (KIFStepperDirectionIncrement | KIFStepperDirectionDecrement) + */ +-(void) tapStepperWithAccessibilityLabel: (NSString *)accessibilityLabel increment: (KIFStepperDirection) stepperDirection; + +#if TARGET_IPHONE_SIMULATOR +/*! + @abstract If present, dismisses a system alert with the last button, usually 'Allow'. Returns YES if a dialog was dismissed, NO otherwise. + @discussion Use this to dissmiss a location services authorization dialog or a photos access dialog by tapping the 'Allow' button. No action is taken if no alert is present. + */ +- (BOOL)acknowledgeSystemAlert; +#endif + +/*! + @abstract Swipes a particular view in the view hierarchy in the given direction. + @discussion The view will get the view with the specified accessibility label and swipe the screen in the given direction from the view's center. + @param label The accessibility label of the view to swipe. + @param direction The direction in which to swipe. + */ +- (void)swipeViewWithAccessibilityLabel:(NSString *)label inDirection:(KIFSwipeDirection)direction; + +/*! + @abstract Swipes a particular view in the view hierarchy in the given direction. + @discussion The view will get the view with the specified accessibility label and swipe the screen in the given direction from the view's center. + @param label The accessibility label of the view to swipe. + @param value The accessibility value of the view to swipe. + @param direction The direction in which to swipe. + */ +- (void)swipeViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value inDirection:(KIFSwipeDirection)direction; + +/*! + @abstract Swipes a particular view in the view hierarchy in the given direction. + @discussion This step will get the view with the specified accessibility label and swipe the screen in the given direction from the view's center. + @param label The accessibility label of the view to swipe. + @param value The accessibility value of the view to swipe. + @param traits The accessibility traits of the view to swipe. Elements that do not include at least these traits are ignored. + @param direction The direction in which to swipe. + */ +- (void)swipeViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits inDirection:(KIFSwipeDirection)direction; + +/*! + @abstract Swipes a particular view in the view heirarchy. + @discussion Unlike the -swipeViewWithAccessibilityLabel: family of methods, this method allows you to swipe an arbitrary element. Combined with -waitForAccessibilityElement:view:withLabel:value:traits:tappable: or +[UIAccessibilityElement accessibilityElement:view:withLabel:value:traits:tappable:error:] this provides an opportunity for more complex logic. + @param element The accessibility element to tap. + @param viewToSwipe The view containing the accessibility element. + */ +- (void)swipeAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)viewToSwipe inDirection:(KIFSwipeDirection)direction; + +/*! + @abstract Scrolls a particular view in the view hierarchy by an amount indicated as a fraction of its size. + @discussion The view will get the view with the specified accessibility label and scroll it by the indicated fraction of its size, with the scroll centered on the center of the view. + @param label The accessibility label of the view to scroll. + @param horizontalFraction The horizontal displacement of the scroll action, as a fraction of the width of the view. + @param verticalFraction The vertical displacement of the scroll action, as a fraction of the height of the view. + */ +- (void)scrollViewWithAccessibilityLabel:(NSString *)label byFractionOfSizeHorizontal:(CGFloat)horizontalFraction vertical:(CGFloat)verticalFraction KIF_DEPRECATED("Use scrollViewWithAccessibilityIdentifier:byFractionOfSizeHorizontal:vertical:"); + +/*! + @abstract Scrolls a particular view in the view hierarchy by an amount indicated as a fraction of its size. + @discussion The view will get the view with the specified accessibility identifier and scroll it by the indicated fraction of its size, with the scroll centered on the center of the view. + @param identifier The accessibility identifier of the view to scroll. + @param horizontalFraction The horizontal displacement of the scroll action, as a fraction of the width of the view. + @param verticalFraction The vertical displacement of the scroll action, as a fraction of the height of the view. + */ +- (void)scrollViewWithAccessibilityIdentifier:(NSString *)identifier byFractionOfSizeHorizontal:(CGFloat)horizontalFraction vertical:(CGFloat)verticalFraction NS_AVAILABLE_IOS(5_0); + +/*! + @abstract Waits until a view or accessibility element is the first responder. + @discussion The first responder is found by searching the view hierarchy of the application's + main window and its accessibility label is compared to the given value. If they match, the + step returns success else it will attempt to wait until they do. + @param label The accessibility label of the element to wait for. + */ +- (void)waitForFirstResponderWithAccessibilityLabel:(NSString *)label; + +/*! + @abstract Waits until a view or accessibility element is the first responder. + @discussion The first responder is found by searching the view hierarchy of the application's + main window and its accessibility label is compared to the given value. If they match, the + step returns success else it will attempt to wait until they do. + @param label The accessibility label of the element to wait for. + @param traits The accessibility traits of the element to wait for. Elements that do not include at least these traits are ignored. + */ +- (void)waitForFirstResponderWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits; + +- (void)tapStatusBar; + +/*! + @abstract Waits for the cell at indexPath in a table view with the given identifier. + @discussion This step will get the view with the specified accessibility identifier and then get the cell at the indexPath. + + For cases where you may need to work from the end of a table view rather than the beginning, negative sections count back from the end of the table view (-1 is the last section) and negative rows count back from the end of the section (-1 is the last row for that section). + + @param indexPath Index path of the cell. + @param identifier Accessibility identifier of the table view. + @result Table view cell at index path + */ +- (UITableViewCell *)waitForCellAtIndexPath:(NSIndexPath *)indexPath inTableViewWithAccessibilityIdentifier:(NSString *)identifier; + +/*! + @abstract Waits for the cell at indexPath in a collection view with the given identifier. + @discussion This step will get the view with the specified accessibility identifier and then get the cell at indexPath. + + For cases where you may need to work from the end of a collection view rather than the beginning, negative sections count back from the end of the collection view (-1 is the last section) and negative items count back from the end of the section (-1 is the last item for that section). + + @param indexPath Index path of the item to tap. + @param identifier Accessibility identifier of the collection view. + @result Collection view cell at index path + */ +- (UICollectionViewCell *)waitForCellAtIndexPath:(NSIndexPath *)indexPath inCollectionViewWithAccessibilityIdentifier:(NSString *)identifier; + +/*! + @abstract Moves the row at sourceIndexPath to destinationIndexPath in a table view with the given identifier. + @discussion This step will get the view with the specified accessibility identifier and move the row at sourceIndexPath to destinationIndexPath. + + For cases where you may need to work from the end of a table view rather than the beginning, negative sections count back from the end of the table view (-1 is the last section) and negative rows count back from the end of the section (-1 is the last row for that section). + + @param sourceIndexPath Index path of the row to move. + @param destinationIndexPath Desired final index path of the row after moving. + @param identifier Accessibility identifier of the table view. + */ +- (void)moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath inTableViewWithAccessibilityIdentifier:(NSString *)identifier; + +/*! + @abstract Swipes the row at indexPath in the given direction. + + @param indexPath Index path of the row to swipe. + @param tableView Table view to operate on. + @param direction Direction of the swipe. + */ +- (void)swipeRowAtIndexPath:(NSIndexPath *)indexPath inTableView:(UITableView *)tableView inDirection:(KIFSwipeDirection)direction; + +/*! + @abstract Backgrounds app using UIAutomation command, simulating pressing the Home button + @param duration Amount of time for a background event before the app becomes active again + */ +- (void)deactivateAppForDuration:(NSTimeInterval)duration; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFUITestActor.m b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFUITestActor.m new file mode 100755 index 000000000..7b96c47ec --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/KIFUITestActor.m @@ -0,0 +1,1096 @@ +// +// KIFTester+UI.m +// KIF +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "KIFUITestActor.h" +#import "UIApplication-KIFAdditions.h" +#import "UIWindow-KIFAdditions.h" +#import "UIAccessibilityElement-KIFAdditions.h" +#import "UIView-KIFAdditions.h" +#import "UITableView-KIFAdditions.h" +#import "CGGeometry-KIFAdditions.h" +#import "NSError-KIFAdditions.h" +#import "KIFTypist.h" +#import "UIAutomationHelper.h" + +@implementation KIFUITestActor + ++ (void)initialize +{ + if (self == [KIFUITestActor class]) { + [KIFTypist registerForNotifications]; + } +} + +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label +{ + return [self waitForViewWithAccessibilityLabel:label value:nil traits:UIAccessibilityTraitNone tappable:NO]; +} + +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits +{ + return [self waitForViewWithAccessibilityLabel:label value:nil traits:traits tappable:NO]; +} + +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits +{ + return [self waitForViewWithAccessibilityLabel:label value:value traits:traits tappable:NO]; +} + +- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label +{ + return [self waitForViewWithAccessibilityLabel:label value:nil traits:UIAccessibilityTraitNone tappable:YES]; +} + +- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits +{ + return [self waitForViewWithAccessibilityLabel:label value:nil traits:traits tappable:YES]; +} + +- (UIView *)waitForTappableViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits +{ + return [self waitForViewWithAccessibilityLabel:label value:value traits:traits tappable:YES]; +} + +- (UIView *)waitForViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits tappable:(BOOL)mustBeTappable +{ + UIView *view = nil; + @autoreleasepool { + [self waitForAccessibilityElement:NULL view:&view withLabel:label value:value traits:traits tappable:mustBeTappable]; + } + + return view; +} + +- (void)waitForAccessibilityElement:(UIAccessibilityElement **)element view:(out UIView **)view withLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits tappable:(BOOL)mustBeTappable +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + return [UIAccessibilityElement accessibilityElement:element view:view withLabel:label value:value traits:traits tappable:mustBeTappable error:error] ? KIFTestStepResultSuccess : KIFTestStepResultWait; + }]; +} + +- (void)waitForAccessibilityElement:(UIAccessibilityElement **)element view:(out UIView **)view withIdentifier:(NSString *)identifier tappable:(BOOL)mustBeTappable +{ + if (![UIAccessibilityElement instancesRespondToSelector:@selector(accessibilityIdentifier)]) { + [self failWithError:[NSError KIFErrorWithFormat:@"Running test on platform that does not support accessibilityIdentifier"] stopTest:YES]; + } + + [self waitForAccessibilityElement:element view:view withElementMatchingPredicate:[NSPredicate predicateWithFormat:@"accessibilityIdentifier = %@", identifier] tappable:mustBeTappable]; +} + +- (void)waitForAccessibilityElement:(UIAccessibilityElement **)element view:(out UIView **)view withElementMatchingPredicate:(NSPredicate *)predicate tappable:(BOOL)mustBeTappable +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + return [UIAccessibilityElement accessibilityElement:element view:view withElementMatchingPredicate:predicate tappable:mustBeTappable error:error] ? KIFTestStepResultSuccess : KIFTestStepResultWait; + }]; +} + +- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label +{ + [self waitForAbsenceOfViewWithAccessibilityLabel:label traits:UIAccessibilityTraitNone]; +} + +- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits +{ + [self waitForAbsenceOfViewWithAccessibilityLabel:label value:nil traits:traits]; +} + +- (void)waitForAbsenceOfViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + // If the app is ignoring interaction events, then wait before doing our analysis + KIFTestWaitCondition(![[UIApplication sharedApplication] isIgnoringInteractionEvents], error, @"Application is ignoring interaction events."); + + // If the element can't be found, then we're done + UIAccessibilityElement *element = [[UIApplication sharedApplication] accessibilityElementWithLabel:label accessibilityValue:value traits:traits]; + if (!element) { + return KIFTestStepResultSuccess; + } + + UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; + + // If we found an element, but it's not associated with a view, then something's wrong. Wait it out and try again. + KIFTestWaitCondition(view, error, @"Cannot find view containing accessibility element with the label \"%@\"", label); + + // Hidden views count as absent + KIFTestWaitCondition([view isHidden] || [view superview] == nil, error, @"Accessibility element with label \"%@\" is visible and not hidden.", label); + + return KIFTestStepResultSuccess; + }]; +} + +- (void)waitForAnimationsToFinish { + [self waitForAnimationsToFinishWithTimeout:self.animationWaitingTimeout]; +} + +- (void)waitForAnimationsToFinishWithTimeout:(NSTimeInterval)timeout { + static const CGFloat kStabilizationWait = 0.5f; + + NSTimeInterval maximumWaitingTimeInterval = timeout; + if (maximumWaitingTimeInterval <= kStabilizationWait) { + if(maximumWaitingTimeInterval >= 0) { + [self waitForTimeInterval:maximumWaitingTimeInterval]; + } + + return; + } + + // Wait for the view to stabilize and give them a chance to start animations before we wait for them. + [self waitForTimeInterval:kStabilizationWait]; + maximumWaitingTimeInterval -= kStabilizationWait; + + NSTimeInterval startTime = [NSDate timeIntervalSinceReferenceDate]; + [self runBlock:^KIFTestStepResult(NSError **error) { + __block BOOL runningAnimationFound = false; + for (UIWindow *window in [UIApplication sharedApplication].windowsWithKeyWindow) { + [window performBlockOnDescendentViews:^(UIView *view, BOOL *stop) { + BOOL isViewVisible = [view isVisibleInViewHierarchy]; // do not wait for animatinos of views that aren't visible + BOOL hasAnimation = view.layer.animationKeys.count != 0 && ![view.layer.animationKeys isEqualToArray:@[@"_UIParallaxMotionEffect"]]; // explicitly exclude _UIParallaxMotionEffect as it is used in alertviews, and we don't want every alertview to be paused + BOOL hasUnfinishedSystemAnimation = [NSStringFromClass(view.class) isEqualToString:@"_UIParallaxDimmingView"]; // indicates that the view-hierarchy is in an in-between-state of an animation + if (isViewVisible && (hasAnimation || hasUnfinishedSystemAnimation)) { + runningAnimationFound = YES; + if (stop != NULL) { + *stop = YES; + } + return; + } + }]; + } + + return runningAnimationFound && ([NSDate timeIntervalSinceReferenceDate] - startTime) < maximumWaitingTimeInterval ? KIFTestStepResultWait : KIFTestStepResultSuccess; + } timeout:maximumWaitingTimeInterval + 1]; +} + +- (void)tapViewWithAccessibilityLabel:(NSString *)label +{ + [self tapViewWithAccessibilityLabel:label value:nil traits:UIAccessibilityTraitNone]; +} + +- (void)tapViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits +{ + [self tapViewWithAccessibilityLabel:label value:nil traits:traits]; +} + +- (void)tapViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits +{ + @autoreleasepool { + UIView *view = nil; + UIAccessibilityElement *element = nil; + [self waitForAccessibilityElement:&element view:&view withLabel:label value:value traits:traits tappable:YES]; + [self tapAccessibilityElement:element inView:view]; + } +} + +- (void)tapAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)view +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + + KIFTestWaitCondition(view.isUserInteractionActuallyEnabled, error, @"View is not enabled for interaction"); + + // If the accessibilityFrame is not set, fallback to the view frame. + CGRect elementFrame; + if (CGRectEqualToRect(CGRectZero, element.accessibilityFrame)) { + elementFrame.origin = CGPointZero; + elementFrame.size = view.frame.size; + } else { + elementFrame = [view.windowOrIdentityWindow convertRect:element.accessibilityFrame toView:view]; + } + CGPoint tappablePointInElement = [view tappablePointInRect:elementFrame]; + + // This is mostly redundant of the test in _accessibilityElementWithLabel: + KIFTestWaitCondition(!isnan(tappablePointInElement.x), error, @"View is not tappable"); + + NSOperatingSystemVersion iOS9 = {9, 0, 0}; + BOOL isOperatingSystemAtLeastVersion9 = [NSProcessInfo instancesRespondToSelector:@selector(isOperatingSystemAtLeastVersion:)] && [[NSProcessInfo new] isOperatingSystemAtLeastVersion:iOS9]; + if (isOperatingSystemAtLeastVersion9 && [NSStringFromClass([view class]) isEqualToString:@"_UIAlertControllerActionView"]) { + [view longPressAtPoint:tappablePointInElement duration:0.1]; + } else { + [view tapAtPoint:tappablePointInElement]; + } + + KIFTestCondition(![view canBecomeFirstResponder] || [view isDescendantOfFirstResponder], error, @"Failed to make the view into the first responder"); + + return KIFTestStepResultSuccess; + }]; + + [self waitForAnimationsToFinish]; +} + +- (void)tapScreenAtPoint:(CGPoint)screenPoint +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + + // Try all the windows until we get one back that actually has something in it at the given point + UIView *view = nil; + for (UIWindow *window in [[[UIApplication sharedApplication] windowsWithKeyWindow] reverseObjectEnumerator]) { + CGPoint windowPoint = [window convertPoint:screenPoint fromView:nil]; + view = [window hitTest:windowPoint withEvent:nil]; + + // If we hit the window itself, then skip it. + if (view != window && view != nil) { + break; + } + } + + KIFTestWaitCondition(view, error, @"No view was found at the point %@", NSStringFromCGPoint(screenPoint)); + + // This is mostly redundant of the test in _accessibilityElementWithLabel: + CGPoint viewPoint = [view convertPoint:screenPoint fromView:nil]; + [view tapAtPoint:viewPoint]; + + return KIFTestStepResultSuccess; + }]; +} + +- (void)longPressViewWithAccessibilityLabel:(NSString *)label duration:(NSTimeInterval)duration; +{ + [self longPressViewWithAccessibilityLabel:label value:nil traits:UIAccessibilityTraitNone duration:duration]; +} + +- (void)longPressViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value duration:(NSTimeInterval)duration; +{ + [self longPressViewWithAccessibilityLabel:label value:value traits:UIAccessibilityTraitNone duration:duration]; +} + +- (void)longPressViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits duration:(NSTimeInterval)duration; +{ + @autoreleasepool { + UIView *view = nil; + UIAccessibilityElement *element = nil; + [self waitForAccessibilityElement:&element view:&view withLabel:label value:value traits:traits tappable:YES]; + [self longPressAccessibilityElement:element inView:view duration:duration]; + } +} + +- (void)longPressAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)view duration:(NSTimeInterval)duration; +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + + KIFTestWaitCondition(view.isUserInteractionActuallyEnabled, error, @"View is not enabled for interaction"); + + CGRect elementFrame = [view.windowOrIdentityWindow convertRect:element.accessibilityFrame toView:view]; + CGPoint tappablePointInElement = [view tappablePointInRect:elementFrame]; + + // This is mostly redundant of the test in _accessibilityElementWithLabel: + KIFTestWaitCondition(!isnan(tappablePointInElement.x), error, @"View is not tappable"); + [view longPressAtPoint:tappablePointInElement duration:duration]; + + KIFTestCondition(![view canBecomeFirstResponder] || [view isDescendantOfFirstResponder], error, @"Failed to make the view into the first responder"); + + return KIFTestStepResultSuccess; + }]; + + // Wait for view to settle. + [self waitForTimeInterval:0.5]; +} + +- (void)waitForKeyboard +{ + [self waitForSoftwareKeyboard]; +} + +- (void)waitForSoftwareKeyboard +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + KIFTestWaitCondition(![KIFTypist keyboardHidden], error, @"Keyboard is not visible"); + + return KIFTestStepResultSuccess; + }]; +} + +- (void)waitForAbsenceOfKeyboard +{ + [self waitForAbsenceOfSoftwareKeyboard]; +} + +- (void)waitForAbsenceOfSoftwareKeyboard +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + KIFTestWaitCondition([KIFTypist keyboardHidden], error, @"Keyboard is visible"); + + return KIFTestStepResultSuccess; + }]; +} + +- (void)waitForKeyInputReady +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + KIFTestWaitCondition(![KIFTypist keyboardHidden] || [KIFTypist hasHardwareKeyboard], error, @"No software or hardware keyboard."); + KIFTestWaitCondition([KIFTypist hasKeyInputResponder], error, @"No responder for key inputs."); + + return KIFTestStepResultSuccess; + }]; +} + +- (void)enterTextIntoCurrentFirstResponder:(NSString *)text +{ + [self waitForKeyInputReady]; + [self enterTextIntoCurrentFirstResponder:text fallbackView:nil]; +} + +- (void)enterTextIntoCurrentFirstResponder:(NSString *)text fallbackView:(UIView *)fallbackView +{ + [text enumerateSubstringsInRange:NSMakeRange(0, text.length) + options:NSStringEnumerationByComposedCharacterSequences + usingBlock: ^(NSString *characterString,NSRange substringRange,NSRange enclosingRange,BOOL * stop) + { + if (![KIFTypist enterCharacter:characterString]) { + // Attempt to cheat if we couldn't find the character + UIView * fallback = fallbackView; + if (!fallback) { + UIResponder *firstResponder = [[[UIApplication sharedApplication] keyWindow] firstResponder]; + if ([firstResponder isKindOfClass:[UIView class]]) { + fallback = (UIView *)firstResponder; + } + } + + if ([fallback isKindOfClass:[UITextField class]] || [fallback isKindOfClass:[UITextView class]] || [fallback isKindOfClass:[UISearchBar class]]) { + NSLog(@"KIF: Unable to find keyboard key for %@. Inserting manually.", characterString); + [(UITextField *)fallback setText:[[(UITextField *)fallback text] stringByAppendingString:characterString]]; + } else { + [self failWithError:[NSError KIFErrorWithFormat:@"Failed to find key for character \"%@\"", characterString] stopTest:YES]; + } + } + }]; +} + +- (void)enterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label +{ + return [self enterText:text intoViewWithAccessibilityLabel:label traits:UIAccessibilityTraitNone expectedResult:nil]; +} + +- (void)enterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits expectedResult:(NSString *)expectedResult +{ + UIView *view = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement:&element view:&view withLabel:label value:nil traits:traits tappable:YES]; + [self tapAccessibilityElement:element inView:view]; + [self waitForTimeInterval:0.25]; + [self enterTextIntoCurrentFirstResponder:text fallbackView:view]; + [self expectView:view toContainText:expectedResult ?: text]; +} + +- (void)expectView:(UIView *)view toContainText:(NSString *)expectedResult +{ + // We will perform some additional validation if the view is UITextField or UITextView. + if (![view respondsToSelector:@selector(text)]) { + return; + } + + UITextView *textView = (UITextView *)view; + + // Some slower machines take longer for typing to catch up, so wait for a bit before failing + [self runBlock:^KIFTestStepResult(NSError **error) { + // We trim \n and \r because they trigger the return key, so they won't show up in the final product on single-line inputs. + // Also trim \b (backspace) characters to allow for deletion. + NSMutableCharacterSet *charExclusionSet = [NSMutableCharacterSet characterSetWithCharactersInString:@"\b"]; + [charExclusionSet formUnionWithCharacterSet:[NSCharacterSet newlineCharacterSet]]; + NSString *expected = [expectedResult stringByTrimmingCharactersInSet:charExclusionSet]; + NSString *actual = [textView.text stringByTrimmingCharactersInSet:charExclusionSet]; + + KIFTestWaitCondition([actual isEqualToString:expected], error, @"Failed to get text \"%@\" in field; instead, it was \"%@\"", expected, actual); + + return KIFTestStepResultSuccess; + } timeout:1.0]; +} + +- (void)clearTextFromFirstResponder +{ + UIView *firstResponder = (id)[[[UIApplication sharedApplication] keyWindow] firstResponder]; + if ([firstResponder isKindOfClass:[UIView class]]) { + [self clearTextFromElement:(UIAccessibilityElement *)firstResponder inView:firstResponder]; + } +} + +- (void)clearTextFromViewWithAccessibilityLabel:(NSString *)label +{ + [self clearTextFromViewWithAccessibilityLabel:label traits:UIAccessibilityTraitNone]; +} + +- (void)clearTextFromViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits +{ + UIView *view = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement:&element view:&view withLabel:label value:nil traits:traits tappable:YES]; + [self clearTextFromElement:element inView:view]; +} + +- (void)clearTextFromElement:(UIAccessibilityElement*)element inView:(UIView*)view +{ + [self tapAccessibilityElement:element inView:view]; + + // Per issue #294, the tap occurs in the center of the text view. If the text is too long, this means not all text gets cleared. To address this for most cases, we can check if the selected view conforms to UITextInput and select the whole text range. + if ([view conformsToProtocol:@protocol(UITextInput)]) { + id textInput = (id )view; + [textInput setSelectedTextRange:[textInput textRangeFromPosition:textInput.beginningOfDocument toPosition:textInput.endOfDocument]]; + + [self waitForTimeInterval:0.1]; + [self enterTextIntoCurrentFirstResponder:@"\b" fallbackView:view]; + } else { + NSUInteger numberOfCharacters = [view respondsToSelector:@selector(text)] ? [(UITextField *)view text].length : element.accessibilityValue.length; + NSMutableString *text = [NSMutableString string]; + for (NSInteger i = 0; i < numberOfCharacters; i ++) { + [text appendString:@"\b"]; + } + [self enterTextIntoCurrentFirstResponder:text fallbackView:view]; + } + + [self expectView:view toContainText:@""]; +} + +- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label +{ + [self clearTextFromViewWithAccessibilityLabel:label]; + [self enterText:text intoViewWithAccessibilityLabel:label]; +} + +- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits expectedResult:(NSString *)expectedResult +{ + [self clearTextFromViewWithAccessibilityLabel:label traits:traits]; + [self enterText:text intoViewWithAccessibilityLabel:label traits:traits expectedResult:expectedResult]; +} + +- (void)clearTextFromAndThenEnterTextIntoCurrentFirstResponder:(NSString *)text +{ + [self clearTextFromFirstResponder]; + [self enterTextIntoCurrentFirstResponder:text]; +} + +- (void) selectDatePickerValue:(NSArray*)datePickerColumnValues { + [self selectPickerValue:datePickerColumnValues pickerType:KIFUIDatePicker]; +} + +- (void)selectPickerViewRowWithTitle:(NSString *)title +{ + NSArray *dataToSelect = @[title]; + [self selectPickerValue:dataToSelect pickerType:KIFUIPickerView]; +} + +- (void)selectPickerViewRowWithTitle:(NSString *)title inComponent:(NSInteger)component +{ + NSMutableArray *dataToSelect = [[NSMutableArray alloc] init]; + + // Assume it is datePicker and then test our hypothesis later! + UIPickerView *pickerView = [[[[UIApplication sharedApplication] datePickerWindow] subviewsWithClassNameOrSuperClassNamePrefix:@"UIPickerView"] lastObject]; + + // Check which type of UIPickerVIew is visible on current window. + KIFPickerType pickerType = 0; + if ([pickerView respondsToSelector:@selector(setDate:animated:)]) { + pickerType = KIFUIDatePicker; + } + else { + pickerType = KIFUIPickerView; + pickerView = [[[[UIApplication sharedApplication] pickerViewWindow] subviewsWithClassNameOrSuperClassNamePrefix:@"UIPickerView"] lastObject]; + } + + // Add title at component index and add empty strings for other. + // This support legacy function re-use. + for (int i = 0; i < pickerView.numberOfComponents; i++) { + if (component == i) { + [dataToSelect addObject:title]; + } + else { + NSInteger currentIndex = [pickerView selectedRowInComponent:i]; + NSString *rowTitle = nil; + if ([pickerView.delegate respondsToSelector:@selector(pickerView:titleForRow:forComponent:)]) { + rowTitle = [pickerView.delegate pickerView:pickerView titleForRow:currentIndex forComponent: i]; + } else if ([pickerView.delegate respondsToSelector:@selector(pickerView:viewForRow:forComponent:reusingView:)]) { + // This delegate inserts views directly, so try to figure out what the title is by looking for a label + UIView *rowView = [pickerView.delegate pickerView:pickerView viewForRow:currentIndex forComponent: i reusingView:nil]; + NSArray *labels = [rowView subviewsWithClassNameOrSuperClassNamePrefix:@"UILabel"]; + UILabel *label = (labels.count > 0 ? labels[0] : nil); + rowTitle = label.text; + } + + if (rowTitle) { + [dataToSelect addObject: rowTitle]; + } else { + @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Unknown picker type. Delegate responds neither to pickerView:titleForRow:forComponent: nor to pickerView:viewForRow:forComponent:reusingView:" userInfo:nil]; + } + } + } + + [self selectPickerValue:dataToSelect pickerType:pickerType]; +} + +- (void) selectPickerValue:(NSArray*)pickerColumnValues pickerType:(KIFPickerType)pickerType { + + [self runBlock:^KIFTestStepResult(NSError **error) { + NSInteger columnCount = [pickerColumnValues count]; + NSMutableArray* found_values = [NSMutableArray arrayWithCapacity:columnCount]; + for (NSInteger componentIndex = 0; componentIndex < columnCount; componentIndex++) { + [found_values addObject:[NSNumber numberWithBool:NO]]; + } + // Find the picker view + UIPickerView *pickerView = nil; + switch (pickerType) + { + case KIFUIDatePicker: + pickerView = [[[[UIApplication sharedApplication] datePickerWindow] subviewsWithClassNameOrSuperClassNamePrefix:@"UIPickerView"] lastObject]; + KIFTestCondition(pickerView, error, @"No picker view is present"); + break; + case KIFUIPickerView: + pickerView = [[[[UIApplication sharedApplication] pickerViewWindow] subviewsWithClassNameOrSuperClassNamePrefix:@"UIPickerView"] lastObject]; + } + + NSInteger componentCount = [pickerView.dataSource numberOfComponentsInPickerView:pickerView]; + KIFTestCondition(componentCount == columnCount, error, @"The UIDatePicker does not have the expected column count."); + + for (NSInteger componentIndex = 0; componentIndex < componentCount; componentIndex++) { + NSInteger rowCount = [pickerView.dataSource pickerView:pickerView numberOfRowsInComponent:componentIndex]; + for (NSInteger rowIndex = 0; rowIndex < rowCount; rowIndex++) { + NSString *rowTitle = nil; + if ([pickerView.delegate respondsToSelector:@selector(pickerView:titleForRow:forComponent:)]) { + rowTitle = [pickerView.delegate pickerView:pickerView titleForRow:rowIndex forComponent:componentIndex]; + } else if ([pickerView.delegate respondsToSelector:@selector(pickerView:viewForRow:forComponent:reusingView:)]) { + + UIView *rowView = [pickerView.delegate pickerView:pickerView viewForRow:rowIndex forComponent:componentIndex reusingView:nil]; + UILabel *label; + if ([rowView isKindOfClass:[UILabel class]] ) { + label = (id)rowView; + } else { + // This delegate inserts views directly, so try to figure out what the title is by looking for a label + NSArray *labels = [rowView subviewsWithClassNameOrSuperClassNamePrefix:@"UILabel"]; + label = (labels.count > 0 ? labels[0] : nil); + } + rowTitle = label.text; + } + + if (rowIndex==[pickerView selectedRowInComponent:componentIndex] && [rowTitle isEqual:pickerColumnValues[componentIndex]]){ + [found_values replaceObjectAtIndex:componentIndex withObject:@(YES)]; + break; + } + else if ([rowTitle isEqual:pickerColumnValues[componentIndex]]) { + [pickerView selectRow:rowIndex inComponent:componentIndex animated:false]; + CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1, false); + + // Tap in the middle of the picker view to select the item + [pickerView tap]; + [self waitForTimeInterval:0.5]; + + // The combination of selectRow:inComponent:animated: and tap does not consistently result in + // pickerView:didSelectRow:inComponent: being called on the delegate. We need to do it explicitly. + if ([pickerView.delegate respondsToSelector:@selector(pickerView:didSelectRow:inComponent:)]) { + [pickerView.delegate pickerView:pickerView didSelectRow:rowIndex inComponent:componentIndex]; + } + + [found_values replaceObjectAtIndex:componentIndex withObject:@(YES)]; + break; + } + } + if (found_values[componentIndex] == [NSNumber numberWithBool:YES]) { + continue; + } + } + + // Support multiple column by adding flag to check if the value found in + // at-least one column + BOOL _foundInOneColumn = NO; + for (NSInteger componentIndex = 0; componentIndex < columnCount; componentIndex++) { + if (found_values[componentIndex] != [NSNumber numberWithBool:NO]) { + _foundInOneColumn = YES; + } + } + + if (!_foundInOneColumn) { + KIFTestCondition(NO, error, @"Failed to select from Picker."); + return KIFTestStepResultFailure; + } + + return KIFTestStepResultSuccess; + }]; + +} + +- (void)setOn:(BOOL)switchIsOn forSwitchWithAccessibilityLabel:(NSString *)label +{ + UIView *view = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement:&element view:&view withLabel:label value:nil traits:UIAccessibilityTraitButton tappable:YES]; + + if (![view isKindOfClass:[UISwitch class]]) { + [self failWithError:[NSError KIFErrorWithFormat:@"View with accessibility label \"%@\" is a %@, not a UISwitch", label, NSStringFromClass([view class])] stopTest:YES]; + } + + UISwitch *switchView = (UISwitch *)view; + + // No need to switch it if it's already in the correct position + if (switchView.isOn == switchIsOn) { + return; + } + + [self tapAccessibilityElement:element inView:view]; + + // If we succeeded, stop the test. + if (switchView.isOn == switchIsOn) { + return; + } + + NSLog(@"Faking turning switch %@ with accessibility label %@", switchIsOn ? @"ON" : @"OFF", label); + [switchView setOn:switchIsOn animated:YES]; + [switchView sendActionsForControlEvents:UIControlEventValueChanged]; + [self waitForTimeInterval:0.5]; + + // We gave it our best shot. Fail the test. + if (switchView.isOn != switchIsOn) { + [self failWithError:[NSError KIFErrorWithFormat:@"Failed to toggle switch to \"%@\"; instead, it was \"%@\"", switchIsOn ? @"ON" : @"OFF", switchView.on ? @"ON" : @"OFF"] stopTest:YES]; + } +} + + + +- (void)setValue:(float)value forSliderWithAccessibilityLabel:(NSString *)label +{ + UISlider *slider = nil; + UIAccessibilityElement *element = nil; + [self waitForAccessibilityElement:&element view:&slider withLabel:label value:nil traits:UIAccessibilityTraitNone tappable:YES]; + + if (![slider isKindOfClass:[UISlider class]]) { + [self failWithError:[NSError KIFErrorWithFormat:@"View with accessibility label \"%@\" is a %@, not a UISlider", label, NSStringFromClass([slider class])] stopTest:YES]; + } + [self setValue:value forSlider:slider]; +} + +- (void)setValue:(float)value forSlider:(UISlider *)slider +{ + if (value < slider.minimumValue) { + [self failWithError:[NSError KIFErrorWithFormat:@"Cannot slide past minimum value of %f", slider.minimumValue] stopTest:YES]; + } + + if (value > slider.maximumValue) { + [self failWithError:[NSError KIFErrorWithFormat:@"Cannot slide past maximum value of %f", slider.maximumValue] stopTest:YES]; + } + + CGRect trackRect = [slider trackRectForBounds:slider.bounds]; + CGPoint currentPosition = CGPointCenteredInRect([slider thumbRectForBounds:slider.bounds trackRect:trackRect value:slider.value]); + CGPoint finalPosition = CGPointCenteredInRect([slider thumbRectForBounds:slider.bounds trackRect:trackRect value:value]); + + if (value == slider.minimumValue) { + finalPosition.x = 0; + } else if (value == slider.maximumValue) { + finalPosition.x = slider.bounds.size.width; + } + + [slider dragFromPoint:currentPosition toPoint:finalPosition steps:10]; +} + +- (void)dismissPopover +{ + const NSTimeInterval tapDelay = 0.05; + UIWindow *window = [[UIApplication sharedApplication] dimmingViewWindow]; + if (!window) { + [self failWithError:[NSError KIFErrorWithFormat:@"Failed to find any dimming views in the application"] stopTest:YES]; + } + UIView *dimmingView = [[window subviewsWithClassNamePrefix:@"UIDimmingView"] lastObject]; + [dimmingView tapAtPoint:CGPointMake(50.0f, 50.0f)]; + CFRunLoopRunInMode(kCFRunLoopDefaultMode, tapDelay, false); +} + +- (void)choosePhotoInAlbum:(NSString *)albumName atRow:(NSInteger)row column:(NSInteger)column +{ + // This is basically the same as the step to tap with an accessibility label except that the accessibility labels for the albums have the number of photos appended to the end, such as "My Photos (3)." This means that we have to do a prefix match rather than an exact match. + [self runBlock:^KIFTestStepResult(NSError **error) { + + NSString *labelPrefix = [NSString stringWithFormat:@"%@", albumName]; + UIAccessibilityElement *element = [[UIApplication sharedApplication] accessibilityElementMatchingBlock:^(UIAccessibilityElement *element) { + return [element.accessibilityLabel hasPrefix:labelPrefix]; + }]; + + KIFTestWaitCondition(element, error, @"Failed to find photo album with name %@", albumName); + + UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; + KIFTestWaitCondition(view, error, @"Failed to find view for photo album with name %@", albumName); + + if (![view isUserInteractionActuallyEnabled]) { + if (error) { + *error = [NSError KIFErrorWithFormat:@"Album picker is not enabled for interaction"]; + } + return KIFTestStepResultWait; + } + + CGRect elementFrame = [view.windowOrIdentityWindow convertRect:element.accessibilityFrame toView:view]; + CGPoint tappablePointInElement = [view tappablePointInRect:elementFrame]; + + [view tapAtPoint:tappablePointInElement]; + + return KIFTestStepResultSuccess; + }]; + + // Wait for media picker view controller to be pushed. + [self waitForTimeInterval:1]; + + // Tap the desired photo in the grid + // TODO: This currently only works for the first page of photos. It should scroll appropriately at some point. + const CGFloat headerHeight = 64.0; + const CGSize thumbnailSize = CGSizeMake(75.0, 75.0); + const CGFloat thumbnailMargin = 5.0; + CGPoint thumbnailCenter; + thumbnailCenter.x = thumbnailMargin + (MAX(0, column - 1) * (thumbnailSize.width + thumbnailMargin)) + thumbnailSize.width / 2.0; + thumbnailCenter.y = headerHeight + thumbnailMargin + (MAX(0, row - 1) * (thumbnailSize.height + thumbnailMargin)) + thumbnailSize.height / 2.0; + [self tapScreenAtPoint:thumbnailCenter]; +} + +- (void)tapRowAtIndexPath:(NSIndexPath *)indexPath inTableViewWithAccessibilityIdentifier:(NSString *)identifier +{ + UITableView *tableView; + [self waitForAccessibilityElement:NULL view:&tableView withIdentifier:identifier tappable:NO]; + [self tapRowAtIndexPath:indexPath inTableView:tableView]; +} + +- (void)tapRowInTableViewWithAccessibilityLabel:(NSString*)tableViewLabel atIndexPath:(NSIndexPath *)indexPath +{ + UITableView *tableView = (UITableView *)[self waitForViewWithAccessibilityLabel:tableViewLabel]; + [self tapRowAtIndexPath:indexPath inTableView:tableView]; +} + +- (void)tapRowAtIndexPath:(NSIndexPath *)indexPath inTableView:(UITableView *)tableView +{ + UITableViewCell *cell = [self waitForCellAtIndexPath:indexPath inTableView:tableView]; + CGRect cellFrame = [cell.contentView convertRect:cell.contentView.frame toView:tableView]; + [tableView tapAtPoint:CGPointCenteredInRect(cellFrame)]; + + [self waitForAnimationsToFinish]; +} + +- (void)swipeRowAtIndexPath:(NSIndexPath *)indexPath inTableView:(UITableView *)tableView inDirection:(KIFSwipeDirection)direction +{ + const NSUInteger kNumberOfPointsInSwipePath = 20; + + UITableViewCell *cell = [self waitForCellAtIndexPath:indexPath inTableView:tableView]; + CGRect cellFrame = [cell.contentView convertRect:cell.contentView.frame toView:tableView]; + CGPoint swipeStart = CGPointCenteredInRect(cellFrame); + KIFDisplacement swipeDisplacement = KIFDisplacementForSwipingInDirection(direction); + [tableView dragFromPoint:swipeStart displacement:swipeDisplacement steps:kNumberOfPointsInSwipePath]; + + // Wait for the view to stabilize. + [tester waitForTimeInterval:0.5]; + +} + +- (void)tapItemAtIndexPath:(NSIndexPath *)indexPath inCollectionViewWithAccessibilityIdentifier:(NSString *)identifier +{ + UICollectionView *collectionView; + [self waitForAccessibilityElement:NULL view:&collectionView withIdentifier:identifier tappable:NO]; + [self tapItemAtIndexPath:indexPath inCollectionView:collectionView]; +} + +- (BOOL)acknowledgeSystemAlert { + return [UIAutomationHelper acknowledgeSystemAlert]; +} + +- (void)tapItemAtIndexPath:(NSIndexPath *)indexPath inCollectionView:(UICollectionView *)collectionView +{ + UICollectionViewCell *cell; + cell = [self waitForCellAtIndexPath:indexPath inCollectionView:collectionView]; + + CGRect cellFrame = [cell.contentView convertRect:cell.contentView.frame toView:collectionView]; + [collectionView tapAtPoint:CGPointCenteredInRect(cellFrame)]; + + [self waitForAnimationsToFinish]; +} + +- (void)swipeViewWithAccessibilityLabel:(NSString *)label inDirection:(KIFSwipeDirection)direction +{ + [self swipeViewWithAccessibilityLabel:label value:nil traits:UIAccessibilityTraitNone inDirection:direction]; +} + +- (void)swipeViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value inDirection:(KIFSwipeDirection)direction +{ + [self swipeViewWithAccessibilityLabel:label value:value traits:UIAccessibilityTraitNone inDirection:direction]; +} + +- (void)swipeViewWithAccessibilityLabel:(NSString *)label value:(NSString *)value traits:(UIAccessibilityTraits)traits inDirection:(KIFSwipeDirection)direction +{ + UIView *viewToSwipe = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement:&element view:&viewToSwipe withLabel:label value:value traits:traits tappable:YES]; + + [self swipeAccessibilityElement:element inView:viewToSwipe inDirection:direction]; +} + +- (void)swipeAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)viewToSwipe inDirection:(KIFSwipeDirection)direction +{ + // The original version of this came from http://groups.google.com/group/kif-framework/browse_thread/thread/df3f47eff9f5ac8c + + const NSUInteger kNumberOfPointsInSwipePath = 20; + + // Within this method, all geometry is done in the coordinate system of the view to swipe. + + CGRect elementFrame = [viewToSwipe.windowOrIdentityWindow convertRect:element.accessibilityFrame toView:viewToSwipe]; + CGPoint swipeStart = CGPointCenteredInRect(elementFrame); + KIFDisplacement swipeDisplacement = KIFDisplacementForSwipingInDirection(direction); + + [viewToSwipe dragFromPoint:swipeStart displacement:swipeDisplacement steps:kNumberOfPointsInSwipePath]; +} + +- (void)scrollViewWithAccessibilityLabel:(NSString *)label byFractionOfSizeHorizontal:(CGFloat)horizontalFraction vertical:(CGFloat)verticalFraction +{ + UIView *viewToScroll; + UIAccessibilityElement *element; + [self waitForAccessibilityElement:&element view:&viewToScroll withLabel:label value:nil traits:UIAccessibilityTraitNone tappable:NO]; + [self scrollAccessibilityElement:element inView:viewToScroll byFractionOfSizeHorizontal:horizontalFraction vertical:verticalFraction]; +} + +- (void)scrollViewWithAccessibilityIdentifier:(NSString *)identifier byFractionOfSizeHorizontal:(CGFloat)horizontalFraction vertical:(CGFloat)verticalFraction +{ + UIView *viewToScroll; + UIAccessibilityElement *element; + [self waitForAccessibilityElement:&element view:&viewToScroll withIdentifier:identifier tappable:NO]; + [self scrollAccessibilityElement:element inView:viewToScroll byFractionOfSizeHorizontal:horizontalFraction vertical:verticalFraction]; +} + +- (void)scrollAccessibilityElement:(UIAccessibilityElement *)element inView:(UIView *)viewToScroll byFractionOfSizeHorizontal:(CGFloat)horizontalFraction vertical:(CGFloat)verticalFraction +{ + const NSUInteger kNumberOfPointsInScrollPath = 5; + + // Within this method, all geometry is done in the coordinate system of the view to scroll. + + CGRect elementFrame = [viewToScroll.windowOrIdentityWindow convertRect:element.accessibilityFrame toView:viewToScroll]; + + KIFDisplacement scrollDisplacement = CGPointMake(elementFrame.size.width * horizontalFraction, elementFrame.size.height * verticalFraction); + + CGPoint scrollStart = CGPointCenteredInRect(elementFrame); + scrollStart.x -= scrollDisplacement.x / 2; + scrollStart.y -= scrollDisplacement.y / 2; + + [viewToScroll dragFromPoint:scrollStart displacement:scrollDisplacement steps:kNumberOfPointsInScrollPath]; +} + +- (void)waitForFirstResponderWithAccessibilityLabel:(NSString *)label +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + UIResponder *firstResponder = [[[UIApplication sharedApplication] keyWindow] firstResponder]; + if ([firstResponder isKindOfClass:NSClassFromString(@"UISearchBarTextField")]) { + do { + firstResponder = [(UIView *)firstResponder superview]; + } while (firstResponder && ![firstResponder isKindOfClass:[UISearchBar class]]); + } + KIFTestWaitCondition([[firstResponder accessibilityLabel] isEqualToString:label], error, @"Expected accessibility label for first responder to be '%@', got '%@'", label, [firstResponder accessibilityLabel]); + + return KIFTestStepResultSuccess; + }]; +} + +- (void)waitForFirstResponderWithAccessibilityLabel:(NSString *)label traits:(UIAccessibilityTraits)traits +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + UIResponder *firstResponder = [[[UIApplication sharedApplication] keyWindow] firstResponder]; + + NSString *foundLabel = firstResponder.accessibilityLabel; + + // foundLabel == label checks for the case where both are nil. + KIFTestWaitCondition(foundLabel == label || [foundLabel isEqualToString:label], error, @"Expected accessibility label for first responder to be '%@', got '%@'", label, foundLabel); + KIFTestWaitCondition(firstResponder.accessibilityTraits & traits, error, @"Found first responder with accessibility label, but not traits."); + + return KIFTestStepResultSuccess; + }]; +} + +- (UITableViewCell *)waitForCellAtIndexPath:(NSIndexPath *)indexPath inTableViewWithAccessibilityIdentifier:(NSString *)identifier +{ + UITableView *tableView; + [self waitForAccessibilityElement:NULL view:&tableView withIdentifier:identifier tappable:NO]; + return [self waitForCellAtIndexPath:indexPath inTableView:tableView]; +} + +- (UITableViewCell *)waitForCellAtIndexPath:(NSIndexPath *)indexPath inTableView:(UITableView *)tableView +{ + if (![tableView isKindOfClass:[UITableView class]]) { + [self failWithError:[NSError KIFErrorWithFormat:@"View is not a table view"] stopTest:YES]; + } + + // If section < 0, search from the end of the table. + if (indexPath.section < 0) { + indexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:tableView.numberOfSections + indexPath.section]; + } + + // If row < 0, search from the end of the section. + if (indexPath.row < 0) { + indexPath = [NSIndexPath indexPathForRow:[tableView numberOfRowsInSection:indexPath.section] + indexPath.row inSection:indexPath.section]; + } + + [self runBlock:^KIFTestStepResult(NSError **error) { + + KIFTestWaitCondition(indexPath.section < tableView.numberOfSections, error, @"Section %ld is not found in table view", (long)indexPath.section); + + KIFTestWaitCondition(indexPath.row < [tableView numberOfRowsInSection:indexPath.section], error, @"Row %ld is not found in section %ld of table view", (long)indexPath.row, (long)indexPath.section); + + return KIFTestStepResultSuccess; + }]; + + __block UITableViewCell *cell = nil; + __block CGFloat lastYOffset = CGFLOAT_MAX; + [self runBlock:^KIFTestStepResult(NSError **error) { + [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; + cell = [tableView cellForRowAtIndexPath:indexPath]; + KIFTestWaitCondition(!!cell, error, @"Table view cell at index path %@ not found", indexPath); + + if (lastYOffset != tableView.contentOffset.y) { + lastYOffset = tableView.contentOffset.y; + KIFTestWaitCondition(NO, error, @"Didn't finish scrolling to cell."); + } + + return KIFTestStepResultSuccess; + }]; + + [self waitForTimeInterval:0.1]; // Let things settle. + + + return cell; +} + +- (UICollectionViewCell *)waitForCellAtIndexPath:(NSIndexPath *)indexPath inCollectionViewWithAccessibilityIdentifier:(NSString *)identifier +{ + UICollectionView *collectionView; + [self waitForAccessibilityElement:NULL view:&collectionView withIdentifier:identifier tappable:NO]; + return [self waitForCellAtIndexPath:indexPath inCollectionView:collectionView]; +} + +- (UICollectionViewCell *)waitForCellAtIndexPath:(NSIndexPath *)indexPath inCollectionView:(UICollectionView *)collectionView +{ + if (![collectionView isKindOfClass:[UICollectionView class]]) { + [self failWithError:[NSError KIFErrorWithFormat:@"View is not a collection view"] stopTest:YES]; + } + + NSInteger section = indexPath.section; + NSInteger item = indexPath.item; + + // If section < 0, search from the end of the table. + if (section < 0) { + section += collectionView.numberOfSections; + } + + // If item < 0, search from the end of the section. + if (item < 0) { + item += [collectionView numberOfItemsInSection:section]; + } + + indexPath = [NSIndexPath indexPathForItem:item inSection:section]; + + [self runBlock:^KIFTestStepResult(NSError **error) { + + KIFTestWaitCondition(indexPath.section < collectionView.numberOfSections, error, @"Section %ld is not found in collection view", (long)indexPath.section); + + KIFTestWaitCondition(indexPath.row < [collectionView numberOfItemsInSection:indexPath.section], error, @"Item %ld is not found in section %ld of collection view", (long)indexPath.row, (long)indexPath.section); + + return KIFTestStepResultSuccess; + }]; + + [collectionView scrollToItemAtIndexPath:indexPath + atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally | UICollectionViewScrollPositionCenteredVertically + animated:YES]; + + [self waitForAnimationsToFinish]; + UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; + + //For big collection views with many cells the cell might not be ready yet. Relayout and try again. + if(cell == nil) { + [collectionView layoutIfNeeded]; + [collectionView scrollToItemAtIndexPath:indexPath + atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally | UICollectionViewScrollPositionCenteredVertically + animated:YES]; + [self waitForAnimationsToFinish]; + cell = [collectionView cellForItemAtIndexPath:indexPath]; + } + + if (!cell) { + [self failWithError:[NSError KIFErrorWithFormat: @"Collection view cell at index path %@ not found", indexPath] stopTest:YES]; + } + + return cell; +} + +- (void)tapStatusBar +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + KIFTestWaitCondition(![UIApplication sharedApplication].statusBarHidden, error, @"Expected status bar to be visible."); + return KIFTestStepResultSuccess; + }]; + + UIWindow *statusBarWindow = [[UIApplication sharedApplication] statusBarWindow]; + NSArray *statusBars = [statusBarWindow subviewsWithClassNameOrSuperClassNamePrefix:@"UIStatusBar"]; + + if (statusBars.count == 0) { + [self failWithError:[NSError KIFErrorWithFormat: @"Could not find the status bar"] stopTest:YES]; + } + + [self tapAccessibilityElement:statusBars[0] inView:statusBars[0]]; +} + +- (void)moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath inTableViewWithAccessibilityIdentifier:(NSString *)identifier +{ + UITableView *tableView; + [self waitForAccessibilityElement:NULL view:&tableView withIdentifier:identifier tappable:NO]; + + UITableViewCell *cell = [self waitForCellAtIndexPath:sourceIndexPath inTableView:tableView]; + + NSError *error = nil; + if (![tableView dragCell:cell toIndexPath:destinationIndexPath error:&error]) { + [self failWithError:error stopTest:YES]; + } +} + +- (void)deactivateAppForDuration:(NSTimeInterval)duration { + [UIAutomationHelper deactivateAppForDuration:@(duration)]; +} + +-(void) tapStepperWithAccessibilityLabel: (NSString *)accessibilityLabel increment: (KIFStepperDirection) stepperDirection +{ + @autoreleasepool { + UIView *view = nil; + UIAccessibilityElement *element = nil; + [self waitForAccessibilityElement:&element view:&view withLabel:accessibilityLabel value:nil traits:UIAccessibilityTraitNone tappable:YES]; + [self tapStepperWithAccessibilityElement:element increment:stepperDirection inView:view]; + } +} + +//inspired by http://www.raywenderlich.com/61419/ios-ui-testing-with-kif +- (void)tapStepperWithAccessibilityElement:(UIAccessibilityElement *)element increment: (KIFStepperDirection) stepperDirection inView:(UIView *)view +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + + KIFTestWaitCondition(view.isUserInteractionActuallyEnabled, error, @"View is not enabled for interaction"); + + // If the accessibilityFrame is not set, fallback to the view frame. + CGRect elementFrame; + if (CGRectEqualToRect(CGRectZero, element.accessibilityFrame)) { + elementFrame.origin = CGPointZero; + elementFrame.size = view.frame.size; + } else { + elementFrame = [view.windowOrIdentityWindow convertRect:element.accessibilityFrame toView:view]; + } + + CGPoint stepperPointToTap = [view tappablePointInRect:elementFrame]; + + switch (stepperDirection) + { + case KIFStepperDirectionIncrement: + stepperPointToTap.x += CGRectGetWidth(view.frame) / 4; + break; + case KIFStepperDirectionDecrement: + stepperPointToTap.x -= CGRectGetWidth(view.frame) / 4; + break; + } + + // This is mostly redundant of the test in _accessibilityElementWithLabel: + KIFTestWaitCondition(!isnan(stepperPointToTap.x), error, @"View is not tappable"); + [view tapAtPoint:stepperPointToTap]; + + KIFTestCondition(![view canBecomeFirstResponder] || [view isDescendantOfFirstResponder], error, @"Failed to make the view into the first responder"); + + return KIFTestStepResultSuccess; + }]; + + [self waitForAnimationsToFinish]; +} +@end + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/UIAutomationHelper.h b/examples/InterstitialUnifiedDemand/KIF-master/Classes/UIAutomationHelper.h new file mode 100755 index 000000000..822f7219d --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/UIAutomationHelper.h @@ -0,0 +1,19 @@ +// +// UIAutomationHelper.h +// KIF +// +// Created by Joe Masilotti on 12/1/14. +// +// + +#import + +@class KIFTestActor; + +@interface UIAutomationHelper : NSObject + ++ (BOOL)acknowledgeSystemAlert; + ++ (void)deactivateAppForDuration:(NSNumber *)duration; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Classes/UIAutomationHelper.m b/examples/InterstitialUnifiedDemand/KIF-master/Classes/UIAutomationHelper.m new file mode 100755 index 000000000..cc4bf4f1c --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Classes/UIAutomationHelper.m @@ -0,0 +1,151 @@ +// +// UIAutomationHelper.m +// KIF +// +// Created by Joe Masilotti on 12/1/14. +// +// + +#import "UIAutomationHelper.h" +#import +#import +#import + +@interface UIAElement : NSObject +- (void)tap; +- (NSNumber *)pid; +@end + +@interface UIAXElement : NSObject +- (BOOL)isValid; +@end + +@interface UIAElementArray : NSArray +- (id)firstWithPredicate:(id)predicate; +@end + +@interface UIAAlert : UIAElement +- (NSArray *)buttons; +- (BOOL)isValid; +- (BOOL)isVisible; +@end + +@interface UIAApplication : UIAElement +- (UIAAlert *)alert; +- (NSString *)name; +- (id)appItemScrollView; +@end + +@interface UIATarget : UIAElement ++ (UIATarget *)localTarget; +- (UIAApplication *)frontMostApp; +- (void)deactivateAppForDuration:(NSNumber *)duration; +@end + +@interface UIAElementNil : UIAElement + +@end + +@implementation UIAutomationHelper + +static UIAApplication * (*frontMostAppIMP)(id, SEL); +static id (*firstWithPredicateIMP)(id, SEL, id); + +static UIAApplication * KIF_frontMostApp(id self, SEL _cmd) +{ + UIAApplication *frontMostApp = frontMostAppIMP(self, _cmd); + if (![frontMostApp name] && [@(getpid()) isEqual:[frontMostApp pid]]) { + NSBundle *mainBundle = [NSBundle mainBundle]; + NSString *appName = [mainBundle objectForInfoDictionaryKey:@"CFBundleDisplayName"] ?: [mainBundle objectForInfoDictionaryKey:@"CFBundleName"]; + [frontMostApp setValue:appName forKey:@"name"]; + } + return frontMostApp; +} + +static id KIF_firstWithPredicate(id self, SEL _cmd, id predicate) +{ + NSArray *callStackSymbols = [NSThread callStackSymbols]; + if (callStackSymbols.count > 1 && [callStackSymbols[1] containsString:@"-[UIATarget reactivateApp]"]) { + id firstWithPredicate = firstWithPredicateIMP(self, _cmd, predicate); + // -[UIATarget reactivateApp] was not rewritten for the new iOS 9 app switcher + return [firstWithPredicate isValid] ? firstWithPredicate : [[[[UIAutomationHelper sharedHelper] target] frontMostApp] appItemScrollView]; + } else { + return firstWithPredicateIMP(self, _cmd, predicate); + } +} + +static void FixReactivateApp(void) +{ + NSProcessInfo *processInfo = [NSProcessInfo processInfo]; + if ([processInfo respondsToSelector:@selector(isOperatingSystemAtLeastVersion:)] && [processInfo isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){9, 0, 0}]) { + // Workaround bug in iOS 9: https://github.com/kif-framework/KIF/issues/703 + Method frontMostApp = class_getInstanceMethod(objc_lookUpClass("UIATarget"), @selector(frontMostApp)); + frontMostAppIMP = (__typeof__(frontMostAppIMP))method_getImplementation(frontMostApp); + method_setImplementation(frontMostApp, (IMP)KIF_frontMostApp); + + Method firstWithPredicate = class_getInstanceMethod(objc_lookUpClass("UIAElementArray"), @selector(firstWithPredicate:)); + firstWithPredicateIMP = (__typeof__(firstWithPredicateIMP))method_getImplementation(firstWithPredicate); + method_setImplementation(firstWithPredicate, (IMP)KIF_firstWithPredicate); + } +} + ++ (UIAutomationHelper *)sharedHelper +{ + static dispatch_once_t once; + static UIAutomationHelper *sharedHelper = nil; + dispatch_once(&once, ^{ + sharedHelper = [[self alloc] init]; + [sharedHelper linkAutomationFramework]; + }); + return sharedHelper; +} + ++ (BOOL)acknowledgeSystemAlert { + return [[self sharedHelper] acknowledgeSystemAlert]; +} + ++ (void)deactivateAppForDuration:(NSNumber *)duration { + [[self sharedHelper] deactivateAppForDuration:duration]; +} +- (BOOL)acknowledgeSystemAlert { + UIAApplication *application = [[self target] frontMostApp]; + UIAAlert* alert = application.alert; + if (![alert isKindOfClass:[self nilElementClass]]) { + [[alert.buttons lastObject] tap]; + while ([alert isValid] && [alert isVisible]) { + } + return YES; + } + return NO; +} + +- (void)deactivateAppForDuration:(NSNumber *)duration { + [[self target] deactivateAppForDuration:duration]; +} + +#pragma mark - Private + +- (void)linkAutomationFramework { + dlopen([@"/Developer/Library/PrivateFrameworks/UIAutomation.framework/UIAutomation" fileSystemRepresentation], RTLD_LOCAL); + FixReactivateApp(); + + // Keep trying until the accessibility server starts up (it takes a little while on iOS 7) + UIATarget *target = nil; + while (!target) { + @try { + target = [self target]; + } + @catch (NSException *exception) { } + @finally { } + } +} + +- (UIATarget *)target { + return [NSClassFromString(@"UIATarget") localTarget]; +} + +- (Class)nilElementClass { + return NSClassFromString(@"UIAElementNil"); +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests copy-Info.plist b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests copy-Info.plist new file mode 100755 index 000000000..30ddc97b8 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests copy-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.square.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests/Acceptance Tests-Info.plist b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests/Acceptance Tests-Info.plist new file mode 100755 index 000000000..30ddc97b8 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests/Acceptance Tests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.square.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests/Acceptance Tests-Prefix.pch b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests/Acceptance Tests-Prefix.pch new file mode 100755 index 000000000..e8420de79 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests/Acceptance Tests-Prefix.pch @@ -0,0 +1,9 @@ +// +// Prefix header for all source files of the 'Acceptance Tests' target in the 'Acceptance Tests' project +// + +#ifdef __OBJC__ + #import + #import + #import +#endif diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests/BasicCalculatorTests.m b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests/BasicCalculatorTests.m new file mode 100755 index 000000000..ee30c38d1 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests/BasicCalculatorTests.m @@ -0,0 +1,98 @@ +// +// BasicCalculatorTests.m +// Calculator +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +@interface KIFUITestActor (BasicCalculator) + +- (void)enterValue1:(NSString *)value; +- (void)enterValue2:(NSString *)value; +- (void)setOperation:(NSString *)operation; +- (void)enterValue1:(NSString *)value1 value2:(NSString *)value2 operation:(NSString *)operation; +- (void)waitForResult:(NSString *)result; + +@end + +@implementation KIFUITestActor (BasicCalculator) + +- (void)enterValue1:(NSString *)value +{ + [self clearTextFromAndThenEnterText:value intoViewWithAccessibilityLabel:@"First Number"]; +} + +- (void)enterValue2:(NSString *)value +{ + [self clearTextFromAndThenEnterText:value intoViewWithAccessibilityLabel:@"Second Number"]; +} + +- (void)setOperation:(NSString *)operation +{ + [self tapViewWithAccessibilityLabel:operation]; +} + +- (void)enterValue1:(NSString *)value1 value2:(NSString *)value2 operation:(NSString *)operation +{ + [self enterValue1:value1]; + [self enterValue2:value2]; + [self setOperation:operation]; +} + +- (void)waitForResult:(NSString *)result +{ + [self waitForViewWithAccessibilityLabel:result]; +} + +@end + +@interface BasicCalculatorTests : KIFTestCase +@end + +@implementation BasicCalculatorTests + +- (void)beforeAll +{ + [tester tapViewWithAccessibilityLabel:@"Basic Calculator" traits:UIAccessibilityTraitButton]; +} + +- (void)afterAll +{ + [tester tapViewWithAccessibilityLabel:@"Home" traits:UIAccessibilityTraitButton]; +} + +- (void)testAddition +{ + [tester enterValue1:@"100" value2:@"11.11111" operation:@"Add"]; + [tester waitForResult:@"111.11111000"]; +} + +- (void)testSubtraction +{ + [tester enterValue1:@"200" value2:@"0.1" operation:@"Subtract"]; + [tester waitForResult:@"199.90000000"]; +} + +- (void)testMultiplication +{ + [tester enterValue1:@"11.000" value2:@"1.1" operation:@"Multiply"]; + [tester waitForResult:@"12.10000000"]; +} + +- (void)testDivision +{ + [tester enterValue1:@"5.000" value2:@"2" operation:@"Divide"]; + [tester waitForResult:@"2.50000000"]; +} + +- (void)testToFail +{ + [tester fail]; + NSLog(@"This line never executes."); +} + +@end \ No newline at end of file diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests/en.lproj/InfoPlist.strings b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests/en.lproj/InfoPlist.strings new file mode 100755 index 000000000..477b28ff8 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Acceptance Tests/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator.xcodeproj/project.pbxproj b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator.xcodeproj/project.pbxproj new file mode 100755 index 000000000..3143acc30 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator.xcodeproj/project.pbxproj @@ -0,0 +1,578 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + A88930681685133100FC7C63 /* libKIF.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A88930001684F0A400FC7C63 /* libKIF.a */; }; + EB4C30DE167B9E3A00E31109 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB4C30DD167B9E3A00E31109 /* UIKit.framework */; }; + EB4C30E0167B9E3A00E31109 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB4C30DF167B9E3A00E31109 /* Foundation.framework */; }; + EB4C30E2167B9E3A00E31109 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB4C30E1167B9E3A00E31109 /* CoreGraphics.framework */; }; + EB4C30E8167B9E3A00E31109 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EB4C30E6167B9E3A00E31109 /* InfoPlist.strings */; }; + EB4C30EA167B9E3A00E31109 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C30E9167B9E3A00E31109 /* main.m */; }; + EB4C30EE167B9E3A00E31109 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C30ED167B9E3A00E31109 /* AppDelegate.m */; }; + EB4C30F0167B9E3A00E31109 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = EB4C30EF167B9E3A00E31109 /* Default.png */; }; + EB4C30F2167B9E3A00E31109 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EB4C30F1167B9E3A00E31109 /* Default@2x.png */; }; + EB4C30F4167B9E3A00E31109 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EB4C30F3167B9E3A00E31109 /* Default-568h@2x.png */; }; + EB4C30F7167B9E3A00E31109 /* BasicCalculatorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C30F6167B9E3A00E31109 /* BasicCalculatorViewController.m */; }; + EB4C30FA167B9E3A00E31109 /* BasicCalculatorViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EB4C30F8167B9E3A00E31109 /* BasicCalculatorViewController.xib */; }; + EB4C3140167BA79700E31109 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB4C3101167B9E3A00E31109 /* SenTestingKit.framework */; }; + EB4C3141167BA79700E31109 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB4C30DD167B9E3A00E31109 /* UIKit.framework */; }; + EB4C3142167BA79700E31109 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB4C30DF167B9E3A00E31109 /* Foundation.framework */; }; + EB4C3148167BA79700E31109 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EB4C3146167BA79700E31109 /* InfoPlist.strings */; }; + EB4C3153167BA89B00E31109 /* AboutViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C3151167BA89A00E31109 /* AboutViewController.m */; }; + EB4C3155167BA89B00E31109 /* AboutViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EB4C3152167BA89B00E31109 /* AboutViewController.xib */; }; + EB4C3156167BA89B00E31109 /* AboutViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EB4C3152167BA89B00E31109 /* AboutViewController.xib */; }; + EB4C315A167BA99E00E31109 /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C3158167BA99D00E31109 /* HomeViewController.m */; }; + EB4C315C167BA99E00E31109 /* HomeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EB4C3159167BA99E00E31109 /* HomeViewController.xib */; }; + EB4C315D167BA99E00E31109 /* HomeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EB4C3159167BA99E00E31109 /* HomeViewController.xib */; }; + EB4C3160167BAE6100E31109 /* BasicCalculatorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C315F167BAE6100E31109 /* BasicCalculatorTests.m */; }; + EB4C317B167BB0A900E31109 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB4C30E1167B9E3A00E31109 /* CoreGraphics.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + A8892FFF1684F0A400FC7C63 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A8892FF71684F0A400FC7C63 /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = AAB07268139719AC008AF393; + remoteInfo = KIF; + }; + A88930061684F0B300FC7C63 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A8892FF71684F0A400FC7C63 /* KIF.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = EB72043E1680DDAD00278DA2; + remoteInfo = KIFTestCase; + }; + EB2A8A871781D68600C6299F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A8892FF71684F0A400FC7C63 /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EB60ECC1177F8C83005A041A; + remoteInfo = "Test Host"; + }; + EB2A8A891781D68600C6299F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A8892FF71684F0A400FC7C63 /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EB60ECEB177F8DB3005A041A; + remoteInfo = "KIF Tests"; + }; + EB4C3161167BAEDE00E31109 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EB4C30D0167B9E3A00E31109 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EB4C30D8167B9E3A00E31109; + remoteInfo = Calculator; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + A8892FF71684F0A400FC7C63 /* KIF.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = KIF.xcodeproj; path = ../../../KIF.xcodeproj; sourceTree = ""; }; + EB4C30D9167B9E3A00E31109 /* Calculator.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Calculator.app; sourceTree = BUILT_PRODUCTS_DIR; }; + EB4C30DD167B9E3A00E31109 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + EB4C30DF167B9E3A00E31109 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + EB4C30E1167B9E3A00E31109 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + EB4C30E5167B9E3A00E31109 /* Calculator-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Calculator-Info.plist"; sourceTree = ""; }; + EB4C30E7167B9E3A00E31109 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + EB4C30E9167B9E3A00E31109 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + EB4C30EB167B9E3A00E31109 /* Calculator-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Calculator-Prefix.pch"; sourceTree = ""; }; + EB4C30EC167B9E3A00E31109 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + EB4C30ED167B9E3A00E31109 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + EB4C30EF167B9E3A00E31109 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; + EB4C30F1167B9E3A00E31109 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; + EB4C30F3167B9E3A00E31109 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; + EB4C30F5167B9E3A00E31109 /* BasicCalculatorViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BasicCalculatorViewController.h; sourceTree = ""; }; + EB4C30F6167B9E3A00E31109 /* BasicCalculatorViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BasicCalculatorViewController.m; sourceTree = ""; }; + EB4C30F9167B9E3A00E31109 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/BasicCalculatorViewController.xib; sourceTree = ""; }; + EB4C3101167B9E3A00E31109 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; + EB4C313F167BA79700E31109 /* Acceptance Tests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Acceptance Tests.octest"; sourceTree = BUILT_PRODUCTS_DIR; }; + EB4C3145167BA79700E31109 /* Acceptance Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Acceptance Tests-Info.plist"; sourceTree = ""; }; + EB4C3147167BA79700E31109 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + EB4C314C167BA79700E31109 /* Acceptance Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Acceptance Tests-Prefix.pch"; sourceTree = ""; }; + EB4C3150167BA89A00E31109 /* AboutViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutViewController.h; sourceTree = ""; }; + EB4C3151167BA89A00E31109 /* AboutViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AboutViewController.m; sourceTree = ""; }; + EB4C3152167BA89B00E31109 /* AboutViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AboutViewController.xib; sourceTree = ""; }; + EB4C3157167BA99D00E31109 /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = ""; }; + EB4C3158167BA99D00E31109 /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = ""; }; + EB4C3159167BA99E00E31109 /* HomeViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeViewController.xib; sourceTree = ""; }; + EB4C315F167BAE6100E31109 /* BasicCalculatorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BasicCalculatorTests.m; sourceTree = ""; }; + EB7204861680E02800278DA2 /* libKIFTestCase.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libKIFTestCase.a; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + EB4C30D6167B9E3A00E31109 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EB4C30DE167B9E3A00E31109 /* UIKit.framework in Frameworks */, + EB4C30E0167B9E3A00E31109 /* Foundation.framework in Frameworks */, + EB4C30E2167B9E3A00E31109 /* CoreGraphics.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EB4C313B167BA79700E31109 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A88930681685133100FC7C63 /* libKIF.a in Frameworks */, + EB4C317B167BB0A900E31109 /* CoreGraphics.framework in Frameworks */, + EB4C3140167BA79700E31109 /* SenTestingKit.framework in Frameworks */, + EB4C3141167BA79700E31109 /* UIKit.framework in Frameworks */, + EB4C3142167BA79700E31109 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + A8892FF81684F0A400FC7C63 /* Products */ = { + isa = PBXGroup; + children = ( + A88930001684F0A400FC7C63 /* libKIF.a */, + EB2A8A881781D68600C6299F /* Test Host.app */, + EB2A8A8A1781D68600C6299F /* KIF Tests.octest */, + ); + name = Products; + sourceTree = ""; + }; + EB4C30CE167B9E3A00E31109 = { + isa = PBXGroup; + children = ( + EB4C30E3167B9E3A00E31109 /* Calculator */, + EB4C3143167BA79700E31109 /* Acceptance Tests */, + EB4C30DC167B9E3A00E31109 /* Frameworks */, + EB4C30DA167B9E3A00E31109 /* Products */, + ); + sourceTree = ""; + }; + EB4C30DA167B9E3A00E31109 /* Products */ = { + isa = PBXGroup; + children = ( + EB4C30D9167B9E3A00E31109 /* Calculator.app */, + EB4C313F167BA79700E31109 /* Acceptance Tests.octest */, + ); + name = Products; + sourceTree = ""; + }; + EB4C30DC167B9E3A00E31109 /* Frameworks */ = { + isa = PBXGroup; + children = ( + A8892FF71684F0A400FC7C63 /* KIF.xcodeproj */, + EB7204861680E02800278DA2 /* libKIFTestCase.a */, + EB4C30DD167B9E3A00E31109 /* UIKit.framework */, + EB4C30DF167B9E3A00E31109 /* Foundation.framework */, + EB4C30E1167B9E3A00E31109 /* CoreGraphics.framework */, + EB4C3101167B9E3A00E31109 /* SenTestingKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + EB4C30E3167B9E3A00E31109 /* Calculator */ = { + isa = PBXGroup; + children = ( + EB4C30EC167B9E3A00E31109 /* AppDelegate.h */, + EB4C30ED167B9E3A00E31109 /* AppDelegate.m */, + EB4C30F5167B9E3A00E31109 /* BasicCalculatorViewController.h */, + EB4C30F6167B9E3A00E31109 /* BasicCalculatorViewController.m */, + EB4C30F8167B9E3A00E31109 /* BasicCalculatorViewController.xib */, + EB4C30E4167B9E3A00E31109 /* Supporting Files */, + EB4C3150167BA89A00E31109 /* AboutViewController.h */, + EB4C3151167BA89A00E31109 /* AboutViewController.m */, + EB4C3152167BA89B00E31109 /* AboutViewController.xib */, + EB4C3157167BA99D00E31109 /* HomeViewController.h */, + EB4C3158167BA99D00E31109 /* HomeViewController.m */, + EB4C3159167BA99E00E31109 /* HomeViewController.xib */, + ); + path = Calculator; + sourceTree = ""; + }; + EB4C30E4167B9E3A00E31109 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + EB4C30E5167B9E3A00E31109 /* Calculator-Info.plist */, + EB4C30E6167B9E3A00E31109 /* InfoPlist.strings */, + EB4C30E9167B9E3A00E31109 /* main.m */, + EB4C30EB167B9E3A00E31109 /* Calculator-Prefix.pch */, + EB4C30EF167B9E3A00E31109 /* Default.png */, + EB4C30F1167B9E3A00E31109 /* Default@2x.png */, + EB4C30F3167B9E3A00E31109 /* Default-568h@2x.png */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + EB4C3143167BA79700E31109 /* Acceptance Tests */ = { + isa = PBXGroup; + children = ( + EB4C3144167BA79700E31109 /* Supporting Files */, + EB4C315F167BAE6100E31109 /* BasicCalculatorTests.m */, + ); + path = "Acceptance Tests"; + sourceTree = ""; + }; + EB4C3144167BA79700E31109 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + EB4C3145167BA79700E31109 /* Acceptance Tests-Info.plist */, + EB4C3146167BA79700E31109 /* InfoPlist.strings */, + EB4C314C167BA79700E31109 /* Acceptance Tests-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + EB4C30D8167B9E3A00E31109 /* Calculator */ = { + isa = PBXNativeTarget; + buildConfigurationList = EB4C3112167B9E3A00E31109 /* Build configuration list for PBXNativeTarget "Calculator" */; + buildPhases = ( + EB4C30D5167B9E3A00E31109 /* Sources */, + EB4C30D6167B9E3A00E31109 /* Frameworks */, + EB4C30D7167B9E3A00E31109 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Calculator; + productName = Calculator; + productReference = EB4C30D9167B9E3A00E31109 /* Calculator.app */; + productType = "com.apple.product-type.application"; + }; + EB4C313E167BA79700E31109 /* Acceptance Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = EB4C314D167BA79700E31109 /* Build configuration list for PBXNativeTarget "Acceptance Tests" */; + buildPhases = ( + EB4C313A167BA79700E31109 /* Sources */, + EB4C313B167BA79700E31109 /* Frameworks */, + EB4C313C167BA79700E31109 /* Resources */, + EB4C313D167BA79700E31109 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + A88930071684F0B300FC7C63 /* PBXTargetDependency */, + EB4C3162167BAEDE00E31109 /* PBXTargetDependency */, + ); + name = "Acceptance Tests"; + productName = "Acceptance Tests"; + productReference = EB4C313F167BA79700E31109 /* Acceptance Tests.octest */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + EB4C30D0167B9E3A00E31109 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0450; + ORGANIZATIONNAME = "SSK Development"; + }; + buildConfigurationList = EB4C30D3167B9E3A00E31109 /* Build configuration list for PBXProject "Calculator" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = EB4C30CE167B9E3A00E31109; + productRefGroup = EB4C30DA167B9E3A00E31109 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = A8892FF81684F0A400FC7C63 /* Products */; + ProjectRef = A8892FF71684F0A400FC7C63 /* KIF.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + EB4C30D8167B9E3A00E31109 /* Calculator */, + EB4C313E167BA79700E31109 /* Acceptance Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + A88930001684F0A400FC7C63 /* libKIF.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libKIF.a; + remoteRef = A8892FFF1684F0A400FC7C63 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EB2A8A881781D68600C6299F /* Test Host.app */ = { + isa = PBXReferenceProxy; + fileType = wrapper.application; + path = "Test Host.app"; + remoteRef = EB2A8A871781D68600C6299F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EB2A8A8A1781D68600C6299F /* KIF Tests.octest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "KIF Tests.octest"; + remoteRef = EB2A8A891781D68600C6299F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + EB4C30D7167B9E3A00E31109 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EB4C30E8167B9E3A00E31109 /* InfoPlist.strings in Resources */, + EB4C30F0167B9E3A00E31109 /* Default.png in Resources */, + EB4C30F2167B9E3A00E31109 /* Default@2x.png in Resources */, + EB4C30F4167B9E3A00E31109 /* Default-568h@2x.png in Resources */, + EB4C30FA167B9E3A00E31109 /* BasicCalculatorViewController.xib in Resources */, + EB4C3155167BA89B00E31109 /* AboutViewController.xib in Resources */, + EB4C315C167BA99E00E31109 /* HomeViewController.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EB4C313C167BA79700E31109 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EB4C3148167BA79700E31109 /* InfoPlist.strings in Resources */, + EB4C3156167BA89B00E31109 /* AboutViewController.xib in Resources */, + EB4C315D167BA99E00E31109 /* HomeViewController.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + EB4C313D167BA79700E31109 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + EB4C30D5167B9E3A00E31109 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EB4C30EA167B9E3A00E31109 /* main.m in Sources */, + EB4C30EE167B9E3A00E31109 /* AppDelegate.m in Sources */, + EB4C30F7167B9E3A00E31109 /* BasicCalculatorViewController.m in Sources */, + EB4C3153167BA89B00E31109 /* AboutViewController.m in Sources */, + EB4C315A167BA99E00E31109 /* HomeViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EB4C313A167BA79700E31109 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EB4C3160167BAE6100E31109 /* BasicCalculatorTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + A88930071684F0B300FC7C63 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = KIFTestCase; + targetProxy = A88930061684F0B300FC7C63 /* PBXContainerItemProxy */; + }; + EB4C3162167BAEDE00E31109 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EB4C30D8167B9E3A00E31109 /* Calculator */; + targetProxy = EB4C3161167BAEDE00E31109 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + EB4C30E6167B9E3A00E31109 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + EB4C30E7167B9E3A00E31109 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + EB4C30F8167B9E3A00E31109 /* BasicCalculatorViewController.xib */ = { + isa = PBXVariantGroup; + children = ( + EB4C30F9167B9E3A00E31109 /* en */, + ); + name = BasicCalculatorViewController.xib; + sourceTree = ""; + }; + EB4C3146167BA79700E31109 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + EB4C3147167BA79700E31109 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + EB4C3110167B9E3A00E31109 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + EB4C3111167B9E3A00E31109 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + EB4C3113167B9E3A00E31109 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Calculator/Calculator-Prefix.pch"; + INFOPLIST_FILE = "Calculator/Calculator-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + EB4C3114167B9E3A00E31109 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Calculator/Calculator-Prefix.pch"; + INFOPLIST_FILE = "Calculator/Calculator-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + EB4C314E167BA79700E31109 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Calculator.app/Calculator"; + FRAMEWORK_SEARCH_PATHS = ( + "\"$(SDKROOT)/Developer/Library/Frameworks\"", + "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Acceptance Tests/Acceptance Tests-Prefix.pch"; + INFOPLIST_FILE = "Acceptance Tests/Acceptance Tests-Info.plist"; + OTHER_LDFLAGS = ( + "${inherit}", + "-all_load", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = octest; + }; + name = Debug; + }; + EB4C314F167BA79700E31109 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Calculator.app/Calculator"; + FRAMEWORK_SEARCH_PATHS = ( + "\"$(SDKROOT)/Developer/Library/Frameworks\"", + "\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Acceptance Tests/Acceptance Tests-Prefix.pch"; + INFOPLIST_FILE = "Acceptance Tests/Acceptance Tests-Info.plist"; + OTHER_LDFLAGS = ( + "${inherit}", + "-all_load", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = octest; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + EB4C30D3167B9E3A00E31109 /* Build configuration list for PBXProject "Calculator" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EB4C3110167B9E3A00E31109 /* Debug */, + EB4C3111167B9E3A00E31109 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EB4C3112167B9E3A00E31109 /* Build configuration list for PBXNativeTarget "Calculator" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EB4C3113167B9E3A00E31109 /* Debug */, + EB4C3114167B9E3A00E31109 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EB4C314D167BA79700E31109 /* Build configuration list for PBXNativeTarget "Acceptance Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EB4C314E167BA79700E31109 /* Debug */, + EB4C314F167BA79700E31109 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = EB4C30D0167B9E3A00E31109 /* Project object */; +} diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator.xcodeproj/xcshareddata/xcschemes/Calculator.xcscheme b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator.xcodeproj/xcshareddata/xcschemes/Calculator.xcscheme new file mode 100755 index 000000000..5d4304913 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator.xcodeproj/xcshareddata/xcschemes/Calculator.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AboutViewController.h b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AboutViewController.h new file mode 100755 index 000000000..ee2016fe2 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AboutViewController.h @@ -0,0 +1,14 @@ +// +// AboutViewController.h +// Calculator +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +@interface AboutViewController : UIViewController + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AboutViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AboutViewController.m new file mode 100755 index 000000000..71069c0ba --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AboutViewController.m @@ -0,0 +1,27 @@ +// +// AboutViewController.m +// Calculator +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "AboutViewController.h" + +@interface AboutViewController () + +@end + +@implementation AboutViewController + +- (id)init +{ + self = [super initWithNibName:@"AboutViewController" bundle:nil]; + if (self) { + self.title = @"About"; + } + return self; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AboutViewController.xib b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AboutViewController.xib new file mode 100755 index 000000000..0b120b8d1 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AboutViewController.xib @@ -0,0 +1,169 @@ + + + + 1536 + 11G63b + 2843 + 1138.51 + 569.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 1929 + + + IBProxyObject + IBUILabel + IBUIView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 290 + {{20, 20}, {280, 21}} + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Just a basic calculator + + 1 + MCAwIDAAA + darkTextColor + + + 0 + 1 + + 1 + 17 + + + Helvetica + 17 + 16 + + NO + + + {{0, 20}, {320, 548}} + + + + 3 + MQA + + 2 + + + + + IBUIScreenMetrics + + YES + + + + + + {320, 568} + {568, 320} + + + IBCocoaTouchFramework + Retina 4 Full Screen + 2 + + IBCocoaTouchFramework + + + + + + + view + + + + 3 + + + + + + 0 + + + + + + 1 + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + + + + AboutViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 10 + + + 0 + IBCocoaTouchFramework + YES + 3 + 1929 + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AppDelegate.h b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AppDelegate.h new file mode 100755 index 000000000..95e596664 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AppDelegate.h @@ -0,0 +1,18 @@ +// +// AppDelegate.h +// Calculator +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +@class ViewController; + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AppDelegate.m b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AppDelegate.m new file mode 100755 index 000000000..73d52261e --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/AppDelegate.m @@ -0,0 +1,73 @@ +// +// AppDelegate.m +// Calculator +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "AppDelegate.h" +#import "HomeViewController.h" + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + // Override point for customization after application launch. + + UIViewController *homeController = [[HomeViewController alloc] init]; + UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:homeController]; + navController.navigationBar.translucent = NO; + self.window.rootViewController = navController; + [self.window makeKeyAndVisible]; + +#if DEBUG +#import + // TODO: Document the following or remove. The purpose is to enable testing from the command line pre-Xcode5. + NSLog(@"Did finish launching, environment is %@", [[NSProcessInfo processInfo] environment]); + NSString *bundlePath = [[NSProcessInfo processInfo] environment][@"XCInjectBundle"]; + if (bundlePath) { + BOOL isDirectory = NO; + if ([[NSFileManager defaultManager] fileExistsAtPath:bundlePath isDirectory:&isDirectory] && isDirectory) { + NSString *basename = [[bundlePath lastPathComponent] stringByDeletingPathExtension]; + bundlePath = [bundlePath stringByAppendingPathComponent:basename]; + } + NSLog(@"Loading %@", bundlePath); + void *loadedBundle = dlopen([bundlePath fileSystemRepresentation], RTLD_NOW); + assert(loadedBundle); + } +#endif + + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application +{ + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. +} + +- (void)applicationDidEnterBackground:(UIApplication *)application +{ + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application +{ + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application +{ + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + +- (void)applicationWillTerminate:(UIApplication *)application +{ + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/BasicCalculatorViewController.h b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/BasicCalculatorViewController.h new file mode 100755 index 000000000..557db0b0f --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/BasicCalculatorViewController.h @@ -0,0 +1,16 @@ +// +// ViewController.h +// Calculator +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +@interface BasicCalculatorViewController : UIViewController + +- (IBAction)recalculate; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/BasicCalculatorViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/BasicCalculatorViewController.m new file mode 100755 index 000000000..f2e99b594 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/BasicCalculatorViewController.m @@ -0,0 +1,77 @@ +// +// ViewController.m +// Calculator +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "BasicCalculatorViewController.h" + +typedef NS_ENUM(NSInteger, CalculatorOperation) { + Add, + Subtract, + Multiply, + Divide +}; + +@interface BasicCalculatorViewController () + +@property (weak, nonatomic) IBOutlet UITextField *input1; +@property (weak, nonatomic) IBOutlet UITextField *input2; +@property (weak, nonatomic) IBOutlet UISegmentedControl *operationInput; +@property (weak, nonatomic) IBOutlet UILabel *output; + +@end + +@implementation BasicCalculatorViewController + +- (id)init +{ + self = [super initWithNibName:@"BasicCalculatorViewController" bundle:nil]; + if (self) { + self.title = @"Basic Calculator"; + } + return self; +} + +- (void)setAccessibilityLabel:(NSString *)label forSegment:(NSInteger)segment +{ + UIView *view = (self.operationInput.subviews)[self.operationInput.subviews.count - segment - 1]; + view.accessibilityLabel = label; +} + +- (void)viewDidLoad +{ + [self setAccessibilityLabel:@"Add" forSegment:Add]; + [self setAccessibilityLabel:@"Subtract" forSegment:Subtract]; + [self setAccessibilityLabel:@"Multiply" forSegment:Multiply]; + [self setAccessibilityLabel:@"Divide" forSegment:Divide]; +} + +- (IBAction)recalculate +{ + double value1 = self.input1.text.doubleValue; + double value2 = self.input2.text.doubleValue; + double output; + + switch ((CalculatorOperation)self.operationInput.selectedSegmentIndex) { + case Add: + output = value1 + value2; + break; + case Subtract: + output = value1 - value2; + break; + case Multiply: + output = value1 * value2; + break; + case Divide: + output = value1 / value2; + break; + } + + self.output.text = [NSString stringWithFormat:@"%.8f", output]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Calculator-Info.plist b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Calculator-Info.plist new file mode 100755 index 000000000..01092a502 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Calculator-Info.plist @@ -0,0 +1,38 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.square.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Calculator-Prefix.pch b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Calculator-Prefix.pch new file mode 100755 index 000000000..c1d40d816 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Calculator-Prefix.pch @@ -0,0 +1,14 @@ +// +// Prefix header for all source files of the 'Calculator' target in the 'Calculator' project +// + +#import + +#ifndef __IPHONE_4_0 +#warning "This project uses features only available in iOS SDK 4.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Default-568h@2x.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Default-568h@2x.png new file mode 100755 index 000000000..0891b7aab Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Default-568h@2x.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Default.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Default.png new file mode 100755 index 000000000..4c8ca6f69 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Default.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Default@2x.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Default@2x.png new file mode 100755 index 000000000..35b84cffe Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/Default@2x.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/HomeViewController.h b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/HomeViewController.h new file mode 100755 index 000000000..89c2f0022 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/HomeViewController.h @@ -0,0 +1,14 @@ +// +// HomeViewController.h +// Calculator +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +@interface HomeViewController : UIViewController + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/HomeViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/HomeViewController.m new file mode 100755 index 000000000..705b2b817 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/HomeViewController.m @@ -0,0 +1,39 @@ +// +// HomeViewController.m +// Calculator +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "HomeViewController.h" +#import "AboutViewController.h" +#import "BasicCalculatorViewController.h" + +@interface HomeViewController () + +@end + +@implementation HomeViewController + +- (id)init +{ + self = [super initWithNibName:@"HomeViewController" bundle:nil]; + if (self) { + self.title = @"Home"; + } + return self; +} + +- (IBAction)showBasicCalculator +{ + [self.navigationController pushViewController:[[BasicCalculatorViewController alloc] init] animated:YES]; +} + +- (IBAction)showAbout +{ + [self.navigationController pushViewController:[[AboutViewController alloc] init] animated:YES]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/HomeViewController.xib b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/HomeViewController.xib new file mode 100755 index 000000000..4158afc3a --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/HomeViewController.xib @@ -0,0 +1,263 @@ + + + + 1536 + 11G63b + 2843 + 1138.51 + 569.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 1929 + + + IBProxyObject + IBUIButton + IBUIView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 290 + {{20, 20}, {280, 44}} + + + + _NS:9 + NO + IBCocoaTouchFramework + 0 + 0 + 1 + Basic Calculator + + 3 + MQA + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + 2 + 15 + + + Helvetica-Bold + 15 + 16 + + + + + 290 + {{20, 71}, {280, 44}} + + + + _NS:9 + NO + IBCocoaTouchFramework + 0 + 0 + 1 + About + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + + + + 290 + {{20, 122}, {280, 44}} + + + + _NS:9 + NO + IBCocoaTouchFramework + NO + 0 + 0 + 1 + More coming soon! + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + + + {{0, 20}, {320, 548}} + + + + + 3 + MQA + + 2 + + + + + IBUIScreenMetrics + + YES + + + + + + {320, 568} + {568, 320} + + + IBCocoaTouchFramework + Retina 4 Full Screen + 2 + + IBCocoaTouchFramework + + + + + + + view + + + + 3 + + + + showBasicCalculator + + + 7 + + 12 + + + + showAbout + + + 7 + + 13 + + + + + + 0 + + + + + + 1 + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + 7 + + + + + 11 + + + + + + + HomeViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 13 + + + + + HomeViewController + UIViewController + + IBProjectSource + ./Classes/HomeViewController.h + + + + + 0 + IBCocoaTouchFramework + YES + 3 + 1929 + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/en.lproj/BasicCalculatorViewController.xib b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/en.lproj/BasicCalculatorViewController.xib new file mode 100755 index 000000000..2589cd66b --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/en.lproj/BasicCalculatorViewController.xib @@ -0,0 +1,433 @@ + + + + 1536 + 11G63b + 2843 + 1138.51 + 569.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 1929 + + + IBProxyObject + IBUILabel + IBUISegmentedControl + IBUITextField + IBUIView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 292 + {{20, 59}, {106, 30}} + + + + _NS:9 + NO + IBCocoaTouchFramework + 2 + 4 + 0 + + + + – + × + ÷ + + + + + + + + + + + + + + + {0, 0} + {0, 0} + {0, 0} + {0, 0} + + + + + + + + + + + 290 + {{134, 20}, {166, 30}} + + + + _NS:9 + NO + YES + + First Number + + IBCocoaTouchFramework + 0 + 0 + 3 + + 3 + MAA + + 2 + + + 2 + YES + 17 + + 1 + 8 + 9 + IBCocoaTouchFramework + + + 1 + 14 + + + Helvetica + 14 + 16 + + + + + 290 + {{134, 58}, {166, 30}} + + + + _NS:9 + NO + YES + + Second Number + + IBCocoaTouchFramework + 0 + 0 + 3 + + 3 + MAA + + + 2 + YES + 17 + + 1 + 8 + 9 + IBCocoaTouchFramework + + + + + + + 290 + {{20, 105}, {273, 21}} + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + 0 + + 1 + MCAwIDAAA + darkTextColor + + + 0 + 2 + + + NO + + + + 290 + {{134, 96}, {166, 1}} + + + + _NS:9 + + 3 + MAA + + IBCocoaTouchFramework + + + {{0, 20}, {320, 548}} + + + + + 3 + MQA + + NO + + + IBUIScreenMetrics + + YES + + + + + + {320, 568} + {568, 320} + + + IBCocoaTouchFramework + Retina 4 Full Screen + 2 + + IBCocoaTouchFramework + + + + + + + view + + + + 7 + + + + input1 + + + + 28 + + + + input2 + + + + 29 + + + + operationInput + + + + 30 + + + + output + + + + 31 + + + + recalculate + + + 13 + + 35 + + + + recalculate + + + 18 + + 32 + + + + recalculate + + + 18 + + 33 + + + + + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 6 + + + + + + + + + + + + 8 + + + + + + 13 + + + + + + 17 + + + + + 26 + + + + + 27 + + + + + + + BasicCalculatorViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + + 35 + + + + + BasicCalculatorViewController + UIViewController + + recalculate + id + + + recalculate + + recalculate + id + + + + UITextField + UITextField + UISegmentedControl + UILabel + + + + input1 + UITextField + + + input2 + UITextField + + + operationInput + UISegmentedControl + + + output + UILabel + + + + IBProjectSource + ./Classes/BasicCalculatorViewController.h + + + + + 0 + IBCocoaTouchFramework + YES + 3 + 1929 + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/en.lproj/InfoPlist.strings b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/en.lproj/InfoPlist.strings new file mode 100755 index 000000000..477b28ff8 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/main.m b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/main.m new file mode 100755 index 000000000..7c6302c0f --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Calculator/Calculator/main.m @@ -0,0 +1,20 @@ +// +// main.m +// Calculator +// +// Created by Brian Nickel on 12/14/12. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +#import "AppDelegate.h" + +int main(int argc, char *argv[]) +{ + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift.xcodeproj/project.pbxproj b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift.xcodeproj/project.pbxproj new file mode 100755 index 000000000..e08b71a66 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift.xcodeproj/project.pbxproj @@ -0,0 +1,556 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + A88CD9831A019AFF0064F706 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A88CD9821A019AFF0064F706 /* AppDelegate.swift */; }; + A88CD9851A019AFF0064F706 /* MasterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A88CD9841A019AFF0064F706 /* MasterViewController.swift */; }; + A88CD98A1A019AFF0064F706 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A88CD9881A019AFF0064F706 /* Main.storyboard */; }; + A88CD98C1A019AFF0064F706 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A88CD98B1A019AFF0064F706 /* Images.xcassets */; }; + A88CD98F1A019AFF0064F706 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = A88CD98D1A019AFF0064F706 /* LaunchScreen.xib */; }; + A88CD99B1A019AFF0064F706 /* Testable_SwiftTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A88CD99A1A019AFF0064F706 /* Testable_SwiftTests.swift */; }; + A88CD9B91A019E430064F706 /* libKIF.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A88CD9AE1A019D520064F706 /* libKIF.a */; }; + A88CD9BC1A019F0B0064F706 /* SimpleObjCTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A88CD9BB1A019F0B0064F706 /* SimpleObjCTest.m */; }; + A88CD9BE1A019F300064F706 /* SimpleSwiftTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A88CD9BD1A019F300064F706 /* SimpleSwiftTest.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + A88CD9951A019AFF0064F706 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A88CD9751A019AFF0064F706 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A88CD97C1A019AFF0064F706; + remoteInfo = "Testable Swift"; + }; + A88CD9AD1A019D520064F706 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A88CD9A41A019D510064F706 /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EABD46AA1857A0C700A5F081; + remoteInfo = KIF; + }; + A88CD9AF1A019D520064F706 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A88CD9A41A019D510064F706 /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EB72047C1680DDAD00278DA2; + remoteInfo = "KIF-OCUnit"; + }; + A88CD9B11A019D520064F706 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A88CD9A41A019D510064F706 /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EB60ECC1177F8C83005A041A; + remoteInfo = "Test Host"; + }; + A88CD9B31A019D520064F706 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A88CD9A41A019D510064F706 /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EABD46CD1857A0F300A5F081; + remoteInfo = "KIF Tests"; + }; + A88CD9B51A019D520064F706 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A88CD9A41A019D510064F706 /* KIF.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EB60ECEB177F8DB3005A041A; + remoteInfo = "KIF Tests-OCUnit"; + }; + A88CD9B71A019E2B0064F706 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A88CD9A41A019D510064F706 /* KIF.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = EABD46791857A0C700A5F081; + remoteInfo = KIF; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + A88CD97D1A019AFF0064F706 /* Testable Swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Testable Swift.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + A88CD9811A019AFF0064F706 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A88CD9821A019AFF0064F706 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + A88CD9841A019AFF0064F706 /* MasterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterViewController.swift; sourceTree = ""; }; + A88CD9891A019AFF0064F706 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + A88CD98B1A019AFF0064F706 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + A88CD98E1A019AFF0064F706 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + A88CD9941A019AFF0064F706 /* Testable SwiftTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Testable SwiftTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + A88CD9991A019AFF0064F706 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A88CD99A1A019AFF0064F706 /* Testable_SwiftTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Testable_SwiftTests.swift; sourceTree = ""; }; + A88CD9A41A019D510064F706 /* KIF.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = KIF.xcodeproj; path = ../../../../KIF.xcodeproj; sourceTree = ""; }; + A88CD9BA1A019F0B0064F706 /* Testable SwiftTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Testable SwiftTests-Bridging-Header.h"; sourceTree = ""; }; + A88CD9BB1A019F0B0064F706 /* SimpleObjCTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimpleObjCTest.m; sourceTree = ""; }; + A88CD9BD1A019F300064F706 /* SimpleSwiftTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleSwiftTest.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + A88CD97A1A019AFF0064F706 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A88CD9911A019AFF0064F706 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A88CD9B91A019E430064F706 /* libKIF.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + A88CD9741A019AFF0064F706 = { + isa = PBXGroup; + children = ( + A88CD97F1A019AFF0064F706 /* Testable Swift */, + A88CD9971A019AFF0064F706 /* Testable SwiftTests */, + A88CD97E1A019AFF0064F706 /* Products */, + ); + sourceTree = ""; + }; + A88CD97E1A019AFF0064F706 /* Products */ = { + isa = PBXGroup; + children = ( + A88CD97D1A019AFF0064F706 /* Testable Swift.app */, + A88CD9941A019AFF0064F706 /* Testable SwiftTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + A88CD97F1A019AFF0064F706 /* Testable Swift */ = { + isa = PBXGroup; + children = ( + A88CD9821A019AFF0064F706 /* AppDelegate.swift */, + A88CD9841A019AFF0064F706 /* MasterViewController.swift */, + A88CD9881A019AFF0064F706 /* Main.storyboard */, + A88CD98B1A019AFF0064F706 /* Images.xcassets */, + A88CD98D1A019AFF0064F706 /* LaunchScreen.xib */, + A88CD9801A019AFF0064F706 /* Supporting Files */, + ); + path = "Testable Swift"; + sourceTree = ""; + }; + A88CD9801A019AFF0064F706 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + A88CD9811A019AFF0064F706 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + A88CD9971A019AFF0064F706 /* Testable SwiftTests */ = { + isa = PBXGroup; + children = ( + A88CD9A41A019D510064F706 /* KIF.xcodeproj */, + A88CD99A1A019AFF0064F706 /* Testable_SwiftTests.swift */, + A88CD9981A019AFF0064F706 /* Supporting Files */, + A88CD9BB1A019F0B0064F706 /* SimpleObjCTest.m */, + A88CD9BD1A019F300064F706 /* SimpleSwiftTest.swift */, + A88CD9BA1A019F0B0064F706 /* Testable SwiftTests-Bridging-Header.h */, + ); + path = "Testable SwiftTests"; + sourceTree = ""; + }; + A88CD9981A019AFF0064F706 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + A88CD9991A019AFF0064F706 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + A88CD9A51A019D510064F706 /* Products */ = { + isa = PBXGroup; + children = ( + A88CD9AE1A019D520064F706 /* libKIF.a */, + A88CD9B01A019D520064F706 /* libKIF-OCUnit.a */, + A88CD9B21A019D520064F706 /* Test Host.app */, + A88CD9B41A019D520064F706 /* KIF Tests - XCTest.xctest */, + A88CD9B61A019D520064F706 /* KIF Tests-OCUnit.octest */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + A88CD97C1A019AFF0064F706 /* Testable Swift */ = { + isa = PBXNativeTarget; + buildConfigurationList = A88CD99E1A019AFF0064F706 /* Build configuration list for PBXNativeTarget "Testable Swift" */; + buildPhases = ( + A88CD9791A019AFF0064F706 /* Sources */, + A88CD97A1A019AFF0064F706 /* Frameworks */, + A88CD97B1A019AFF0064F706 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Testable Swift"; + productName = "Testable Swift"; + productReference = A88CD97D1A019AFF0064F706 /* Testable Swift.app */; + productType = "com.apple.product-type.application"; + }; + A88CD9931A019AFF0064F706 /* Testable SwiftTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = A88CD9A11A019AFF0064F706 /* Build configuration list for PBXNativeTarget "Testable SwiftTests" */; + buildPhases = ( + A88CD9901A019AFF0064F706 /* Sources */, + A88CD9911A019AFF0064F706 /* Frameworks */, + A88CD9921A019AFF0064F706 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + A88CD9B81A019E2B0064F706 /* PBXTargetDependency */, + A88CD9961A019AFF0064F706 /* PBXTargetDependency */, + ); + name = "Testable SwiftTests"; + productName = "Testable SwiftTests"; + productReference = A88CD9941A019AFF0064F706 /* Testable SwiftTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + A88CD9751A019AFF0064F706 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + TargetAttributes = { + A88CD97C1A019AFF0064F706 = { + CreatedOnToolsVersion = 6.1; + }; + A88CD9931A019AFF0064F706 = { + CreatedOnToolsVersion = 6.1; + TestTargetID = A88CD97C1A019AFF0064F706; + }; + }; + }; + buildConfigurationList = A88CD9781A019AFF0064F706 /* Build configuration list for PBXProject "Testable Swift" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = A88CD9741A019AFF0064F706; + productRefGroup = A88CD97E1A019AFF0064F706 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = A88CD9A51A019D510064F706 /* Products */; + ProjectRef = A88CD9A41A019D510064F706 /* KIF.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + A88CD97C1A019AFF0064F706 /* Testable Swift */, + A88CD9931A019AFF0064F706 /* Testable SwiftTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + A88CD9AE1A019D520064F706 /* libKIF.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libKIF.a; + remoteRef = A88CD9AD1A019D520064F706 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + A88CD9B01A019D520064F706 /* libKIF-OCUnit.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libKIF-OCUnit.a"; + remoteRef = A88CD9AF1A019D520064F706 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + A88CD9B21A019D520064F706 /* Test Host.app */ = { + isa = PBXReferenceProxy; + fileType = wrapper.application; + path = "Test Host.app"; + remoteRef = A88CD9B11A019D520064F706 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + A88CD9B41A019D520064F706 /* KIF Tests - XCTest.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "KIF Tests - XCTest.xctest"; + remoteRef = A88CD9B31A019D520064F706 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + A88CD9B61A019D520064F706 /* KIF Tests-OCUnit.octest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "KIF Tests-OCUnit.octest"; + remoteRef = A88CD9B51A019D520064F706 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + A88CD97B1A019AFF0064F706 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A88CD98A1A019AFF0064F706 /* Main.storyboard in Resources */, + A88CD98F1A019AFF0064F706 /* LaunchScreen.xib in Resources */, + A88CD98C1A019AFF0064F706 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A88CD9921A019AFF0064F706 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + A88CD9791A019AFF0064F706 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A88CD9851A019AFF0064F706 /* MasterViewController.swift in Sources */, + A88CD9831A019AFF0064F706 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A88CD9901A019AFF0064F706 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A88CD99B1A019AFF0064F706 /* Testable_SwiftTests.swift in Sources */, + A88CD9BE1A019F300064F706 /* SimpleSwiftTest.swift in Sources */, + A88CD9BC1A019F0B0064F706 /* SimpleObjCTest.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + A88CD9961A019AFF0064F706 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A88CD97C1A019AFF0064F706 /* Testable Swift */; + targetProxy = A88CD9951A019AFF0064F706 /* PBXContainerItemProxy */; + }; + A88CD9B81A019E2B0064F706 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = KIF; + targetProxy = A88CD9B71A019E2B0064F706 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + A88CD9881A019AFF0064F706 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A88CD9891A019AFF0064F706 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + A88CD98D1A019AFF0064F706 /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + A88CD98E1A019AFF0064F706 /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + A88CD99C1A019AFF0064F706 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + A88CD99D1A019AFF0064F706 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.1; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + A88CD99F1A019AFF0064F706 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = "Testable Swift/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + A88CD9A01A019AFF0064F706 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = "Testable Swift/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + A88CD9A21A019AFF0064F706 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ENABLE_MODULES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "Testable SwiftTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-framework", + XCTest, + "-ObjC", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Testable SwiftTests/Testable SwiftTests-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Testable Swift.app/Testable Swift"; + }; + name = Debug; + }; + A88CD9A31A019AFF0064F706 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ENABLE_MODULES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = "Testable SwiftTests/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-framework", + XCTest, + "-ObjC", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Testable SwiftTests/Testable SwiftTests-Bridging-Header.h"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Testable Swift.app/Testable Swift"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + A88CD9781A019AFF0064F706 /* Build configuration list for PBXProject "Testable Swift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A88CD99C1A019AFF0064F706 /* Debug */, + A88CD99D1A019AFF0064F706 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A88CD99E1A019AFF0064F706 /* Build configuration list for PBXNativeTarget "Testable Swift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A88CD99F1A019AFF0064F706 /* Debug */, + A88CD9A01A019AFF0064F706 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A88CD9A11A019AFF0064F706 /* Build configuration list for PBXNativeTarget "Testable SwiftTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A88CD9A21A019AFF0064F706 /* Debug */, + A88CD9A31A019AFF0064F706 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = A88CD9751A019AFF0064F706 /* Project object */; +} diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift.xcodeproj/xcshareddata/xcschemes/Testable Swift.xcscheme b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift.xcodeproj/xcshareddata/xcschemes/Testable Swift.xcscheme new file mode 100755 index 000000000..bee04e6e2 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift.xcodeproj/xcshareddata/xcschemes/Testable Swift.xcscheme @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/AppDelegate.swift b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/AppDelegate.swift new file mode 100755 index 000000000..23992badf --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/AppDelegate.swift @@ -0,0 +1,15 @@ +// +// AppDelegate.swift +// Testable Swift +// +// Created by Jim Puls on 10/29/14. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + var window: UIWindow? +} diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/Base.lproj/LaunchScreen.xib b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/Base.lproj/LaunchScreen.xib new file mode 100755 index 000000000..5271f5e02 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/Base.lproj/LaunchScreen.xib @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/Base.lproj/Main.storyboard b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/Base.lproj/Main.storyboard new file mode 100755 index 000000000..b0dd79bcd --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/Base.lproj/Main.storyboard @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100755 index 000000000..118c98f74 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/Info.plist b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/Info.plist new file mode 100755 index 000000000..3eb326eef --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/Info.plist @@ -0,0 +1,50 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + com.squareup.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UIStatusBarTintParameters + + UINavigationBar + + Style + UIBarStyleDefault + Translucent + + + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/MasterViewController.swift b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/MasterViewController.swift new file mode 100755 index 000000000..888a97706 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable Swift/MasterViewController.swift @@ -0,0 +1,19 @@ +// +// MasterViewController.swift +// Testable Swift +// +// Created by Jim Puls on 10/29/14. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +import UIKit + +class MasterViewController: UITableViewController { + override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { + let cell = tableView.cellForRowAtIndexPath(indexPath) + if let text = cell?.textLabel?.text? { + navigationItem.title = "Selected: " + text + } + } +} diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/Info.plist b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/Info.plist new file mode 100755 index 000000000..c08e01bc9 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + com.squareup.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/SimpleObjCTest.m b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/SimpleObjCTest.m new file mode 100755 index 000000000..560e3f6d9 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/SimpleObjCTest.m @@ -0,0 +1,24 @@ +// +// SimpleObjCTest.m +// Testable Swift +// +// Created by Jim Puls on 10/29/14. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import +#import + + +@interface SimpleObjCTest : KIFTestCase +@end + +@implementation SimpleObjCTest + +- (void)testRed { + [tester tapViewWithAccessibilityLabel:@"Red"]; + [tester waitForViewWithAccessibilityLabel:@"Selected: Red"]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/SimpleSwiftTest.swift b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/SimpleSwiftTest.swift new file mode 100755 index 000000000..f0b1402ba --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/SimpleSwiftTest.swift @@ -0,0 +1,29 @@ +// +// SimpleSwiftTest.swift +// Testable Swift +// +// Created by Jim Puls on 10/29/14. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +import UIKit +import XCTest + + +extension XCTestCase { + func tester(_ file : String = __FILE__, _ line : Int = __LINE__) -> KIFUITestActor { + return KIFUITestActor(inFile: file, atLine: line, delegate: self) + } + + func system(_ file : String = __FILE__, _ line : Int = __LINE__) -> KIFSystemTestActor { + return KIFSystemTestActor(inFile: file, atLine: line, delegate: self) + } +} + +class SimpleSwiftTest: KIFTestCase { + func testGreen() { + tester().tapViewWithAccessibilityLabel("Green") + tester().waitForViewWithAccessibilityLabel("Selected: Green") + } +} diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/Testable SwiftTests-Bridging-Header.h b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/Testable SwiftTests-Bridging-Header.h new file mode 100755 index 000000000..12c223598 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/Testable SwiftTests-Bridging-Header.h @@ -0,0 +1,5 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// + +#import diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/Testable_SwiftTests.swift b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/Testable_SwiftTests.swift new file mode 100755 index 000000000..5ac78e4f8 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable Swift/Testable SwiftTests/Testable_SwiftTests.swift @@ -0,0 +1,37 @@ +// +// Testable_SwiftTests.swift +// Testable SwiftTests +// +// Created by Jim Puls on 10/29/14. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +import UIKit +import XCTest + +class Testable_SwiftTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + + func testExample() { + // This is an example of a functional test case. + XCTAssert(true, "Pass") + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measureBlock() { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/Acceptance Tests-Info.plist b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/Acceptance Tests-Info.plist new file mode 100755 index 000000000..30ddc97b8 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/Acceptance Tests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.square.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/Acceptance Tests-Prefix.pch b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/Acceptance Tests-Prefix.pch new file mode 100755 index 000000000..4f33e4cb5 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/Acceptance Tests-Prefix.pch @@ -0,0 +1,8 @@ +// +// Prefix header for all source files of the 'Acceptance Tests' target in the 'Acceptance Tests' project +// + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/IntegrationTestCases.m b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/IntegrationTestCases.m new file mode 100755 index 000000000..1f869dee2 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/IntegrationTestCases.m @@ -0,0 +1,39 @@ +// +// IntegrationTestCases.m +// Integration Tests with KIFTestCase +// +// Created by Brian Nickel on 12/18/12. +// +// + +#import +#import "KIFUITestActor+EXAddition.h" + +@interface IntegrationTestCases : KIFTestCase + +@end + +@implementation IntegrationTestCases + +- (void)testThatUserCanSuccessfullyLogIn +{ + [tester reset]; + [tester goToLoginPage]; + [tester enterText:@"user@example.com" intoViewWithAccessibilityLabel:@"Login User Name"]; + [tester enterText:@"thisismypassword" intoViewWithAccessibilityLabel:@"Login Password"]; + [tester tapViewWithAccessibilityLabel:@"Log In"]; + + // Verify that the login succeeded + [tester waitForTappableViewWithAccessibilityLabel:@"Welcome"]; +} + +- (void)testSelectingDifferentColors +{ + [tester tapViewWithAccessibilityLabel:@"Purple"]; + [tester tapViewWithAccessibilityLabel:@"Blue"]; + [tester tapViewWithAccessibilityLabel:@"Red"]; + [tester waitForTimeInterval:5.0]; + [tester waitForViewWithAccessibilityLabel:@"Selected: Red"]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/KIFUITestActor+EXAddition.h b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/KIFUITestActor+EXAddition.h new file mode 100755 index 000000000..421fe5a8e --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/KIFUITestActor+EXAddition.h @@ -0,0 +1,16 @@ +// +// KIFTester+EXAddition.h +// Testable +// +// Created by Brian Nickel on 12/18/12. +// +// + +#import + +@interface KIFUITestActor (EXAddition) + +- (void)reset; +- (void)goToLoginPage; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/KIFUITestActor+EXAddition.m b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/KIFUITestActor+EXAddition.m new file mode 100755 index 000000000..94af09502 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/KIFUITestActor+EXAddition.m @@ -0,0 +1,37 @@ +// +// KIFTester+EXAddition.m +// Testable +// +// Created by Brian Nickel on 12/18/12. +// +// + +#import "KIFUITestActor+EXAddition.h" + +@implementation KIFUITestActor (EXAddition) + +- (void)reset +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + BOOL successfulReset = YES; + + // Do the actual reset for your app. Set successfulReset = NO if it fails. + + KIFTestCondition(successfulReset, error, @"Failed to reset some part of the application."); + + return KIFTestStepResultSuccess; + }]; +} + +#pragma mark - Step Collections + +- (void)goToLoginPage +{ + // Dismiss the welcome message + [self tapViewWithAccessibilityLabel:@"That's awesome!"]; + + // Tap the "I already have an account" button + [self tapViewWithAccessibilityLabel:@"I already have an account."]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/en.lproj/InfoPlist.strings b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/en.lproj/InfoPlist.strings new file mode 100755 index 000000000..477b28ff8 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Acceptance Tests/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Default-568h@2x.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Default-568h@2x.png new file mode 100755 index 000000000..0891b7aab Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Default-568h@2x.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable.xcodeproj/project.pbxproj b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable.xcodeproj/project.pbxproj new file mode 100755 index 000000000..19a4383c0 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable.xcodeproj/project.pbxproj @@ -0,0 +1,491 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 4440B32C17F5692A00253D51 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4440B32B17F5692A00253D51 /* Default-568h@2x.png */; }; + AAB073AD139861C0008AF393 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB073AC139861C0008AF393 /* UIKit.framework */; }; + AAB073AF139861C0008AF393 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB073AE139861C0008AF393 /* Foundation.framework */; }; + AAB073B1139861C0008AF393 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB073B0139861C0008AF393 /* CoreGraphics.framework */; }; + AAB073B7139861C0008AF393 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = AAB073B5139861C0008AF393 /* InfoPlist.strings */; }; + AAB073BA139861C0008AF393 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB073B9139861C0008AF393 /* main.m */; }; + AAB073BD139861C0008AF393 /* TestableAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB073BC139861C0008AF393 /* TestableAppDelegate.m */; }; + AAB073C0139861C0008AF393 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = AAB073BE139861C0008AF393 /* MainWindow.xib */; }; + AAB073C3139861C0008AF393 /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB073C2139861C0008AF393 /* RootViewController.m */; }; + AAB073C6139861C0008AF393 /* RootViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AAB073C4139861C0008AF393 /* RootViewController.xib */; }; + EB47EFB51781DF6D006BBFAC /* IntegrationTestCases.m in Sources */ = {isa = PBXBuildFile; fileRef = EB47EFB21781DF6D006BBFAC /* IntegrationTestCases.m */; }; + EB47EFB61781DF6D006BBFAC /* KIFUITestActor+EXAddition.m in Sources */ = {isa = PBXBuildFile; fileRef = EB47EFB41781DF6D006BBFAC /* KIFUITestActor+EXAddition.m */; }; + EB9DB7331781DBD40087B6FD /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB72049D1680E2EE00278DA2 /* SenTestingKit.framework */; }; + EB9DB7341781DBD40087B6FD /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB073AC139861C0008AF393 /* UIKit.framework */; }; + EB9DB7351781DBD40087B6FD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB073AE139861C0008AF393 /* Foundation.framework */; }; + EB9DB73B1781DBD40087B6FD /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EB9DB7391781DBD40087B6FD /* InfoPlist.strings */; }; + EB9DB7441781DDBA0087B6FD /* libKIF.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EB9DB7431781DDBA0087B6FD /* libKIF.a */; }; + EB9DB7451781DDC70087B6FD /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB073B0139861C0008AF393 /* CoreGraphics.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + EB9DB7461781DE100087B6FD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AAB0739F139861C0008AF393 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AAB073A7139861C0008AF393; + remoteInfo = Testable; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 4440B32B17F5692A00253D51 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; + AAB073A8139861C0008AF393 /* Testable.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Testable.app; sourceTree = BUILT_PRODUCTS_DIR; }; + AAB073AC139861C0008AF393 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + AAB073AE139861C0008AF393 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + AAB073B0139861C0008AF393 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + AAB073B4139861C0008AF393 /* Testable-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Testable-Info.plist"; sourceTree = ""; }; + AAB073B6139861C0008AF393 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + AAB073B8139861C0008AF393 /* Testable-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Testable-Prefix.pch"; sourceTree = ""; }; + AAB073B9139861C0008AF393 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + AAB073BB139861C0008AF393 /* TestableAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TestableAppDelegate.h; sourceTree = ""; }; + AAB073BC139861C0008AF393 /* TestableAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TestableAppDelegate.m; sourceTree = ""; }; + AAB073BF139861C0008AF393 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainWindow.xib; sourceTree = ""; }; + AAB073C1139861C0008AF393 /* RootViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = ""; }; + AAB073C2139861C0008AF393 /* RootViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RootViewController.m; sourceTree = ""; }; + AAB073C5139861C0008AF393 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/RootViewController.xib; sourceTree = ""; }; + EB47EFB21781DF6D006BBFAC /* IntegrationTestCases.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IntegrationTestCases.m; sourceTree = ""; }; + EB47EFB31781DF6D006BBFAC /* KIFUITestActor+EXAddition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KIFUITestActor+EXAddition.h"; sourceTree = ""; }; + EB47EFB41781DF6D006BBFAC /* KIFUITestActor+EXAddition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KIFUITestActor+EXAddition.m"; sourceTree = ""; }; + EB72049D1680E2EE00278DA2 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; + EB9DB7321781DBD40087B6FD /* Acceptance Tests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Acceptance Tests.octest"; sourceTree = BUILT_PRODUCTS_DIR; }; + EB9DB7381781DBD40087B6FD /* Acceptance Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Acceptance Tests-Info.plist"; sourceTree = ""; }; + EB9DB73A1781DBD40087B6FD /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + EB9DB73F1781DBD40087B6FD /* Acceptance Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Acceptance Tests-Prefix.pch"; sourceTree = ""; }; + EB9DB7431781DDBA0087B6FD /* libKIF.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libKIF.a; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + AAB073A5139861C0008AF393 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AAB073AD139861C0008AF393 /* UIKit.framework in Frameworks */, + AAB073AF139861C0008AF393 /* Foundation.framework in Frameworks */, + AAB073B1139861C0008AF393 /* CoreGraphics.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EB9DB72E1781DBD40087B6FD /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EB9DB7441781DDBA0087B6FD /* libKIF.a in Frameworks */, + EB9DB7451781DDC70087B6FD /* CoreGraphics.framework in Frameworks */, + EB9DB7331781DBD40087B6FD /* SenTestingKit.framework in Frameworks */, + EB9DB7341781DBD40087B6FD /* UIKit.framework in Frameworks */, + EB9DB7351781DBD40087B6FD /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + AAB0739D139861C0008AF393 = { + isa = PBXGroup; + children = ( + 4440B32B17F5692A00253D51 /* Default-568h@2x.png */, + AAB073B2139861C0008AF393 /* Testable */, + EB9DB7361781DBD40087B6FD /* Acceptance Tests */, + AAB073AB139861C0008AF393 /* Frameworks */, + AAB073A9139861C0008AF393 /* Products */, + ); + sourceTree = ""; + }; + AAB073A9139861C0008AF393 /* Products */ = { + isa = PBXGroup; + children = ( + AAB073A8139861C0008AF393 /* Testable.app */, + EB9DB7321781DBD40087B6FD /* Acceptance Tests.octest */, + ); + name = Products; + sourceTree = ""; + }; + AAB073AB139861C0008AF393 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EB9DB7431781DDBA0087B6FD /* libKIF.a */, + AAB073AC139861C0008AF393 /* UIKit.framework */, + AAB073AE139861C0008AF393 /* Foundation.framework */, + AAB073B0139861C0008AF393 /* CoreGraphics.framework */, + EB72049D1680E2EE00278DA2 /* SenTestingKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + AAB073B2139861C0008AF393 /* Testable */ = { + isa = PBXGroup; + children = ( + AAB073BB139861C0008AF393 /* TestableAppDelegate.h */, + AAB073BC139861C0008AF393 /* TestableAppDelegate.m */, + AAB073BE139861C0008AF393 /* MainWindow.xib */, + AAB073C1139861C0008AF393 /* RootViewController.h */, + AAB073C2139861C0008AF393 /* RootViewController.m */, + AAB073C4139861C0008AF393 /* RootViewController.xib */, + AAB073B3139861C0008AF393 /* Supporting Files */, + ); + path = Testable; + sourceTree = ""; + }; + AAB073B3139861C0008AF393 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + AAB073B4139861C0008AF393 /* Testable-Info.plist */, + AAB073B5139861C0008AF393 /* InfoPlist.strings */, + AAB073B8139861C0008AF393 /* Testable-Prefix.pch */, + AAB073B9139861C0008AF393 /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + EB9DB7361781DBD40087B6FD /* Acceptance Tests */ = { + isa = PBXGroup; + children = ( + EB47EFB21781DF6D006BBFAC /* IntegrationTestCases.m */, + EB47EFB31781DF6D006BBFAC /* KIFUITestActor+EXAddition.h */, + EB47EFB41781DF6D006BBFAC /* KIFUITestActor+EXAddition.m */, + EB9DB7371781DBD40087B6FD /* Supporting Files */, + ); + path = "Acceptance Tests"; + sourceTree = ""; + }; + EB9DB7371781DBD40087B6FD /* Supporting Files */ = { + isa = PBXGroup; + children = ( + EB9DB7381781DBD40087B6FD /* Acceptance Tests-Info.plist */, + EB9DB7391781DBD40087B6FD /* InfoPlist.strings */, + EB9DB73F1781DBD40087B6FD /* Acceptance Tests-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + AAB073A7139861C0008AF393 /* Testable */ = { + isa = PBXNativeTarget; + buildConfigurationList = AAB073C9139861C0008AF393 /* Build configuration list for PBXNativeTarget "Testable" */; + buildPhases = ( + AAB073A4139861C0008AF393 /* Sources */, + AAB073A5139861C0008AF393 /* Frameworks */, + AAB073A6139861C0008AF393 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Testable; + productName = Testable; + productReference = AAB073A8139861C0008AF393 /* Testable.app */; + productType = "com.apple.product-type.application"; + }; + EB9DB7311781DBD40087B6FD /* Acceptance Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = EB9DB7421781DBD40087B6FD /* Build configuration list for PBXNativeTarget "Acceptance Tests" */; + buildPhases = ( + EB9DB72D1781DBD40087B6FD /* Sources */, + EB9DB72E1781DBD40087B6FD /* Frameworks */, + EB9DB72F1781DBD40087B6FD /* Resources */, + EB9DB7301781DBD40087B6FD /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + EB9DB7471781DE100087B6FD /* PBXTargetDependency */, + ); + name = "Acceptance Tests"; + productName = "Acceptance Tests"; + productReference = EB9DB7321781DBD40087B6FD /* Acceptance Tests.octest */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AAB0739F139861C0008AF393 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0500; + }; + buildConfigurationList = AAB073A2139861C0008AF393 /* Build configuration list for PBXProject "Testable" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = AAB0739D139861C0008AF393; + productRefGroup = AAB073A9139861C0008AF393 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + AAB073A7139861C0008AF393 /* Testable */, + EB9DB7311781DBD40087B6FD /* Acceptance Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + AAB073A6139861C0008AF393 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AAB073B7139861C0008AF393 /* InfoPlist.strings in Resources */, + 4440B32C17F5692A00253D51 /* Default-568h@2x.png in Resources */, + AAB073C0139861C0008AF393 /* MainWindow.xib in Resources */, + AAB073C6139861C0008AF393 /* RootViewController.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EB9DB72F1781DBD40087B6FD /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EB9DB73B1781DBD40087B6FD /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + EB9DB7301781DBD40087B6FD /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + AAB073A4139861C0008AF393 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AAB073BA139861C0008AF393 /* main.m in Sources */, + AAB073BD139861C0008AF393 /* TestableAppDelegate.m in Sources */, + AAB073C3139861C0008AF393 /* RootViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EB9DB72D1781DBD40087B6FD /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EB47EFB51781DF6D006BBFAC /* IntegrationTestCases.m in Sources */, + EB47EFB61781DF6D006BBFAC /* KIFUITestActor+EXAddition.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + EB9DB7471781DE100087B6FD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AAB073A7139861C0008AF393 /* Testable */; + targetProxy = EB9DB7461781DE100087B6FD /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + AAB073B5139861C0008AF393 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + AAB073B6139861C0008AF393 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + AAB073BE139861C0008AF393 /* MainWindow.xib */ = { + isa = PBXVariantGroup; + children = ( + AAB073BF139861C0008AF393 /* en */, + ); + name = MainWindow.xib; + sourceTree = ""; + }; + AAB073C4139861C0008AF393 /* RootViewController.xib */ = { + isa = PBXVariantGroup; + children = ( + AAB073C5139861C0008AF393 /* en */, + ); + name = RootViewController.xib; + sourceTree = ""; + }; + EB9DB7391781DBD40087B6FD /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + EB9DB73A1781DBD40087B6FD /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + AAB073C7139861C0008AF393 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = DEBUG; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 4.3; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + AAB073C8139861C0008AF393 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 4.3; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + SDKROOT = iphoneos; + }; + name = Release; + }; + AAB073CA139861C0008AF393 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Testable/Testable-Prefix.pch"; + INFOPLIST_FILE = "Testable/Testable-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + AAB073CB139861C0008AF393 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Testable/Testable-Prefix.pch"; + INFOPLIST_FILE = "Testable/Testable-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + EB9DB7401781DBD40087B6FD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Testable.app/Testable"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = "$(SDKROOT)/Developer/Library/Frameworks"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Acceptance Tests/Acceptance Tests-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_UNINITIALIZED_AUTOS = YES; + INFOPLIST_FILE = "Acceptance Tests/Acceptance Tests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = octest; + }; + name = Debug; + }; + EB9DB7411781DBD40087B6FD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Testable.app/Testable"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = "$(SDKROOT)/Developer/Library/Frameworks"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Acceptance Tests/Acceptance Tests-Prefix.pch"; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + INFOPLIST_FILE = "Acceptance Tests/Acceptance Tests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = octest; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + AAB073A2139861C0008AF393 /* Build configuration list for PBXProject "Testable" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AAB073C7139861C0008AF393 /* Debug */, + AAB073C8139861C0008AF393 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AAB073C9139861C0008AF393 /* Build configuration list for PBXNativeTarget "Testable" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AAB073CA139861C0008AF393 /* Debug */, + AAB073CB139861C0008AF393 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EB9DB7421781DBD40087B6FD /* Build configuration list for PBXNativeTarget "Acceptance Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EB9DB7401781DBD40087B6FD /* Debug */, + EB9DB7411781DBD40087B6FD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AAB0739F139861C0008AF393 /* Project object */; +} diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable.xcodeproj/xcshareddata/xcschemes/Testable.xcscheme b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable.xcodeproj/xcshareddata/xcschemes/Testable.xcscheme new file mode 100755 index 000000000..1d22b4baa --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable.xcodeproj/xcshareddata/xcschemes/Testable.xcscheme @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable.xcworkspace/contents.xcworkspacedata b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable.xcworkspace/contents.xcworkspacedata new file mode 100755 index 000000000..35cb0b146 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/RootViewController.h b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/RootViewController.h new file mode 100755 index 000000000..1ba4f0215 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/RootViewController.h @@ -0,0 +1,18 @@ +// +// RootViewController.h +// Testable +// +// Created by Eric Firestone on 6/2/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +@interface RootViewController : UITableViewController { + NSArray *titles; +} + +@property (nonatomic, strong) NSArray *titles; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/RootViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/RootViewController.m new file mode 100755 index 000000000..67f3abb55 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/RootViewController.m @@ -0,0 +1,55 @@ +// +// RootViewController.m +// Testable +// +// Created by Eric Firestone on 6/2/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "RootViewController.h" + +@implementation RootViewController + +@synthesize titles; + +- (void)viewDidLoad +{ + self.tableView.delegate = self; + self.titles = [NSArray arrayWithObjects:@"Red", @"Green", @"Blue", @"Purple", nil]; + + [super viewDidLoad]; +} + +// Customize the number of sections in the table view. +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.titles.count; +} + +// Customize the appearance of table view cells. +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"Cell"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + if (cell == nil) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + } + + cell.textLabel.text = [self.titles objectAtIndex:indexPath.row]; + + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + self.navigationController.navigationBar.topItem.title = [NSString stringWithFormat:@"Selected: %@", [self.titles objectAtIndex:indexPath.row]]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/Testable-Info.plist b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/Testable-Info.plist new file mode 100755 index 000000000..027e35aa6 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/Testable-Info.plist @@ -0,0 +1,38 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.squareup.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + NSMainNibFile + MainWindow + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/Testable-Prefix.pch b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/Testable-Prefix.pch new file mode 100755 index 000000000..183f8282a --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/Testable-Prefix.pch @@ -0,0 +1,14 @@ +// +// Prefix header for all source files of the 'Testable' target in the 'Testable' project +// + +#import + +#ifndef __IPHONE_3_0 +#warning "This project uses features only available in iPhone SDK 3.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/TestableAppDelegate.h b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/TestableAppDelegate.h new file mode 100755 index 000000000..4bea315ec --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/TestableAppDelegate.h @@ -0,0 +1,19 @@ +// +// TestableAppDelegate.h +// Testable +// +// Created by Eric Firestone on 6/2/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +@interface TestableAppDelegate : NSObject { + +} + +@property (nonatomic, strong) IBOutlet UIWindow *window; +@property (nonatomic, strong) IBOutlet UINavigationController *navigationController; + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/TestableAppDelegate.m b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/TestableAppDelegate.m new file mode 100755 index 000000000..54f8ab136 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/TestableAppDelegate.m @@ -0,0 +1,41 @@ +// +// TestableAppDelegate.m +// Testable +// +// Created by Eric Firestone on 6/2/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import "TestableAppDelegate.h" + +#if RUN_KIF_TESTS +#import "EXTestController.h" +#endif + +@implementation TestableAppDelegate + + +@synthesize window=_window; + +@synthesize navigationController=_navigationController; + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + // Override point for customization after application launch. + // Add the navigation controller's view to the window and display. + self.window.rootViewController = self.navigationController; + [self.window makeKeyAndVisible]; + +#if RUN_KIF_TESTS + [[EXTestController sharedInstance] startTestingWithCompletionBlock:^{ + // Exit after the tests complete. When running on CI, this lets you check the return value for pass/fail. + exit([[EXTestController sharedInstance] failureCount]); + }]; +#endif + + return YES; +} + + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/en.lproj/InfoPlist.strings b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/en.lproj/InfoPlist.strings new file mode 100755 index 000000000..477b28ff8 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/en.lproj/MainWindow.xib b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/en.lproj/MainWindow.xib new file mode 100755 index 000000000..ebc21510b --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/en.lproj/MainWindow.xib @@ -0,0 +1,542 @@ + + + + 1024 + 10D571 + 786 + 1038.29 + 460.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 112 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + IBCocoaTouchFramework + + + + 1316 + + {320, 480} + + 1 + MSAxIDEAA + + NO + NO + + IBCocoaTouchFramework + YES + + + + + 1 + + IBCocoaTouchFramework + NO + + + 256 + {0, 0} + NO + YES + YES + IBCocoaTouchFramework + + + YES + + + + IBCocoaTouchFramework + + + RootViewController + + + 1 + + IBCocoaTouchFramework + NO + + + + + + + YES + + + delegate + + + + 4 + + + + window + + + + 5 + + + + navigationController + + + + 15 + + + + + YES + + 0 + + + + + + 2 + + + YES + + + + + -1 + + + File's Owner + + + 3 + + + + + -2 + + + + + 9 + + + YES + + + + + + + 11 + + + + + 13 + + + YES + + + + + + 14 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 11.IBPluginDependency + 13.CustomClassName + 13.IBPluginDependency + 2.IBAttributePlaceholdersKey + 2.IBEditorWindowLastContentRect + 2.IBPluginDependency + 3.CustomClassName + 3.IBPluginDependency + 9.IBEditorWindowLastContentRect + 9.IBPluginDependency + + + YES + UIApplication + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + RootViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + YES + + + YES + + + {{673, 376}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + TestableAppDelegate + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + {{186, 376}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 16 + + + + YES + + RootViewController + UITableViewController + + IBProjectSource + RootViewController.h + + + + UIWindow + UIView + + IBUserSource + + + + + TestableAppDelegate + NSObject + + YES + + YES + navigationController + window + + + YES + UINavigationController + UIWindow + + + + YES + + YES + navigationController + window + + + YES + + navigationController + UINavigationController + + + window + UIWindow + + + + + IBProjectSource + TestableAppDelegate.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIApplication + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIApplication.h + + + + UIBarButtonItem + UIBarItem + + IBFrameworkSource + UIKit.framework/Headers/UIBarButtonItem.h + + + + UIBarItem + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIBarItem.h + + + + UINavigationBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UINavigationBar.h + + + + UINavigationController + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UINavigationItem + NSObject + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UITableViewController + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITableViewController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + UIWindow + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIWindow.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + Testable.xcodeproj + 3 + 112 + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/en.lproj/RootViewController.xib b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/en.lproj/RootViewController.xib new file mode 100755 index 000000000..855c7ab10 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/en.lproj/RootViewController.xib @@ -0,0 +1,384 @@ + + + + 784 + 10D541 + 760 + 1038.29 + 460.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 81 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + {320, 247} + + + 3 + MQA + + NO + YES + NO + IBCocoaTouchFramework + NO + 1 + 0 + YES + 44 + 22 + 22 + + + + + YES + + + view + + + + 3 + + + + dataSource + + + + 4 + + + + delegate + + + + 5 + + + + + YES + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 2 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 2.IBEditorWindowLastContentRect + 2.IBPluginDependency + + + YES + RootViewController + UIResponder + {{144, 609}, {320, 247}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 5 + + + + YES + + RootViewController + UITableViewController + + IBProjectSource + RootViewController.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSNetServices.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSPort.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSStream.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSXMLParser.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UITableView + UIScrollView + + IBFrameworkSource + UIKit.framework/Headers/UITableView.h + + + + UITableViewController + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITableViewController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + Testable.xcodeproj + 3 + 81 + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/main.m b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/main.m new file mode 100755 index 000000000..9afceed6a --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Examples/Testable/Testable/main.m @@ -0,0 +1,19 @@ +// +// main.m +// Testable +// +// Created by Eric Firestone on 6/2/11. +// Licensed to Square, Inc. under one or more contributor license agreements. +// See the LICENSE file distributed with this work for the terms under +// which Square, Inc. licenses this file to you. + +#import + +int main(int argc, char *argv[]) +{ + @autoreleasepool { + int retVal = UIApplicationMain(argc, argv, nil, nil); + return retVal; + } +} + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add Category Linker Flags.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add Category Linker Flags.png new file mode 100755 index 000000000..3bdc581d7 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add Category Linker Flags.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add Header Search Paths.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add Header Search Paths.png new file mode 100755 index 000000000..9a5f16852 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add Header Search Paths.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add KIF Preprocessor Macro.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add KIF Preprocessor Macro.png new file mode 100755 index 000000000..d2e4a2f30 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add KIF Preprocessor Macro.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add Library Sheet.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add Library Sheet.png new file mode 100755 index 000000000..76bb08120 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add Library Sheet.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add Library.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add Library.png new file mode 100755 index 000000000..ad34d718a Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Add Library.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Added KIF to Project.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Added KIF to Project.png new file mode 100755 index 000000000..5eb221e22 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Added KIF to Project.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Create Workspace.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Create Workspace.png new file mode 100755 index 000000000..a729d8798 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Create Workspace.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Duplicate Target Confirmation.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Duplicate Target Confirmation.png new file mode 100755 index 000000000..ec1380d31 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Duplicate Target Confirmation.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Duplicate Target.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Duplicate Target.png new file mode 100755 index 000000000..98b3b1055 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Duplicate Target.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Rename Product.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Rename Product.png new file mode 100755 index 000000000..bacde80ae Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Rename Product.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Rename Target.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Rename Target.png new file mode 100755 index 000000000..f141cab9c Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Rename Target.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Simple App.png b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Simple App.png new file mode 100755 index 000000000..debab50a1 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Images/Simple App.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Test Action Composition.md b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Test Action Composition.md new file mode 100755 index 000000000..f9445a6cb --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Documentation/Test Action Composition.md @@ -0,0 +1,125 @@ +Test Action Compostion +====================== + +KIF-next's sequential operations allow for powerful composition of methods. Early on this was used for implementing `-[KIFUITestActor clearTextFromViewWithAccessibilityLabel:]`, where KIF would wait for the view with that label, then instantly access it so it could get the string length and generate a string of backspaces. + +As of KIF-next 2.0.0pre4, this API has been formalized and simplified so that you can explore new meaningful behavior with a minimal amount of code. + +Below are two such examples demonstrated in the test suite: + + @interface KIFUITestActor (Composition) + + - (void)tapViewIfNotSelected:(NSString *)label; + - (void)tapViewWithAccessibilityHint:(NSString *)hint; + + @end + +-tapViewIfNotSelected: +---------------------- + +In the first case, imagine we don't have complete control over out test environment. It isn't too hard to imagine tend to be quite stateful and you can't always test in a vaccum. You have a checkbox, it may be checked, it may be unchecked, and you want to always get it to the checked state in your app. Let's see how we can implement this with composition. + +First, we see how `tapViewWithAccessibilityLabel:` is implemented: + + - (void)tapViewWithAccessibilityLabel:(NSString *)label + { + [self tapViewWithAccessibilityLabel:label value:nil traits:UIAccessibilityTraitNone]; + } + +Second, we expand out `tapViewWithAccessibilityLabel:value:traits:` to get: + + - (void)tapViewWithAccessibilityLabel:(NSString *)label + { + UIView *view = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement:&element view:&view withLabel:label value:nil + traits:UIAccessibilityTraitNone tappable:YES]; + [self tapAccessibilityElement:element inView:view]; + } + +At this point, modifying it to only tap if not selected is trivial. We can check the known accessibility element's traits and only tap if selected is missing: + + - (void)tapViewIfNotSelected:(NSString *)label + { + UIView *view; + UIAccessibilityElement *element; + + [self waitForAccessibilityElement:&element view:&view withLabel:label value:nil + traits:UIAccessibilityTraitNone tappable:YES]; + + if ((element.accessibilityTraits & UIAccessibilityTraitSelected) == UIAccessibilityTraitNone) { + [self tapAccessibilityElement:element inView:view]; + } + } + +Add this method to a category and you're good to go. + +- tapViewWithAccessibilityHint: +------------------------------- + +Say you want to tap a view based on something other than its label, value, and traits. You could care about its `accessibilityHint`, `accessibilityLabel`, whether or not its on the top half of the screen, etc. Let's continue to decompose `tapViewWithAccessibilityLabel:value:traits:` to get a method that can handle these special cases. + +The first thing we need to do is expand out `waitForAccessibilityElement:view:withLabel:value:traits:tappable:`. + + - (void)tapViewWithAccessibilityLabel:(NSString *)label + { + __block UIView *view; + __block UIAccessibilityElement *element; + + [self runBlock:^KIFTestStepResult(NSError **error) { + return [UIAccessibilityElement accessibilityElement:&element view:&view withLabel:label + value:nil traits:UIAccessibilityTraitNone tappable:YES error:error] + ? KIFTestStepResultSuccess : KIFTestStepResultWait; + }]; + + [self tapAccessibilityElement:element inView:view]; + } + +That gets us a little further but we're still dealing with a monolithic method, let's expand `accessibilityElement:view:withLabel:value:traits:tappable:error:`. + + - (void)tapViewWithAccessibilityLabel:(NSString *)label + { + __block UIView *view; + __block UIAccessibilityElement *element; + + [self runBlock:^KIFTestStepResult(NSError **error) { + element = [UIAccessibilityElement accessibilityElementWithLabel:label value:nil traits:UIAccessibilityTraitNone error:error]; + if (!element) { + return KIFTestStepResultWait; + } + + view = [UIAccessibilityElement viewContainingAccessibilityElement:element tappable:YES error:error]; + if (!view) { + return KIFTestStepResultWait; + } + + return KIFTestStepResultSuccess; + }]; + + [self tapAccessibilityElement:element inView:view]; + } + +Now we're getting somewhere. Everything you want to eliminate is in one function call to `accessibilityElementWithLabel:view:traits:error:`. Looking at the source, it just calls a similarly named method in `UIApplication` and then adds some fancy error message construction. We can swap this out with our own error logic and a call to the much more flexible `-[UIApplication accessibilityElementWithMatchingBlock:]`. + + - (void)tapViewWithAccessibilityHint:(NSString *)hint + { + __block UIView *view; + __block UIAccessibilityElement *element; + + [self runBlock:^KIFTestStepResult(NSError *__autoreleasing *error) { + + element = [[UIApplication sharedApplication] accessibilityElementMatchingBlock:^BOOL(UIAccessibilityElement *element) { + return [element.accessibilityHint isEqualToString:hint]; + }]; + + KIFTestWaitCondition(element, error, @"Could not find element with hint: %@", hint); + + view = [UIAccessibilityElement viewContainingAccessibilityElement:element tappable:YES error:error]; + return view ? KIFTestStepResultSuccess : KIFTestStepResultWait; + }]; + + [self tapAccessibilityElement:element inView:view]; + } + +It was quite a few steps to get here but in both cases it involved some degree of fairly trivial expansions until we found something we could swap out. You should be able to apply these approaches to perform your own app specific tasks. \ No newline at end of file diff --git a/examples/InterstitialUnifiedDemand/KIF-master/IdentifierTests/KIFUITestActor-IdentifierTests.h b/examples/InterstitialUnifiedDemand/KIF-master/IdentifierTests/KIFUITestActor-IdentifierTests.h new file mode 100755 index 000000000..5bb650436 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/IdentifierTests/KIFUITestActor-IdentifierTests.h @@ -0,0 +1,95 @@ +// +// KIFUITestActor+IdentifierTests.h +// KIF +// +// Created by Brian Nickel on 11/6/14. +// +// + +#import "KIF.h" + +@interface KIFUITestActor (IdentifierTests) + +- (UIView *)waitForViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier; +- (UIView *)waitForTappableViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier; +- (void)tapViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier; +- (void)waitForAbsenceOfViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier; + +/*! + @abstract Performs a long press on a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, touch events are simulated in the center of the view or element. + @param accessibilityIdentifier The accessibility identifier of the element to tap. + @param duration The length of time to long press the element. + */ +- (void)longPressViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier duration:(NSTimeInterval)duration; + +/*! + @abstract Enters text into a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element, then text is entered into the view by simulating taps on the appropriate keyboard keys. + @param text The text to enter. + @param accessibilityIdentifier The accessibility identifier of the element to type into. + */ +- (void)enterText:(NSString *)text intoViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier; + +/*! + @abstract Enters text into a particular view in the view hierarchy. + @discussion The view or accessibility element with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present and tappable, a tap event is simulated in the center of the view or element, then text is entered into the view by simulating taps on the appropriate keyboard keys. + @param text The text to enter. + @param accessibilityIdentifier The accessibility identifier of the element to type into. + @param expectedResult What the text value should be after entry, including any formatting done by the field. If this is nil, the "text" parameter will be used. + */ +- (void)enterText:(NSString *)text intoViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier expectedResult:(NSString *)expectedResult; + +- (void)clearTextFromViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier; + +- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier; +- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier expectedResult:(NSString *)expectedResult; + +/*! + @abstract Toggles a UISwitch into a specified position. + @discussion The UISwitch with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present, the step will return if it's already in the desired position. If the switch is tappable but not in the desired position, a tap event is simulated in the center of the view or element, toggling the switch into the desired position. + @param switchIsOn The desired position of the UISwitch. + @param accessibilityIdentifier The accessibility identifier of the element to switch. + */ +- (void)setOn:(BOOL)switchIsOn forSwitchWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier; + +/*! + @abstract Slides a UISlider to a specified value. + @discussion The UISlider with the given label is searched for in the view hierarchy. If the element isn't found or isn't currently tappable, then the step will attempt to wait until it is. Once the view is present, the step will attempt to drag the slider to the new value. The step will fail if it finds a view with the given accessibility label that is not a UISlider or if value is outside of the possible values. Because this step simulates drag events, the value reached may not be the exact value requested and the app may ignore the touch events if the movement is less than the drag gesture recognizer's minimum distance. + @param value The desired value of the UISlider. + @param accessibilityIdentifier The accessibility identifier of the element to drag. + */ +- (void)setValue:(float)value forSliderWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier; + +/*! + @abstract Waits until a view or accessibility element is the first responder. + @discussion The first responder is found by searching the view hierarchy of the application's + main window and its accessibility identifier is compared to the given value. If they match, the + step returns success else it will attempt to wait until they do. + @param accessibilityIdentifier The accessibility identifier of the element to wait for. + */ +- (void)waitForFirstResponderWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier; + +/*! + @abstract returns YES or NO if the element is visible. + @discussion if the element described by the accessibility identifier is visible, the method returns true. + @param accessibilityIdentifier The accessibility identifier of the element to query for + */ +- (BOOL) tryFindingViewWithAccessibilityIdentifier:(NSString *) accessibilityIdentifier; + +/*! + @abstract Swipes a particular view in the view hierarchy in the given direction. + @discussion This step will get the view with the specified accessibility identifier and swipe the screen in the given direction from the view's center. + @param identifier The accessibility identifier of the view to swipe. + @param direction The direction in which to swipe. + */ +- (void)swipeViewWithAccessibilityIdentifier:(NSString *)identifier inDirection:(KIFSwipeDirection)direction; + +/*! + @abstract Taps a stepper to either increment or decrement the stepper. Presumed that - (minus) to decrement is on the left. + @discussion This will locate the left or right half of the stepper and perform a calculated click. + @param identifier The accessibility identifier of the view to interact with. + @param stepperDirection The direction in which to change the value of the stepper (KIFStepperDirectionIncrement | KIFStepperDirectionDecrement) + */ +-(void) tapStepperWithAccessibilityIdentifier: (NSString *)identifier increment: (KIFStepperDirection) stepperDirection; +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/IdentifierTests/KIFUITestActor-IdentifierTests.m b/examples/InterstitialUnifiedDemand/KIF-master/IdentifierTests/KIFUITestActor-IdentifierTests.m new file mode 100755 index 000000000..7ec406e05 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/IdentifierTests/KIFUITestActor-IdentifierTests.m @@ -0,0 +1,224 @@ +// +// KIFUITestActor+IdentifierTests.m +// KIF +// +// Created by Brian Nickel on 11/6/14. +// +// + +#import +#import "KIFUITestActor-IdentifierTests.h" +#import "UIAccessibilityElement-KIFAdditions.h" +#import "NSError-KIFAdditions.h" +#import "UIWindow-KIFAdditions.h" + +@implementation KIFUITestActor (IdentifierTests) + +- (UIView *)waitForViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier +{ + return [self waitForViewWithAccessibilityIdentifier:accessibilityIdentifier tappable:NO]; +} + +- (UIView *)waitForTappableViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier +{ + return [self waitForViewWithAccessibilityIdentifier:accessibilityIdentifier tappable:YES]; +} + +- (void)tapViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier +{ + @autoreleasepool { + UIView *view = nil; + UIAccessibilityElement *element = nil; + [self waitForAccessibilityElement:&element view:&view withIdentifier:accessibilityIdentifier tappable:YES]; + [self tapAccessibilityElement:element inView:view]; + } +} + +- (void)waitForAbsenceOfViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + // If the app is ignoring interaction events, then wait before doing our analysis + KIFTestWaitCondition(![[UIApplication sharedApplication] isIgnoringInteractionEvents], error, @"Application is ignoring interaction events."); + + // If the element can't be found, then we're done + + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"accessibilityIdentifier = %@", accessibilityIdentifier]; + UIAccessibilityElement *element = nil; + + if (![UIAccessibilityElement accessibilityElement:&element view:NULL withElementMatchingPredicate:predicate tappable:NO error:NULL]) { + return KIFTestStepResultSuccess; + } + + UIView *view = [UIAccessibilityElement viewContainingAccessibilityElement:element]; + + // If we found an element, but it's not associated with a view, then something's wrong. Wait it out and try again. + KIFTestWaitCondition(view, error, @"Cannot find view containing accessibility element with the identifier \"%@\"", accessibilityIdentifier); + + // Hidden views count as absent + KIFTestWaitCondition([view isHidden] || [view superview] == nil, error, @"Accessibility element with identifier \"%@\" is visible and not hidden.", accessibilityIdentifier); + + return KIFTestStepResultSuccess; + }]; +} + +- (UIView *)waitForViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier tappable:(BOOL)mustBeTappable +{ + UIView *view = nil; + @autoreleasepool { + [self waitForAccessibilityElement:NULL view:&view withIdentifier:accessibilityIdentifier tappable:mustBeTappable]; + } + + return view; +} + +- (void)longPressViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier duration:(NSTimeInterval)duration +{ + @autoreleasepool { + UIView *view = nil; + UIAccessibilityElement *element = nil; + [self waitForAccessibilityElement:&element view:&view withIdentifier:accessibilityIdentifier tappable:YES]; + [self longPressAccessibilityElement:element inView:view duration:duration]; + } +} + +- (void)enterText:(NSString *)text intoViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier +{ + return [self enterText:text intoViewWithAccessibilityIdentifier:accessibilityIdentifier expectedResult:nil]; + +} + +- (void)enterText:(NSString *)text intoViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier expectedResult:(NSString *)expectedResult +{ + UIView *view = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement:&element view:&view withIdentifier:accessibilityIdentifier tappable:YES]; + [self tapAccessibilityElement:element inView:view]; + [self waitForTimeInterval:0.25]; + [self enterTextIntoCurrentFirstResponder:text fallbackView:view]; + [self expectView:view toContainText:expectedResult ?: text]; +} + +- (void)clearTextFromViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier +{ + UIView *view = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement:&element view:&view withIdentifier:accessibilityIdentifier tappable:YES]; + [self clearTextFromElement:element inView:view]; +} + +- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier +{ + [self clearTextFromViewWithAccessibilityIdentifier:accessibilityIdentifier]; + [self enterText:text intoViewWithAccessibilityIdentifier:accessibilityIdentifier]; +} + +- (void)clearTextFromAndThenEnterText:(NSString *)text intoViewWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier expectedResult:(NSString *)expectedResult +{ + [self clearTextFromViewWithAccessibilityIdentifier:accessibilityIdentifier]; + [self enterText:text intoViewWithAccessibilityIdentifier:accessibilityIdentifier expectedResult:expectedResult]; +} + +- (void)setOn:(BOOL)switchIsOn forSwitchWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier +{ + UIView *view = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement:&element view:&view withIdentifier:accessibilityIdentifier tappable:YES]; + + if (![view isKindOfClass:[UISwitch class]]) { + [self failWithError:[NSError KIFErrorWithFormat:@"View with accessibility identifier \"%@\" is a %@, not a UISwitch", accessibilityIdentifier, NSStringFromClass([view class])] stopTest:YES]; + } + + UISwitch *switchView = (UISwitch *)view; + + // No need to switch it if it's already in the correct position + if (switchView.isOn == switchIsOn) { + return; + } + + [self tapAccessibilityElement:element inView:view]; + + // If we succeeded, stop the test. + if (switchView.isOn == switchIsOn) { + return; + } + + NSLog(@"Faking turning switch %@ with accessibility identifier %@", switchIsOn ? @"ON" : @"OFF", accessibilityIdentifier); + [switchView setOn:switchIsOn animated:YES]; + [switchView sendActionsForControlEvents:UIControlEventValueChanged]; + [self waitForTimeInterval:0.5]; + + // We gave it our best shot. Fail the test. + if (switchView.isOn != switchIsOn) { + [self failWithError:[NSError KIFErrorWithFormat:@"Failed to toggle switch to \"%@\"; instead, it was \"%@\"", switchIsOn ? @"ON" : @"OFF", switchView.on ? @"ON" : @"OFF"] stopTest:YES]; + } + +} + +- (void)setValue:(float)value forSliderWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier +{ + UISlider *slider = nil; + UIAccessibilityElement *element = nil; + [self waitForAccessibilityElement:&element view:&slider withIdentifier:accessibilityIdentifier tappable:YES]; + + if (![slider isKindOfClass:[UISlider class]]) { + [self failWithError:[NSError KIFErrorWithFormat:@"View with accessibility identifier \"%@\" is a %@, not a UISlider", accessibilityIdentifier, NSStringFromClass([slider class])] stopTest:YES]; + } + [self setValue:value forSlider:slider]; +} + +- (void)waitForFirstResponderWithAccessibilityIdentifier:(NSString *)accessibilityIdentifier +{ + [self runBlock:^KIFTestStepResult(NSError **error) { + UIResponder *firstResponder = [[[UIApplication sharedApplication] keyWindow] firstResponder]; + if ([firstResponder isKindOfClass:NSClassFromString(@"UISearchBarTextField")]) { + do { + firstResponder = [(UIView *)firstResponder superview]; + } while (firstResponder && ![firstResponder isKindOfClass:[UISearchBar class]]); + } + UIResponder* firstResponderIdentification = nil; + if ([firstResponder conformsToProtocol:@protocol(UIAccessibilityIdentification)]) + { + firstResponderIdentification = (UIResponder*)firstResponder; + } + else + { + [self failWithError:[NSError KIFErrorWithFormat:@"First responder does not conform to UIAccessibilityIdentification %@", NSStringFromClass([firstResponder class])] stopTest:YES]; + + } + KIFTestWaitCondition([[firstResponderIdentification accessibilityIdentifier] isEqualToString:accessibilityIdentifier], + error, @"Expected accessibility identifier for first responder to be '%@', got '%@'", + accessibilityIdentifier, [firstResponderIdentification accessibilityIdentifier]); + + return KIFTestStepResultSuccess; + }]; +} + +- (BOOL) tryFindingViewWithAccessibilityIdentifier:(NSString *) accessibilityIdentifier +{ + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"accessibilityIdentifier = %@", accessibilityIdentifier]; + return [UIAccessibilityElement accessibilityElement:nil view:nil withElementMatchingPredicate:predicate tappable:NO error:nil]; +} + +- (void)swipeViewWithAccessibilityIdentifier:(NSString *)identifier inDirection:(KIFSwipeDirection)direction +{ + UIView *viewToSwipe = nil; + UIAccessibilityElement *element = nil; + + [self waitForAccessibilityElement: &element view:&viewToSwipe withIdentifier:identifier tappable:NO]; + + [self swipeAccessibilityElement:element inView:viewToSwipe inDirection:direction]; +} + +-(void) tapStepperWithAccessibilityIdentifier: (NSString *)accessibilityIdentifier increment: (KIFStepperDirection) stepperDirection +{ + @autoreleasepool { + UIView *view = nil; + UIAccessibilityElement *element = nil; + [self waitForAccessibilityElement:&element view:&view withIdentifier:accessibilityIdentifier tappable:YES]; + [self tapStepperWithAccessibilityElement:element increment:stepperDirection inView:view]; + } +} +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/AccessibilityIdentifierTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/AccessibilityIdentifierTests.m new file mode 100755 index 000000000..100bd6e4d --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/AccessibilityIdentifierTests.m @@ -0,0 +1,127 @@ +// +// AccessibilityIdentifierTests.m +// KIF +// +// Created by Brian Nickel on 11/6/14. +// +// + +#import +#import +#import + +@interface AccessibilityIdentifierTests : KIFTestCase +@end + +@implementation AccessibilityIdentifierTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"Tapping"]; +} + +- (void)testWaitingForViewWithAccessibilityIdentifier +{ + // Since the tap has occurred in setup, we just need to wait for the result. + [tester waitForViewWithAccessibilityIdentifier:@"X_BUTTON"]; + KIFExpectFailure([[tester usingTimeout:0.5] waitForViewWithAccessibilityIdentifier:@"NOT_X_BUTTON"]); +} + +- (void)testTappingViewWithAccessibilityIdentifier +{ + [tester tapViewWithAccessibilityIdentifier:@"X_BUTTON"]; + [tester waitForViewWithAccessibilityLabel:@"X" traits:UIAccessibilityTraitButton | UIAccessibilityTraitSelected]; + KIFExpectFailure([[tester usingTimeout:0.5] tapViewWithAccessibilityIdentifier:@"NOT_X_BUTTON"]); +} + +- (void)testWaitingForAbscenceOfViewWithAccessibilityIdentifier +{ + // Since the tap has occurred in setup, we just need to wait for the result. + [tester waitForViewWithAccessibilityIdentifier:@"X_BUTTON"]; + [tester waitForAbsenceOfViewWithAccessibilityIdentifier:@"NOT_X_BUTTON"]; + KIFExpectFailure([[tester usingTimeout:0.5] waitForAbsenceOfViewWithAccessibilityIdentifier:@"X_BUTTON"]); + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; + [tester waitForAbsenceOfViewWithAccessibilityIdentifier:@"X_BUTTON"]; + [tester tapViewWithAccessibilityLabel:@"Tapping"]; +} + +- (void)testLongPressingViewWithAccessibilityIdentifier +{ + [tester longPressViewWithAccessibilityIdentifier:@"idGreeting" duration:2]; + [tester tapViewWithAccessibilityLabel:@"Select All"]; +} + +- (void)testEnteringTextIntoViewWithAccessibilityIdentifier +{ + [tester longPressViewWithAccessibilityIdentifier:@"idGreeting" duration:2]; + [tester tapViewWithAccessibilityLabel:@"Select All"]; + [tester tapViewWithAccessibilityLabel:@"Cut"]; + [tester enterText:@"Yo" intoViewWithAccessibilityIdentifier:@"idGreeting"]; +} + +- (void)testEnteringTextIntoViewWithAccessibilityIdentifierExpectingResults +{ + [tester enterText:@", world" intoViewWithAccessibilityIdentifier:@"idGreeting" expectedResult:@"Hello, world"]; + [tester waitForViewWithAccessibilityLabel:@"Greeting" value:@"Hello, world" traits:UIAccessibilityTraitNone]; +} + +- (void)testClearingAndEnteringTextIntoViewWithAccessibilityLabel +{ + [tester clearTextFromAndThenEnterText:@"Yo" intoViewWithAccessibilityIdentifier:@"idGreeting"]; +} + +- (void)testTryFindingViewWithAccessibilityIdentifier +{ + if (![tester tryFindingViewWithAccessibilityIdentifier:@"idGreeting"]) + { + [tester fail]; + } + + if ([tester tryFindingViewWithAccessibilityIdentifier:@"idDoesNotExist"]) + { + [tester fail]; + } +} + +- (void) testTappingStepperIncrement +{ + UILabel *uiLabel = (UILabel *)[tester waitForViewWithAccessibilityIdentifier:@"tapViewController.stepperValue"]; + NSInteger originalValue = [[uiLabel text] integerValue]; + + [tester tapStepperWithAccessibilityIdentifier:@"tapViewController.stepper" increment:(KIFStepperDirectionIncrement)]; + + [tester waitForTimeInterval:0.5f]; + uiLabel = (UILabel *)[tester waitForViewWithAccessibilityIdentifier:@"tapViewController.stepperValue"]; + NSInteger newValue = [[uiLabel text] integerValue]; + if (! newValue == (originalValue + 1)) + { + NSException *exception = [NSException exceptionWithName:@"Unexpected test failure" + reason:[NSString stringWithFormat: @"newValue was expected to be +1 of originalValue. Original Value was %ld while newValue is %ld", (long)originalValue, (long)newValue] userInfo:nil]; + [tester failWithException: exception stopTest: NO]; + } +} + +- (void) testTappingStepperDecrement +{ + UILabel *uiLabel = (UILabel *)[tester waitForViewWithAccessibilityIdentifier:@"tapViewController.stepperValue"]; + NSInteger originalValue = [[uiLabel text] integerValue]; + + [tester tapStepperWithAccessibilityIdentifier:@"tapViewController.stepper" increment:(KIFStepperDirectionDecrement)]; + + [tester waitForTimeInterval:0.5f]; + uiLabel = (UILabel *)[tester waitForViewWithAccessibilityIdentifier:@"tapViewController.stepperValue"]; + NSInteger newValue = [[uiLabel text] integerValue]; + if (! newValue == (originalValue -1)) + { + NSException *exception = [NSException exceptionWithName:@"Unexpected test failure" + reason:[NSString stringWithFormat: @"newValue was expected to be -1 of originalValue. Original Value was %ld while newValue is %ld", (long)originalValue, (long)newValue] userInfo:nil]; + [tester failWithException: exception stopTest: NO]; + } +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/BackgroundTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/BackgroundTests.m new file mode 100755 index 000000000..ccbbaccc0 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/BackgroundTests.m @@ -0,0 +1,31 @@ +// +// BackgroundTests.m +// KIF +// +// Created by Jordan Zucker on 5/18/15. +// +// + +#import + +@interface BackgroundTests : KIFTestCase + +@end + +@implementation BackgroundTests + +- (void)beforeEach { + [tester tapViewWithAccessibilityLabel:@"Background"]; +} + +- (void)afterEach { + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testBackgroundApp { + [tester waitForViewWithAccessibilityLabel:@"Start"]; + [tester deactivateAppForDuration:5]; + [tester waitForViewWithAccessibilityLabel:@"Back"]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/CascadingFailureTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/CascadingFailureTests.m new file mode 100755 index 000000000..a0f12d6b4 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/CascadingFailureTests.m @@ -0,0 +1,46 @@ +// +// CascadingFailureTests.m +// Test Suite +// +// Created by Brian Nickel on 8/4/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import +#import "KIFTestStepValidation.h" + +@interface KIFSystemTestActor (CascadingFailureTests) +- (void)failA; +@end + +@implementation KIFSystemTestActor (CascadingFailureTests) + +- (void)failA +{ + [system failB]; +} + +- (void)failB +{ + [system failC]; +} + +- (void)failC +{ + [system fail]; +} + +@end + +@interface CascadingFailureTests : KIFTestCase +@end + +@implementation CascadingFailureTests + +- (void)testCascadingFailure +{ + KIFExpectFailure([system failA]); + KIFExpectFailureWithCount([system failA], 4); +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/CollectionViewTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/CollectionViewTests.m new file mode 100755 index 000000000..3b2f8b8cb --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/CollectionViewTests.m @@ -0,0 +1,63 @@ +// +// CollectionViewTests.m +// Test Suite +// +// Created by Tony Mann on 7/31/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import +#import "KIFTestStepValidation.h" + +@interface CollectionViewTests : KIFTestCase +@end + +@implementation CollectionViewTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"CollectionViews"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testTappingItems +{ + [tester tapItemAtIndexPath:[NSIndexPath indexPathForItem:199 inSection:0] inCollectionViewWithAccessibilityIdentifier:@"CollectionView Tests CollectionView"]; + [tester waitForViewWithAccessibilityLabel:@"Last Cell" traits:UIAccessibilityTraitSelected]; + [tester tapItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0] inCollectionViewWithAccessibilityIdentifier:@"CollectionView Tests CollectionView"]; + [tester waitForViewWithAccessibilityLabel:@"First Cell" traits:UIAccessibilityTraitSelected]; +} + +- (void)testTappingLastItemAndSection +{ + [tester tapItemAtIndexPath:[NSIndexPath indexPathForItem:-1 inSection:-1] inCollectionViewWithAccessibilityIdentifier:@"CollectionView Tests CollectionView"]; + [tester waitForViewWithAccessibilityLabel:@"Last Cell" traits:UIAccessibilityTraitSelected]; +} + +- (void)testOutOfBounds +{ + KIFExpectFailure([[tester usingTimeout:1] tapItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:99] inCollectionViewWithAccessibilityIdentifier:@"CollectionView Tests CollectionView"]); +} + +- (void)testUnknownCollectionView +{ + KIFExpectFailure([[tester usingTimeout:1] tapItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0] inCollectionViewWithAccessibilityIdentifier:@"Unknown CollectionView"]); +} + +- (void)testTappingItemsByLabel +{ + // Tap the first item, which is already visible + [tester tapViewWithAccessibilityLabel:@"First Cell"]; + + // Tap the last item, which will need to be scrolled up + [tester tapViewWithAccessibilityLabel:@"Last Cell"]; + + // Tap the first item, which will need to be scrolled down + [tester tapViewWithAccessibilityLabel:@"First Cell"]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/CompositionTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/CompositionTests.m new file mode 100755 index 000000000..e00d4dd8a --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/CompositionTests.m @@ -0,0 +1,86 @@ +// +// CompositionTests.m +// Test Suite +// +// Created by Brian Nickel on 7/31/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import +#import "UIApplication-KIFAdditions.h" +#import "UIAccessibilityElement-KIFAdditions.h" + +@interface KIFUITestActor (Composition) + +- (void)tapViewIfNotSelected:(NSString *)label; +- (void)tapViewWithAccessibilityHint:(NSString *)hint; + +@end + +@implementation KIFUITestActor (Composition) + +- (void)tapViewIfNotSelected:(NSString *)label +{ + UIAccessibilityElement *element; + UIView *view; + [self waitForAccessibilityElement:&element view:&view withLabel:label value:nil traits:UIAccessibilityTraitNone tappable:YES]; + + if ((element.accessibilityTraits & UIAccessibilityTraitSelected) == UIAccessibilityTraitNone) { + [self tapAccessibilityElement:element inView:view]; + } +} + +- (void)tapViewWithAccessibilityHint:(NSString *)hint +{ + __block UIAccessibilityElement *element; + __block UIView *view; + + [self runBlock:^KIFTestStepResult(NSError *__autoreleasing *error) { + + element = [[UIApplication sharedApplication] accessibilityElementMatchingBlock:^BOOL(UIAccessibilityElement *element) { + return [element.accessibilityHint isEqualToString:hint]; + }]; + + KIFTestWaitCondition(element, error, @"Could not find element with hint: %@", hint); + + view = [UIAccessibilityElement viewContainingAccessibilityElement:element tappable:YES error:error]; + return view ? KIFTestStepResultSuccess : KIFTestStepResultWait; + }]; + + [self tapAccessibilityElement:element inView:view]; +} + +@end + +@interface CompositionTests : KIFTestCase +@end + +@implementation CompositionTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"Show/Hide"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testTappingViewWithHint +{ + [tester tapViewWithAccessibilityHint:@"A button for A"]; + [tester waitForViewWithAccessibilityLabel:@"A" traits:UIAccessibilityTraitSelected]; +} + +- (void)testTappingOnlyIfNotSelected +{ + [tester tapViewIfNotSelected:@"A"]; + [tester waitForViewWithAccessibilityLabel:@"A" traits:UIAccessibilityTraitSelected]; + + // This should not deselect the element. + [tester tapViewIfNotSelected:@"A"]; + [tester waitForViewWithAccessibilityLabel:@"A" traits:UIAccessibilityTraitSelected]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/ExistTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/ExistTests.m new file mode 100755 index 000000000..a86680af9 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/ExistTests.m @@ -0,0 +1,33 @@ +// +// ExistTests.m +// KIF +// +// Created by Jeroen Leenarts on 11-07-14. +// +// + +#import + +@interface ExistTests : KIFTestCase + +@end + +@implementation ExistTests + +- (void)testExistsViewWithAccessibilityLabel +{ + if ([tester tryFindingTappableViewWithAccessibilityLabel:@"Tapping" error:NULL] && ![tester tryFindingTappableViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton error:NULL]) { + [tester tapViewWithAccessibilityLabel:@"Tapping"]; + } else { + [tester fail]; + } + + if ([tester tryFindingTappableViewWithAccessibilityLabel:@"Test Suite" error:NULL] && ![tester tryFindingTappableViewWithAccessibilityLabel:@"Tapping" error:NULL]) { + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; + } else { + [tester fail]; + } +} + + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/GestureTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/GestureTests.m new file mode 100755 index 000000000..769100f57 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/GestureTests.m @@ -0,0 +1,206 @@ +// +// GestureTests.m +// Test Suite +// +// Created by Brian Nickel on 6/28/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import +#import +#import +#import + +#define kPanMeAccessibilityString @"Pan Me" +#define kVelocityValueLabelAccessibilityString @"velocityValueLabel" + +#define kPanLeftRegex @"^X:-[0-9\\.]+ Y:0.00$" +#define kPanUpRegex @"^X:0.00 Y:-[0-9\\.]+$" +#define kPanRightRegex @"^X:[0-9\\.]+ Y:0.00$" +#define kPanDownRegex @"^X:0.00 Y:[0-9\\.]+$" +#define KPanNoVelocityValue @"^X:0.00 Y:0.00$" + +@interface GestureTests : KIFTestCase +@end + +@implementation GestureTests + +- (void)beforeAll +{ + [tester tapViewWithAccessibilityLabel:@"Gestures"]; +} + +- (void)afterAll +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testSwipingLeft +{ + [tester swipeViewWithAccessibilityLabel:@"Swipe Me" inDirection:KIFSwipeDirectionLeft]; + [tester waitForViewWithAccessibilityLabel:@"Left"]; +} + +- (void)testSwipingRight +{ + [tester swipeViewWithAccessibilityLabel:@"Swipe Me" inDirection:KIFSwipeDirectionRight]; + [tester waitForViewWithAccessibilityLabel:@"Right"]; +} + +- (void)testSwipingUp +{ + [tester swipeViewWithAccessibilityLabel:@"Swipe Me" inDirection:KIFSwipeDirectionUp]; + [tester waitForViewWithAccessibilityLabel:@"Up"]; +} + +- (void)testSwipingDown +{ + [tester swipeViewWithAccessibilityLabel:@"Swipe Me" inDirection:KIFSwipeDirectionDown]; + [tester waitForViewWithAccessibilityLabel:@"Down"]; +} + +- (void)testPanningLeft +{ + NSString* regexPattern = kPanLeftRegex; + NSPredicate *resultTestPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexPattern]; + NSPredicate *noVelocityPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", KPanNoVelocityValue]; + + UIView* velocityResultView = [tester waitForViewWithAccessibilityLabel:kVelocityValueLabelAccessibilityString]; + XCTAssertTrue([velocityResultView isKindOfClass:[UILabel class]], @"Found view is not a UILabel instance!"); + UILabel* velocityLabel = (UILabel*)velocityResultView; + + UIView* panLabel = [tester waitForTappableViewWithAccessibilityLabel:kPanMeAccessibilityString]; + CGPoint centerInView = CGPointMake(panLabel.frame.size.width / 2.0, panLabel.frame.size.height / 2.0); + + [panLabel dragFromPoint:centerInView toPoint:CGPointMake(centerInView.x - 30, centerInView.y)]; + XCTAssertFalse([noVelocityPredicate evaluateWithObject:velocityLabel.text], @"No valocity value found!"); + XCTAssertTrue([resultTestPredicate evaluateWithObject:velocityLabel.text], @"The result doesn`t match the %@ regex pattern", regexPattern); +} + +- (void)testPanningRight +{ + NSString* regexPattern = kPanRightRegex; + NSPredicate *resultTestPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexPattern]; + NSPredicate *noVelocityPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", KPanNoVelocityValue]; + + UIView* velocityResultView = [tester waitForViewWithAccessibilityLabel:kVelocityValueLabelAccessibilityString]; + XCTAssertTrue([velocityResultView isKindOfClass:[UILabel class]], @"Found view is not a UILabel instance!"); + UILabel* velocityLabel = (UILabel*)velocityResultView; + + UIView* panLabel = [tester waitForTappableViewWithAccessibilityLabel:kPanMeAccessibilityString]; + CGPoint centerInView = CGPointMake(panLabel.frame.size.width / 2.0, panLabel.frame.size.height / 2.0); + + [panLabel dragFromPoint:centerInView toPoint:CGPointMake(centerInView.x + 30, centerInView.y)]; + XCTAssertFalse([noVelocityPredicate evaluateWithObject:velocityLabel.text], @"No valocity value found!"); + XCTAssertTrue([resultTestPredicate evaluateWithObject:velocityLabel.text], @"The result doesn`t match the %@ regex pattern", regexPattern); +} + +- (void)testPanningUp +{ + NSString* regexPattern = kPanUpRegex; + NSPredicate *resultTestPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexPattern]; + NSPredicate *noVelocityPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", KPanNoVelocityValue]; + + UIView* velocityResultView = [tester waitForViewWithAccessibilityLabel:kVelocityValueLabelAccessibilityString]; + XCTAssertTrue([velocityResultView isKindOfClass:[UILabel class]], @"Found view is not a UILabel instance!"); + UILabel* velocityLabel = (UILabel*)velocityResultView; + + UIView* panLabel = [tester waitForTappableViewWithAccessibilityLabel:kPanMeAccessibilityString]; + CGPoint centerInView = CGPointMake(panLabel.frame.size.width / 2.0, panLabel.frame.size.height / 2.0); + + [panLabel dragFromPoint:centerInView toPoint:CGPointMake(centerInView.x, centerInView.y - 30)]; + XCTAssertFalse([noVelocityPredicate evaluateWithObject:velocityLabel.text], @"No valocity value found!"); + XCTAssertTrue([resultTestPredicate evaluateWithObject:velocityLabel.text], @"The result doesn`t match the %@ regex pattern", regexPattern); +} + + +- (void)testPanningDown +{ + NSString* regexPattern = kPanDownRegex; + NSPredicate *resultTestPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexPattern]; + NSPredicate *noVelocityPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", KPanNoVelocityValue]; + + UIView* velocityResultView = [tester waitForViewWithAccessibilityLabel:kVelocityValueLabelAccessibilityString]; + XCTAssertTrue([velocityResultView isKindOfClass:[UILabel class]], @"Found view is not a UILabel instance!"); + UILabel* velocityLabel = (UILabel*)velocityResultView; + + UIView* panLabel = [tester waitForTappableViewWithAccessibilityLabel:kPanMeAccessibilityString]; + CGPoint centerInView = CGPointMake(panLabel.frame.size.width / 2.0, panLabel.frame.size.height / 2.0); + + [panLabel dragFromPoint:centerInView toPoint:CGPointMake(centerInView.x, centerInView.y + 30)]; + XCTAssertFalse([noVelocityPredicate evaluateWithObject:velocityLabel.text], @"No valocity value found!"); + XCTAssertTrue([resultTestPredicate evaluateWithObject:velocityLabel.text], @"The result doesn`t match the %@ regex pattern", regexPattern); +} + +- (void)testMissingSwipeableElement +{ + KIFExpectFailure([[tester usingTimeout:0.25] swipeViewWithAccessibilityLabel:@"Unknown" inDirection:KIFSwipeDirectionDown]); +} + +- (void)testSwipingLeftWithTraits +{ + [tester swipeViewWithAccessibilityLabel:@"Swipe Me" value:nil traits:UIAccessibilityTraitStaticText inDirection:KIFSwipeDirectionLeft]; + [tester waitForViewWithAccessibilityLabel:@"Left"]; +} + +- (void)testSwipingRightWithTraits +{ + [tester swipeViewWithAccessibilityLabel:@"Swipe Me" value:nil traits:UIAccessibilityTraitStaticText inDirection:KIFSwipeDirectionRight]; + [tester waitForViewWithAccessibilityLabel:@"Right"]; +} + +- (void)testSwipingUpWithTraits +{ + [tester swipeViewWithAccessibilityLabel:@"Swipe Me" value:nil traits:UIAccessibilityTraitStaticText inDirection:KIFSwipeDirectionUp]; + [tester waitForViewWithAccessibilityLabel:@"Up"]; +} + +- (void)testSwipingDownWithTraits +{ + [tester swipeViewWithAccessibilityLabel:@"Swipe Me" value:nil traits:UIAccessibilityTraitStaticText inDirection:KIFSwipeDirectionDown]; + [tester waitForViewWithAccessibilityLabel:@"Down"]; +} + +- (void)testMissingSwipeableElementWithTraits +{ + KIFExpectFailure([[tester usingTimeout:0.25] swipeViewWithAccessibilityLabel:@"Unknown" value:nil traits:UIAccessibilityTraitStaticText inDirection:KIFSwipeDirectionDown]); +} + +- (void)testSwipingLeftWithIdentifier +{ + [tester swipeViewWithAccessibilityIdentifier:@"gestures.swipeMe" inDirection:KIFSwipeDirectionLeft]; + [tester waitForViewWithAccessibilityLabel:@"Left"]; +} + +- (void)testSwipingRightWithIdentifier +{ + [tester swipeViewWithAccessibilityIdentifier:@"gestures.swipeMe" inDirection:KIFSwipeDirectionRight]; + [tester waitForViewWithAccessibilityLabel:@"Right"]; +} + +- (void)testSwipingUpWithIdentifier +{ + [tester swipeViewWithAccessibilityIdentifier:@"gestures.swipeMe" inDirection:KIFSwipeDirectionUp]; + [tester waitForViewWithAccessibilityLabel:@"Up"]; +} + +- (void)testSwipingDownWithIdentifier +{ + [tester swipeViewWithAccessibilityIdentifier:@"gestures.swipeMe" inDirection:KIFSwipeDirectionDown]; + [tester waitForViewWithAccessibilityLabel:@"Down"]; +} + +- (void)testScrolling +{ + [tester scrollViewWithAccessibilityIdentifier:@"Scroll View" byFractionOfSizeHorizontal:-0.9 vertical:-0.9]; + [tester waitForTappableViewWithAccessibilityLabel:@"Bottom Right"]; + [tester scrollViewWithAccessibilityIdentifier:@"Scroll View" byFractionOfSizeHorizontal:0.9 vertical:0.9]; + [tester waitForTappableViewWithAccessibilityLabel:@"Top Left"]; +} + +- (void)testMissingScrollableElement +{ + KIFExpectFailure([[tester usingTimeout:0.25] scrollViewWithAccessibilityIdentifier:@"Unknown" byFractionOfSizeHorizontal:0.5 vertical:0.5]); +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/KIF Tests-Info.plist b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/KIF Tests-Info.plist new file mode 100755 index 000000000..169b6f710 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/KIF Tests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/KIF Tests-Prefix.pch b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/KIF Tests-Prefix.pch new file mode 100755 index 000000000..755f50c2f --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/KIF Tests-Prefix.pch @@ -0,0 +1,8 @@ +// +// Prefix header for all source files of the 'KIF Tests' target in the 'KIF Tests' project +// + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/KIF XCTests-Prefix.pch b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/KIF XCTests-Prefix.pch new file mode 100755 index 000000000..f84e4f10a --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/KIF XCTests-Prefix.pch @@ -0,0 +1,9 @@ +// +// Prefix header for all source files of the 'KIF Tests' target in the 'KIF Tests' project +// + +#ifdef __OBJC__ + #import + #import + #import +#endif diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/LandscapeTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/LandscapeTests.m new file mode 100755 index 000000000..c4e778ddf --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/LandscapeTests.m @@ -0,0 +1,40 @@ +// +// LandscapeTests.m +// KIF +// +// Created by Brian Nickel on 9/11/13. +// +// + +#import + +@interface LandscapeTests : KIFTestCase +@end + +@implementation LandscapeTests + +- (void)beforeAll +{ + [system simulateDeviceRotationToOrientation:UIDeviceOrientationLandscapeLeft]; + [tester scrollViewWithAccessibilityIdentifier:@"Test Suite TableView" byFractionOfSizeHorizontal:0 vertical:-0.2]; +} + +- (void)afterAll +{ + [system simulateDeviceRotationToOrientation:UIDeviceOrientationPortrait]; + [tester waitForTimeInterval:0.5]; +} + +- (void)beforeEach +{ + [tester waitForTimeInterval:0.25]; +} + +- (void)testThatAlertViewsCanBeTappedInLandscape +{ + [tester tapViewWithAccessibilityLabel:@"UIAlertView"]; + [tester tapViewWithAccessibilityLabel:@"Continue"]; + [tester waitForAbsenceOfViewWithAccessibilityLabel:@"Message"]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/LongPressTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/LongPressTests.m new file mode 100755 index 000000000..1aa06951e --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/LongPressTests.m @@ -0,0 +1,45 @@ +// +// LongPressTests.m +// Test Suite +// +// Created by Brian Nickel on 6/28/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import + +@interface LongPressTests : KIFTestCase +@end + +@implementation LongPressTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"Tapping"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + + +- (void)testLongPressingViewWithAccessibilityLabel +{ + [tester longPressViewWithAccessibilityLabel:@"Greeting" duration:2]; + [tester tapViewWithAccessibilityLabel:@"Select All"]; +} + +- (void)testLongPressingViewViewWithTraits +{ + [tester longPressViewWithAccessibilityLabel:@"Greeting" value:@"Hello" duration:2]; + [tester tapViewWithAccessibilityLabel:@"Select All"]; +} + +- (void)testLongPressingViewViewWithValue +{ + [tester longPressViewWithAccessibilityLabel:@"Greeting" value:@"Hello" traits:UIAccessibilityTraitUpdatesFrequently duration:2]; + [tester tapViewWithAccessibilityLabel:@"Select All"]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/ModalViewTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/ModalViewTests.m new file mode 100755 index 000000000..4d8f68f4b --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/ModalViewTests.m @@ -0,0 +1,63 @@ +// +// ModalViewTests.m +// Test Suite +// +// Created by Brian Nickel on 6/28/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import + +@interface ModalViewTests : KIFTestCase +@end + +@implementation ModalViewTests + +- (void)beforeEach +{ + [tester waitForTimeInterval:0.25]; +} + +- (void)testInteractionWithAnAlertView +{ + [tester tapViewWithAccessibilityLabel:@"UIAlertView"]; + [tester waitForViewWithAccessibilityLabel:@"Alert View"]; + [tester waitForViewWithAccessibilityLabel:@"Message"]; + [tester waitForTappableViewWithAccessibilityLabel:@"Cancel"]; + [tester waitForTappableViewWithAccessibilityLabel:@"Continue"]; + [tester tapViewWithAccessibilityLabel:@"Continue"]; + [tester waitForAbsenceOfViewWithAccessibilityLabel:@"Message"]; +} + +- (void)testInteractionWithAnActionSheet +{ + [tester tapViewWithAccessibilityLabel:@"UIActionSheet"]; + [tester waitForViewWithAccessibilityLabel:@"Action Sheet"]; + [tester waitForTappableViewWithAccessibilityLabel:@"Destroy"]; + [tester waitForTappableViewWithAccessibilityLabel:@"A"]; + [tester waitForTappableViewWithAccessibilityLabel:@"B"]; + + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + [tester dismissPopover]; + } else { + [tester tapViewWithAccessibilityLabel:@"Cancel"]; + [tester waitForViewWithAccessibilityLabel:@"Alert View"]; + [tester tapViewWithAccessibilityLabel:@"Continue"]; + [tester waitForAbsenceOfViewWithAccessibilityLabel:@"Alert View"]; + } +} + +- (void)testInteractionWithAnActivityViewController +{ + if (!NSClassFromString(@"UIActivityViewController")) { + return; + } + + [tester tapViewWithAccessibilityLabel:@"UIActivityViewController"]; + [tester waitForTappableViewWithAccessibilityLabel:@"Copy"]; + [tester waitForTappableViewWithAccessibilityLabel:@"Mail"]; + [tester waitForTappableViewWithAccessibilityLabel:@"Cancel"]; + [tester tapViewWithAccessibilityLabel:@"Cancel"]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/MultiFingerTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/MultiFingerTests.m new file mode 100755 index 000000000..9f8660af9 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/MultiFingerTests.m @@ -0,0 +1,149 @@ +// +// MultiFingerTests.m +// KIF +// +// Created by Ying Quan Tan on 7/30/14. +// +// + +#import +#import "KIFTestStepValidation.h" +#import + +@interface MultiFingerTests : KIFTestCase +@property (nonatomic, readwrite) BOOL twoFingerTapSuccess; +@property (nonatomic, readwrite) BOOL twoFingerPanSuccess; +@property (nonatomic, readwrite) BOOL zoomSuccess; +@property (nonatomic, readwrite) double latestRotation; +@end + +@implementation MultiFingerTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"ScrollViews"]; + + // reset scroll view + UIScrollView *scrollView = (UIScrollView *)[tester waitForViewWithAccessibilityLabel:@"Scroll View"]; + scrollView.contentOffset = CGPointZero; + + self.twoFingerTapSuccess = NO; + self.twoFingerPanSuccess = NO; + self.zoomSuccess = NO; + self.latestRotation = 0; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; + self.twoFingerTapSuccess = NO; + self.twoFingerPanSuccess = NO; + self.zoomSuccess = NO; + self.latestRotation = 0; +} + +- (void)testTwoFingerTap { + UIScrollView *scrollView = (UIScrollView *)[tester waitForViewWithAccessibilityLabel:@"Scroll View"]; + UITapGestureRecognizer *twoFingerTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self + action:@selector(twoFingerTapped)]; + twoFingerTapRecognizer.numberOfTouchesRequired = 2; + [scrollView addGestureRecognizer:twoFingerTapRecognizer]; + + [scrollView twoFingerTapAtPoint:CGPointMake(CGRectGetMidX(scrollView.bounds), CGRectGetMidY(scrollView.bounds))]; + + __KIFAssertEqual(self.twoFingerTapSuccess, YES); + [scrollView removeGestureRecognizer:twoFingerTapRecognizer]; +} + +- (void)twoFingerTapped { + self.twoFingerTapSuccess = YES; +} + +- (void)testTwoFingerPan +{ + CGFloat offset = 50.0; + + UIScrollView *scrollView = (UIScrollView *)[tester waitForViewWithAccessibilityLabel:@"Scroll View"]; + UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingerPanned:)]; + panGestureRecognizer.minimumNumberOfTouches = 2; + [scrollView addGestureRecognizer:panGestureRecognizer]; + + CGPoint startPoint = CGPointMake(CGRectGetMidX(scrollView.bounds), CGRectGetMidY(scrollView.bounds)); + CGPoint endPoint = CGPointMake(startPoint.x, startPoint.y + offset); + [scrollView twoFingerPanFromPoint:startPoint toPoint:endPoint steps:10]; + + __KIFAssertEqual(self.twoFingerPanSuccess, YES); + [scrollView removeGestureRecognizer:panGestureRecognizer]; +} + +- (void)twoFingerPanned:(UIGestureRecognizer*) gr{ + + if (gr.state == UIGestureRecognizerStateEnded) { + self.twoFingerPanSuccess = YES; + } + +} + +- (void)testZoom { + CGFloat distance = 50.0; + + UIScrollView *scrollView = (UIScrollView *)[tester waitForViewWithAccessibilityLabel:@"Scroll View"]; + UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self + action:@selector(zoomed:)]; + + [scrollView addGestureRecognizer:pinchRecognizer]; + + CGPoint startPoint = CGPointMake(CGRectGetMidX(scrollView.bounds), CGRectGetMidY(scrollView.bounds)); + [scrollView zoomAtPoint:startPoint distance:distance steps:10]; + + __KIFAssertEqual(self.zoomSuccess, YES); + [scrollView removeGestureRecognizer:pinchRecognizer]; +} + +- (void)zoomed:(UIPinchGestureRecognizer *)pinchRecognizer { + + if (pinchRecognizer.state == UIGestureRecognizerStateChanged) + { + if (pinchRecognizer.scale > 1) + { + self.zoomSuccess = YES; + } + } + +} + +- (void)testRotate { + UIScrollView *scrollView = (UIScrollView *)[tester waitForViewWithAccessibilityLabel:@"Scroll View"]; + UIRotationGestureRecognizer *rotateRecognizer = + [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotated:)]; + + [scrollView addGestureRecognizer:rotateRecognizer]; + + [self assertThatLatestRotationIsWithinThreshold:45]; + [self assertThatLatestRotationIsWithinThreshold:90]; + [self assertThatLatestRotationIsWithinThreshold:180]; + [self assertThatLatestRotationIsWithinThreshold:270]; + [self assertThatLatestRotationIsWithinThreshold:360]; + + [scrollView removeGestureRecognizer:rotateRecognizer]; +} + +- (void)assertThatLatestRotationIsWithinThreshold:(double)targetRotationInDegrees { + UIScrollView *scrollView = (UIScrollView *)[tester waitForViewWithAccessibilityLabel:@"Scroll View"]; + CGPoint startPoint = CGPointMake(CGRectGetMidX(scrollView.bounds), CGRectGetMidY(scrollView.bounds)); + [scrollView twoFingerRotateAtPoint:startPoint angle:targetRotationInDegrees]; + + // check we have rotated to within some small threshold of the target rotation amount + // 0.2 radians is ~12 degrees + BOOL withinThreshold = (self.latestRotation - KIFDegreesToRadians(targetRotationInDegrees)) < 0.2; + __KIFAssertEqual(withinThreshold, YES); +} + +- (void)rotated:(UIRotationGestureRecognizer *)recognizer { + if (recognizer.state == UIGestureRecognizerStateEnded) + { + self.latestRotation = recognizer.rotation; + } +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/PickerTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/PickerTests.m new file mode 100755 index 000000000..62921a94f --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/PickerTests.m @@ -0,0 +1,81 @@ +#import + +@interface PickerTests : KIFTestCase +@end + +@implementation PickerTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"Pickers"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testSelectingDateInPast +{ + [tester tapViewWithAccessibilityLabel:@"Date Selection"]; + NSArray *date = @[@"June", @"17", @"1965"]; + // If the UIDatePicker LocaleIdentifier would be de_DE then the date to set + // would look like this: NSArray *date = @[@"17.", @"Juni", @"1965" + [tester selectDatePickerValue:date]; + [tester waitForViewWithAccessibilityLabel:@"Date Selection" value:@"Jun 17, 1965" traits:UIAccessibilityTraitNone]; +} + +- (void)testSelectingDateInFuture +{ + [tester tapViewWithAccessibilityLabel:@"Date Selection"]; + NSArray *date = @[@"December", @"31", @"2030"]; + [tester selectDatePickerValue:date]; + [tester waitForViewWithAccessibilityLabel:@"Date Selection" value:@"Dec 31, 2030" traits:UIAccessibilityTraitNone]; +} + +- (void)testSelectingDateTime +{ + [tester tapViewWithAccessibilityLabel:@"Date Time Selection"]; + NSArray *dateTime = @[@"Jun 17", @"6", @"43", @"AM"]; + [tester selectDatePickerValue:dateTime]; + [tester waitForViewWithAccessibilityLabel:@"Date Time Selection" value:@"Jun 17, 06:43 AM" traits:UIAccessibilityTraitNone]; +} + +- (void)testSelectingTime +{ + [tester tapViewWithAccessibilityLabel:@"Time Selection"]; + NSArray *time = @[@"7", @"44", @"AM"]; + [tester selectDatePickerValue:time]; + [tester waitForViewWithAccessibilityLabel:@"Time Selection" value:@"7:44 AM" traits:UIAccessibilityTraitNone]; +} + +- (void)testSelectingCountdown +{ + [tester tapViewWithAccessibilityLabel:@"Countdown Selection"]; + NSArray *countdown = @[@"4", @"10"]; + [tester selectDatePickerValue:countdown]; + [tester waitForViewWithAccessibilityLabel:@"Countdown Selection" value:@"15000.000000" traits:UIAccessibilityTraitNone]; +} + +- (void)testSelectingAPickerRow +{ + [tester selectPickerViewRowWithTitle:@"Charlie"]; + + NSOperatingSystemVersion iOS8 = {8, 0, 0}; + if ([NSProcessInfo instancesRespondToSelector:@selector(isOperatingSystemAtLeastVersion:)] && [[NSProcessInfo new] isOperatingSystemAtLeastVersion:iOS8]) { + [tester waitForViewWithAccessibilityLabel:@"Call Sign" value:@"Charlie" traits:UIAccessibilityTraitNone]; + } else { + [tester waitForViewWithAccessibilityLabel:@"Call Sign" value:@"Charlie. 3 of 3" traits:UIAccessibilityTraitNone]; + } +} + +- (void)testSelectingRowInComponent +{ + [tester tapViewWithAccessibilityLabel:@"Date Selection"]; + NSArray *date = @[@"December", @"31", @"2030"]; + [tester selectDatePickerValue:date]; + [tester selectPickerViewRowWithTitle:@"17" inComponent:1]; + [tester waitForViewWithAccessibilityLabel:@"Date Selection" value:@"Dec 17, 2030" traits:UIAccessibilityTraitNone]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/ScrollViewTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/ScrollViewTests.m new file mode 100755 index 000000000..94a51014a --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/ScrollViewTests.m @@ -0,0 +1,40 @@ +// +// ScrollViewTests.m +// Test Suite +// +// Created by Hilton Campbell on 2/20/14. +// +// + +#import +#import "KIFTestStepValidation.h" + +@interface ScrollViewTests : KIFTestCase +@end + +@implementation ScrollViewTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"ScrollViews"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testScrollingToTapOffscreenViews +{ + [tester tapViewWithAccessibilityLabel:@"Down"]; + [tester tapViewWithAccessibilityLabel:@"Up"]; + [tester tapViewWithAccessibilityLabel:@"Right"]; + [tester tapViewWithAccessibilityLabel:@"Left"]; +} + +- (void)testScrollingToTapOffscreenTextView +{ + [tester tapViewWithAccessibilityLabel:@"TextView"]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/SearchFieldTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/SearchFieldTests.m new file mode 100755 index 000000000..6a5174c0d --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/SearchFieldTests.m @@ -0,0 +1,35 @@ +// +// SearchFieldTests.m +// KIF +// +// Created by Brian Nickel on 9/13/13. +// +// + +#import +#import + +@interface SearchFieldTests : KIFTestCase +@end + +@implementation SearchFieldTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"TableViews"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testWaitingForSearchFieldToBecomeFirstResponder +{ + [tester tapViewWithAccessibilityLabel:nil traits:UIAccessibilityTraitSearchField]; + [tester waitForFirstResponderWithAccessibilityLabel:nil traits:UIAccessibilityTraitSearchField]; + [tester enterTextIntoCurrentFirstResponder:@"text"]; + [tester waitForViewWithAccessibilityLabel:nil value:@"text" traits:UIAccessibilityTraitSearchField]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/SpecificControlTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/SpecificControlTests.m new file mode 100755 index 000000000..2cde0456f --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/SpecificControlTests.m @@ -0,0 +1,60 @@ +// +// SpecificControlTests.m +// Test Suite +// +// Created by Brian Nickel on 6/28/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import + +@interface SpecificControlTests : KIFTestCase +@end + +@implementation SpecificControlTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"Tapping"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testTogglingASwitch +{ + [tester waitForViewWithAccessibilityLabel:@"Happy" value:@"1" traits:UIAccessibilityTraitNone]; + [tester setOn:NO forSwitchWithAccessibilityLabel:@"Happy"]; + [tester waitForViewWithAccessibilityLabel:@"Happy" value:@"0" traits:UIAccessibilityTraitNone]; + [tester setOn:YES forSwitchWithAccessibilityLabel:@"Happy"]; + [tester waitForViewWithAccessibilityLabel:@"Happy" value:@"1" traits:UIAccessibilityTraitNone]; +} + +- (void)testMovingASlider +{ + [tester waitForTimeInterval:1]; + [tester setValue:3 forSliderWithAccessibilityLabel:@"Slider"]; + [tester waitForViewWithAccessibilityLabel:@"Slider" value:@"3" traits:UIAccessibilityTraitNone]; + [tester setValue:0 forSliderWithAccessibilityLabel:@"Slider"]; + [tester waitForViewWithAccessibilityLabel:@"Slider" value:@"0" traits:UIAccessibilityTraitNone]; + [tester setValue:5 forSliderWithAccessibilityLabel:@"Slider"]; + [tester waitForViewWithAccessibilityLabel:@"Slider" value:@"5" traits:UIAccessibilityTraitNone]; +} + +- (void)testPickingAPhoto { + [tester tapViewWithAccessibilityLabel:@"Photos"]; + [tester acknowledgeSystemAlert]; + [tester waitForTimeInterval:0.5f]; // Wait for view to stabilize + + NSOperatingSystemVersion iOS8 = {8, 0, 0}; + if ([NSProcessInfo instancesRespondToSelector:@selector(isOperatingSystemAtLeastVersion:)] && [[NSProcessInfo new] isOperatingSystemAtLeastVersion:iOS8]) { + [tester choosePhotoInAlbum:@"Camera Roll" atRow:1 column:2]; + } else { + [tester choosePhotoInAlbum:@"Saved Photos" atRow:1 column:2]; + } + [tester waitForViewWithAccessibilityLabel:@"UIImage"]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/SystemAlertTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/SystemAlertTests.m new file mode 100755 index 000000000..74784dc65 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/SystemAlertTests.m @@ -0,0 +1,40 @@ +// +// SystemAlertTests.m +// KIF +// +// Created by Joe Masilotti on 12/1/14. +// +// + +#import + +@interface SystemAlertTests : KIFTestCase + +@end + +@implementation SystemAlertTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"System Alerts"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testAuthorizingLocationServicesAndNotificationsScheduling { + [tester tapViewWithAccessibilityLabel:@"Location Services and Notifications"]; + XCTAssertTrue([tester acknowledgeSystemAlert]); + XCTAssertTrue([tester acknowledgeSystemAlert]); + XCTAssertFalse([tester acknowledgeSystemAlert]); +} + +- (void)testAuthorizingPhotosAccess { + [tester tapViewWithAccessibilityLabel:@"Photos"]; + [tester acknowledgeSystemAlert]; + [tester tapViewWithAccessibilityLabel:@"Cancel"]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/SystemTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/SystemTests.m new file mode 100755 index 000000000..4f2d0d02d --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/SystemTests.m @@ -0,0 +1,106 @@ +// +// SystemTests.m +// Test Suite +// +// Created by Brian Nickel on 6/28/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import + +#define KIFAssertEqual XCTAssertEqual +#define KIFAssertEqualObjects XCTAssertEqualObjects +#define KIFAssertTrue XCTAssertTrue +#define KIFAssertFalse XCTAssertFalse + +@interface SystemTests : XCTestCase + +@end + +@implementation SystemTests + +- (void)testWaitingForTimeInterval +{ + NSTimeInterval startTime = [NSDate timeIntervalSinceReferenceDate]; + [tester waitForTimeInterval:1.2]; + NSTimeInterval elapsed = [NSDate timeIntervalSinceReferenceDate] - startTime; + KIFAssertTrue(elapsed > 1.2, @"Waiting should take the alotted time."); + KIFAssertTrue(elapsed < 1.3, @"Waiting should not take too long."); +} + +- (void)testWaitingForNotification +{ + static NSString *const Name = @"Notification"; + id obj = [[NSObject alloc] init]; + + double delayInSeconds = 1.0; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); + dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ + [[NSNotificationCenter defaultCenter] postNotificationName:Name object:obj userInfo:@{@"A": @"B"}]; + }); + + NSNotification *notification = [system waitForNotificationName:Name object:obj]; + KIFAssertEqualObjects(@"B", [notification.userInfo objectForKey:@"A"], @"Expected notification to match user data."); +} + +- (void)testWaitingForNotificationWhileDoingOtherThings +{ + static NSString *const Name = @"Notification"; + id obj = [[NSObject alloc] init]; + + NSNotification *notification = [system waitForNotificationName:Name object:obj whileExecutingBlock:^{ + [[NSNotificationCenter defaultCenter] postNotificationName:Name object:obj userInfo:@{@"A": @"B"}]; + }]; + + KIFAssertEqualObjects(@"B", [notification.userInfo objectForKey:@"A"], @"Expected notification to match user data."); +} + +- (void)testMemoryWarningSimulator +{ + [system waitForNotificationName:UIApplicationDidReceiveMemoryWarningNotification object:[UIApplication sharedApplication] whileExecutingBlock:^{ + [system simulateMemoryWarning]; + }]; +} + +- (void)testMockingOpenURL +{ + __block BOOL openURLReturnValue; + __block BOOL canOpenURLReturnValue; + [system waitForApplicationToOpenURL:@"test123://" whileExecutingBlock:^{ + NSURL *uninstalledAppURL = [NSURL URLWithString:@"test123://"]; + openURLReturnValue = [[UIApplication sharedApplication] canOpenURL:uninstalledAppURL]; + canOpenURLReturnValue = [[UIApplication sharedApplication] openURL:uninstalledAppURL]; + } returning:NO]; + KIFAssertEqual(NO, openURLReturnValue, @"openURL: should have returned NO"); + KIFAssertEqual(NO, canOpenURLReturnValue, @"openURL: should have returned NO"); + + [system waitForApplicationToOpenURL:@"test123://" whileExecutingBlock:^{ + NSURL *installedAppURL = [NSURL URLWithString:@"test123://"]; + openURLReturnValue = [[UIApplication sharedApplication] canOpenURL:installedAppURL]; + canOpenURLReturnValue = [[UIApplication sharedApplication] openURL:installedAppURL]; + } returning:YES]; + KIFAssertEqual(YES, openURLReturnValue, @"openURL: should have returned YES"); + KIFAssertEqual(YES, canOpenURLReturnValue, @"openURL: should have returned YES"); + + [system waitForApplicationToOpenURLWithScheme:@"test123" whileExecutingBlock:^{ + NSURL *installedAppURL = [NSURL URLWithString:@"test123://some/path?query"]; + openURLReturnValue = [[UIApplication sharedApplication] canOpenURL:installedAppURL]; + canOpenURLReturnValue = [[UIApplication sharedApplication] openURL:installedAppURL]; + } returning:YES]; + KIFAssertEqual(YES, openURLReturnValue, @"openURL: should have returned YES"); + KIFAssertEqual(YES, canOpenURLReturnValue, @"openURL: should have returned YES"); + + [system waitForApplicationToOpenAnyURLWhileExecutingBlock:^{ + NSURL *someURL = [NSURL URLWithString:@"423543523454://"]; + openURLReturnValue = [[UIApplication sharedApplication] canOpenURL:someURL]; + canOpenURLReturnValue = [[UIApplication sharedApplication] openURL:someURL]; + } returning:YES]; + KIFAssertEqual(YES, openURLReturnValue, @"openURL: should have returned YES"); + KIFAssertEqual(YES, canOpenURLReturnValue, @"openURL: should have returned YES"); + + NSURL *fakeURL = [NSURL URLWithString:@"this-is-a-fake-url://"]; + KIFAssertFalse([[UIApplication sharedApplication] canOpenURL:fakeURL], @"Should no longer be mocking, reject bad URL."); + KIFAssertFalse([[UIApplication sharedApplication] openURL:fakeURL], @"Should no longer be mocking, reject bad URL."); +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/TableViewTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/TableViewTests.m new file mode 100755 index 000000000..dbc5413c1 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/TableViewTests.m @@ -0,0 +1,174 @@ +// +// TableViewTests.m +// Test Suite +// +// Created by Brian Nickel on 7/31/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import +#import "KIFTestStepValidation.h" +#import "UIApplication-KIFAdditions.h" + +@interface TableViewTests : KIFTestCase +@end + +@implementation TableViewTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"TableViews"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +//TODO: Fail on iOS 9 (UITableViewCell accessibilityTraits is incorrect when selected) +- (void)testTappingRows +{ + [tester tapRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:2] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"]; + [tester waitForViewWithAccessibilityLabel:@"Last Cell" traits:UIAccessibilityTraitSelected]; + [tester tapRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"]; + [tester waitForViewWithAccessibilityLabel:@"First Cell" traits:UIAccessibilityTraitSelected]; +} + +//TODO: Fail on iOS 9 (UITableViewCell accessibilityTraits is incorrect when selected) +- (void)testTappingLastRowAndSection +{ + [tester tapRowAtIndexPath:[NSIndexPath indexPathForRow:-1 inSection:-1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"]; + [tester waitForViewWithAccessibilityLabel:@"Last Cell" traits:UIAccessibilityTraitSelected]; +} + +- (void)testOutOfBounds +{ + KIFExpectFailure([[tester usingTimeout:1] tapRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:99] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"]); +} + +- (void)testUnknownTable +{ + KIFExpectFailure([[tester usingTimeout:1] tapRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] inTableViewWithAccessibilityIdentifier:@"Unknown Table"]); +} + +- (void)testScrollingToTop +{ + [tester tapRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:2] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"]; + [tester tapStatusBar]; + + UITableView *tableView; + [tester waitForAccessibilityElement:NULL view:&tableView withIdentifier:@"TableView Tests Table" tappable:NO]; + [tester runBlock:^KIFTestStepResult(NSError *__autoreleasing *error) { + KIFTestWaitCondition(tableView.contentOffset.y == - tableView.contentInset.top, error, @"Waited for scroll view to scroll to top, but it ended at %@", NSStringFromCGPoint(tableView.contentOffset)); + return KIFTestStepResultSuccess; + }]; +} + +- (void)testTappingRowsByLabel +{ + // Tap the first row, which is already visible + [tester tapViewWithAccessibilityLabel:@"First Cell"]; + + // Tap the last row, which will need to be scrolled up + [tester tapViewWithAccessibilityLabel:@"Last Cell"]; + + // Tap the first row, which will need to be scrolled down + [tester tapViewWithAccessibilityLabel:@"First Cell"]; +} + +- (void)testMoveRowDown +{ + [tester tapViewWithAccessibilityLabel:@"Edit"]; + + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Cell 0", @""); + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:4 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Cell 4", @""); + + [tester moveRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] toIndexPath:[NSIndexPath indexPathForRow:4 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"]; + + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Cell 1", @""); + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:4 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Cell 0", @""); + + [tester tapViewWithAccessibilityLabel:@"Done"]; +} + +- (void)testMoveRowUp +{ + [tester tapViewWithAccessibilityLabel:@"Edit"]; + + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Cell 0", @""); + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:4 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Cell 4", @""); + + [tester moveRowAtIndexPath:[NSIndexPath indexPathForRow:4 inSection:1] toIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"]; + + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Cell 4", @""); + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:4 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Cell 3", @""); + + [tester tapViewWithAccessibilityLabel:@"Done"]; +} + +- (void)testMoveRowUpUsingNegativeRowIndexes +{ + [tester tapViewWithAccessibilityLabel:@"Edit"]; + + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:-3 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Cell 35", @""); + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:-1 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Cell 37", @""); + + [tester moveRowAtIndexPath:[NSIndexPath indexPathForRow:-1 inSection:1] toIndexPath:[NSIndexPath indexPathForRow:-3 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"]; + + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:-3 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Cell 37", @""); + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:-1 inSection:1] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Cell 36", @""); + + [tester tapViewWithAccessibilityLabel:@"Done"]; +} + +- (void)testTogglingSwitch +{ + [tester setOn:NO forSwitchWithAccessibilityLabel:@"Table View Switch"]; + [tester setOn:YES forSwitchWithAccessibilityLabel:@"Table View Switch"]; +} + +- (void)testButtonAbsentAfterRemoveFromSuperview +{ + UIView *view = [tester waitForViewWithAccessibilityLabel:@"Button"]; + + [view removeFromSuperview]; + [tester waitForAbsenceOfViewWithAccessibilityLabel:@"Button"]; +} + +- (void)testButtonAbsentAfterSetHidden +{ + UIView *view = [tester waitForViewWithAccessibilityLabel:@"Button"]; + + [view setHidden:YES]; + [tester waitForAbsenceOfViewWithAccessibilityLabel:@"Button"]; + + [view setHidden:NO]; + [tester waitForViewWithAccessibilityLabel:@"Button"]; +} + +- (void)testEnteringTextIntoATextFieldInATableCell +{ + [tester enterText:@"Test-Driven Development" intoViewWithAccessibilityLabel:@"TextField"]; +} + +// Delete first and last rows in table view +- (void)testSwipingRows { + + UITableView *tableView; + [tester waitForAccessibilityElement:NULL view:&tableView withIdentifier:@"TableView Tests Table" tappable:NO]; + + // First row + [tester swipeRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] inTableView:tableView inDirection:KIFSwipeDirectionLeft]; + [tester tapViewWithAccessibilityLabel:@"Delete"]; + + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Deleted", @""); + + // Last row + [tester swipeRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:2] inTableView:tableView inDirection:KIFSwipeDirectionLeft]; + [tester tapViewWithAccessibilityLabel:@"Delete"]; + + __KIFAssertEqualObjects([tester waitForCellAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:2] inTableViewWithAccessibilityIdentifier:@"TableView Tests Table"].textLabel.text, @"Deleted", @""); + +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/TappingTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/TappingTests.m new file mode 100755 index 000000000..64e3912f6 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/TappingTests.m @@ -0,0 +1,103 @@ +// +// TappingTests.m +// Test Suite +// +// Created by Brian Nickel on 6/28/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import + +@interface TappingTests : KIFTestCase +@end + +@implementation TappingTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"Tapping"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testTappingViewWithAccessibilityLabel +{ + // Since the tap has occurred in setup, we just need to wait for the result. + [tester waitForViewWithAccessibilityLabel:@"TapView"]; +} + +- (void)testTappingViewWithTraits +{ + [tester tapViewWithAccessibilityLabel:@"X" traits:UIAccessibilityTraitButton]; + [tester waitForViewWithAccessibilityLabel:@"X" traits:UIAccessibilityTraitButton | UIAccessibilityTraitSelected]; +} + +- (void)testTappingViewWithValue +{ + [tester tapViewWithAccessibilityLabel:@"Greeting" value:@"Hello" traits:UIAccessibilityTraitNone]; + [tester waitForFirstResponderWithAccessibilityLabel:@"Greeting"]; +} + +- (void)testTappingViewWithScreenAtPoint +{ + [tester waitForTimeInterval:0.75]; + [tester tapScreenAtPoint:CGPointMake(15, 200)]; + [tester waitForViewWithAccessibilityLabel:@"X" traits:UIAccessibilityTraitSelected]; +} + +- (void)testTappingViewPartiallyOffscreenAndWithinScrollView +{ + [tester tapViewWithAccessibilityLabel:@"Slightly Offscreen Button"]; +} + +- (void)testTappingViewWithTapGestureRecognizer +{ + [tester tapViewWithAccessibilityLabel:@"Label with Tap Gesture Recognizer"]; +} + +- (void)testTappingLabelWithLineBreaks +{ + [tester tapViewWithAccessibilityLabel:@"Label with\nLine Break\n\n"]; + [tester tapViewWithAccessibilityLabel:@"A\nB\nC\n\n"]; +} + +- (void) testTappingStepperIncrement +{ + UILabel *uiLabel = (UILabel *)[tester waitForViewWithAccessibilityLabel: @"stepperValue"]; + NSInteger originalValue = [[uiLabel text] integerValue]; + + [tester tapStepperWithAccessibilityLabel:@"theStepper" increment:(KIFStepperDirectionIncrement)]; + + [tester waitForTimeInterval:0.5f]; + uiLabel = (UILabel *)[tester waitForViewWithAccessibilityLabel: @"stepperValue"]; + NSInteger newValue = [[uiLabel text] integerValue]; + if (! newValue == (originalValue + 1)) + { + NSException *exception = [NSException exceptionWithName:@"Unexpected test failure" + reason:[NSString stringWithFormat: @"newValue was expected to be +1 of originalValue. Original Value was %ld while newValue is %ld", (long)originalValue, (long)newValue] userInfo:nil]; + [tester failWithException: exception stopTest: NO]; + } +} + +- (void) testTappingStepperDecrement +{ + UILabel *uiLabel = (UILabel *)[tester waitForViewWithAccessibilityLabel: @"stepperValue"]; + NSInteger originalValue = [[uiLabel text] integerValue]; + + [tester tapStepperWithAccessibilityLabel:@"theStepper" increment:(KIFStepperDirectionDecrement)]; + + [tester waitForTimeInterval:0.5f]; + uiLabel = (UILabel *)[tester waitForViewWithAccessibilityLabel: @"stepperValue"]; + NSInteger newValue = [[uiLabel text] integerValue]; + if (! newValue == (originalValue -1)) + { + NSException *exception = [NSException exceptionWithName:@"Unexpected test failure" + reason:[NSString stringWithFormat: @"newValue was expected to be -1 of originalValue. Original Value was %ld while newValue is %ld", (long)originalValue, (long)newValue] userInfo:nil]; + [tester failWithException: exception stopTest: NO]; + } +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/TypingTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/TypingTests.m new file mode 100755 index 000000000..85c2ed5e5 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/TypingTests.m @@ -0,0 +1,105 @@ +// +// TypingTests.m +// Test Suite +// +// Created by Brian Nickel on 6/28/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import +#import "KIFTestStepValidation.h" + +@interface TypingTests : KIFTestCase +@end + +@implementation TypingTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"Tapping"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testWaitingForFirstResponder +{ + [tester tapViewWithAccessibilityLabel:@"Greeting" value:@"Hello" traits:UIAccessibilityTraitNone]; + [tester waitForFirstResponderWithAccessibilityLabel:@"Greeting"]; +} + +- (void)testMissingFirstResponder +{ + KIFExpectFailure([[tester usingTimeout:1] waitForFirstResponderWithAccessibilityLabel:@"Greeting"]); +} + +- (void)testEnteringTextIntoFirstResponder +{ + [tester longPressViewWithAccessibilityLabel:@"Greeting" value:@"Hello" duration:2]; + [tester tapViewWithAccessibilityLabel:@"Select All"]; + [tester enterTextIntoCurrentFirstResponder:@"Yo"]; + [tester waitForViewWithAccessibilityLabel:@"Greeting" value:@"Yo" traits:UIAccessibilityTraitNone]; +} + +- (void)testFailingToEnterTextIntoFirstResponder +{ + KIFExpectFailure([[tester usingTimeout:1] enterTextIntoCurrentFirstResponder:@"Yo"]); +} + +- (void)testEnteringTextIntoViewWithAccessibilityLabel +{ + [tester longPressViewWithAccessibilityLabel:@"Greeting" value:@"Hello" duration:2]; + [tester tapViewWithAccessibilityLabel:@"Select All"]; + [tester tapViewWithAccessibilityLabel:@"Cut"]; + [tester enterText:@"Yo" intoViewWithAccessibilityLabel:@"Greeting"]; + [tester waitForViewWithAccessibilityLabel:@"Greeting" value:@"Yo" traits:UIAccessibilityTraitNone]; +} + +- (void)testEnteringTextIntoViewWithAccessibilityLabelExpectingResults +{ + [tester enterText:@", world" intoViewWithAccessibilityLabel:@"Greeting" traits:UIAccessibilityTraitNone expectedResult:@"Hello, world"]; + [tester waitForViewWithAccessibilityLabel:@"Greeting" value:@"Hello, world" traits:UIAccessibilityTraitNone]; +} + +- (void)testClearingAndEnteringTextIntoViewWithAccessibilityLabel +{ + [tester clearTextFromAndThenEnterText:@"Yo" intoViewWithAccessibilityLabel:@"Greeting"]; +} + +- (void)testEnteringReturnCharacterIntoViewWithAccessibilityLabel +{ + [tester enterText:@"Hello\n" intoViewWithAccessibilityLabel:@"Other Text"]; + [tester waitForFirstResponderWithAccessibilityLabel:@"Greeting"]; + [tester enterText:@", world\n" intoViewWithAccessibilityLabel:@"Greeting" traits:UIAccessibilityTraitNone expectedResult:@"Hello, world"]; +} + +- (void)testEnteringEmojiCharactersIntoViewWithAccessibilityLabel +{ + NSString *text = @" 😓He😤ll👿o"; + [tester clearTextFromAndThenEnterText:text intoViewWithAccessibilityLabel:@"Greeting"]; + UITextField * tf = (UITextField*)[tester waitForViewWithAccessibilityLabel:@"Greeting"]; + XCTAssertTrue([tf.text isEqualToString:text]); +} + +- (void)testClearingALongTextField +{ + [tester clearTextFromAndThenEnterText:@"A man, a plan, a canal, Panama. Able was I, ere I saw Elba." intoViewWithAccessibilityLabel:@"Greeting"]; + [tester clearTextFromViewWithAccessibilityLabel:@"Greeting"]; +} + +- (void)testThatClearingTextHitsTheDelegate +{ + [tester enterText:@"hello" intoViewWithAccessibilityLabel:@"Other Text"]; + [tester clearTextFromViewWithAccessibilityLabel:@"Other Text"]; + [tester waitForViewWithAccessibilityLabel:@"Greeting" value:@"Deleted something." traits:UIAccessibilityTraitNone]; +} + +- (void)testThatBackspaceDeletesOneCharacter +{ + [tester enterText:@"hi\bello" intoViewWithAccessibilityLabel:@"Other Text" traits:UIAccessibilityTraitNone expectedResult:@"hello"]; + [tester waitForViewWithAccessibilityLabel:@"Greeting" value:@"Deleted something." traits:UIAccessibilityTraitNone]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WaitForAbscenceTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WaitForAbscenceTests.m new file mode 100755 index 000000000..d1489df18 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WaitForAbscenceTests.m @@ -0,0 +1,41 @@ +// +// WaitForAbscenceTests.m +// Test Suite +// +// Created by Brian Nickel on 6/28/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import + +@interface WaitForAbscenceTests : KIFTestCase +@end + +@implementation WaitForAbscenceTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"Tapping"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testWaitingForAbsenceOfViewWithAccessibilityLabel +{ + [tester waitForAbsenceOfViewWithAccessibilityLabel:@"Tapping"]; +} + +- (void)testWaitingForAbsenceOfViewWithTraits +{ + [tester waitForAbsenceOfViewWithAccessibilityLabel:@"Tapping" traits:UIAccessibilityTraitStaticText]; +} + +- (void)testWaitingForAbsenceOfViewWithValue +{ + [tester waitForAbsenceOfViewWithAccessibilityLabel:@"Switch 1" value:@"1" traits:UIAccessibilityTraitNone]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WaitForAnimationTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WaitForAnimationTests.m new file mode 100755 index 000000000..df9192154 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WaitForAnimationTests.m @@ -0,0 +1,31 @@ +// +// WaitForAnimationTests.m +// KIF +// +// Created by Hendrik von Prince on 11.11.14. +// +// + +#import + +@interface WaitForAnimationTests : KIFTestCase + +@end + +@implementation WaitForAnimationTests + +- (void)beforeEach { + [tester tapViewWithAccessibilityLabel:@"Tapping"]; + [tester tapViewWithAccessibilityLabel:@"Animations"]; +} + +- (void)afterEach { + [tester tapViewWithAccessibilityLabel:@"Back"]; + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testWaitForFinishingAnimation { + [tester waitForViewWithAccessibilityLabel:@"Label"]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WaitForTappableViewTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WaitForTappableViewTests.m new file mode 100755 index 000000000..86a260db3 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WaitForTappableViewTests.m @@ -0,0 +1,43 @@ +// +// WaitForTappableViewTests.m +// Test Suite +// +// Created by Brian Nickel on 6/28/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import + +@interface WaitForTappableViewTests : KIFTestCase +@end + +@implementation WaitForTappableViewTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"Show/Hide"]; + [tester tapViewWithAccessibilityLabel:@"Cover/Uncover"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + + +- (void)testWaitingForTappableViewWithAccessibilityLabel +{ + [tester waitForTappableViewWithAccessibilityLabel:@"B"]; +} + +- (void)testWaitingForViewWithTraits +{ + [tester waitForTappableViewWithAccessibilityLabel:@"B" traits:UIAccessibilityTraitButton]; +} + +- (void)testWaitingForViewWithValue +{ + [tester waitForTappableViewWithAccessibilityLabel:@"B" value:@"BB" traits:UIAccessibilityTraitButton]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WaitForViewTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WaitForViewTests.m new file mode 100755 index 000000000..ea7120001 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WaitForViewTests.m @@ -0,0 +1,31 @@ +// +// WaitForViewTests.m +// Test Suite +// +// Created by Brian Nickel on 6/28/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import + +@interface WaitForViewTests : KIFTestCase +@end + +@implementation WaitForViewTests + +- (void)testWaitingForViewWithAccessibilityLabel +{ + [tester waitForViewWithAccessibilityLabel:@"Test Suite"]; +} + +- (void)testWaitingForViewWithTraits +{ + [tester waitForViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitStaticText]; +} + +- (void)testWaitingForViewWithValue +{ + [tester waitForViewWithAccessibilityLabel:@"Switch 1" value:@"1" traits:UIAccessibilityTraitNone]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WebViewTests.m b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WebViewTests.m new file mode 100755 index 000000000..e2b4a7598 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/WebViewTests.m @@ -0,0 +1,43 @@ +// +// WebViewTests.m +// KIF +// +// Created by Joe Masilotti on 11/19/14. +// +// + +#import +#import +#import + +@interface WebViewTests : KIFTestCase +@end + +@implementation WebViewTests + +- (void)beforeEach +{ + [tester tapViewWithAccessibilityLabel:@"WebViews"]; +} + +- (void)afterEach +{ + [tester tapViewWithAccessibilityLabel:@"Test Suite" traits:UIAccessibilityTraitButton]; +} + +- (void)testTappingLinks { + [tester tapViewWithAccessibilityLabel:@"A link"]; + [tester waitForViewWithAccessibilityLabel:@"Page 2"]; +} + +- (void)testScrolling { + // Off screen, the web view will need to be scrolled down + [tester waitForViewWithAccessibilityLabel:@"Footer"]; +} + +- (void)testEnteringText { + [tester tapViewWithAccessibilityLabel:@"Input Label"]; + [tester enterTextIntoCurrentFirstResponder:@"Keyboard text"]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/en.lproj/InfoPlist.strings b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/en.lproj/InfoPlist.strings new file mode 100755 index 000000000..477b28ff8 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF Tests/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF XCTests-Prefix.gcda b/examples/InterstitialUnifiedDemand/KIF-master/KIF XCTests-Prefix.gcda new file mode 100755 index 000000000..02c8fab5b Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/KIF XCTests-Prefix.gcda differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF.podspec b/examples/InterstitialUnifiedDemand/KIF-master/KIF.podspec new file mode 100755 index 000000000..2da42f7ce --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF.podspec @@ -0,0 +1,28 @@ +Pod::Spec.new do |s| + s.name = "KIF" + s.version = "3.3.0" + s.summary = "Keep It Functional - iOS UI acceptance testing in an XCUnit harness." + s.homepage = "https://github.com/kif-framework/KIF/" + s.license = 'Apache 2.0' + s.authors = 'Eric Firestone', 'Jim Puls', 'Brian Nickel' + s.source = { :git => "https://github.com/kif-framework/KIF.git", :tag => "v3.3.0" } + s.platform = :ios, '5.1' + s.frameworks = 'CoreGraphics', 'IOKit', 'XCTest' + s.default_subspec = 'Core' + s.requires_arc = true + s.prefix_header_contents = '#import ' + + s.subspec 'Core' do |core| + core.source_files = 'Classes', 'Additions' + core.public_header_files = 'Classes/**/*.h', 'Additions/**/*-KIFAdditions.h', 'Additions/UIView-Debugging.h' + core.xcconfig = { 'FRAMEWORK_SEARCH_PATHS' => '$(PLATFORM_DIR)/Developer/Library/Frameworks' } + core.requires_arc = true + end + + s.subspec 'IdentifierTests' do |kiaf| + kiaf.dependency 'KIF/Core' + kiaf.source_files = 'IdentifierTests' + kiaf.public_header_files = 'IdentifierTests/**/*.h' + kiaf.requires_arc = true + end +end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF.xcodeproj/project.pbxproj b/examples/InterstitialUnifiedDemand/KIF-master/KIF.xcodeproj/project.pbxproj new file mode 100755 index 000000000..df430d46a --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF.xcodeproj/project.pbxproj @@ -0,0 +1,1627 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0E27A9EE1B45B53D00A6DE6E /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9AD81F91AA180B900B369FD /* IOKit.framework */; }; + 0EAA1C131B4B371700FFB2FB /* IOHIDEvent+KIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EAA1C111B4B371700FFB2FB /* IOHIDEvent+KIF.h */; }; + 0EAA1C141B4B371700FFB2FB /* IOHIDEvent+KIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EAA1C121B4B371700FFB2FB /* IOHIDEvent+KIF.m */; }; + 0EAA1C171B4B372700FFB2FB /* IOHIDEvent+KIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EAA1C111B4B371700FFB2FB /* IOHIDEvent+KIF.h */; }; + 0EAA1C181B4B372700FFB2FB /* IOHIDEvent+KIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EAA1C121B4B371700FFB2FB /* IOHIDEvent+KIF.m */; }; + 2CDEE1CB181DBED200DF6E63 /* PickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CDEE1CA181DBED200DF6E63 /* PickerController.m */; }; + 2EE12710198991920031D347 /* MultiFingerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EE1270F198991920031D347 /* MultiFingerTests.m */; }; + 3812FB611A1212A700335733 /* AnimationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3812FB601A1212A700335733 /* AnimationViewController.m */; }; + 3812FB631A12188700335733 /* WaitForAnimationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3812FB621A12188700335733 /* WaitForAnimationTests.m */; }; + 3ADD25CC71BF27D675768787 /* UIView-Debugging.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ADD26484C6C438B71DC15C5 /* UIView-Debugging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4A48107B19708CAB0003A32E /* ExistTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A48107A19708CAB0003A32E /* ExistTests.m */; }; + 4D2FD4EE1AF5936700E61192 /* UIView-Debugging.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ADD2160096BE41C780FBD95 /* UIView-Debugging.m */; }; + 5C877DD01B057E13006A3AC6 /* KIFUITestActor-IdentifierTests.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1A44D31A0C3268004A3F61 /* KIFUITestActor-IdentifierTests.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5C877DD11B0A8B8F006A3AC6 /* UIView-Debugging.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ADD26484C6C438B71DC15C5 /* UIView-Debugging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5C877DD21B0A8B93006A3AC6 /* UIView-Debugging.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ADD2160096BE41C780FBD95 /* UIView-Debugging.m */; }; + 84D293AD1A2C84F700C10944 /* SystemAlertViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 84D293AC1A2C84F700C10944 /* SystemAlertViewController.m */; }; + 84D293AF1A2C867300C10944 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D293AE1A2C867300C10944 /* CoreLocation.framework */; }; + 84D293B11A2C891700C10944 /* SystemAlertTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 84D293B01A2C891700C10944 /* SystemAlertTests.m */; }; + 84D293B81A2C8DF700C10944 /* AddressBookUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D293B71A2C8DF700C10944 /* AddressBookUI.framework */; }; + 84D293BB1A2CC30B00C10944 /* UIAutomationHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D293B91A2CC30B00C10944 /* UIAutomationHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 84D293BD1A2CC30B00C10944 /* UIAutomationHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 84D293BA1A2CC30B00C10944 /* UIAutomationHelper.m */; }; + 97E8A5CF1B0A62F700124E3B /* BackgroundViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 97E8A5CE1B0A62F700124E3B /* BackgroundViewController.m */; }; + 97E8A5D11B0A63D100124E3B /* BackgroundTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 97E8A5D01B0A63D100124E3B /* BackgroundTests.m */; }; + 9CC881A91AD4CE39002CD34C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB072B413971AEA008AF393 /* UIKit.framework */; }; + 9CC881AA1AD4CE45002CD34C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9AD81F91AA180B900B369FD /* IOKit.framework */; }; + 9CC881AB1AD4CE47002CD34C /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EABD46AB1857A0EB00A5F081 /* XCTest.framework */; }; + 9CC881AC1AD4CE4B002CD34C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB0726B139719AC008AF393 /* Foundation.framework */; }; + 9CC881AD1AD4CE50002CD34C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CC881A21AD4CAAC002CD34C /* CoreFoundation.framework */; }; + 9CC967401AD4B1B600576D13 /* KIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CC9673F1AD4B1B600576D13 /* KIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC967561AD4B1F100576D13 /* LoadableCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 39160B1013D1E6BB00311E38 /* LoadableCategory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC967571AD4B1F100576D13 /* CGGeometry-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729413971AB2008AF393 /* CGGeometry-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC967591AD4B1F100576D13 /* NSFileManager-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CDFD8E84139728B4008D299F /* NSFileManager-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC9675B1AD4B1F100576D13 /* UIAccessibilityElement-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729613971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC9675D1AD4B1F100576D13 /* UIApplication-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729813971AB2008AF393 /* UIApplication-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC9675F1AD4B1F100576D13 /* UIScrollView-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729A13971AB2008AF393 /* UIScrollView-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC967611AD4B1F100576D13 /* UITouch-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729C13971AB2008AF393 /* UITouch-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC967631AD4B1F100576D13 /* UIView-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB072A013971AB2008AF393 /* UIView-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC967651AD4B1F100576D13 /* UIWindow-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB072A213971AB2008AF393 /* UIWindow-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC967671AD4B1F100576D13 /* UITableView-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D927B9DD18F9E46400DAD036 /* UITableView-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC967691AD4B1F100576D13 /* NSBundle-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EBAE487A17A45A8E0005EE19 /* NSBundle-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC9676B1AD4B1F100576D13 /* NSError-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EBAE487F17A460E50005EE19 /* NSError-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC9676D1AD4B1F100576D13 /* XCTestCase-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EABD46751857A07600A5F081 /* XCTestCase-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC9676F1AD4B1F100576D13 /* NSException-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EAC809681864F19C000E819F /* NSException-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC967711AD4B1F100576D13 /* UIEvent+KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E977D1051AA4062B005645BF /* UIEvent+KIFAdditions.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 9CC967731AD4B1FF00576D13 /* KIFSystemTestActor.h in Headers */ = {isa = PBXBuildFile; fileRef = EB4C3130167BA3AC00E31109 /* KIFSystemTestActor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC967751AD4B1FF00576D13 /* KIFUITestActor.h in Headers */ = {isa = PBXBuildFile; fileRef = EB4C3132167BA3AC00E31109 /* KIFUITestActor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC967771AD4B1FF00576D13 /* KIFUITestActor-ConditionalTests.h in Headers */ = {isa = PBXBuildFile; fileRef = EB2526461981BF7A00DBC747 /* KIFUITestActor-ConditionalTests.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC9677A1AD4B20700576D13 /* KIFTestCase.h in Headers */ = {isa = PBXBuildFile; fileRef = EB4C3127167BA37B00E31109 /* KIFTestCase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC9677C1AD4B20700576D13 /* KIFTestActor.h in Headers */ = {isa = PBXBuildFile; fileRef = EB4C3123167BA37B00E31109 /* KIFTestActor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC9677F1AD4B20700576D13 /* KIFTypist.h in Headers */ = {isa = PBXBuildFile; fileRef = C194255615D83DE9004FC314 /* KIFTypist.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC967811AD4B20700576D13 /* KIFTestStepValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = EBAE488517A4E5C30005EE19 /* KIFTestStepValidation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9CC967841AD4B20700576D13 /* UIAutomationHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D293B91A2CC30B00C10944 /* UIAutomationHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 9CC967BE1AD4B55E00576D13 /* KIF-XCTestPrefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = EABD46D31857BE8600A5F081 /* KIF-XCTestPrefix.pch */; }; + 9CC967BF1AD4B58C00576D13 /* CGGeometry-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729513971AB2008AF393 /* CGGeometry-KIFAdditions.m */; }; + 9CC967C01AD4B58C00576D13 /* NSFileManager-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFD8E85139728B4008D299F /* NSFileManager-KIFAdditions.m */; }; + 9CC967C11AD4B58C00576D13 /* UIAccessibilityElement-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729713971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.m */; }; + 9CC967C21AD4B58C00576D13 /* UIApplication-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729913971AB2008AF393 /* UIApplication-KIFAdditions.m */; }; + 9CC967C31AD4B58C00576D13 /* UIScrollView-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729B13971AB2008AF393 /* UIScrollView-KIFAdditions.m */; }; + 9CC967C41AD4B58C00576D13 /* UITouch-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729D13971AB2008AF393 /* UITouch-KIFAdditions.m */; }; + 9CC967C51AD4B58C00576D13 /* UIView-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB072A113971AB2008AF393 /* UIView-KIFAdditions.m */; }; + 9CC967C61AD4B58C00576D13 /* UIWindow-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB072A313971AB2008AF393 /* UIWindow-KIFAdditions.m */; }; + 9CC967C71AD4B58C00576D13 /* UITableView-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D927B9DE18F9E46400DAD036 /* UITableView-KIFAdditions.m */; }; + 9CC967C81AD4B58C00576D13 /* NSBundle-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = EBAE487B17A45A8E0005EE19 /* NSBundle-KIFAdditions.m */; }; + 9CC967C91AD4B58C00576D13 /* NSError-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = EBAE488017A460E50005EE19 /* NSError-KIFAdditions.m */; }; + 9CC967CA1AD4B58C00576D13 /* XCTestCase-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = EABD46761857A07600A5F081 /* XCTestCase-KIFAdditions.m */; }; + 9CC967CB1AD4B58C00576D13 /* NSException-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = EAC809691864F19C000E819F /* NSException-KIFAdditions.m */; }; + 9CC967CC1AD4B58C00576D13 /* UIEvent+KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E977D1061AA4062B005645BF /* UIEvent+KIFAdditions.m */; }; + 9CC967CD1AD4B59A00576D13 /* KIFSystemTestActor.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C3131167BA3AC00E31109 /* KIFSystemTestActor.m */; }; + 9CC967CE1AD4B59A00576D13 /* KIFUITestActor.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C3133167BA3AC00E31109 /* KIFUITestActor.m */; }; + 9CC967CF1AD4B59A00576D13 /* KIFUITestActor-ConditionalTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB2526471981BF7A00DBC747 /* KIFUITestActor-ConditionalTests.m */; }; + 9CC967D01AD4B5B900576D13 /* KIFTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C3128167BA37B00E31109 /* KIFTestCase.m */; }; + 9CC967D11AD4B5B900576D13 /* KIFTestActor.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C3124167BA37B00E31109 /* KIFTestActor.m */; }; + 9CC967D21AD4B5B900576D13 /* KIFTypist.m in Sources */ = {isa = PBXBuildFile; fileRef = C194255715D83DE9004FC314 /* KIFTypist.m */; }; + 9CC967D31AD4B5B900576D13 /* KIFTestStepValidation.m in Sources */ = {isa = PBXBuildFile; fileRef = EBAE488617A4E5C30005EE19 /* KIFTestStepValidation.m */; }; + 9CC967D41AD4B5B900576D13 /* UIAutomationHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 84D293BA1A2CC30B00C10944 /* UIAutomationHelper.m */; }; + 9CC967D51AD4B5B900576D13 /* KIFUITestActor-IdentifierTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB1A44D41A0C3268004A3F61 /* KIFUITestActor-IdentifierTests.m */; }; + AE62FCD01A1D20E5002B10DA /* WebViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = AE62FCCF1A1D20E5002B10DA /* WebViewTests.m */; }; + AE62FCD61A1D2447002B10DA /* WebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AE62FCD51A1D2447002B10DA /* WebViewController.m */; }; + AE62FCD81A1D2667002B10DA /* index.html in Resources */ = {isa = PBXBuildFile; fileRef = AE62FCD71A1D2667002B10DA /* index.html */; }; + AE62FCDA1A1D26BB002B10DA /* page2.html in Resources */ = {isa = PBXBuildFile; fileRef = AE62FCD91A1D26BB002B10DA /* page2.html */; }; + BD6A1CA11BCE8DD000EF07D2 /* KIFAccessibilityEnabler.h in Headers */ = {isa = PBXBuildFile; fileRef = BD6A1C9F1BCE8DD000EF07D2 /* KIFAccessibilityEnabler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD6A1CA21BCE8DD000EF07D2 /* KIFAccessibilityEnabler.h in Headers */ = {isa = PBXBuildFile; fileRef = BD6A1C9F1BCE8DD000EF07D2 /* KIFAccessibilityEnabler.h */; settings = {ATTRIBUTES = (Private, ); }; }; + BD6A1CA31BCE8DD000EF07D2 /* KIFAccessibilityEnabler.m in Sources */ = {isa = PBXBuildFile; fileRef = BD6A1CA01BCE8DD000EF07D2 /* KIFAccessibilityEnabler.m */; settings = {ASSET_TAGS = (); }; }; + BD6A1CA41BCE8DD000EF07D2 /* KIFAccessibilityEnabler.m in Sources */ = {isa = PBXBuildFile; fileRef = BD6A1CA01BCE8DD000EF07D2 /* KIFAccessibilityEnabler.m */; settings = {ASSET_TAGS = (); }; }; + D927B9DC18F9DF2D00DAD036 /* TableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D927B9DB18F9DF2D00DAD036 /* TableViewController.m */; }; + D927B9DF18F9E46400DAD036 /* UITableView-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D927B9DD18F9E46400DAD036 /* UITableView-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D927B9E018F9E46400DAD036 /* UITableView-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D927B9DE18F9E46400DAD036 /* UITableView-KIFAdditions.m */; }; + D9EA274118F05A6000D87E57 /* ScrollViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EA274018F05A6000D87E57 /* ScrollViewTests.m */; }; + D9EA274318F05A6700D87E57 /* ScrollViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EA274218F05A6700D87E57 /* ScrollViewController.m */; }; + E977D1071AA4062B005645BF /* UIEvent+KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E977D1051AA4062B005645BF /* UIEvent+KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E977D1081AA4062B005645BF /* UIEvent+KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E977D1061AA4062B005645BF /* UIEvent+KIFAdditions.m */; }; + E9F646F81AA3BABA00C37EA3 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9AD81F91AA180B900B369FD /* IOKit.framework */; }; + EA0F254A1829839E006FF825 /* CollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EA0F25491829839E006FF825 /* CollectionViewController.m */; }; + EA4655881905B92500B2C60E /* PickerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CED883D181F5EE1005ABD20 /* PickerTests.m */; }; + EA47DA2818EDFD6F0034D2F5 /* CollectionViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EA0F2546182979BE006FF825 /* CollectionViewTests.m */; }; + EABD467B1857A0C700A5F081 /* CGGeometry-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729513971AB2008AF393 /* CGGeometry-KIFAdditions.m */; }; + EABD467C1857A0C700A5F081 /* UIAccessibilityElement-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729713971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.m */; }; + EABD467D1857A0C700A5F081 /* UIApplication-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729913971AB2008AF393 /* UIApplication-KIFAdditions.m */; }; + EABD467E1857A0C700A5F081 /* UIScrollView-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729B13971AB2008AF393 /* UIScrollView-KIFAdditions.m */; }; + EABD467F1857A0C700A5F081 /* UITouch-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB0729D13971AB2008AF393 /* UITouch-KIFAdditions.m */; }; + EABD46801857A0C700A5F081 /* UIView-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB072A113971AB2008AF393 /* UIView-KIFAdditions.m */; }; + EABD46811857A0C700A5F081 /* UIWindow-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB072A313971AB2008AF393 /* UIWindow-KIFAdditions.m */; }; + EABD46821857A0C700A5F081 /* NSFileManager-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFD8E85139728B4008D299F /* NSFileManager-KIFAdditions.m */; }; + EABD46831857A0C700A5F081 /* KIFTypist.m in Sources */ = {isa = PBXBuildFile; fileRef = C194255715D83DE9004FC314 /* KIFTypist.m */; }; + EABD46841857A0C700A5F081 /* KIFTestActor.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C3124167BA37B00E31109 /* KIFTestActor.m */; }; + EABD46851857A0C700A5F081 /* KIFTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C3128167BA37B00E31109 /* KIFTestCase.m */; }; + EABD46861857A0C700A5F081 /* XCTestCase-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = EABD46761857A07600A5F081 /* XCTestCase-KIFAdditions.m */; }; + EABD46871857A0C700A5F081 /* KIFSystemTestActor.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C3131167BA3AC00E31109 /* KIFSystemTestActor.m */; }; + EABD46881857A0C700A5F081 /* KIFUITestActor.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4C3133167BA3AC00E31109 /* KIFUITestActor.m */; }; + EABD46891857A0C700A5F081 /* NSBundle-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = EBAE487B17A45A8E0005EE19 /* NSBundle-KIFAdditions.m */; }; + EABD468A1857A0C700A5F081 /* NSError-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = EBAE488017A460E50005EE19 /* NSError-KIFAdditions.m */; }; + EABD468B1857A0C700A5F081 /* KIFTestStepValidation.m in Sources */ = {isa = PBXBuildFile; fileRef = EBAE488617A4E5C30005EE19 /* KIFTestStepValidation.m */; }; + EABD468E1857A0C700A5F081 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB0726B139719AC008AF393 /* Foundation.framework */; }; + EABD468F1857A0C700A5F081 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB072B413971AEA008AF393 /* UIKit.framework */; }; + EABD46911857A0C700A5F081 /* KIF.h in Headers */ = {isa = PBXBuildFile; fileRef = A88930111685098E00FC7C63 /* KIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD46921857A0C700A5F081 /* CGGeometry-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729413971AB2008AF393 /* CGGeometry-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD46931857A0C700A5F081 /* UIAccessibilityElement-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729613971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD46941857A0C700A5F081 /* UIApplication-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729813971AB2008AF393 /* UIApplication-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD46951857A0C700A5F081 /* UIScrollView-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729A13971AB2008AF393 /* UIScrollView-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD46961857A0C700A5F081 /* XCTestCase-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EABD46751857A07600A5F081 /* XCTestCase-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD46971857A0C700A5F081 /* UITouch-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB0729C13971AB2008AF393 /* UITouch-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD46981857A0C700A5F081 /* UIView-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB072A013971AB2008AF393 /* UIView-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD46991857A0C700A5F081 /* UIWindow-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB072A213971AB2008AF393 /* UIWindow-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD469A1857A0C700A5F081 /* NSFileManager-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CDFD8E84139728B4008D299F /* NSFileManager-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD469B1857A0C700A5F081 /* LoadableCategory.h in Headers */ = {isa = PBXBuildFile; fileRef = 39160B1013D1E6BB00311E38 /* LoadableCategory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD469C1857A0C700A5F081 /* KIFTypist.h in Headers */ = {isa = PBXBuildFile; fileRef = C194255615D83DE9004FC314 /* KIFTypist.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD469D1857A0C700A5F081 /* KIFTestActor.h in Headers */ = {isa = PBXBuildFile; fileRef = EB4C3123167BA37B00E31109 /* KIFTestActor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD469E1857A0C700A5F081 /* KIFTestCase.h in Headers */ = {isa = PBXBuildFile; fileRef = EB4C3127167BA37B00E31109 /* KIFTestCase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD469F1857A0C700A5F081 /* KIFSystemTestActor.h in Headers */ = {isa = PBXBuildFile; fileRef = EB4C3130167BA3AC00E31109 /* KIFSystemTestActor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD46A01857A0C700A5F081 /* KIFUITestActor.h in Headers */ = {isa = PBXBuildFile; fileRef = EB4C3132167BA3AC00E31109 /* KIFUITestActor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD46A11857A0C700A5F081 /* NSBundle-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EBAE487A17A45A8E0005EE19 /* NSBundle-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD46A21857A0C700A5F081 /* NSError-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EBAE487F17A460E50005EE19 /* NSError-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD46A31857A0C700A5F081 /* KIFTestStepValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = EBAE488517A4E5C30005EE19 /* KIFTestStepValidation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EABD46B11857A0F300A5F081 /* SearchFieldTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB09000F17E3696A00AA15B1 /* SearchFieldTests.m */; }; + EABD46B21857A0F300A5F081 /* CascadingFailureTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB22B5AF17AF52640090B848 /* CascadingFailureTests.m */; }; + EABD46B31857A0F300A5F081 /* CompositionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB02523D17AA109400A7D13A /* CompositionTests.m */; }; + EABD46B41857A0F300A5F081 /* LongPressTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ED07177F90BA005A041A /* LongPressTests.m */; }; + EABD46B51857A0F300A5F081 /* ModalViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ED08177F90BA005A041A /* ModalViewTests.m */; }; + EABD46B61857A0F300A5F081 /* SpecificControlTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ED09177F90BA005A041A /* SpecificControlTests.m */; }; + EABD46B71857A0F300A5F081 /* SystemTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ED0A177F90BA005A041A /* SystemTests.m */; }; + EABD46B81857A0F300A5F081 /* TappingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ED0B177F90BA005A041A /* TappingTests.m */; }; + EABD46B91857A0F300A5F081 /* TypingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ED0C177F90BA005A041A /* TypingTests.m */; }; + EABD46BA1857A0F300A5F081 /* WaitForAbscenceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ED0D177F90BA005A041A /* WaitForAbscenceTests.m */; }; + EABD46BB1857A0F300A5F081 /* WaitForTappableViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ED0E177F90BA005A041A /* WaitForTappableViewTests.m */; }; + EABD46BC1857A0F300A5F081 /* WaitForViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ED0F177F90BA005A041A /* WaitForViewTests.m */; }; + EABD46BD1857A0F300A5F081 /* LandscapeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB9FC00417E144B700138266 /* LandscapeTests.m */; }; + EABD46BE1857A0F300A5F081 /* TableViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB3F654417AA0B8400469D18 /* TableViewTests.m */; }; + EABD46BF1857A0F300A5F081 /* GestureTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ED19177F90C2005A041A /* GestureTests.m */; }; + EABD46C31857A0F300A5F081 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB072B413971AEA008AF393 /* UIKit.framework */; }; + EABD46C41857A0F300A5F081 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB0726B139719AC008AF393 /* Foundation.framework */; }; + EABD46C51857A0F300A5F081 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB60ECC4177F8C83005A041A /* CoreGraphics.framework */; }; + EABD46C71857A0F300A5F081 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EB60ECF2177F8DB3005A041A /* InfoPlist.strings */; }; + EABD46CF1857A15400A5F081 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EABD46AB1857A0EB00A5F081 /* XCTest.framework */; }; + EABD46D21857A24E00A5F081 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EABD46AB1857A0EB00A5F081 /* XCTest.framework */; }; + EABD46D61858C8ED00A5F081 /* libKIF.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EABD46AA1857A0C700A5F081 /* libKIF.a */; }; + EAC8096A1864F19C000E819F /* NSException-KIFAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EAC809681864F19C000E819F /* NSException-KIFAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EAC8096B1864F19C000E819F /* NSException-KIFAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = EAC809691864F19C000E819F /* NSException-KIFAdditions.m */; }; + EB1A44D51A0C3268004A3F61 /* KIFUITestActor-IdentifierTests.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1A44D31A0C3268004A3F61 /* KIFUITestActor-IdentifierTests.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EB1A44D61A0C3268004A3F61 /* KIFUITestActor-IdentifierTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB1A44D41A0C3268004A3F61 /* KIFUITestActor-IdentifierTests.m */; }; + EB1A44DA1A0C33AD004A3F61 /* AccessibilityIdentifierTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB1A44D91A0C33AD004A3F61 /* AccessibilityIdentifierTests.m */; }; + EB2526481981BF7A00DBC747 /* KIFUITestActor-ConditionalTests.h in Headers */ = {isa = PBXBuildFile; fileRef = EB2526461981BF7A00DBC747 /* KIFUITestActor-ConditionalTests.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EB2526491981BF7A00DBC747 /* KIFUITestActor-ConditionalTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EB2526471981BF7A00DBC747 /* KIFUITestActor-ConditionalTests.m */; }; + EB60ECC2177F8C83005A041A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB072B413971AEA008AF393 /* UIKit.framework */; }; + EB60ECC3177F8C83005A041A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AAB0726B139719AC008AF393 /* Foundation.framework */; }; + EB60ECC5177F8C83005A041A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB60ECC4177F8C83005A041A /* CoreGraphics.framework */; }; + EB60ECCB177F8C84005A041A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EB60ECC9177F8C83005A041A /* InfoPlist.strings */; }; + EB60ECCD177F8C84005A041A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ECCC177F8C84005A041A /* main.m */; }; + EB60ECD3177F8C84005A041A /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = EB60ECD2177F8C84005A041A /* Default.png */; }; + EB60ECD5177F8C84005A041A /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EB60ECD4177F8C84005A041A /* Default@2x.png */; }; + EB60ECD7177F8C84005A041A /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EB60ECD6177F8C84005A041A /* Default-568h@2x.png */; }; + EB60ED00177F9032005A041A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ECFC177F9031005A041A /* AppDelegate.m */; }; + EB60ED01177F9032005A041A /* ShowHideViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ECFD177F9031005A041A /* ShowHideViewController.m */; }; + EB60ED02177F9032005A041A /* TapViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ECFE177F9032005A041A /* TapViewController.m */; }; + EB60ED03177F9032005A041A /* TestSuiteViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EB60ECFF177F9032005A041A /* TestSuiteViewController.m */; }; + EB60ED06177F9041005A041A /* MainStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EB60ED04177F9041005A041A /* MainStoryboard.storyboard */; }; + EB9FB42717A5BACB00DDF160 /* GestureViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EB9FB42617A5BACB00DDF160 /* GestureViewController.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + EABD46AF1857A0F300A5F081 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AAB0725F139719AC008AF393 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EB60ECC0177F8C83005A041A; + remoteInfo = "Test Host"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0EAA1C111B4B371700FFB2FB /* IOHIDEvent+KIF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IOHIDEvent+KIF.h"; sourceTree = ""; }; + 0EAA1C121B4B371700FFB2FB /* IOHIDEvent+KIF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IOHIDEvent+KIF.m"; sourceTree = ""; }; + 2CDEE1CA181DBED200DF6E63 /* PickerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PickerController.m; sourceTree = ""; }; + 2CED883D181F5EE1005ABD20 /* PickerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PickerTests.m; sourceTree = ""; }; + 2EE1270F198991920031D347 /* MultiFingerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultiFingerTests.m; sourceTree = ""; }; + 3812FB601A1212A700335733 /* AnimationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AnimationViewController.m; sourceTree = ""; }; + 3812FB621A12188700335733 /* WaitForAnimationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WaitForAnimationTests.m; sourceTree = ""; }; + 39160B1013D1E6BB00311E38 /* LoadableCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadableCategory.h; sourceTree = ""; }; + 3ADD2160096BE41C780FBD95 /* UIView-Debugging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView-Debugging.m"; sourceTree = ""; }; + 3ADD26484C6C438B71DC15C5 /* UIView-Debugging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView-Debugging.h"; sourceTree = ""; }; + 4A48107A19708CAB0003A32E /* ExistTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExistTests.m; sourceTree = ""; }; + 84D293AC1A2C84F700C10944 /* SystemAlertViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SystemAlertViewController.m; sourceTree = ""; }; + 84D293AE1A2C867300C10944 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; + 84D293B01A2C891700C10944 /* SystemAlertTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SystemAlertTests.m; sourceTree = ""; }; + 84D293B71A2C8DF700C10944 /* AddressBookUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBookUI.framework; path = System/Library/Frameworks/AddressBookUI.framework; sourceTree = SDKROOT; }; + 84D293B91A2CC30B00C10944 /* UIAutomationHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIAutomationHelper.h; sourceTree = ""; }; + 84D293BA1A2CC30B00C10944 /* UIAutomationHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIAutomationHelper.m; sourceTree = ""; }; + 97E8A5CE1B0A62F700124E3B /* BackgroundViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BackgroundViewController.m; sourceTree = ""; }; + 97E8A5D01B0A63D100124E3B /* BackgroundTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BackgroundTests.m; sourceTree = ""; }; + 9CC881A21AD4CAAC002CD34C /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 9CC9673B1AD4B1B600576D13 /* KIF.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = KIF.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CC9673E1AD4B1B600576D13 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9CC9673F1AD4B1B600576D13 /* KIF.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KIF.h; sourceTree = ""; }; + A88930111685098E00FC7C63 /* KIF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = KIF.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + AAB0726B139719AC008AF393 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + AAB0728113971A63008AF393 /* KIF-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "KIF-Prefix.pch"; path = "Classes/KIF-Prefix.pch"; sourceTree = SOURCE_ROOT; }; + AAB0728513971A98008AF393 /* KIF-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KIF-Prefix.pch"; sourceTree = ""; }; + AAB0729413971AB2008AF393 /* CGGeometry-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CGGeometry-KIFAdditions.h"; sourceTree = ""; }; + AAB0729513971AB2008AF393 /* CGGeometry-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CGGeometry-KIFAdditions.m"; sourceTree = ""; }; + AAB0729613971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIAccessibilityElement-KIFAdditions.h"; sourceTree = ""; }; + AAB0729713971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIAccessibilityElement-KIFAdditions.m"; sourceTree = ""; }; + AAB0729813971AB2008AF393 /* UIApplication-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIApplication-KIFAdditions.h"; sourceTree = ""; }; + AAB0729913971AB2008AF393 /* UIApplication-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIApplication-KIFAdditions.m"; sourceTree = ""; }; + AAB0729A13971AB2008AF393 /* UIScrollView-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView-KIFAdditions.h"; sourceTree = ""; }; + AAB0729B13971AB2008AF393 /* UIScrollView-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView-KIFAdditions.m"; sourceTree = ""; }; + AAB0729C13971AB2008AF393 /* UITouch-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITouch-KIFAdditions.h"; sourceTree = ""; }; + AAB0729D13971AB2008AF393 /* UITouch-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITouch-KIFAdditions.m"; sourceTree = ""; }; + AAB072A013971AB2008AF393 /* UIView-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView-KIFAdditions.h"; sourceTree = ""; }; + AAB072A113971AB2008AF393 /* UIView-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView-KIFAdditions.m"; sourceTree = ""; }; + AAB072A213971AB2008AF393 /* UIWindow-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIWindow-KIFAdditions.h"; sourceTree = ""; }; + AAB072A313971AB2008AF393 /* UIWindow-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIWindow-KIFAdditions.m"; sourceTree = ""; }; + AAB072B413971AEA008AF393 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + AE62FCCF1A1D20E5002B10DA /* WebViewTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewTests.m; sourceTree = ""; }; + AE62FCD51A1D2447002B10DA /* WebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebViewController.m; sourceTree = ""; }; + AE62FCD71A1D2667002B10DA /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; + AE62FCD91A1D26BB002B10DA /* page2.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = page2.html; sourceTree = ""; }; + BD6A1C9F1BCE8DD000EF07D2 /* KIFAccessibilityEnabler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KIFAccessibilityEnabler.h; sourceTree = ""; }; + BD6A1CA01BCE8DD000EF07D2 /* KIFAccessibilityEnabler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KIFAccessibilityEnabler.m; sourceTree = ""; }; + C194255615D83DE9004FC314 /* KIFTypist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KIFTypist.h; sourceTree = ""; }; + C194255715D83DE9004FC314 /* KIFTypist.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KIFTypist.m; sourceTree = ""; }; + CDFD8E84139728B4008D299F /* NSFileManager-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSFileManager-KIFAdditions.h"; sourceTree = ""; }; + CDFD8E85139728B4008D299F /* NSFileManager-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSFileManager-KIFAdditions.m"; sourceTree = ""; }; + D927B9DB18F9DF2D00DAD036 /* TableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TableViewController.m; sourceTree = ""; }; + D927B9DD18F9E46400DAD036 /* UITableView-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableView-KIFAdditions.h"; sourceTree = ""; }; + D927B9DE18F9E46400DAD036 /* UITableView-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableView-KIFAdditions.m"; sourceTree = ""; }; + D9EA274018F05A6000D87E57 /* ScrollViewTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ScrollViewTests.m; sourceTree = ""; }; + D9EA274218F05A6700D87E57 /* ScrollViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ScrollViewController.m; sourceTree = ""; }; + E977D1051AA4062B005645BF /* UIEvent+KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIEvent+KIFAdditions.h"; sourceTree = ""; }; + E977D1061AA4062B005645BF /* UIEvent+KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIEvent+KIFAdditions.m"; sourceTree = ""; }; + E9AD81F91AA180B900B369FD /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOKit.framework; sourceTree = DEVELOPER_DIR; }; + EA0F2546182979BE006FF825 /* CollectionViewTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CollectionViewTests.m; sourceTree = ""; }; + EA0F25491829839E006FF825 /* CollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CollectionViewController.m; sourceTree = ""; }; + EABD46751857A07600A5F081 /* XCTestCase-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "XCTestCase-KIFAdditions.h"; sourceTree = ""; }; + EABD46761857A07600A5F081 /* XCTestCase-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestCase-KIFAdditions.m"; sourceTree = ""; }; + EABD46AA1857A0C700A5F081 /* libKIF.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libKIF.a; sourceTree = BUILT_PRODUCTS_DIR; }; + EABD46AB1857A0EB00A5F081 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + EABD46CD1857A0F300A5F081 /* KIF Tests - XCTest.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "KIF Tests - XCTest.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; + EABD46D01857A18900A5F081 /* KIF XCTests-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KIF XCTests-Prefix.pch"; sourceTree = ""; }; + EABD46D31857BE8600A5F081 /* KIF-XCTestPrefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KIF-XCTestPrefix.pch"; sourceTree = ""; }; + EAC809681864F19C000E819F /* NSException-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSException-KIFAdditions.h"; sourceTree = ""; }; + EAC809691864F19C000E819F /* NSException-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSException-KIFAdditions.m"; sourceTree = ""; }; + EB02523D17AA109400A7D13A /* CompositionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CompositionTests.m; sourceTree = ""; }; + EB09000F17E3696A00AA15B1 /* SearchFieldTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchFieldTests.m; sourceTree = ""; }; + EB1A44D31A0C3268004A3F61 /* KIFUITestActor-IdentifierTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "KIFUITestActor-IdentifierTests.h"; path = "IdentifierTests/KIFUITestActor-IdentifierTests.h"; sourceTree = ""; }; + EB1A44D41A0C3268004A3F61 /* KIFUITestActor-IdentifierTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "KIFUITestActor-IdentifierTests.m"; path = "IdentifierTests/KIFUITestActor-IdentifierTests.m"; sourceTree = ""; }; + EB1A44D91A0C33AD004A3F61 /* AccessibilityIdentifierTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AccessibilityIdentifierTests.m; sourceTree = ""; }; + EB22B5AF17AF52640090B848 /* CascadingFailureTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CascadingFailureTests.m; sourceTree = ""; }; + EB2526461981BF7A00DBC747 /* KIFUITestActor-ConditionalTests.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KIFUITestActor-ConditionalTests.h"; sourceTree = ""; }; + EB2526471981BF7A00DBC747 /* KIFUITestActor-ConditionalTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KIFUITestActor-ConditionalTests.m"; sourceTree = ""; }; + EB3F654417AA0B8400469D18 /* TableViewTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TableViewTests.m; sourceTree = ""; }; + EB4C3123167BA37B00E31109 /* KIFTestActor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KIFTestActor.h; sourceTree = ""; }; + EB4C3124167BA37B00E31109 /* KIFTestActor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = KIFTestActor.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + EB4C3127167BA37B00E31109 /* KIFTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = KIFTestCase.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + EB4C3128167BA37B00E31109 /* KIFTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = KIFTestCase.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + EB4C3130167BA3AC00E31109 /* KIFSystemTestActor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KIFSystemTestActor.h; sourceTree = ""; }; + EB4C3131167BA3AC00E31109 /* KIFSystemTestActor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KIFSystemTestActor.m; sourceTree = ""; }; + EB4C3132167BA3AC00E31109 /* KIFUITestActor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KIFUITestActor.h; sourceTree = ""; }; + EB4C3133167BA3AC00E31109 /* KIFUITestActor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KIFUITestActor.m; sourceTree = ""; }; + EB4C3138167BA3D200E31109 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; + EB60ECC1177F8C83005A041A /* Test Host.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Test Host.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + EB60ECC4177F8C83005A041A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + EB60ECC8177F8C83005A041A /* Test Host-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Test Host-Info.plist"; sourceTree = ""; }; + EB60ECCA177F8C83005A041A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + EB60ECCC177F8C84005A041A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + EB60ECCE177F8C84005A041A /* Test Host-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Test Host-Prefix.pch"; sourceTree = ""; }; + EB60ECD2177F8C84005A041A /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; + EB60ECD4177F8C84005A041A /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; + EB60ECD6177F8C84005A041A /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; + EB60ECF1177F8DB3005A041A /* KIF Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "KIF Tests-Info.plist"; sourceTree = ""; }; + EB60ECF3177F8DB3005A041A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + EB60ECF8177F8DB3005A041A /* KIF Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "KIF Tests-Prefix.pch"; sourceTree = ""; }; + EB60ECFC177F9031005A041A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + EB60ECFD177F9031005A041A /* ShowHideViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShowHideViewController.m; sourceTree = ""; }; + EB60ECFE177F9032005A041A /* TapViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TapViewController.m; sourceTree = ""; }; + EB60ECFF177F9032005A041A /* TestSuiteViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestSuiteViewController.m; sourceTree = ""; }; + EB60ED05177F9041005A041A /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/MainStoryboard.storyboard; sourceTree = ""; }; + EB60ED07177F90BA005A041A /* LongPressTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LongPressTests.m; sourceTree = ""; }; + EB60ED08177F90BA005A041A /* ModalViewTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModalViewTests.m; sourceTree = ""; }; + EB60ED09177F90BA005A041A /* SpecificControlTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpecificControlTests.m; sourceTree = ""; }; + EB60ED0A177F90BA005A041A /* SystemTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = SystemTests.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; + EB60ED0B177F90BA005A041A /* TappingTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TappingTests.m; sourceTree = ""; }; + EB60ED0C177F90BA005A041A /* TypingTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TypingTests.m; sourceTree = ""; }; + EB60ED0D177F90BA005A041A /* WaitForAbscenceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WaitForAbscenceTests.m; sourceTree = ""; }; + EB60ED0E177F90BA005A041A /* WaitForTappableViewTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WaitForTappableViewTests.m; sourceTree = ""; }; + EB60ED0F177F90BA005A041A /* WaitForViewTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WaitForViewTests.m; sourceTree = ""; }; + EB60ED19177F90C2005A041A /* GestureTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GestureTests.m; sourceTree = ""; }; + EB9FB42617A5BACB00DDF160 /* GestureViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GestureViewController.m; sourceTree = ""; }; + EB9FC00417E144B700138266 /* LandscapeTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LandscapeTests.m; sourceTree = ""; }; + EBAE487A17A45A8E0005EE19 /* NSBundle-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle-KIFAdditions.h"; sourceTree = ""; }; + EBAE487B17A45A8E0005EE19 /* NSBundle-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle-KIFAdditions.m"; sourceTree = ""; }; + EBAE487F17A460E50005EE19 /* NSError-KIFAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSError-KIFAdditions.h"; sourceTree = ""; }; + EBAE488017A460E50005EE19 /* NSError-KIFAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSError-KIFAdditions.m"; sourceTree = ""; }; + EBAE488517A4E5C30005EE19 /* KIFTestStepValidation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = KIFTestStepValidation.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; + EBAE488617A4E5C30005EE19 /* KIFTestStepValidation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KIFTestStepValidation.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 9CC967371AD4B1B600576D13 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9CC881A91AD4CE39002CD34C /* UIKit.framework in Frameworks */, + 9CC881AC1AD4CE4B002CD34C /* Foundation.framework in Frameworks */, + 9CC881AA1AD4CE45002CD34C /* IOKit.framework in Frameworks */, + 9CC881AD1AD4CE50002CD34C /* CoreFoundation.framework in Frameworks */, + 9CC881AB1AD4CE47002CD34C /* XCTest.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EABD468C1857A0C700A5F081 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EABD46D21857A24E00A5F081 /* XCTest.framework in Frameworks */, + EABD468E1857A0C700A5F081 /* Foundation.framework in Frameworks */, + EABD468F1857A0C700A5F081 /* UIKit.framework in Frameworks */, + 0E27A9EE1B45B53D00A6DE6E /* IOKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EABD46C01857A0F300A5F081 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EABD46D61858C8ED00A5F081 /* libKIF.a in Frameworks */, + EABD46CF1857A15400A5F081 /* XCTest.framework in Frameworks */, + EABD46C31857A0F300A5F081 /* UIKit.framework in Frameworks */, + EABD46C41857A0F300A5F081 /* Foundation.framework in Frameworks */, + EABD46C51857A0F300A5F081 /* CoreGraphics.framework in Frameworks */, + E9F646F81AA3BABA00C37EA3 /* IOKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EB60ECBE177F8C83005A041A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EB60ECC2177F8C83005A041A /* UIKit.framework in Frameworks */, + EB60ECC3177F8C83005A041A /* Foundation.framework in Frameworks */, + EB60ECC5177F8C83005A041A /* CoreGraphics.framework in Frameworks */, + 84D293AF1A2C867300C10944 /* CoreLocation.framework in Frameworks */, + 84D293B81A2C8DF700C10944 /* AddressBookUI.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9CC9673C1AD4B1B600576D13 /* KIF Framework */ = { + isa = PBXGroup; + children = ( + 9CC9673F1AD4B1B600576D13 /* KIF.h */, + 9CC9673D1AD4B1B600576D13 /* Supporting Files */, + ); + name = "KIF Framework"; + path = KIFFramework; + sourceTree = ""; + }; + 9CC9673D1AD4B1B600576D13 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 9CC9673E1AD4B1B600576D13 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + AAB0725D139719AC008AF393 = { + isa = PBXGroup; + children = ( + EB60ECBC177F8C51005A041A /* KIF */, + EB60ECC6177F8C83005A041A /* Test Host */, + EB60ECEF177F8DB3005A041A /* KIF Tests */, + 9CC9673C1AD4B1B600576D13 /* KIF Framework */, + AAB0726A139719AC008AF393 /* Frameworks */, + AAB07269139719AC008AF393 /* Products */, + ); + sourceTree = ""; + }; + AAB07269139719AC008AF393 /* Products */ = { + isa = PBXGroup; + children = ( + EB60ECC1177F8C83005A041A /* Test Host.app */, + EABD46AA1857A0C700A5F081 /* libKIF.a */, + EABD46CD1857A0F300A5F081 /* KIF Tests - XCTest.xctest */, + 9CC9673B1AD4B1B600576D13 /* KIF.framework */, + ); + name = Products; + sourceTree = ""; + }; + AAB0726A139719AC008AF393 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 9CC881A21AD4CAAC002CD34C /* CoreFoundation.framework */, + E9AD81F91AA180B900B369FD /* IOKit.framework */, + 84D293B71A2C8DF700C10944 /* AddressBookUI.framework */, + 84D293AE1A2C867300C10944 /* CoreLocation.framework */, + EABD46AB1857A0EB00A5F081 /* XCTest.framework */, + EB4C3138167BA3D200E31109 /* SenTestingKit.framework */, + AAB072B413971AEA008AF393 /* UIKit.framework */, + AAB0726B139719AC008AF393 /* Foundation.framework */, + EB60ECC4177F8C83005A041A /* CoreGraphics.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + AAB0726E139719AC008AF393 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + AAB0728113971A63008AF393 /* KIF-Prefix.pch */, + ); + name = "Supporting Files"; + path = KIF; + sourceTree = ""; + }; + AAB0728413971A98008AF393 /* Classes */ = { + isa = PBXGroup; + children = ( + EB4C312F167BA39200E31109 /* Actors */, + A88930111685098E00FC7C63 /* KIF.h */, + EB4C3127167BA37B00E31109 /* KIFTestCase.h */, + EB4C3128167BA37B00E31109 /* KIFTestCase.m */, + EB4C3123167BA37B00E31109 /* KIFTestActor.h */, + EB4C3124167BA37B00E31109 /* KIFTestActor.m */, + AAB0728513971A98008AF393 /* KIF-Prefix.pch */, + C194255615D83DE9004FC314 /* KIFTypist.h */, + C194255715D83DE9004FC314 /* KIFTypist.m */, + EBAE488517A4E5C30005EE19 /* KIFTestStepValidation.h */, + EBAE488617A4E5C30005EE19 /* KIFTestStepValidation.m */, + EABD46D31857BE8600A5F081 /* KIF-XCTestPrefix.pch */, + 84D293B91A2CC30B00C10944 /* UIAutomationHelper.h */, + 84D293BA1A2CC30B00C10944 /* UIAutomationHelper.m */, + BD6A1C9F1BCE8DD000EF07D2 /* KIFAccessibilityEnabler.h */, + BD6A1CA01BCE8DD000EF07D2 /* KIFAccessibilityEnabler.m */, + 0EAA1C111B4B371700FFB2FB /* IOHIDEvent+KIF.h */, + 0EAA1C121B4B371700FFB2FB /* IOHIDEvent+KIF.m */, + ); + path = Classes; + sourceTree = ""; + }; + AAB0729313971AB2008AF393 /* Additions */ = { + isa = PBXGroup; + children = ( + 39160B1013D1E6BB00311E38 /* LoadableCategory.h */, + AAB0729413971AB2008AF393 /* CGGeometry-KIFAdditions.h */, + AAB0729513971AB2008AF393 /* CGGeometry-KIFAdditions.m */, + CDFD8E84139728B4008D299F /* NSFileManager-KIFAdditions.h */, + CDFD8E85139728B4008D299F /* NSFileManager-KIFAdditions.m */, + AAB0729613971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.h */, + AAB0729713971AB2008AF393 /* UIAccessibilityElement-KIFAdditions.m */, + AAB0729813971AB2008AF393 /* UIApplication-KIFAdditions.h */, + AAB0729913971AB2008AF393 /* UIApplication-KIFAdditions.m */, + AAB0729A13971AB2008AF393 /* UIScrollView-KIFAdditions.h */, + AAB0729B13971AB2008AF393 /* UIScrollView-KIFAdditions.m */, + AAB0729C13971AB2008AF393 /* UITouch-KIFAdditions.h */, + AAB0729D13971AB2008AF393 /* UITouch-KIFAdditions.m */, + AAB072A013971AB2008AF393 /* UIView-KIFAdditions.h */, + AAB072A113971AB2008AF393 /* UIView-KIFAdditions.m */, + AAB072A213971AB2008AF393 /* UIWindow-KIFAdditions.h */, + AAB072A313971AB2008AF393 /* UIWindow-KIFAdditions.m */, + D927B9DD18F9E46400DAD036 /* UITableView-KIFAdditions.h */, + D927B9DE18F9E46400DAD036 /* UITableView-KIFAdditions.m */, + EBAE487A17A45A8E0005EE19 /* NSBundle-KIFAdditions.h */, + EBAE487B17A45A8E0005EE19 /* NSBundle-KIFAdditions.m */, + EBAE487F17A460E50005EE19 /* NSError-KIFAdditions.h */, + EBAE488017A460E50005EE19 /* NSError-KIFAdditions.m */, + EABD46751857A07600A5F081 /* XCTestCase-KIFAdditions.h */, + EABD46761857A07600A5F081 /* XCTestCase-KIFAdditions.m */, + EAC809681864F19C000E819F /* NSException-KIFAdditions.h */, + EAC809691864F19C000E819F /* NSException-KIFAdditions.m */, + E977D1051AA4062B005645BF /* UIEvent+KIFAdditions.h */, + E977D1061AA4062B005645BF /* UIEvent+KIFAdditions.m */, + 3ADD2160096BE41C780FBD95 /* UIView-Debugging.m */, + 3ADD26484C6C438B71DC15C5 /* UIView-Debugging.h */, + ); + path = Additions; + sourceTree = ""; + }; + EB1A44D21A0C3222004A3F61 /* Identifier Tests */ = { + isa = PBXGroup; + children = ( + EB1A44D31A0C3268004A3F61 /* KIFUITestActor-IdentifierTests.h */, + EB1A44D41A0C3268004A3F61 /* KIFUITestActor-IdentifierTests.m */, + ); + name = "Identifier Tests"; + sourceTree = ""; + }; + EB4C312F167BA39200E31109 /* Actors */ = { + isa = PBXGroup; + children = ( + EB4C3130167BA3AC00E31109 /* KIFSystemTestActor.h */, + EB4C3131167BA3AC00E31109 /* KIFSystemTestActor.m */, + EB4C3132167BA3AC00E31109 /* KIFUITestActor.h */, + EB4C3133167BA3AC00E31109 /* KIFUITestActor.m */, + EB2526461981BF7A00DBC747 /* KIFUITestActor-ConditionalTests.h */, + EB2526471981BF7A00DBC747 /* KIFUITestActor-ConditionalTests.m */, + ); + name = Actors; + sourceTree = ""; + }; + EB60ECBC177F8C51005A041A /* KIF */ = { + isa = PBXGroup; + children = ( + AAB0729313971AB2008AF393 /* Additions */, + AAB0728413971A98008AF393 /* Classes */, + EB1A44D21A0C3222004A3F61 /* Identifier Tests */, + AAB0726E139719AC008AF393 /* Supporting Files */, + ); + name = KIF; + sourceTree = ""; + }; + EB60ECC6177F8C83005A041A /* Test Host */ = { + isa = PBXGroup; + children = ( + 3812FB601A1212A700335733 /* AnimationViewController.m */, + 2CDEE1CA181DBED200DF6E63 /* PickerController.m */, + EB60ED04177F9041005A041A /* MainStoryboard.storyboard */, + EB60ECFC177F9031005A041A /* AppDelegate.m */, + EB60ECFD177F9031005A041A /* ShowHideViewController.m */, + EB9FB42617A5BACB00DDF160 /* GestureViewController.m */, + EB60ECFE177F9032005A041A /* TapViewController.m */, + EB60ECFF177F9032005A041A /* TestSuiteViewController.m */, + EA0F25491829839E006FF825 /* CollectionViewController.m */, + D9EA274218F05A6700D87E57 /* ScrollViewController.m */, + D927B9DB18F9DF2D00DAD036 /* TableViewController.m */, + AE62FCD51A1D2447002B10DA /* WebViewController.m */, + 84D293AC1A2C84F700C10944 /* SystemAlertViewController.m */, + 97E8A5CE1B0A62F700124E3B /* BackgroundViewController.m */, + EB60ECC7177F8C83005A041A /* Supporting Files */, + ); + path = "Test Host"; + sourceTree = ""; + }; + EB60ECC7177F8C83005A041A /* Supporting Files */ = { + isa = PBXGroup; + children = ( + EB60ECC8177F8C83005A041A /* Test Host-Info.plist */, + EB60ECC9177F8C83005A041A /* InfoPlist.strings */, + EB60ECCC177F8C84005A041A /* main.m */, + EB60ECCE177F8C84005A041A /* Test Host-Prefix.pch */, + EB60ECD2177F8C84005A041A /* Default.png */, + EB60ECD4177F8C84005A041A /* Default@2x.png */, + EB60ECD6177F8C84005A041A /* Default-568h@2x.png */, + AE62FCD71A1D2667002B10DA /* index.html */, + AE62FCD91A1D26BB002B10DA /* page2.html */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + EB60ECEF177F8DB3005A041A /* KIF Tests */ = { + isa = PBXGroup; + children = ( + 2CED883D181F5EE1005ABD20 /* PickerTests.m */, + EB60ED19177F90C2005A041A /* GestureTests.m */, + 3812FB621A12188700335733 /* WaitForAnimationTests.m */, + EB60ED07177F90BA005A041A /* LongPressTests.m */, + EB60ED08177F90BA005A041A /* ModalViewTests.m */, + EB60ED09177F90BA005A041A /* SpecificControlTests.m */, + EB60ED0A177F90BA005A041A /* SystemTests.m */, + EB60ED0B177F90BA005A041A /* TappingTests.m */, + EB3F654417AA0B8400469D18 /* TableViewTests.m */, + EA0F2546182979BE006FF825 /* CollectionViewTests.m */, + D9EA274018F05A6000D87E57 /* ScrollViewTests.m */, + EB02523D17AA109400A7D13A /* CompositionTests.m */, + EB60ED0C177F90BA005A041A /* TypingTests.m */, + EB60ED0D177F90BA005A041A /* WaitForAbscenceTests.m */, + 4A48107A19708CAB0003A32E /* ExistTests.m */, + EB60ED0E177F90BA005A041A /* WaitForTappableViewTests.m */, + EB60ED0F177F90BA005A041A /* WaitForViewTests.m */, + EB22B5AF17AF52640090B848 /* CascadingFailureTests.m */, + EB9FC00417E144B700138266 /* LandscapeTests.m */, + EB09000F17E3696A00AA15B1 /* SearchFieldTests.m */, + 2EE1270F198991920031D347 /* MultiFingerTests.m */, + EB1A44D91A0C33AD004A3F61 /* AccessibilityIdentifierTests.m */, + AE62FCCF1A1D20E5002B10DA /* WebViewTests.m */, + 84D293B01A2C891700C10944 /* SystemAlertTests.m */, + 97E8A5D01B0A63D100124E3B /* BackgroundTests.m */, + EB60ECF0177F8DB3005A041A /* Supporting Files */, + ); + path = "KIF Tests"; + sourceTree = ""; + }; + EB60ECF0177F8DB3005A041A /* Supporting Files */ = { + isa = PBXGroup; + children = ( + EABD46D01857A18900A5F081 /* KIF XCTests-Prefix.pch */, + EB60ECF1177F8DB3005A041A /* KIF Tests-Info.plist */, + EB60ECF2177F8DB3005A041A /* InfoPlist.strings */, + EB60ECF8177F8DB3005A041A /* KIF Tests-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 9CC967381AD4B1B600576D13 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 9CC967401AD4B1B600576D13 /* KIF.h in Headers */, + 9CC967561AD4B1F100576D13 /* LoadableCategory.h in Headers */, + 9CC967571AD4B1F100576D13 /* CGGeometry-KIFAdditions.h in Headers */, + 9CC967591AD4B1F100576D13 /* NSFileManager-KIFAdditions.h in Headers */, + 9CC9675B1AD4B1F100576D13 /* UIAccessibilityElement-KIFAdditions.h in Headers */, + 0EAA1C171B4B372700FFB2FB /* IOHIDEvent+KIF.h in Headers */, + BD6A1CA21BCE8DD000EF07D2 /* KIFAccessibilityEnabler.h in Headers */, + 9CC9675D1AD4B1F100576D13 /* UIApplication-KIFAdditions.h in Headers */, + 9CC9675F1AD4B1F100576D13 /* UIScrollView-KIFAdditions.h in Headers */, + 9CC967731AD4B1FF00576D13 /* KIFSystemTestActor.h in Headers */, + 9CC9677A1AD4B20700576D13 /* KIFTestCase.h in Headers */, + 5C877DD01B057E13006A3AC6 /* KIFUITestActor-IdentifierTests.h in Headers */, + 9CC9677C1AD4B20700576D13 /* KIFTestActor.h in Headers */, + 9CC9677F1AD4B20700576D13 /* KIFTypist.h in Headers */, + 9CC967811AD4B20700576D13 /* KIFTestStepValidation.h in Headers */, + 9CC967751AD4B1FF00576D13 /* KIFUITestActor.h in Headers */, + 9CC967771AD4B1FF00576D13 /* KIFUITestActor-ConditionalTests.h in Headers */, + 9CC967611AD4B1F100576D13 /* UITouch-KIFAdditions.h in Headers */, + 9CC967631AD4B1F100576D13 /* UIView-KIFAdditions.h in Headers */, + 9CC967651AD4B1F100576D13 /* UIWindow-KIFAdditions.h in Headers */, + 9CC967671AD4B1F100576D13 /* UITableView-KIFAdditions.h in Headers */, + 9CC967691AD4B1F100576D13 /* NSBundle-KIFAdditions.h in Headers */, + 5C877DD11B0A8B8F006A3AC6 /* UIView-Debugging.h in Headers */, + 9CC9676B1AD4B1F100576D13 /* NSError-KIFAdditions.h in Headers */, + 9CC9676D1AD4B1F100576D13 /* XCTestCase-KIFAdditions.h in Headers */, + 9CC9676F1AD4B1F100576D13 /* NSException-KIFAdditions.h in Headers */, + 9CC967711AD4B1F100576D13 /* UIEvent+KIFAdditions.h in Headers */, + 9CC967841AD4B20700576D13 /* UIAutomationHelper.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EABD46901857A0C700A5F081 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + EB1A44D51A0C3268004A3F61 /* KIFUITestActor-IdentifierTests.h in Headers */, + EABD46911857A0C700A5F081 /* KIF.h in Headers */, + D927B9DF18F9E46400DAD036 /* UITableView-KIFAdditions.h in Headers */, + EABD46921857A0C700A5F081 /* CGGeometry-KIFAdditions.h in Headers */, + EABD46931857A0C700A5F081 /* UIAccessibilityElement-KIFAdditions.h in Headers */, + 9CC967BE1AD4B55E00576D13 /* KIF-XCTestPrefix.pch in Headers */, + EABD46941857A0C700A5F081 /* UIApplication-KIFAdditions.h in Headers */, + EABD46951857A0C700A5F081 /* UIScrollView-KIFAdditions.h in Headers */, + EABD46971857A0C700A5F081 /* UITouch-KIFAdditions.h in Headers */, + EABD46981857A0C700A5F081 /* UIView-KIFAdditions.h in Headers */, + EABD46991857A0C700A5F081 /* UIWindow-KIFAdditions.h in Headers */, + EABD469A1857A0C700A5F081 /* NSFileManager-KIFAdditions.h in Headers */, + 0EAA1C131B4B371700FFB2FB /* IOHIDEvent+KIF.h in Headers */, + EABD469B1857A0C700A5F081 /* LoadableCategory.h in Headers */, + EABD469C1857A0C700A5F081 /* KIFTypist.h in Headers */, + EABD469D1857A0C700A5F081 /* KIFTestActor.h in Headers */, + EABD469E1857A0C700A5F081 /* KIFTestCase.h in Headers */, + EABD469F1857A0C700A5F081 /* KIFSystemTestActor.h in Headers */, + EABD46A01857A0C700A5F081 /* KIFUITestActor.h in Headers */, + EABD46A11857A0C700A5F081 /* NSBundle-KIFAdditions.h in Headers */, + EAC8096A1864F19C000E819F /* NSException-KIFAdditions.h in Headers */, + EABD46961857A0C700A5F081 /* XCTestCase-KIFAdditions.h in Headers */, + 84D293BB1A2CC30B00C10944 /* UIAutomationHelper.h in Headers */, + E977D1071AA4062B005645BF /* UIEvent+KIFAdditions.h in Headers */, + BD6A1CA11BCE8DD000EF07D2 /* KIFAccessibilityEnabler.h in Headers */, + EABD46A21857A0C700A5F081 /* NSError-KIFAdditions.h in Headers */, + EABD46A31857A0C700A5F081 /* KIFTestStepValidation.h in Headers */, + 3ADD25CC71BF27D675768787 /* UIView-Debugging.h in Headers */, + EB2526481981BF7A00DBC747 /* KIFUITestActor-ConditionalTests.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXLegacyTarget section */ + A88930091685088F00FC7C63 /* KIF Documentation */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "--exit-threshold 2 --logformat xcode --output /tmp/kif-docs --project-name KIF --project-version 2.0 --project-company \"Square, Inc.\" --company-id com.squareup --no-repeat-first-par --no-search-undocumented-doc Classes/ Additions/"; + buildConfigurationList = A889300A1685088F00FC7C63 /* Build configuration list for PBXLegacyTarget "KIF Documentation" */; + buildPhases = ( + ); + buildToolPath = /usr/local/bin/appledoc; + buildWorkingDirectory = ""; + dependencies = ( + ); + name = "KIF Documentation"; + passBuildSettingsInEnvironment = 1; + productName = "KIF Documentation"; + }; +/* End PBXLegacyTarget section */ + +/* Begin PBXNativeTarget section */ + 9CC9673A1AD4B1B600576D13 /* KIFFramework */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9CC967541AD4B1B600576D13 /* Build configuration list for PBXNativeTarget "KIFFramework" */; + buildPhases = ( + 9CC967361AD4B1B600576D13 /* Sources */, + 9CC967371AD4B1B600576D13 /* Frameworks */, + 9CC967381AD4B1B600576D13 /* Headers */, + 9CC967391AD4B1B600576D13 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = KIFFramework; + productName = KIFFramework; + productReference = 9CC9673B1AD4B1B600576D13 /* KIF.framework */; + productType = "com.apple.product-type.framework"; + }; + EABD46791857A0C700A5F081 /* KIF */ = { + isa = PBXNativeTarget; + buildConfigurationList = EABD46A61857A0C700A5F081 /* Build configuration list for PBXNativeTarget "KIF" */; + buildPhases = ( + EABD467A1857A0C700A5F081 /* Sources */, + EABD468C1857A0C700A5F081 /* Frameworks */, + EABD46901857A0C700A5F081 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = KIF; + productName = KIFTestCase; + productReference = EABD46AA1857A0C700A5F081 /* libKIF.a */; + productType = "com.apple.product-type.library.static"; + }; + EABD46AD1857A0F300A5F081 /* KIF Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = EABD46C91857A0F300A5F081 /* Build configuration list for PBXNativeTarget "KIF Tests" */; + buildPhases = ( + EABD46B01857A0F300A5F081 /* Sources */, + EABD46C01857A0F300A5F081 /* Frameworks */, + EABD46C61857A0F300A5F081 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + EABD46AE1857A0F300A5F081 /* PBXTargetDependency */, + ); + name = "KIF Tests"; + productName = "KIF Tests"; + productReference = EABD46CD1857A0F300A5F081 /* KIF Tests - XCTest.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + EB60ECC0177F8C83005A041A /* Test Host */ = { + isa = PBXNativeTarget; + buildConfigurationList = EB60ECD8177F8C84005A041A /* Build configuration list for PBXNativeTarget "Test Host" */; + buildPhases = ( + EB60ECBD177F8C83005A041A /* Sources */, + EB60ECBE177F8C83005A041A /* Frameworks */, + EB60ECBF177F8C83005A041A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Test Host"; + productName = "Test Host"; + productReference = EB60ECC1177F8C83005A041A /* Test Host.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AAB0725F139719AC008AF393 /* Project object */ = { + isa = PBXProject; + attributes = { + LastTestingUpgradeCheck = 0510; + LastUpgradeCheck = 0700; + TargetAttributes = { + 9CC9673A1AD4B1B600576D13 = { + CreatedOnToolsVersion = 6.2; + }; + }; + }; + buildConfigurationList = AAB07262139719AC008AF393 /* Build configuration list for PBXProject "KIF" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = AAB0725D139719AC008AF393; + productRefGroup = AAB07269139719AC008AF393 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + EABD46791857A0C700A5F081 /* KIF */, + A88930091685088F00FC7C63 /* KIF Documentation */, + EB60ECC0177F8C83005A041A /* Test Host */, + EABD46AD1857A0F300A5F081 /* KIF Tests */, + 9CC9673A1AD4B1B600576D13 /* KIFFramework */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 9CC967391AD4B1B600576D13 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EABD46C61857A0F300A5F081 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EABD46C71857A0F300A5F081 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EB60ECBF177F8C83005A041A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EB60ECCB177F8C84005A041A /* InfoPlist.strings in Resources */, + EB60ECD3177F8C84005A041A /* Default.png in Resources */, + EB60ECD5177F8C84005A041A /* Default@2x.png in Resources */, + AE62FCD81A1D2667002B10DA /* index.html in Resources */, + EB60ECD7177F8C84005A041A /* Default-568h@2x.png in Resources */, + EB60ED06177F9041005A041A /* MainStoryboard.storyboard in Resources */, + AE62FCDA1A1D26BB002B10DA /* page2.html in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 9CC967361AD4B1B600576D13 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9CC967D01AD4B5B900576D13 /* KIFTestCase.m in Sources */, + 0EAA1C181B4B372700FFB2FB /* IOHIDEvent+KIF.m in Sources */, + 9CC967D11AD4B5B900576D13 /* KIFTestActor.m in Sources */, + 9CC967D21AD4B5B900576D13 /* KIFTypist.m in Sources */, + 9CC967D31AD4B5B900576D13 /* KIFTestStepValidation.m in Sources */, + 9CC967D41AD4B5B900576D13 /* UIAutomationHelper.m in Sources */, + 9CC967D51AD4B5B900576D13 /* KIFUITestActor-IdentifierTests.m in Sources */, + 9CC967CD1AD4B59A00576D13 /* KIFSystemTestActor.m in Sources */, + 9CC967CE1AD4B59A00576D13 /* KIFUITestActor.m in Sources */, + 9CC967CF1AD4B59A00576D13 /* KIFUITestActor-ConditionalTests.m in Sources */, + 9CC967BF1AD4B58C00576D13 /* CGGeometry-KIFAdditions.m in Sources */, + 9CC967C01AD4B58C00576D13 /* NSFileManager-KIFAdditions.m in Sources */, + 9CC967C11AD4B58C00576D13 /* UIAccessibilityElement-KIFAdditions.m in Sources */, + 9CC967C21AD4B58C00576D13 /* UIApplication-KIFAdditions.m in Sources */, + 9CC967C31AD4B58C00576D13 /* UIScrollView-KIFAdditions.m in Sources */, + 9CC967C41AD4B58C00576D13 /* UITouch-KIFAdditions.m in Sources */, + 9CC967C51AD4B58C00576D13 /* UIView-KIFAdditions.m in Sources */, + 9CC967C61AD4B58C00576D13 /* UIWindow-KIFAdditions.m in Sources */, + 9CC967C71AD4B58C00576D13 /* UITableView-KIFAdditions.m in Sources */, + 9CC967C81AD4B58C00576D13 /* NSBundle-KIFAdditions.m in Sources */, + 9CC967C91AD4B58C00576D13 /* NSError-KIFAdditions.m in Sources */, + 9CC967CA1AD4B58C00576D13 /* XCTestCase-KIFAdditions.m in Sources */, + 9CC967CB1AD4B58C00576D13 /* NSException-KIFAdditions.m in Sources */, + 9CC967CC1AD4B58C00576D13 /* UIEvent+KIFAdditions.m in Sources */, + 5C877DD21B0A8B93006A3AC6 /* UIView-Debugging.m in Sources */, + BD6A1CA41BCE8DD000EF07D2 /* KIFAccessibilityEnabler.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EABD467A1857A0C700A5F081 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EABD467B1857A0C700A5F081 /* CGGeometry-KIFAdditions.m in Sources */, + 0EAA1C141B4B371700FFB2FB /* IOHIDEvent+KIF.m in Sources */, + EABD467C1857A0C700A5F081 /* UIAccessibilityElement-KIFAdditions.m in Sources */, + 84D293BD1A2CC30B00C10944 /* UIAutomationHelper.m in Sources */, + EABD467D1857A0C700A5F081 /* UIApplication-KIFAdditions.m in Sources */, + EABD467E1857A0C700A5F081 /* UIScrollView-KIFAdditions.m in Sources */, + EABD467F1857A0C700A5F081 /* UITouch-KIFAdditions.m in Sources */, + EABD46801857A0C700A5F081 /* UIView-KIFAdditions.m in Sources */, + EABD46811857A0C700A5F081 /* UIWindow-KIFAdditions.m in Sources */, + EABD46821857A0C700A5F081 /* NSFileManager-KIFAdditions.m in Sources */, + D927B9E018F9E46400DAD036 /* UITableView-KIFAdditions.m in Sources */, + EABD46831857A0C700A5F081 /* KIFTypist.m in Sources */, + EABD46841857A0C700A5F081 /* KIFTestActor.m in Sources */, + EABD46851857A0C700A5F081 /* KIFTestCase.m in Sources */, + EABD46861857A0C700A5F081 /* XCTestCase-KIFAdditions.m in Sources */, + EB1A44D61A0C3268004A3F61 /* KIFUITestActor-IdentifierTests.m in Sources */, + EB2526491981BF7A00DBC747 /* KIFUITestActor-ConditionalTests.m in Sources */, + E977D1081AA4062B005645BF /* UIEvent+KIFAdditions.m in Sources */, + EABD46871857A0C700A5F081 /* KIFSystemTestActor.m in Sources */, + EAC8096B1864F19C000E819F /* NSException-KIFAdditions.m in Sources */, + EABD46881857A0C700A5F081 /* KIFUITestActor.m in Sources */, + EABD46891857A0C700A5F081 /* NSBundle-KIFAdditions.m in Sources */, + EABD468A1857A0C700A5F081 /* NSError-KIFAdditions.m in Sources */, + EABD468B1857A0C700A5F081 /* KIFTestStepValidation.m in Sources */, + 4D2FD4EE1AF5936700E61192 /* UIView-Debugging.m in Sources */, + BD6A1CA31BCE8DD000EF07D2 /* KIFAccessibilityEnabler.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EABD46B01857A0F300A5F081 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EABD46B11857A0F300A5F081 /* SearchFieldTests.m in Sources */, + EABD46B21857A0F300A5F081 /* CascadingFailureTests.m in Sources */, + EABD46B31857A0F300A5F081 /* CompositionTests.m in Sources */, + 4A48107B19708CAB0003A32E /* ExistTests.m in Sources */, + EA4655881905B92500B2C60E /* PickerTests.m in Sources */, + 3812FB631A12188700335733 /* WaitForAnimationTests.m in Sources */, + EB1A44DA1A0C33AD004A3F61 /* AccessibilityIdentifierTests.m in Sources */, + EABD46B41857A0F300A5F081 /* LongPressTests.m in Sources */, + EABD46B51857A0F300A5F081 /* ModalViewTests.m in Sources */, + EABD46B61857A0F300A5F081 /* SpecificControlTests.m in Sources */, + EABD46B71857A0F300A5F081 /* SystemTests.m in Sources */, + EABD46B81857A0F300A5F081 /* TappingTests.m in Sources */, + EABD46B91857A0F300A5F081 /* TypingTests.m in Sources */, + EABD46BA1857A0F300A5F081 /* WaitForAbscenceTests.m in Sources */, + EA47DA2818EDFD6F0034D2F5 /* CollectionViewTests.m in Sources */, + EABD46BB1857A0F300A5F081 /* WaitForTappableViewTests.m in Sources */, + EABD46BC1857A0F300A5F081 /* WaitForViewTests.m in Sources */, + 97E8A5D11B0A63D100124E3B /* BackgroundTests.m in Sources */, + EABD46BD1857A0F300A5F081 /* LandscapeTests.m in Sources */, + EABD46BE1857A0F300A5F081 /* TableViewTests.m in Sources */, + EABD46BF1857A0F300A5F081 /* GestureTests.m in Sources */, + 2EE12710198991920031D347 /* MultiFingerTests.m in Sources */, + D9EA274118F05A6000D87E57 /* ScrollViewTests.m in Sources */, + AE62FCD01A1D20E5002B10DA /* WebViewTests.m in Sources */, + 84D293B11A2C891700C10944 /* SystemAlertTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EB60ECBD177F8C83005A041A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97E8A5CF1B0A62F700124E3B /* BackgroundViewController.m in Sources */, + EB9FB42717A5BACB00DDF160 /* GestureViewController.m in Sources */, + EA0F254A1829839E006FF825 /* CollectionViewController.m in Sources */, + 84D293AD1A2C84F700C10944 /* SystemAlertViewController.m in Sources */, + AE62FCD61A1D2447002B10DA /* WebViewController.m in Sources */, + EB60ECCD177F8C84005A041A /* main.m in Sources */, + EB60ED00177F9032005A041A /* AppDelegate.m in Sources */, + D927B9DC18F9DF2D00DAD036 /* TableViewController.m in Sources */, + EB60ED01177F9032005A041A /* ShowHideViewController.m in Sources */, + EB60ED02177F9032005A041A /* TapViewController.m in Sources */, + 2CDEE1CB181DBED200DF6E63 /* PickerController.m in Sources */, + EB60ED03177F9032005A041A /* TestSuiteViewController.m in Sources */, + D9EA274318F05A6700D87E57 /* ScrollViewController.m in Sources */, + 3812FB611A1212A700335733 /* AnimationViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + EABD46AE1857A0F300A5F081 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = EB60ECC0177F8C83005A041A /* Test Host */; + targetProxy = EABD46AF1857A0F300A5F081 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + EB60ECC9177F8C83005A041A /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + EB60ECCA177F8C83005A041A /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + EB60ECF2177F8DB3005A041A /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + EB60ECF3177F8DB3005A041A /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + EB60ED04177F9041005A041A /* MainStoryboard.storyboard */ = { + isa = PBXVariantGroup; + children = ( + EB60ED05177F9041005A041A /* en */, + ); + name = MainStoryboard.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 9CC9674E1AD4B1B600576D13 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + GCC_DYNAMIC_NO_PIC = NO; + GCC_PREFIX_HEADER = "Classes/KIF-XCTestPrefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = KIFFramework/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.square.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = KIF; + PUBLIC_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Headers"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 9CC9674F1AD4B1B600576D13 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + GCC_PREFIX_HEADER = "Classes/KIF-XCTestPrefix.pch"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = KIFFramework/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = "com.square.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = KIF; + PUBLIC_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Headers"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Coverage; + }; + 9CC967501AD4B1B600576D13 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_BITCODE = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + GCC_PREFIX_HEADER = "Classes/KIF-XCTestPrefix.pch"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + INFOPLIST_FILE = KIFFramework/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = "com.square.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = KIF; + PUBLIC_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Headers"; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + A889300B1685088F00FC7C63 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + DEBUGGING_SYMBOLS = YES; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Debug; + }; + A889300C1685088F00FC7C63 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Release; + }; + AAB07270139719AC008AF393 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREFIX_HEADER = "Classes/KIF-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = DEBUG; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_TREAT_WARNINGS_AS_ERRORS = YES; + GCC_VERSION = ""; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.1.1; + ONLY_ACTIVE_ARCH = YES; + PUBLIC_HEADERS_FOLDER_PATH = "include/$(PRODUCT_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + AAB07271139719AC008AF393 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREFIX_HEADER = "Classes/KIF-Prefix.pch"; + GCC_TREAT_WARNINGS_AS_ERRORS = YES; + GCC_VERSION = ""; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.1.1; + PUBLIC_HEADERS_FOLDER_PATH = "include/$(PRODUCT_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Release; + }; + EABD46A71857A0C700A5F081 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_ARC = YES; + DSTROOT = /tmp/KIF.dst; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks"; + GCC_PREFIX_HEADER = "Classes/KIF-XCTestPrefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = DEBUG; + HEADER_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = KIF; + }; + name = Debug; + }; + EABD46A81857A0C700A5F081 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_ARC = YES; + DSTROOT = /tmp/KIF.dst; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks"; + GCC_PREFIX_HEADER = "Classes/KIF-XCTestPrefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = DEBUG; + HEADER_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = KIF; + }; + name = Coverage; + }; + EABD46A91857A0C700A5F081 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_ARC = YES; + DSTROOT = /tmp/KIF.dst; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = "$(PLATFORM_DIR)/Developer/Library/Frameworks"; + GCC_PREFIX_HEADER = "Classes/KIF-XCTestPrefix.pch"; + HEADER_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = KIF; + }; + name = Release; + }; + EABD46CA1857A0F300A5F081 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Test Host.app/Test Host"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_FRAMEWORKS_DIR)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "KIF Tests/KIF XCTests-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_UNINITIALIZED_AUTOS = YES; + HEADER_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = "KIF Tests/KIF Tests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = "com.square.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "KIF Tests - XCTest"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = xctest; + }; + name = Debug; + }; + EABD46CB1857A0F300A5F081 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Test Host.app/Test Host"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_FRAMEWORKS_DIR)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "KIF Tests/KIF XCTests-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_UNINITIALIZED_AUTOS = YES; + HEADER_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = "KIF Tests/KIF Tests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = "com.square.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "KIF Tests - XCTest"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = xctest; + }; + name = Coverage; + }; + EABD46CC1857A0F300A5F081 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Test Host.app/Test Host"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_FRAMEWORKS_DIR)"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "KIF Tests/KIF XCTests-Prefix.pch"; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + HEADER_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = "KIF Tests/KIF Tests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = "com.square.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "KIF Tests - XCTest"; + TEST_HOST = "$(BUNDLE_LOADER)"; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = xctest; + }; + name = Release; + }; + EB60ECD9177F8C84005A041A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_BITCODE = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Test Host/Test Host-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_UNINITIALIZED_AUTOS = YES; + INFOPLIST_FILE = "Test Host/Test Host-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.square.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + EB60ECDA177F8C84005A041A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_BITCODE = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Test Host/Test Host-Prefix.pch"; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + INFOPLIST_FILE = "Test Host/Test Host-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + PRODUCT_BUNDLE_IDENTIFIER = "com.square.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + EBAE48FF17A5B1380005EE19 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREFIX_HEADER = "Classes/KIF-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = DEBUG; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_TREAT_WARNINGS_AS_ERRORS = YES; + GCC_VERSION = ""; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.1.1; + PUBLIC_HEADERS_FOLDER_PATH = "include/$(PRODUCT_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Coverage; + }; + EBAE490117A5B1380005EE19 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + DEBUGGING_SYMBOLS = YES; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.8; + ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = ""; + OTHER_LDFLAGS = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Coverage; + }; + EBAE490217A5B1380005EE19 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_BITCODE = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Test Host/Test Host-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_UNINITIALIZED_AUTOS = YES; + INFOPLIST_FILE = "Test Host/Test Host-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.square.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = app; + }; + name = Coverage; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 9CC967541AD4B1B600576D13 /* Build configuration list for PBXNativeTarget "KIFFramework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9CC9674E1AD4B1B600576D13 /* Debug */, + 9CC9674F1AD4B1B600576D13 /* Coverage */, + 9CC967501AD4B1B600576D13 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A889300A1685088F00FC7C63 /* Build configuration list for PBXLegacyTarget "KIF Documentation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A889300B1685088F00FC7C63 /* Debug */, + EBAE490117A5B1380005EE19 /* Coverage */, + A889300C1685088F00FC7C63 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AAB07262139719AC008AF393 /* Build configuration list for PBXProject "KIF" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AAB07270139719AC008AF393 /* Debug */, + EBAE48FF17A5B1380005EE19 /* Coverage */, + AAB07271139719AC008AF393 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EABD46A61857A0C700A5F081 /* Build configuration list for PBXNativeTarget "KIF" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EABD46A71857A0C700A5F081 /* Debug */, + EABD46A81857A0C700A5F081 /* Coverage */, + EABD46A91857A0C700A5F081 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EABD46C91857A0F300A5F081 /* Build configuration list for PBXNativeTarget "KIF Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EABD46CA1857A0F300A5F081 /* Debug */, + EABD46CB1857A0F300A5F081 /* Coverage */, + EABD46CC1857A0F300A5F081 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EB60ECD8177F8C84005A041A /* Build configuration list for PBXNativeTarget "Test Host" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EB60ECD9177F8C84005A041A /* Debug */, + EBAE490217A5B1380005EE19 /* Coverage */, + EB60ECDA177F8C84005A041A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AAB0725F139719AC008AF393 /* Project object */; +} diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF.xcodeproj/xcshareddata/xcschemes/KIF Documentation.xcscheme b/examples/InterstitialUnifiedDemand/KIF-master/KIF.xcodeproj/xcshareddata/xcschemes/KIF Documentation.xcscheme new file mode 100755 index 000000000..f2b61e31f --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF.xcodeproj/xcshareddata/xcschemes/KIF Documentation.xcscheme @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF.xcodeproj/xcshareddata/xcschemes/KIF.xcscheme b/examples/InterstitialUnifiedDemand/KIF-master/KIF.xcodeproj/xcshareddata/xcschemes/KIF.xcscheme new file mode 100755 index 000000000..04bc9ea04 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF.xcodeproj/xcshareddata/xcschemes/KIF.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIF.xcodeproj/xcshareddata/xcschemes/KIFFramework.xcscheme b/examples/InterstitialUnifiedDemand/KIF-master/KIF.xcodeproj/xcshareddata/xcschemes/KIFFramework.xcscheme new file mode 100755 index 000000000..9c3794aa4 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIF.xcodeproj/xcshareddata/xcschemes/KIFFramework.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIFFramework/Info.plist b/examples/InterstitialUnifiedDemand/KIF-master/KIFFramework/Info.plist new file mode 100755 index 000000000..d3de8eefb --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIFFramework/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/KIFFramework/KIF.h b/examples/InterstitialUnifiedDemand/KIF-master/KIFFramework/KIF.h new file mode 100755 index 000000000..ce3bc0300 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/KIFFramework/KIF.h @@ -0,0 +1,42 @@ +// +// KIF.h +// KIF +// +// Created by Shane Zatezalo on 4/7/15. +// Copyright (c) 2015 Lottadot LLC. All rights reserved. +// + +#import +#import +#import + +//! Project version number for KIF. +FOUNDATION_EXPORT double KIFVersionNumber; + +//! Project version string for KIF. +FOUNDATION_EXPORT const unsigned char KIFVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import \ No newline at end of file diff --git a/examples/InterstitialUnifiedDemand/KIF-master/LICENSE b/examples/InterstitialUnifiedDemand/KIF-master/LICENSE new file mode 100755 index 000000000..3eaf7fae8 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/LICENSE @@ -0,0 +1,15 @@ +KIF +Copyright 2011 Square, Inc. +A full list of contributors is available at https://github.com/square/KIF/contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/examples/InterstitialUnifiedDemand/KIF-master/README.md b/examples/InterstitialUnifiedDemand/KIF-master/README.md new file mode 100755 index 000000000..abc13db86 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/README.md @@ -0,0 +1,316 @@ +[![Build Status](https://travis-ci.org/kif-framework/KIF.svg?branch=master)](https://travis-ci.org/kif-framework/KIF) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![CocoaPod Version](https://img.shields.io/cocoapods/v/KIF.svg?style=flat)](https://cocoapods.org) + +KIF iOS Integration Testing Framework +===================================== + +KIF, which stands for Keep It Functional, is an iOS integration test framework. It allows for easy automation of iOS apps by leveraging the accessibility attributes that the OS makes available for those with visual disabilities. + +KIF builds and performs the tests using a standard `XCTest` testing target. Testing is conducted synchronously in the main thread (running the run loop to force the passage of time) allowing for more complex logic and composition. This also allows KIF to take advantage of the Xcode 5 Test Navigator, command line build tools, and Bot test reports. [Find out more about Xcode 5 features.](https://developer.apple.com/technologies/tools/whats-new.html) + +**KIF uses undocumented Apple APIs.** This is true of most iOS testing frameworks, and is safe for testing purposes, but it's important that KIF does not make it into production code, as it will get your app submission denied by Apple. Follow the instructions below to ensure that KIF is configured correctly for your project. + +**Note:** KIF 2.0 is not API compatible with KIF 1.0 and uses a different test execution mechanism. KIF 1.0 can be found in the [Releases](https://github.com/kif-framework/KIF/releases/) section or on [CocoaPods](http://cocoapods.org). + +Features +-------- + +#### Minimizes Indirection +All of the tests for KIF are written in Objective C. This allows for maximum integration with your code while minimizing the number of layers you have to build. + +#### Easy Configuration +KIF integrates directly into your Xcode project, so there's no need to run an additional web server or install any additional packages. + +#### Wide OS coverage +KIF's test suite has been run against iOS 5.1 and above (including iOS 8), though lower versions will likely work. + +#### Test Like a User +KIF attempts to imitate actual user input. Automation is done using tap events wherever possible. + +#### Automatic Integration with Xcode 5 Testing Tools +Xcode 5 introduces [new testing and continuous integration tools](https://developer.apple.com/technologies/tools/whats-new.html) built on the same testing platform as KIF. You can easily run a single KIF test with the Test Navigator or kick off nightly acceptance tests with Bots. + +See KIF in Action +----------------- + +KIF uses techniques described below to validate its internal functionality. You can see a test suite that exercises its entire functionality by simply building and testing the KIF scheme with ⌘U. Look at the tests in the "KIF Tests" group for ideas on how to build your own tests. + +Installation (with CocoaPods) +----------------------------- + +[CocoaPods](http://cocoapods.org) are the easiest way to get set up with KIF. + +The first thing you will want to do is set up a test target you will be using for KIF. You may already have one named *MyApplication*_Tests if you selected to automatically create unit tests. If you did, you can keep using it if you aren't using it for unit tests. Otherwise, follow these directions to create a new one. + +Select your project in Xcode and click on "Add Target" in the bottom left corner of the editor. Select iOS -> Test -> iOS Unit Testing Bundle. Give it a product name like "Acceptance Tests", "UI Tests", or something that indicates the intent of your testing process. + +The testing target will add a header and implementation file, likely "Acceptance_Tests.m/h" to match your target name. Delete those. + +Once your test target set up, add the following to your Podfile file. Use your target's name as appropriate. + +```Ruby +target 'Acceptance Tests', :exclusive => true do + pod 'KIF', '~> 3.0', :configurations => ['Debug'] +end +``` + +The `:exclusive => true` option will prevent Cocoapods from including dependencies from your main target in your test target causing double-linking issues when you test link against the app. + +After running `pod install` complete the tasks in [**Final Test Target Configurations**](#final-test-target-configurations) below for the final details on getting your tests to run. + +Note: if you are using KIF with OCUnit, you need to use the OCUnit version of KIF as follows: + +```Ruby +target 'Acceptance Tests', :exclusive => true do + pod 'KIF/OCUnit', '~> 3.0' +end +``` + +Installation (from GitHub) +-------------------------- + +To install KIF, you'll need to link the libKIF static library directly into your application. Download the source from the [kif-framework/KIF](https://github.com/kif-framework/KIF/) and follow the instructions below. The screenshots are from Xcode 6 on Yosemite, but the instructions should be the same for Xcode 5 or later on any OS version. + +We'll be using a simple project as an example, and you can find it in `Documentation/Examples/Testable Swift` in this repository. + +![Simple App](https://github.com/kif-framework/KIF/raw/master/Documentation/Images/Simple App.png) + + +### Add KIF to your project files +The first step is to add the KIF project into the ./Frameworks/KIF subdirectory of your existing app. If your project uses Git for version control, you can use submodules to make updating in the future easier: + +``` +cd /path/to/MyApplicationSource +mkdir Frameworks +git submodule add https://github.com/kif-framework/KIF.git Frameworks/KIF +``` + +If you're not using Git, simply download the source and copy it into the `./Frameworks/KIF` directory. + +### Add KIF to Your Workspace +Let your project know about KIF by adding the KIF project into a workspace along with your main project. Find the `KIF.xcodeproj` file in Finder and drag it into the Project Navigator (⌘1). + +![Added KIF to the project](https://github.com/kif-framework/KIF/raw/master/Documentation/Images/Added KIF to Project.png) + + +### Create a Testing Target +You'll need to create a test target for your app. You may already have one named *MyApplication*Tests if you selected to automatically create unit tests when you created the project. If you did, you can keep using it if you aren't using it for unit tests. Otherwise, follow these directions to create a new one. + +Select your project in Xcode and click on "Add Target" in the bottom left corner of the editor. Select iOS -> Test -> iOS Unit Testing Bundle. Give it a product name like "Acceptance Tests", "UI Tests", or something that indicates the intent of your testing process. + +The testing target will add a header and implementation file, likely "Acceptance_Tests.m/h" to match your target name. Delete those. + +### Configure the Testing Target +Now that you have a target for your tests, add the tests to that target. With the project settings still selected in the Project Navigator, and the new integration tests target selected in the project settings, select the "Build Phases" tab. Under the "Link Binary With Libraries" section, hit the "+" button. In the sheet that appears, select "libKIF.a" and click "Add". Repeat the process for CoreGraphics.framework. + +KIF requires the IOKit.framework, but it is not located with the other system frameworks. To link to it, add "-framework IOKit" to the "Other Linker Flags" build setting. + +![Add libKIF library screen shot](https://github.com/kif-framework/KIF/raw/master/Documentation/Images/Add Library.png) + +![Add libKIF library screen shot](https://github.com/kif-framework/KIF/raw/master/Documentation/Images/Add Library Sheet.png) + +KIF takes advantage of Objective C's ability to add categories on an object, but this isn't enabled for static libraries by default. To enable this, add the `-ObjC` flag to the "Other Linker Flags" build setting on your test bundle target as shown below. + +![Add category linker flags screen shot](https://github.com/kif-framework/KIF/raw/master/Documentation/Images/Add Category Linker Flags.png) + +Read **Final Test Target Configurations** below for the final details on getting your tests to run. + +Final Test Target Configurations +-------------------------------- + +You need your tests to run hosted in your application. **Xcode does this for you by default** when creating a new testing bundle target, but if you're migrating an older bundle, follow the steps below. + +First add your application by selecting "Build Phases", expanding the "Target Dependencies" section, clicking on the "+" button, and in the new sheet that appears selecting your application target and clicking "Add". + +Next, configure your bundle loader. In "Build Settings", expand "Linking" and edit "Bundle Loader" to be `$(BUILT_PRODUCTS_DIR)/MyApplication.app/MyApplication` where *MyApplication* is the name of your app. Expand the "Testing" section and edit "Test Host" to be `$(BUNDLE_LOADER)`. Also make sure that "Wrapper Extension" is set to "xctest". + +The last step is to configure your unit tests to run when you trigger a test (⌘U). Click on your scheme name and select "Edit Scheme…". Click on "Test" in the sidebar followed by the "+" in the bottom left corner. Select your testing target and click "OK". + +## Example test cases +With your project configured to use KIF, it's time to start writing tests. There are two main classes used in KIF testing: the test case (`KIFTestCase`, subclass of `XCTestCase`) and the UI test actor (`KIFUITestActor`). The XCTest test runner loads the test case classes and executes their test. Inside these tests, the tester performs the UI operations which generally imitate a user interaction. Three of the most common tester actions are "tap this view," "enter text into this view," and "wait for this view." These steps are included as factory methods on `KIFUITestActor` in the base KIF implementation. + +KIF relies on the built-in accessibility of iOS to perform its test steps. As such, it's important that your app is fully accessible. This is also a great way to ensure that your app is usable by everyone. Giving your views reasonable labels is usually a good place to start when making your application accessible. More details are available in [Apple's Documentation](http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/iPhoneAccessibility/Making_Application_Accessible/Making_Application_Accessible.html#//apple_ref/doc/uid/TP40008785-CH102-SW5). + +The first step is to create a test class to test some functionality. In our case, we will create a login test (`LoginTests`). Create a new class that inherits from KIFTestCase. You may have to update the import to point to ``. The test method name provides a unique identifier. Your `KIFTestCase` subclass should look something like this: + +*LoginTestCase.h* + +```objective-c +#import + +@interface LoginTests : KIFTestCase +@end +``` + +*LoginTestCase.m* + +```objective-c +#import "LoginTests.h" +#import "KIFUITestActor+EXAdditions.h" + +@implementation LoginTests + +- (void)beforeEach +{ + [tester navigateToLoginPage]; +} + +- (void)afterEach +{ + [tester returnToLoggedOutHomeScreen]; +} + +- (void)testSuccessfulLogin +{ + [tester enterText:@"user@example.com" intoViewWithAccessibilityLabel:@"Login User Name"]; + [tester enterText:@"thisismypassword" intoViewWithAccessibilityLabel:@"Login Password"]; + [tester tapViewWithAccessibilityLabel:@"Log In"]; + + // Verify that the login succeeded + [tester waitForTappableViewWithAccessibilityLabel:@"Welcome"]; +} + +@end +``` + +Most of the tester actions in the test are already defined by the KIF framework, but `-navigateToLoginPage` and `-returnToLoggedOutHomeScreen` are not. These are examples of custom actions which are specific to your application. Adding such steps is easy, and is done using a factory method in a category of `KIFUITestActor`, similar to how we added the scenario. + +*KIFUITestActor+EXAdditions.h* + +```objective-c +#import + +@interface KIFUITestActor (EXAdditions) + +- (void)navigateToLoginPage; +- (void)returnToLoggedOutHomeScreen; + +@end +``` + +*KIFUITestActor+EXAdditions.m* + +```objective-c +#import "KIFUITestActor+EXAdditions.h" + +@implementation KIFUITestActor (EXAdditions) + +- (void)navigateToLoginPage +{ + [self tapViewWithAccessibilityLabel:@"Login/Sign Up"]; + [self tapViewWithAccessibilityLabel:@"Skip this ad"]; +} + +- (void)returnToLoggedOutHomeScreen +{ + [self tapViewWithAccessibilityLabel:@"Logout"]; + [self tapViewWithAccessibilityLabel:@"Logout"]; // Dismiss alert. +} + +@end +``` + +Everything should now be configured. When you run the integration tests using the test button, ⌘U, or the Xcode 5 Test Navigator (⌘5). + +Use with other testing frameworks +--------------------------------- + +`KIFTestCase` is not necessary for running KIF tests. Tests can run directly in `XCTestCase` or any subclass. The basic requirement is that when you call `tester` or `system`, `self` must be an instance of `XCTestCase`. + +For example, the following [Specta](https://github.com/specta/specta) test works without any changes to KIF or Specta: + +```objective-c +#import +#import + +SpecBegin(App) + +describe(@"Tab controller", ^{ + + it(@"should show second view when I tap on the second tab", ^{ + [tester tapViewWithAccessibilityLabel:@"Second" traits:UIAccessibilityTraitButton]; + [tester waitForViewWithAccessibilityLabel:@"Second View"]; + }); + +}); + +SpecEnd +``` + +If you want to use KIF with a test runner that does not subclass `XCTestCase`, your runner class just needs to implement the `KIFTestActorDelegate` protocol which contains two required methods. + + - (void)failWithException:(NSException *)exception stopTest:(BOOL)stop; + - (void)failWithExceptions:(NSArray *)exceptions stopTest:(BOOL)stop; + +In the first case, the test runner should log the exception and halt the test execution if `stop` is `YES`. In the second, the runner should log all the exceptions and halt the test execution if `stop` is `YES`. The exceptions take advantage of KIF's extensions to `NSException` that include the `lineNumber` and `filename` in the exception's `userData` to record the error's origin. + +## Use with Swift + +Since it's easy to combine Swift and Objective-C code in a single project, KIF is fully capable of testing apps written in both Objective-C and Swift. + +If you want to write your test cases in Swift, you'll need to keep two things in mind. + +1. Your test bundle's bridging header will need to `#import `, since KIF is a static library and not a header. +2. The `tester` and `system` keywords are C preprocessor macros which aren't available in Swift. You can easily write a small extension to `XCTestCase` or any other class to access them: + +```swift +import KIF + +extension XCTestCase { + func tester(_ file : String = __FILE__, _ line : Int = __LINE__) -> KIFUITestActor { + return KIFUITestActor(inFile: file, atLine: line, delegate: self) + } + + func system(_ file : String = __FILE__, _ line : Int = __LINE__) -> KIFSystemTestActor { + return KIFSystemTestActor(inFile: file, atLine: line, delegate: self) + } +} + +extension KIFTestActor { + func tester(_ file : String = __FILE__, _ line : Int = __LINE__) -> KIFUITestActor { + return KIFUITestActor(inFile: file, atLine: line, delegate: self) + } + + func system(_ file : String = __FILE__, _ line : Int = __LINE__) -> KIFSystemTestActor { + return KIFSystemTestActor(inFile: file, atLine: line, delegate: self) + } +} +``` + + +Troubleshooting +--------------- + +### Simulator launches but app doesn't appear, steps time out after 10 seconds + +This issue occurs when XCTest does not have a valid test host. Reread the instructions above with regards to the "Bundle Loader" and "Test Host" settings. You may have missed something. + +### Step fails because a view cannot be found + +If KIF is failing to find a view, the most likely cause is that the view doesn't have its accessibility label set. If the view is defined in a xib, then the label can be set using the inspector. If it's created programmatically, simply set the accessibilityLabel attribute to the desired label. + +If the label is definitely set correctly, take a closer look at the error given by KIF. This error should tell you more specifically why the view was not accessible. If you are using `-waitForTappableViewWithAccessibilityLabel:`, then make sure the view is actually tappable. For items such as labels which cannot become the first responder, you may need to use `-waitForViewWithAccessibilityLabel:` instead. + +### Unrecognized selector when first trying to run + +If the first time you try to run KIF you get the following error: + + 2011-06-13 13:54:53.295 Testable (Integration Tests)[12385:207] -[NSFileManager createUserDirectory:]: unrecognized selector sent to instance 0x4e02830 + 2011-06-13 13:54:53.298 Testable (Integration Tests)[12385:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSFileManager createUserDirectory:]: unrecognized selector sent to instance 0x4e02830' + +or if you get another "unrecognized selector" error inside the KIF code, make sure that you've properly set the -ObjC flag as described above. Without this flag your app can't access the category methods that are necessary for KIF to work properly. + +Continuous Integration +---------------------- + +A continuous integration (CI) process is highly recommended and is extremely useful in ensuring that your application stays functional. The easiest way to do this will be with Xcode 5, either using Bots, or Jenkins or another tool that uses xcodebuild. For tools using xcodebuild, review the manpage for instructions on using test destinations. + +Contributing +------------ + +We're glad you're interested in KIF, and we'd love to see where you take it. + +Any contributors to the master KIF repository must sign the [Individual Contributor License Agreement (CLA)](https://spreadsheets.google.com/spreadsheet/viewform?formkey=dDViT2xzUHAwRkI3X3k5Z0lQM091OGc6MQ&ndplr=1). It's a short form that covers our bases and makes sure you're eligible to contribute. + +When you have a change you'd like to see in the master repository, [send a pull request](https://github.com/kif-framework/KIF/pulls). Before we merge your request, we'll make sure you're in the list of people who have signed a CLA. + +Thanks, and happy testing! diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/AnimationViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/AnimationViewController.m new file mode 100755 index 000000000..d8f6caeaa --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/AnimationViewController.m @@ -0,0 +1,25 @@ +// +// AnimationViewController.m +// KIF +// +// Created by Hendrik von Prince on 11.11.14. +// +// + +#import + +@interface AnimationViewController : UIViewController +@property (strong, nonatomic) IBOutlet UILabel *testLabel; +@end + +@implementation AnimationViewController + +-(void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + // simulate a time-consuming calculation + sleep(2); + self.testLabel.hidden = NO; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/AppDelegate.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/AppDelegate.m new file mode 100755 index 000000000..07fdfbd6c --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/AppDelegate.m @@ -0,0 +1,22 @@ +// +// AppDelegate.m +// Test Suite +// +// Created by Brian Nickel on 6/25/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder +@property (strong, nonatomic) UIWindow *window; +@end + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + return YES; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/BackgroundViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/BackgroundViewController.m new file mode 100755 index 000000000..a0ef91a71 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/BackgroundViewController.m @@ -0,0 +1,33 @@ +// +// BackgroundViewController.m +// KIF +// +// Created by Jordan Zucker on 5/18/15. +// +// + +@interface BackgroundViewController : UIViewController +@property (nonatomic, weak) IBOutlet UILabel *label; +@end + +@implementation BackgroundViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleApplicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil]; + self.label.isAccessibilityElement = YES; + self.label.text = @"Start"; + self.label.accessibilityLabel = self.label.text; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (void)handleApplicationDidEnterBackground:(NSNotification *)notification { + self.label.text = @"Back"; + self.label.accessibilityLabel = self.label.text; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/CollectionViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/CollectionViewController.m new file mode 100755 index 000000000..66f3bcaaf --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/CollectionViewController.m @@ -0,0 +1,58 @@ +// +// CollectionViewController.m +// Test Suite +// +// Created by Tony Mann on 11/5/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +@interface CollectionViewCell : UICollectionViewCell +@property (strong, nonatomic) IBOutlet UILabel *label; +@end + +@implementation CollectionViewCell +@end + +@interface CollectionViewController : UICollectionViewController +@end + +@implementation CollectionViewController + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + [self.collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:@"CollectionViewCell"]; + } + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; +} + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section +{ + return 200; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath +{ + CollectionViewCell *cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell" forIndexPath:indexPath]; + + if (indexPath.item == 0) { + cell.accessibilityLabel = @"First Cell"; + cell.label.text = @"First"; + } else if (indexPath.item == [collectionView numberOfItemsInSection:indexPath.section] - 1) { + cell.accessibilityLabel = @"Last Cell"; + cell.label.text = @"Last"; + } else { + cell.accessibilityLabel = @"Filler"; + cell.label.text = @"Filler"; + } + + return cell; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Default-568h@2x.png b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Default-568h@2x.png new file mode 100755 index 000000000..0891b7aab Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Default-568h@2x.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Default.png b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Default.png new file mode 100755 index 000000000..4c8ca6f69 Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Default.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Default@2x.png b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Default@2x.png new file mode 100755 index 000000000..35b84cffe Binary files /dev/null and b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Default@2x.png differ diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/GestureViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/GestureViewController.m new file mode 100755 index 000000000..a41f701ab --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/GestureViewController.m @@ -0,0 +1,59 @@ +// +// GestureViewController.m +// KIF +// +// Created by Brian Nickel on 7/28/13. +// +// + +#import + +@interface GestureViewController : UIViewController +@property (weak, nonatomic) IBOutlet UILabel *lastSwipeDescriptionLabel; +@property (weak, nonatomic) IBOutlet UILabel *lastVelocityVeluesLabel; +@property (weak, nonatomic) IBOutlet UILabel *bottomRightLabel; +@property (weak, nonatomic) IBOutlet UIScrollView *scrollView; +@property (weak, nonatomic) IBOutlet UILabel *panAreaLabel; + +@end + +@implementation GestureViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + self.scrollView.contentSize = CGRectUnion(self.scrollView.bounds, self.bottomRightLabel.frame).size; +} + +- (IBAction)swipedUp:(id)sender +{ + self.lastSwipeDescriptionLabel.text = @"Up"; +} + +- (IBAction)swipedDown:(id)sender +{ + self.lastSwipeDescriptionLabel.text = @"Down"; +} + +- (IBAction)swipedLeft:(id)sender +{ + self.lastSwipeDescriptionLabel.text = @"Left"; +} + +- (IBAction)swipedRight:(id)sender +{ + self.lastSwipeDescriptionLabel.text = @"Right"; +} + +- (IBAction)hadlePanGestureRecognizer:(UIPanGestureRecognizer *)sender +{ + self.lastVelocityVeluesLabel.text = [self formattedVelocityValues:[sender velocityInView:self.panAreaLabel]]; +} + +- (NSString*)formattedVelocityValues:(CGPoint)velocity +{ + return [NSString stringWithFormat:@"X:%.2f Y:%.2f", velocity.x, velocity.y]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/PickerController.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/PickerController.m new file mode 100755 index 000000000..f468adca2 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/PickerController.m @@ -0,0 +1,141 @@ + +@interface PickerController : UIViewController + +@property (weak, nonatomic, readonly) IBOutlet UITextField *dateSelectionTextField; +@property (weak, nonatomic, readonly) IBOutlet UITextField *dateTimeSelectionTextField; +@property (weak, nonatomic, readonly) IBOutlet UITextField *timeSelectionTextField; +@property (weak, nonatomic, readonly) IBOutlet UITextField *countdownSelectionTextField; +@property (strong, nonatomic) UIDatePicker *datePicker; +@property (strong, nonatomic) UIDatePicker *dateTimePicker; +@property (strong, nonatomic) UIDatePicker *timePicker; +@property (strong, nonatomic) UIDatePicker *countdownPicker; +@property (strong, nonatomic) IBOutlet UIPickerView *phoneticPickerView; + +@end + +@implementation PickerController + +@synthesize datePicker; +@synthesize dateTimePicker; +@synthesize countdownPicker; +@synthesize timePicker; +@synthesize dateSelectionTextField; +@synthesize dateTimeSelectionTextField; +@synthesize timeSelectionTextField; +@synthesize countdownSelectionTextField; +@synthesize phoneticPickerView; + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(30, 215, 260, 35)]; + datePicker.datePickerMode = UIDatePickerModeDate; + datePicker.hidden = NO; + [datePicker addTarget:self action:@selector(datePickerChanged:) + forControlEvents:UIControlEventValueChanged]; + [datePicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]]; + + dateSelectionTextField.placeholder = NSLocalizedString(@"Date Selection", nil); + dateSelectionTextField.returnKeyType = UIReturnKeyDone; + dateSelectionTextField.inputView = datePicker; + dateSelectionTextField.accessibilityLabel = @"Date Selection"; + + dateTimePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(30, 215, 260, 35)]; + dateTimePicker.datePickerMode = UIDatePickerModeDateAndTime; + [dateTimePicker addTarget:self action:@selector(dateTimePickerChanged:) + forControlEvents:UIControlEventValueChanged]; + [dateTimePicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]]; + + dateTimeSelectionTextField.placeholder = NSLocalizedString(@"Date Time Selection", nil); + dateTimeSelectionTextField.returnKeyType = UIReturnKeyDone; + dateTimeSelectionTextField.inputView = dateTimePicker; + dateTimeSelectionTextField.accessibilityLabel = @"Date Time Selection"; + + timePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(30, 215, 260, 35)]; + timePicker.datePickerMode = UIDatePickerModeTime; + [timePicker addTarget:self action:@selector(timePickerChanged:) + forControlEvents:UIControlEventValueChanged]; + [timePicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]]; + + timeSelectionTextField.placeholder = NSLocalizedString(@"Time Selection", nil); + timeSelectionTextField.returnKeyType = UIReturnKeyDone; + timeSelectionTextField.inputView = timePicker; + timeSelectionTextField.accessibilityLabel = @"Time Selection"; + + countdownPicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(30, 215, 260, 35)]; + countdownPicker.datePickerMode = UIDatePickerModeCountDownTimer; + [countdownPicker addTarget:self action:@selector(countdownPickerChanged:) + forControlEvents:UIControlEventValueChanged]; + [countdownPicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]]; + + countdownSelectionTextField.placeholder = NSLocalizedString(@"Countdown Selection", nil); + countdownSelectionTextField.returnKeyType = UIReturnKeyDone; + countdownSelectionTextField.inputView = countdownPicker; + countdownSelectionTextField.accessibilityLabel = @"Countdown Selection"; + +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void)datePickerChanged:(id)sender { + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + dateFormatter.dateStyle = NSDateFormatterMediumStyle; + NSString *string = [NSString stringWithFormat:@"%@", + [dateFormatter stringFromDate:datePicker.date]]; + self.dateSelectionTextField.text = string; +} + +- (void)dateTimePickerChanged:(id)sender { + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:@"MMM d, hh:mm aa"]; + NSString *string = [NSString stringWithFormat:@"%@", + [dateFormatter stringFromDate:dateTimePicker.date]]; + self.dateTimeSelectionTextField.text = string; +} + +- (void)timePickerChanged:(id)sender { + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:@"h:mm a"]; + NSString *string = [dateFormatter stringFromDate:self.timePicker.date]; + self.timeSelectionTextField.text = string; +} + +- (void)countdownPickerChanged:(id)sender { + self.countdownSelectionTextField.text = [NSString stringWithFormat:@"%f", self.countdownPicker.countDownDuration]; +} + +- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView +{ + return 1; +} + +- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component +{ + return 3; +} + +- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component +{ + return [@[@"Alpha", @"Bravo", @"Charlie"] objectAtIndex:row]; +} + +- (NSString *)pickerView:(UIPickerView *)pickerView accessibilityLabelForComponent:(NSInteger)component +{ + return @"Call Sign"; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/ScrollViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/ScrollViewController.m new file mode 100755 index 000000000..926e75517 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/ScrollViewController.m @@ -0,0 +1,68 @@ +// +// ScrollViewController.m +// KIF +// +// Created by Hilton Campbell on 2/20/14. +// +// + +#import + +@interface ScrollViewController : UIViewController +@property (weak, nonatomic) IBOutlet UIScrollView *scrollView; +@end + +@implementation ScrollViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + self.scrollView.accessibilityLabel = @"Scroll View"; + self.scrollView.contentSize = CGSizeMake(2000, 2000); + self.scrollView.delegate = self; + + UIButton *bottomButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; + [bottomButton setTitle:@"Down" forState:UIControlStateNormal]; + bottomButton.backgroundColor = [UIColor greenColor]; + bottomButton.frame = CGRectMake(1000, 1500, 100, 50); + [self.scrollView addSubview:bottomButton]; + + UIButton *upButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; + [upButton setTitle:@"Up" forState:UIControlStateNormal]; + upButton.backgroundColor = [UIColor greenColor]; + upButton.frame = CGRectMake(1000, 500, 100, 50); + [self.scrollView addSubview:upButton]; + + UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; + [rightButton setTitle:@"Right" forState:UIControlStateNormal]; + rightButton.backgroundColor = [UIColor greenColor]; + rightButton.frame = CGRectMake(1500, 1000, 100, 50); + [self.scrollView addSubview:rightButton]; + + UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; + [leftButton setTitle:@"Left" forState:UIControlStateNormal]; + leftButton.backgroundColor = [UIColor greenColor]; + leftButton.frame = CGRectMake(500, 1000, 100, 50); + [self.scrollView addSubview:leftButton]; + + UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(1500, 1500, 100, 100)]; + textView.backgroundColor = [UIColor redColor]; + textView.accessibilityLabel = @"TextView"; + [self.scrollView addSubview:textView]; +} + +#pragma mark UIScrollViewDelegate Methods + +- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView +{ + return scrollView; +} + +- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale +{ + // do nothing +} + + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/ShowHideViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/ShowHideViewController.m new file mode 100755 index 000000000..b8565c7c7 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/ShowHideViewController.m @@ -0,0 +1,52 @@ +// +// ShowHideViewController.m +// Test Suite +// +// Created by Brian K Nickel on 6/26/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import + +@interface ShowHideViewController : UIViewController +@property (weak, nonatomic) IBOutlet UIButton *aButton; +@property (weak, nonatomic) IBOutlet UIButton *bButton; +@property (weak, nonatomic) IBOutlet UIView *obscuringView; +@property (weak, nonatomic) IBOutlet UILabel *contentLabel; +@end + +@implementation ShowHideViewController + +- (IBAction)coverUncoverClicked +{ + CGPoint aCenter = self.aButton.center; + CGPoint bCenter = self.bButton.center; + CGPoint center = self.obscuringView.center; + + [UIView animateWithDuration:2 animations:^{ + self.obscuringView.center = (ABS(center.y - aCenter.y) < ABS(center.y - bCenter.y)) ? bCenter : aCenter; + }]; +} + +- (IBAction)delayedButtonClicked +{ + double delayInSeconds = 2.0; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); + dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ + self.contentLabel.hidden = !self.contentLabel.hidden; + [[NSNotificationCenter defaultCenter] postNotificationName:@"DelayedShowHide" object:[UIApplication sharedApplication]]; + }); +} + +- (IBAction)instantButtonClicked +{ + self.contentLabel.hidden = !self.contentLabel.hidden; + [[NSNotificationCenter defaultCenter] postNotificationName:@"InstantShowHide" object:[UIApplication sharedApplication]]; +} + +- (IBAction)toggleSelection:(UIButton *)sender +{ + sender.selected = !sender.selected; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/SystemAlertViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/SystemAlertViewController.m new file mode 100755 index 000000000..02b785fde --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/SystemAlertViewController.m @@ -0,0 +1,47 @@ +// +// SystemAlertViewController.m +// KIF +// +// Created by Joe Masilotti on 12/1/14. +// +// + +#import +#import + +@interface SystemAlertViewController : UIViewController +@property (nonatomic, strong) CLLocationManager *locationManager; +@end + +@implementation SystemAlertViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.locationManager = [[CLLocationManager alloc] init]; +} + +- (IBAction)requestLocationServicesAccess { + if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { + [self.locationManager requestWhenInUseAuthorization]; + } + [self.locationManager startUpdatingLocation]; +} + +- (IBAction)requestPhotosAccess { + UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; + [self presentViewController:imagePickerController animated:YES completion:nil]; +} + +- (IBAction)requestNotificationScheduling { + if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) { + UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert categories:nil]; + [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; + } +} + +- (IBAction)requestLocationServicesAndNotificicationsSchedulingAccesses { + [self requestLocationServicesAccess]; + [self requestNotificationScheduling]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/TableViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/TableViewController.m new file mode 100755 index 000000000..5b7104854 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/TableViewController.m @@ -0,0 +1,55 @@ +// +// TableViewController.m +// KIF +// +// Created by Hilton Campbell on 4/12/14. +// +// + +@interface TableViewController : UITableViewController + +@end + +@implementation TableViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + self.navigationItem.rightBarButtonItem = self.editButtonItem; +} + +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath +{ + // Do nothing, this method is needed to activate reordering in edit mode +} + +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { + + return YES; + +} + +- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { + + return UITableViewCellEditingStyleDelete; + +} + +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Since the table view uses static cells, it is not possible to remove the row, + // so let's just change the label to have something to check in unit tests + UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; + cell.textLabel.text = @"Deleted"; + [self.tableView setEditing:NO animated:YES]; + + // NOTE: These don't work very well + // [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; + // [self.tableView reloadData]; + } + +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/TapViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/TapViewController.m new file mode 100755 index 000000000..7ffbab72c --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/TapViewController.m @@ -0,0 +1,103 @@ +// +// TapViewController.m +// Test Suite +// +// Created by Brian Nickel on 6/26/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import + +@interface TapViewController : UIViewController +@property (weak, nonatomic) IBOutlet UISlider *slider; +@property (weak, nonatomic) IBOutlet UILabel *lineBreakLabel; +@property (weak, nonatomic) IBOutlet UILabel *memoryWarningLabel; +@property (weak, nonatomic) IBOutlet UILabel *selectedPhotoClass; +@property (weak, nonatomic) IBOutlet UITextField *otherTextField; +@property (weak, nonatomic) IBOutlet UITextField *greetingTextField; +@property (weak, nonatomic) IBOutlet UIStepper *stepper; +@property (weak, nonatomic) IBOutlet UILabel *stepperValueLabel; +@end + +@implementation TapViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(memoryWarningNotification:) name:UIApplicationDidReceiveMemoryWarningNotification object:[UIApplication sharedApplication]]; + self.lineBreakLabel.accessibilityLabel = @"A\nB\nC\n\n"; + self.stepper.isAccessibilityElement = YES; + self.stepper.accessibilityLabel = @"theStepper"; +} + +- (void)memoryWarningNotification:(NSNotification *)notification +{ + self.memoryWarningLabel.hidden = NO; +} + +- (IBAction)hideMemoryWarning +{ + self.memoryWarningLabel.hidden = YES; +} + +- (IBAction)toggleSelected:(UIButton *)sender +{ + sender.selected = !sender.selected; + self.slider.value = self.slider.value + 1; + double delayInSeconds = 3.0; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); + dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ + self.slider.value = self.slider.value - 1; + }); +} + +- (IBAction)sliderValueChanged:(UISlider *)sender +{ + sender.accessibilityValue = [NSString stringWithFormat:@"%d", (int)roundf(sender.value)]; +} + +- (IBAction)pickPhoto:(id)sender +{ + UIImagePickerController *controller = [[UIImagePickerController alloc] init]; + controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; + controller.delegate = self; + [self presentViewController:controller animated:YES completion:nil]; +} + +- (IBAction)stepperValueChanged:(UIStepper *)sender forEvent:(UIEvent *)event +{ + self.stepperValueLabel.text = [NSString stringWithFormat:@"%ld", (long)sender.value]; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (BOOL)textFieldShouldReturn:(UITextField *)textField +{ + [textField resignFirstResponder]; + + if (textField == self.otherTextField) { + [self.greetingTextField becomeFirstResponder]; + } + return NO; +} + +- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string +{ + if (textField == self.otherTextField && range.length != 0) { + self.greetingTextField.text = @"Deleted something."; + } + + return YES; +} + +#pragma mark - + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + self.selectedPhotoClass.text = NSStringFromClass([info[UIImagePickerControllerOriginalImage] class]); + [self dismissViewControllerAnimated:YES completion:nil]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Test Host-Info.plist b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Test Host-Info.plist new file mode 100755 index 000000000..a9d00c725 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Test Host-Info.plist @@ -0,0 +1,42 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + NSLocationWhenInUseUsageDescription + To test system alert views. + UIMainStoryboardFile + MainStoryboard + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Test Host-Prefix.pch b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Test Host-Prefix.pch new file mode 100755 index 000000000..5e01c4e6b --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/Test Host-Prefix.pch @@ -0,0 +1,14 @@ +// +// Prefix header for all source files of the 'Test Host' target in the 'Test Host' project +// + +#import + +#ifndef __IPHONE_3_0 +#warning "This project uses features only available in iOS SDK 3.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/TestSuiteViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/TestSuiteViewController.m new file mode 100755 index 000000000..2e12873bc --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/TestSuiteViewController.m @@ -0,0 +1,59 @@ +// +// TestSuiteViewController.m +// Test Suite +// +// Created by Brian K Nickel on 6/26/13. +// Copyright (c) 2013 Brian Nickel. All rights reserved. +// + +#import + +@interface TestSuiteViewController : UITableViewController +@end + +@implementation TestSuiteViewController + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (indexPath.section != 1) { + return; + } + + switch (indexPath.row) { + case 0: + { + [[[UIAlertView alloc] initWithTitle:@"Alert View" message:@"Message" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Continue", nil] show]; + break; + } + + case 1: + { + break; + } + + case 2: + { + [[[UIActionSheet alloc] initWithTitle:@"Action Sheet" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Destroy" otherButtonTitles:@"A", @"B", nil] showInView:tableView]; + break; + } + + case 3: + { + Class AVCClass = NSClassFromString(@"UIActivityViewController"); + if (AVCClass) { + UIActivityViewController *controller = [[AVCClass alloc] initWithActivityItems:@[@"Hello World"] applicationActivities:nil]; + [self presentViewController:controller animated:YES completion:nil]; + } + break; + } + } +} + +#pragma mark - UIActionSheetDelegate + +- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex +{ + [[[UIAlertView alloc] initWithTitle:@"Alert View" message:@"Message" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Continue", nil] show]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/WebViewController.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/WebViewController.m new file mode 100755 index 000000000..0eadcf4d5 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/WebViewController.m @@ -0,0 +1,23 @@ +// +// WebViewController.m +// KIF +// +// Created by Joe Masilotti on 11/19/14. +// +// + +@interface WebViewController : UIViewController +@property (weak, nonatomic) IBOutlet UIWebView *webView; +@end + +@implementation WebViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + NSURL *url = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"]; + [self.webView loadRequest:[NSURLRequest requestWithURL:url]]; +} + +@end diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/en.lproj/InfoPlist.strings b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/en.lproj/InfoPlist.strings new file mode 100755 index 000000000..477b28ff8 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/en.lproj/MainStoryboard.storyboard b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/en.lproj/MainStoryboard.storyboard new file mode 100755 index 000000000..969ba78ef --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/en.lproj/MainStoryboard.storyboard @@ -0,0 +1,1804 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/index.html b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/index.html new file mode 100755 index 000000000..7e8ffb232 --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/index.html @@ -0,0 +1,14 @@ + + +

Testing with KIF

+

Page 1

+ A link + +
+ + + +
















+ Footer + + diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/main.m b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/main.m new file mode 100755 index 000000000..49dde022d --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/main.m @@ -0,0 +1,16 @@ +// +// main.m +// Test Host +// +// Created by Brian Nickel on 6/29/13. +// +// + +#import + +int main(int argc, char *argv[]) +{ + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, @"AppDelegate"); + } +} diff --git a/examples/InterstitialUnifiedDemand/KIF-master/Test Host/page2.html b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/page2.html new file mode 100755 index 000000000..37ba0a45a --- /dev/null +++ b/examples/InterstitialUnifiedDemand/KIF-master/Test Host/page2.html @@ -0,0 +1,6 @@ + + +

Testing with KIF

+

Page 2

+ + diff --git a/sdk/ANAdConstants.h b/sdk/ANAdConstants.h index fd194573e..a734cdebe 100644 --- a/sdk/ANAdConstants.h +++ b/sdk/ANAdConstants.h @@ -15,6 +15,11 @@ #import +typedef NS_ENUM(NSUInteger, ANCloseDelayType){ + ANCloseDelayTypeAbsolute = 0, + ANCloseDelayTypeRelative +}; + typedef NS_ENUM(NSInteger, ANAdResponseCode) { ANDefaultCode = -1, ANAdResponseSuccessful = 0, @@ -51,4 +56,25 @@ typedef NS_ENUM(NSUInteger, ANNativeAdNetworkCode) { ANNativeAdNetworkCodeAdColony, ANNativeAdNetworkCodeYahoo, ANNativeAdNetworkCodeCustom, -}; \ No newline at end of file +}; + +typedef NS_ENUM(NSUInteger, ANVideoEvent){ + ANVideoEventUnknown = 0, + ANVideoEventStart, + ANVideoEventQuartileFirst, + ANVideoEventQuartileMidPoint, + ANVideoEventQuartileThird, + ANVideoEventQuartileComplete, + ANVideoEventZoomRestore, + ANVideoEventZoomFullScreen, + ANVideoEventPlay, + ANVideoEventPause, + ANVideoEventResume, + ANVideoEventRewind, + ANVideoEventMute, + ANVideoEventUnMute, + ANVideoEventStop, + ANVideoEventCloseLinear, + ANVideoEventSkip, + ANVideoEventCreativeView +}; diff --git a/sdk/ANCustomAdapter.h b/sdk/ANCustomAdapter.h index bc0b1b08a..320dcdefa 100644 --- a/sdk/ANCustomAdapter.h +++ b/sdk/ANCustomAdapter.h @@ -61,3 +61,4 @@ - (void)didLoadInterstitialAd:(id)adapter; - (void)failedToDisplayAd; @end + diff --git a/sdk/ANInterstitialAd.h b/sdk/ANInterstitialAd.h index 9fe572af0..d331ceb04 100644 --- a/sdk/ANInterstitialAd.h +++ b/sdk/ANInterstitialAd.h @@ -16,6 +16,7 @@ #import "ANAdView.h" @protocol ANInterstitialAdDelegate; +@protocol ANVideoAdDelegate; /** This is the interface through which interstitial ads are (1) @@ -52,6 +53,11 @@ */ @property (nonatomic, readwrite, weak) id appEventDelegate; +/** + Delegate object that receives custom video event notifications from this + ANInterstitialAd. + */ +@property (nonatomic, readwrite, weak) id videoAdDelegate; /** The ad view's background color. If the color is fully or partially transparent, set opaque to NO to render an interstitial with a transparent background. @@ -81,6 +87,13 @@ */ @property (nonatomic, readwrite, assign) NSTimeInterval closeDelay; +/** + The delay counter between when an interstitial ad is displayed and when the + close button appears to the user. 0 = closeDelayTypeAbsolute and + 1 = closeDelayTypeRelative. Accepts ANCloseDelayType enum. + */ +@property (nonatomic, readwrite, assign) NSUInteger closeDelayType; + /** The set of allowed ad sizes for the interstitial ad. The set should contain CGSize values wrapped as NSValue objects. @@ -146,4 +159,18 @@ @endcode */ - (void)adFailedToDisplay:(ANInterstitialAd *)ad; + +@end + +@protocol ANVideoAdDelegate + +@optional +- (void) adStartedPlayingVideo:(id)ad; +- (void) adPausedVideo:(id)ad; +- (void) adResumedVideo:(id)ad; +- (void) adSkippedVideo:(id)ad; +- (void) adFinishedQuartileEvent:(ANVideoEvent)videoEvent withAd:(id)ad; +- (void) adFinishedPlayingCompleteVideo:(id)ad; +- (void) adMuted:(BOOL) isMuted withAd:(id)ad; + @end diff --git a/sdk/Resources/ANInterstitialAdViewController.xib b/sdk/Resources/ANInterstitialAdViewController.xib index a38be7c59..30d871c29 100644 --- a/sdk/Resources/ANInterstitialAdViewController.xib +++ b/sdk/Resources/ANInterstitialAdViewController.xib @@ -1,15 +1,14 @@ - + - + - @@ -18,9 +17,6 @@ - - -