diff --git a/.travis.yml b/.travis.yml index 3d3383034..0b411d657 100644 --- a/.travis.yml +++ b/.travis.yml @@ -98,3 +98,12 @@ matrix: - os: osx osx_image: xcode10.2 env: IPHONE_MODEL="iPhone X" IPAD_MODEL="iPad Air 2" IOS_VERSION="12.2" ACTION=int_test_3 DEST=ipad TARGET=lib SDK=sim + + # Builds + - os: osx + osx_image: xcode10.2 + env: DEST=tv TV_MODEL="Apple TV" TV_VERSION="12.2" ACTION=build TARGET=tv_runner SDK=tv_sim + # Analyze + - os: osx + osx_image: xcode10.2 + env: DEST=tv TV_MODEL="Apple TV" TV_VERSION="12.2" ACTION=analyze TARGET=tv_runner SDK=tv_sim diff --git a/Cartfile.resolved b/Cartfile.resolved index aa83891cd..142b5b868 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,3 +1,3 @@ github "appium/RoutingHTTPServer" "v1.0.2" -github "appium/YYCache" "1.0.5" +github "appium/YYCache" "1.1.0" github "robbiehanson/CocoaAsyncSocket" "7.6.3" diff --git a/PrivateHeaders/XCTest/XCEventGenerator.h b/PrivateHeaders/XCTest/XCEventGenerator.h index 2394bb269..23ae00fe5 100644 --- a/PrivateHeaders/XCTest/XCEventGenerator.h +++ b/PrivateHeaders/XCTest/XCEventGenerator.h @@ -25,7 +25,10 @@ typedef void (^XCEventGeneratorHandler)(XCSynthesizedEventRecord *record, NSErro @property unsigned long long generation; // @synthesize generation=_generation; //@property(readonly) NSObject *eventQueue; // @synthesize eventQueue=_eventQueue; -#if TARGET_OS_IPHONE +#if TARGET_OS_TV +// TODO: tvOS-specific headers + +#elif TARGET_OS_IPHONE - (double)rotateInRect:(CGRect)arg1 withRotation:(double)arg2 velocity:(double)arg3 orientation:(UIInterfaceOrientation)arg4 handler:(XCEventGeneratorHandler)arg5; - (double)pinchInRect:(CGRect)arg1 withScale:(double)arg2 velocity:(double)arg3 orientation:(UIInterfaceOrientation)arg4 handler:(XCEventGeneratorHandler)arg5; - (double)pressAtPoint:(CGPoint)arg1 forDuration:(double)arg2 liftAtPoint:(CGPoint)arg3 velocity:(double)arg4 orientation:(UIInterfaceOrientation)arg5 name:(NSString *)arg6 handler:(XCEventGeneratorHandler)arg7; @@ -43,9 +46,6 @@ typedef void (^XCEventGeneratorHandler)(XCSynthesizedEventRecord *record, NSErro // iOS 10.3 specific - (double)forcePressAtPoint:(struct CGPoint)arg1 orientation:(long long)arg2 handler:(CDUnknownBlockType)arg3; -#elif TARGET_OS_TV -// TODO: tvOS-specific headers - #elif TARGET_OS_MAC - (double)sendKeyboardInputs:(id)arg1 layout:(id)arg2 handler:(CDUnknownBlockType)arg3; - (double)sendKey:(id)arg1 modifierFlags:(unsigned long long)arg2 handler:(CDUnknownBlockType)arg3; diff --git a/Scripts/build.sh b/Scripts/build.sh index da5b3ca75..2c44d42bb 100755 --- a/Scripts/build.sh +++ b/Scripts/build.sh @@ -16,12 +16,15 @@ function define_xc_macros() { case "$TARGET" in "lib" ) XC_TARGET="WebDriverAgentLib";; "runner" ) XC_TARGET="WebDriverAgentRunner";; + "tv_lib" ) XC_TARGET="WebDriverAgentLib_tvOS";; + "tv_runner" ) XC_TARGET="WebDriverAgentRunner_tvOS";; *) echo "Unknown TARGET"; exit 1 ;; esac case "${DEST:-}" in "iphone" ) XC_DESTINATION="-destination \"name=${IPHONE_MODEL},OS=${IOS_VERSION}\"";; "ipad" ) XC_DESTINATION="-destination \"name=${IPAD_MODEL},OS=${IOS_VERSION}\"";; + "tv" ) XC_DESTINATION="-destination \"name=${TV_MODEL},OS=${TV_VERSION}\"";; esac case "$ACTION" in @@ -40,6 +43,8 @@ function define_xc_macros() { case "$SDK" in "sim" ) XC_SDK="iphonesimulator";; "device" ) XC_SDK="iphoneos";; + "tv_sim" ) XC_SDK="appletvos";; + "tv_device" ) XC_SDK="appletvsimulator";; *) echo "Unknown SDK"; exit 1 ;; esac } diff --git a/WebDriverAgent.xcodeproj/project.pbxproj b/WebDriverAgent.xcodeproj/project.pbxproj index 2d4341a15..0b0e89c35 100644 --- a/WebDriverAgent.xcodeproj/project.pbxproj +++ b/WebDriverAgent.xcodeproj/project.pbxproj @@ -14,6 +14,305 @@ 63FD950221F9D06100A3E356 /* FBImageIOScalerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 631B523421F6174300625362 /* FBImageIOScalerTests.m */; }; 63FD950321F9D06100A3E356 /* FBImageIOScalerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 631B523421F6174300625362 /* FBImageIOScalerTests.m */; }; 63FD950421F9D06200A3E356 /* FBImageIOScalerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 631B523421F6174300625362 /* FBImageIOScalerTests.m */; }; + 641EE3452240C1C800173FCB /* UITestingUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7FD1CAEE048008C271F /* UITestingUITests.m */; }; + 641EE5D72240C5CA00173FCB /* FBScreenshotCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB75F1CAEDF0C008C271F /* FBScreenshotCommands.m */; }; + 641EE5D82240C5CA00173FCB /* FBPredicate.m in Sources */ = {isa = PBXBuildFile; fileRef = EEEC7C911F21F27A0053426C /* FBPredicate.m */; }; + 641EE5D92240C5CA00173FCB /* XCUIElement+FBPickerWheel.m in Sources */ = {isa = PBXBuildFile; fileRef = 7136A4781E8918E60024FC3D /* XCUIElement+FBPickerWheel.m */; }; + 641EE5DA2240C5CA00173FCB /* XCUIApplicationProcessDelay.m in Sources */ = {isa = PBXBuildFile; fileRef = 6385F4A5220A40760095BBDB /* XCUIApplicationProcessDelay.m */; }; + 641EE5DB2240C5CA00173FCB /* FBXPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 711084431DA3AA7500F913D6 /* FBXPath.m */; }; + 641EE5DC2240C5CA00173FCB /* XCUIApplication+FBAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = 719CD8FB2126C88B00C7D0C2 /* XCUIApplication+FBAlert.m */; }; + 641EE5DD2240C5CA00173FCB /* FBAppiumActionsSynthesizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 71241D771FAE31F100B9559F /* FBAppiumActionsSynthesizer.m */; }; + 641EE5DE2240C5CA00173FCB /* XCUIApplication+FBTouchAction.m in Sources */ = {isa = PBXBuildFile; fileRef = 71BD20721F86116100B36EC2 /* XCUIApplication+FBTouchAction.m */; }; + 641EE5DF2240C5CA00173FCB /* FBWebServer.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB78D1CAEDF0C008C271F /* FBWebServer.m */; }; + 641EE5E02240C5CA00173FCB /* FBTCPSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 715557D2211DBCE700613B26 /* FBTCPSocket.m */; }; + 641EE5E12240C5CA00173FCB /* FBErrorBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = EE3A18611CDE618F00DE4205 /* FBErrorBuilder.m */; }; + 641EE5E22240C5CA00173FCB /* XCUIElement+FBClassChain.m in Sources */ = {isa = PBXBuildFile; fileRef = 71A7EAF41E20516B001DA4F2 /* XCUIElement+FBClassChain.m */; }; + 641EE5E32240C5CA00173FCB /* NSExpression+FBFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 71555A3C1DEC460A007D4A8B /* NSExpression+FBFormat.m */; }; + 641EE5E42240C5CA00173FCB /* XCUIApplication+FBHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = AD6C269B1CF2494200F8B5FF /* XCUIApplication+FBHelpers.m */; }; + 641EE5E52240C5CA00173FCB /* FBKeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = EE3A18651CDE734B00DE4205 /* FBKeyboard.m */; }; + 641EE5E62240C5CA00173FCB /* FBElementUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 713C6DCE1DDC772A00285B92 /* FBElementUtils.m */; }; + 641EE5E72240C5CA00173FCB /* FBW3CActionsSynthesizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7140974A1FAE1B51008FB2C5 /* FBW3CActionsSynthesizer.m */; }; + 641EE5E82240C5CA00173FCB /* FBApplicationProcessProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7691CAEDF0C008C271F /* FBApplicationProcessProxy.m */; }; + 641EE5E92240C5CA00173FCB /* FBFailureProofTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6A89391D0B38640083E92B /* FBFailureProofTestCase.m */; }; + 641EE5EA2240C5CA00173FCB /* XCUIElement+FBIsVisible.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7481CAEDF0C008C271F /* XCUIElement+FBIsVisible.m */; }; + 641EE5EB2240C5CA00173FCB /* XCUIElement+FBFind.m in Sources */ = {isa = PBXBuildFile; fileRef = EEBBD48A1D47746D00656A81 /* XCUIElement+FBFind.m */; }; + 641EE5EC2240C5CA00173FCB /* FBResponsePayload.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7831CAEDF0C008C271F /* FBResponsePayload.m */; }; + 641EE5ED2240C5CA00173FCB /* FBRoute.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7851CAEDF0C008C271F /* FBRoute.m */; }; + 641EE5EE2240C5CA00173FCB /* NSString+FBVisualLength.m in Sources */ = {isa = PBXBuildFile; fileRef = EE0D1F601EBCDCF7006A3123 /* NSString+FBVisualLength.m */; }; + 641EE5EF2240C5CA00173FCB /* FBRunLoopSpinner.m in Sources */ = {isa = PBXBuildFile; fileRef = EEE9B4711CD02B88009D2030 /* FBRunLoopSpinner.m */; }; + 641EE5F02240C5CA00173FCB /* FBAlertsMonitor.m in Sources */ = {isa = PBXBuildFile; fileRef = 719CD8F72126C78F00C7D0C2 /* FBAlertsMonitor.m */; }; + 641EE5F12240C5CA00173FCB /* FBClassChainQueryParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 71A7EAF81E224648001DA4F2 /* FBClassChainQueryParser.m */; }; + 641EE5F22240C5CA00173FCB /* NSPredicate+FBFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 71A224E41DE2F56600844D55 /* NSPredicate+FBFormat.m */; }; + 641EE5F32240C5CA00173FCB /* XCAccessibilityElement+FBComparison.m in Sources */ = {isa = PBXBuildFile; fileRef = 710C16CC21497A08006EA1D0 /* XCAccessibilityElement+FBComparison.m */; }; + 641EE5F42240C5CA00173FCB /* XCUIDevice+FBRotation.m in Sources */ = {isa = PBXBuildFile; fileRef = EEE3763E1D59F81400ED88DD /* XCUIDevice+FBRotation.m */; }; + 641EE5F52240C5CA00173FCB /* XCUIElement+FBUID.m in Sources */ = {isa = PBXBuildFile; fileRef = 71B49EC61ED1A58100D51AD6 /* XCUIElement+FBUID.m */; }; + 641EE5F62240C5CA00173FCB /* FBRouteRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7881CAEDF0C008C271F /* FBRouteRequest.m */; }; + 641EE5F72240C5CA00173FCB /* FBResponseJSONPayload.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7811CAEDF0C008C271F /* FBResponseJSONPayload.m */; }; + 641EE5F82240C5CA00173FCB /* FBXCTestCaseImplementationFailureHoldingProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = EE7E271B1D06C69F001BEC7B /* FBXCTestCaseImplementationFailureHoldingProxy.m */; }; + 641EE5F92240C5CA00173FCB /* FBMjpegServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7155D702211DCEF400166C20 /* FBMjpegServer.m */; }; + 641EE5FA2240C5CA00173FCB /* XCUIDevice+FBHealthCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = EEDFE1201D9C06F800E6FFE5 /* XCUIDevice+FBHealthCheck.m */; }; + 641EE5FB2240C5CA00173FCB /* FBSpringboardApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC088EB1CB5706D00B65968 /* FBSpringboardApplication.m */; }; + 641EE5FC2240C5CA00173FCB /* FBResponseFilePayload.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB77F1CAEDF0C008C271F /* FBResponseFilePayload.m */; }; + 641EE5FD2240C5CA00173FCB /* FBBaseActionsSynthesizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7140974D1FAE20EE008FB2C5 /* FBBaseActionsSynthesizer.m */; }; + 641EE5FE2240C5CA00173FCB /* XCUIElement+FBWebDriverAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = EEE376481D59FAE900ED88DD /* XCUIElement+FBWebDriverAttributes.m */; }; + 641EE5FF2240C5CA00173FCB /* XCUIElement+FBForceTouch.m in Sources */ = {isa = PBXBuildFile; fileRef = EE8DDD7C20C5733B004D4925 /* XCUIElement+FBForceTouch.m */; }; + 641EE6002240C5CA00173FCB /* FBTouchActionCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = 71241D7A1FAE3D2500B9559F /* FBTouchActionCommands.m */; }; + 641EE6012240C5CA00173FCB /* FBImageIOScaler.m in Sources */ = {isa = PBXBuildFile; fileRef = 63CCF91121ECE4C700E94ABD /* FBImageIOScaler.m */; }; + 641EE6022240C5CA00173FCB /* FBTouchIDCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7631CAEDF0C008C271F /* FBTouchIDCommands.m */; }; + 641EE6032240C5CA00173FCB /* FBDebugCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7551CAEDF0C008C271F /* FBDebugCommands.m */; }; + 641EE6042240C5CA00173FCB /* NSString+FBXMLSafeString.m in Sources */ = {isa = PBXBuildFile; fileRef = 716E0BCD1E917E810087A825 /* NSString+FBXMLSafeString.m */; }; + 641EE6052240C5CA00173FCB /* FBUnknownCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7651CAEDF0C008C271F /* FBUnknownCommands.m */; }; + 641EE6062240C5CA00173FCB /* FBOrientationCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB75D1CAEDF0C008C271F /* FBOrientationCommands.m */; }; + 641EE6072240C5CA00173FCB /* XCUICoordinate+FBFix.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC9EED520064FAA00BC0D5B /* XCUICoordinate+FBFix.m */; }; + 641EE6082240C5CA00173FCB /* FBRuntimeUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7921CAEDF0C008C271F /* FBRuntimeUtils.m */; }; + 641EE6092240C5CA00173FCB /* XCUIElement+FBUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = EEE376401D59F81400ED88DD /* XCUIElement+FBUtilities.m */; }; + 641EE60A2240C5CA00173FCB /* FBLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9B76A41CF7A43900275851 /* FBLogger.m */; }; + 641EE60B2240C5CA00173FCB /* FBCustomCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7531CAEDF0C008C271F /* FBCustomCommands.m */; }; + 641EE60C2240C5CA00173FCB /* XCUIDevice+FBHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = AD6C26971CF2481700F8B5FF /* XCUIDevice+FBHelpers.m */; }; + 641EE60D2240C5CA00173FCB /* XCTestPrivateSymbols.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6B64FC1D0F86EF00E85F5D /* XCTestPrivateSymbols.m */; }; + 641EE60E2240C5CA00173FCB /* XCUIElement+FBTyping.m in Sources */ = {isa = PBXBuildFile; fileRef = AD76723C1D6B7CC000610457 /* XCUIElement+FBTyping.m */; }; + 641EE60F2240C5CA00173FCB /* XCUIElement+FBAccessibility.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7461CAEDF0C008C271F /* XCUIElement+FBAccessibility.m */; }; + 641EE6102240C5CA00173FCB /* FBImageUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 7150348621A6DAD600A0F4BA /* FBImageUtils.m */; }; + 641EE6112240C5CA00173FCB /* FBSession.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB78B1CAEDF0C008C271F /* FBSession.m */; }; + 641EE6122240C5CA00173FCB /* FBFindElementCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7591CAEDF0C008C271F /* FBFindElementCommands.m */; }; + 641EE6132240C5CA00173FCB /* FBDebugLogDelegateDecorator.m in Sources */ = {isa = PBXBuildFile; fileRef = EE7E27191D06C69F001BEC7B /* FBDebugLogDelegateDecorator.m */; }; + 641EE6142240C5CA00173FCB /* FBAlertViewCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7511CAEDF0C008C271F /* FBAlertViewCommands.m */; }; + 641EE6152240C5CA00173FCB /* XCUIElement+FBScrolling.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB74A1CAEDF0C008C271F /* XCUIElement+FBScrolling.m */; }; + 641EE6162240C5CA00173FCB /* FBSessionCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7611CAEDF0C008C271F /* FBSessionCommands.m */; }; + 641EE6172240C5CA00173FCB /* FBInspectorCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB75B1CAEDF0C008C271F /* FBInspectorCommands.m */; }; + 641EE6182240C5CA00173FCB /* XCElementSnapshot+FBHitPoint.m in Sources */ = {isa = PBXBuildFile; fileRef = EE006EAF1EBA1AA9006900A4 /* XCElementSnapshot+FBHitPoint.m */; }; + 641EE6192240C5CA00173FCB /* FBConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9B76A21CF7A43900275851 /* FBConfiguration.m */; }; + 641EE61A2240C5CA00173FCB /* FBElementCache.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC088E41CB56AC000B65968 /* FBElementCache.m */; }; + 641EE61B2240C5CA00173FCB /* FBPasteboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 71930C4120662E1F00D3AFEC /* FBPasteboard.m */; }; + 641EE61C2240C5CA00173FCB /* FBAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = AD6C26931CF2379700F8B5FF /* FBAlert.m */; }; + 641EE61D2240C5CA00173FCB /* FBElementCommands.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7571CAEDF0C008C271F /* FBElementCommands.m */; }; + 641EE61E2240C5CA00173FCB /* FBExceptionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC088E71CB56DA400B65968 /* FBExceptionHandler.m */; }; + 641EE61F2240C5CA00173FCB /* FBXCodeCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = EE5A24411F136C8D0078B1D9 /* FBXCodeCompatibility.m */; }; + 641EE6202240C5CA00173FCB /* XCElementSnapshot+FBHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = EEE3763C1D59F81400ED88DD /* XCElementSnapshot+FBHelpers.m */; }; + 641EE6212240C5CA00173FCB /* FBElementTypeTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7901CAEDF0C008C271F /* FBElementTypeTransformer.m */; }; + 641EE6222240C5CA00173FCB /* FBApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7671CAEDF0C008C271F /* FBApplication.m */; }; + 641EE6232240C5CA00173FCB /* FBScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 715AFAC01FFA29180053896D /* FBScreen.m */; }; + 641EE6242240C5CA00173FCB /* FBXCTestDaemonsProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = EE35AD7A1E3B80C000A02D78 /* FBXCTestDaemonsProxy.m */; }; + 641EE6252240C5CA00173FCB /* XCUIElement+FBTap.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB74C1CAEDF0C008C271F /* XCUIElement+FBTap.m */; }; + 641EE6262240C5CA00173FCB /* FBMathUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = EE1888391DA661C400307AA8 /* FBMathUtils.m */; }; + 641EE6272240C5CA00173FCB /* FBXCAXClientProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7157B290221DADD2001C348C /* FBXCAXClientProxy.m */; }; + 641EE6292240C5CA00173FCB /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 71018200211DF62C002FD3A8 /* libxml2.tbd */; }; + 641EE62A2240C5CA00173FCB /* libAccessibility.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7101820C211E026B002FD3A8 /* libAccessibility.tbd */; }; + 641EE62E2240C5CA00173FCB /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE8980D321105B49001789EE /* XCTest.framework */; }; + 641EE62F2240C5CA00173FCB /* XCTAutomationSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE8980D321105B49001789ED /* XCTAutomationSupport.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 641EE6312240C5CA00173FCB /* XCUIElement+FBWebDriverAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = EEE376471D59FAE900ED88DD /* XCUIElement+FBWebDriverAttributes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6322240C5CA00173FCB /* FBScreen.h in Headers */ = {isa = PBXBuildFile; fileRef = 715AFABF1FFA29180053896D /* FBScreen.h */; }; + 641EE6332240C5CA00173FCB /* XCTestPrivateSymbols.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6B64FB1D0F86EF00E85F5D /* XCTestPrivateSymbols.h */; }; + 641EE6342240C5CA00173FCB /* XCUIElement+FBTyping.h in Headers */ = {isa = PBXBuildFile; fileRef = AD76723B1D6B7CC000610457 /* XCUIElement+FBTyping.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6352240C5CA00173FCB /* XCUIElement+FBUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = EEE3763F1D59F81400ED88DD /* XCUIElement+FBUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6362240C5CA00173FCB /* XCUIElement+FBScrolling.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7491CAEDF0C008C271F /* XCUIElement+FBScrolling.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6372240C5CA00173FCB /* XCSourceCodeTreeNode.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACC51E3B77D600A02D78 /* XCSourceCodeTreeNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6382240C5CA00173FCB /* XCPointerEventPath.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACC31E3B77D600A02D78 /* XCPointerEventPath.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6392240C5CA00173FCB /* FBRouteRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7871CAEDF0C008C271F /* FBRouteRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE63A2240C5CA00173FCB /* XCTest.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACCF1E3B77D600A02D78 /* XCTest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE63B2240C5CA00173FCB /* FBAlertsMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 719CD8F62126C78F00C7D0C2 /* FBAlertsMonitor.h */; }; + 641EE63C2240C5CA00173FCB /* XCAccessibilityElement.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACB31E3B77D600A02D78 /* XCAccessibilityElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE63D2240C5CA00173FCB /* FBSession.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB78A1CAEDF0C008C271F /* FBSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE63E2240C5CA00173FCB /* _XCTestImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AC9E1E3B77D600A02D78 /* _XCTestImplementation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE63F2240C5CA00173FCB /* FBTouchActionCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = 71241D791FAE3D2500B9559F /* FBTouchActionCommands.h */; }; + 641EE6402240C5CA00173FCB /* FBTouchIDCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7621CAEDF0C008C271F /* FBTouchIDCommands.h */; }; + 641EE6412240C5CA00173FCB /* XCUIApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACF91E3B77D600A02D78 /* XCUIApplication.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6422240C5CA00173FCB /* FBCustomCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7521CAEDF0C008C271F /* FBCustomCommands.h */; }; + 641EE6432240C5CA00173FCB /* _XCTestCaseInterruptionException.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AC9C1E3B77D600A02D78 /* _XCTestCaseInterruptionException.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6442240C5CA00173FCB /* FBOrientationCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB75C1CAEDF0C008C271F /* FBOrientationCommands.h */; }; + 641EE6452240C5CA00173FCB /* XCUIScreen.h in Headers */ = {isa = PBXBuildFile; fileRef = 7119097B2152580600BA3C7E /* XCUIScreen.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6462240C5CA00173FCB /* XCTRunnerIDESession.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACF01E3B77D600A02D78 /* XCTRunnerIDESession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6472240C5CA00173FCB /* FBRouteRequest-Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7861CAEDF0C008C271F /* FBRouteRequest-Private.h */; }; + 641EE6482240C5CA00173FCB /* XCTTestRunSession.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACF11E3B77D600A02D78 /* XCTTestRunSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6492240C5CA00173FCB /* XCTestProbe.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACE31E3B77D600A02D78 /* XCTestProbe.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE64A2240C5CA00173FCB /* XCApplicationQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACB71E3B77D600A02D78 /* XCApplicationQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE64B2240C5CA00173FCB /* XCTAsyncActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACCB1E3B77D600A02D78 /* XCTAsyncActivity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE64C2240C5CA00173FCB /* XCTestMisuseObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACDF1E3B77D600A02D78 /* XCTestMisuseObserver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE64D2240C5CA00173FCB /* XCTRunnerDaemonSession.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACEF1E3B77D600A02D78 /* XCTRunnerDaemonSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE64E2240C5CA00173FCB /* FBApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7661CAEDF0C008C271F /* FBApplication.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE64F2240C5CA00173FCB /* XCTestExpectationWaiter.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACDA1E3B77D600A02D78 /* XCTestExpectationWaiter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6502240C5CA00173FCB /* UIGestureRecognizer-RecordingAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACAD1E3B77D600A02D78 /* UIGestureRecognizer-RecordingAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6512240C5CA00173FCB /* XCKeyboardKeyMap.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACBF1E3B77D600A02D78 /* XCKeyboardKeyMap.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6522240C5CA00173FCB /* XCTNSPredicateExpectationObject-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACEC1E3B77D600A02D78 /* XCTNSPredicateExpectationObject-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6532240C5CA00173FCB /* WebDriverAgentLib.h in Headers */ = {isa = PBXBuildFile; fileRef = EE158B5E1CBD47A000A3E3F0 /* WebDriverAgentLib.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6542240C5CA00173FCB /* FBFindElementCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7581CAEDF0C008C271F /* FBFindElementCommands.h */; }; + 641EE6552240C5CA00173FCB /* XCTestRun.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACE41E3B77D600A02D78 /* XCTestRun.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6562240C5CA00173FCB /* FBWebServer.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB78C1CAEDF0C008C271F /* FBWebServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6572240C5CA00173FCB /* FBScreenshotCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB75E1CAEDF0C008C271F /* FBScreenshotCommands.h */; }; + 641EE6582240C5CA00173FCB /* _XCKVOExpectationImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AC991E3B77D600A02D78 /* _XCKVOExpectationImplementation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6592240C5CA00173FCB /* NSString+FBVisualLength.h in Headers */ = {isa = PBXBuildFile; fileRef = EE0D1F5F1EBCDCF7006A3123 /* NSString+FBVisualLength.h */; }; + 641EE65A2240C5CA00173FCB /* FBXCTestDaemonsProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AD791E3B80C000A02D78 /* FBXCTestDaemonsProxy.h */; }; + 641EE65B2240C5CA00173FCB /* XCUIElementHitPointCoordinate.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AD011E3B77D600A02D78 /* XCUIElementHitPointCoordinate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE65C2240C5CA00173FCB /* XCTDarwinNotificationExpectation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACCE1E3B77D600A02D78 /* XCTDarwinNotificationExpectation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE65D2240C5CA00173FCB /* XCTRunnerAutomationSession.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACEE1E3B77D600A02D78 /* XCTRunnerAutomationSession.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE65E2240C5CA00173FCB /* XCUICoordinate+FBFix.h in Headers */ = {isa = PBXBuildFile; fileRef = EEC9EED420064FAA00BC0D5B /* XCUICoordinate+FBFix.h */; }; + 641EE65F2240C5CA00173FCB /* XCSourceCodeTreeNodeEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACC61E3B77D600A02D78 /* XCSourceCodeTreeNodeEnumerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6602240C5CA00173FCB /* XCUIElement+FBIsVisible.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7471CAEDF0C008C271F /* XCUIElement+FBIsVisible.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6612240C5CA00173FCB /* XCUIElement+FBTap.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB74B1CAEDF0C008C271F /* XCUIElement+FBTap.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6622240C5CA00173FCB /* FBResponsePayload.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7821CAEDF0C008C271F /* FBResponsePayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6632240C5CA00173FCB /* FBUnknownCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7641CAEDF0C008C271F /* FBUnknownCommands.h */; }; + 641EE6642240C5CA00173FCB /* NSPredicate+FBFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 71A224E31DE2F56600844D55 /* NSPredicate+FBFormat.h */; }; + 641EE6652240C5CA00173FCB /* UILongPressGestureRecognizer-RecordingAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACAE1E3B77D600A02D78 /* UILongPressGestureRecognizer-RecordingAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6662240C5CA00173FCB /* XCTestCase.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACD01E3B77D600A02D78 /* XCTestCase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6672240C5CA00173FCB /* XCSymbolicatorHolder.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACC81E3B77D600A02D78 /* XCSymbolicatorHolder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6682240C5CA00173FCB /* XCUIApplicationImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACFA1E3B77D600A02D78 /* XCUIApplicationImpl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6692240C5CA00173FCB /* UIPanGestureRecognizer-RecordingAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACAF1E3B77D600A02D78 /* UIPanGestureRecognizer-RecordingAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE66A2240C5CA00173FCB /* NSExpression+FBFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 71555A3B1DEC460A007D4A8B /* NSExpression+FBFormat.h */; }; + 641EE66B2240C5CA00173FCB /* _XCTestCaseImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AC9B1E3B77D600A02D78 /* _XCTestCaseImplementation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE66C2240C5CA00173FCB /* UIPinchGestureRecognizer-RecordingAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACB01E3B77D600A02D78 /* UIPinchGestureRecognizer-RecordingAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE66D2240C5CA00173FCB /* XCTestManager_TestsInterface-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACDE1E3B77D600A02D78 /* XCTestManager_TestsInterface-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE66E2240C5CA00173FCB /* XCUIApplication+FBAlert.h in Headers */ = {isa = PBXBuildFile; fileRef = 719CD8FA2126C88B00C7D0C2 /* XCUIApplication+FBAlert.h */; }; + 641EE66F2240C5CA00173FCB /* XCDeviceEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACBA1E3B77D600A02D78 /* XCDeviceEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6702240C5CA00173FCB /* FBMathUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = EE1888381DA661C400307AA8 /* FBMathUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6712240C5CA00173FCB /* UISwipeGestureRecognizer-RecordingAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACB11E3B77D600A02D78 /* UISwipeGestureRecognizer-RecordingAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6722240C5CA00173FCB /* FBElementUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 713C6DCD1DDC772A00285B92 /* FBElementUtils.h */; }; + 641EE6732240C5CA00173FCB /* FBDebugCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7541CAEDF0C008C271F /* FBDebugCommands.h */; }; + 641EE6742240C5CA00173FCB /* XCTestSuite.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACE51E3B77D600A02D78 /* XCTestSuite.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6752240C5CA00173FCB /* XCUICoordinate.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACFC1E3B77D600A02D78 /* XCUICoordinate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6762240C5CA00173FCB /* XCTNSPredicateExpectation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACEB1E3B77D600A02D78 /* XCTNSPredicateExpectation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6772240C5CA00173FCB /* XCTestObservationCenter.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACE11E3B77D600A02D78 /* XCTestObservationCenter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6782240C5CA00173FCB /* XCTNSNotificationExpectation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACEA1E3B77D600A02D78 /* XCTNSNotificationExpectation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6792240C5CA00173FCB /* XCUIRecorderNodeFinder.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AD041E3B77D600A02D78 /* XCUIRecorderNodeFinder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE67A2240C5CA00173FCB /* XCUIElement+FBAccessibility.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7451CAEDF0C008C271F /* XCUIElement+FBAccessibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE67B2240C5CA00173FCB /* XCUIRecorderUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AD071E3B77D600A02D78 /* XCUIRecorderUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE67C2240C5CA00173FCB /* XCTestCaseRun.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACD11E3B77D600A02D78 /* XCTestCaseRun.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE67D2240C5CA00173FCB /* XCTestConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACD31E3B77D600A02D78 /* XCTestConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE67E2240C5CA00173FCB /* _XCTDarwinNotificationExpectationImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AC9A1E3B77D600A02D78 /* _XCTDarwinNotificationExpectationImplementation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE67F2240C5CA00173FCB /* XCTestExpectation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACD81E3B77D600A02D78 /* XCTestExpectation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6802240C5CA00173FCB /* FBElementTypeTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB78F1CAEDF0C008C271F /* FBElementTypeTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6812240C5CA00173FCB /* FBXCAXClientProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 7157B28F221DADD2001C348C /* FBXCAXClientProxy.h */; }; + 641EE6822240C5CA00173FCB /* FBElementCache.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB77B1CAEDF0C008C271F /* FBElementCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6832240C5CA00173FCB /* XCTMetric.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACE91E3B77D600A02D78 /* XCTMetric.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6842240C5CA00173FCB /* XCTestContextScope.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACD51E3B77D600A02D78 /* XCTestContextScope.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6852240C5CA00173FCB /* XCUIElement+FBClassChain.h in Headers */ = {isa = PBXBuildFile; fileRef = 71A7EAF31E20516B001DA4F2 /* XCUIElement+FBClassChain.h */; }; + 641EE6862240C5CA00173FCB /* FBResponseJSONPayload.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7801CAEDF0C008C271F /* FBResponseJSONPayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6872240C5CA00173FCB /* XCTAutomationTarget-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACCC1E3B77D600A02D78 /* XCTAutomationTarget-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6882240C5CA00173FCB /* FBElement.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7791CAEDF0C008C271F /* FBElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6892240C5CA00173FCB /* XCTAXClient-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACCD1E3B77D600A02D78 /* XCTAXClient-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE68A2240C5CA00173FCB /* FBPredicate.h in Headers */ = {isa = PBXBuildFile; fileRef = EEEC7C901F21F27A0053426C /* FBPredicate.h */; }; + 641EE68B2240C5CA00173FCB /* FBExceptionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = EEC088E61CB56DA400B65968 /* FBExceptionHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE68C2240C5CA00173FCB /* FBRoute.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7841CAEDF0C008C271F /* FBRoute.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE68D2240C5CA00173FCB /* XCTestDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACD61E3B77D600A02D78 /* XCTestDriver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE68E2240C5CA00173FCB /* _XCTNSNotificationExpectationImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACA11E3B77D600A02D78 /* _XCTNSNotificationExpectationImplementation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE68F2240C5CA00173FCB /* XCSynthesizedEventRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACC91E3B77D600A02D78 /* XCSynthesizedEventRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6902240C5CA00173FCB /* FBInspectorCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB75A1CAEDF0C008C271F /* FBInspectorCommands.h */; }; + 641EE6912240C5CA00173FCB /* FBApplicationProcessProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7681CAEDF0C008C271F /* FBApplicationProcessProxy.h */; }; + 641EE6922240C5CA00173FCB /* XCTWaiterDelegatePrivate-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACF61E3B77D600A02D78 /* XCTWaiterDelegatePrivate-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6932240C5CA00173FCB /* XCTestManager_IDEInterface-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACDC1E3B77D600A02D78 /* XCTestManager_IDEInterface-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6942240C5CA00173FCB /* FBXPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 711084421DA3AA7500F913D6 /* FBXPath.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6952240C5CA00173FCB /* XCUIRecorderTimingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AD061E3B77D600A02D78 /* XCUIRecorderTimingMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6962240C5CA00173FCB /* XCApplicationMonitor.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACB61E3B77D600A02D78 /* XCApplicationMonitor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6972240C5CA00173FCB /* XCUIElement+FBForceTouch.h in Headers */ = {isa = PBXBuildFile; fileRef = EE8DDD7D20C5733C004D4925 /* XCUIElement+FBForceTouch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6982240C5CA00173FCB /* FBRuntimeUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7911CAEDF0C008C271F /* FBRuntimeUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6992240C5CA00173FCB /* XCUIElement+FBPickerWheel.h in Headers */ = {isa = PBXBuildFile; fileRef = 7136A4771E8918E60024FC3D /* XCUIElement+FBPickerWheel.h */; }; + 641EE69A2240C5CA00173FCB /* XCTestObservation-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACE01E3B77D600A02D78 /* XCTestObservation-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE69B2240C5CA00173FCB /* _XCTNSPredicateExpectationImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACA21E3B77D600A02D78 /* _XCTNSPredicateExpectationImplementation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE69C2240C5CA00173FCB /* FBElementCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7561CAEDF0C008C271F /* FBElementCommands.h */; }; + 641EE69D2240C5CA00173FCB /* FBResponseFilePayload.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB77E1CAEDF0C008C271F /* FBResponseFilePayload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE69E2240C5CA00173FCB /* FBSpringboardApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = EEC088EA1CB5706D00B65968 /* FBSpringboardApplication.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE69F2240C5CA00173FCB /* FBTCPSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 715557D1211DBCE700613B26 /* FBTCPSocket.h */; }; + 641EE6A02240C5CA00173FCB /* XCUIElement+FBUID.h in Headers */ = {isa = PBXBuildFile; fileRef = 71B49EC51ED1A58100D51AD6 /* XCUIElement+FBUID.h */; }; + 641EE6A12240C5CA00173FCB /* XCSymbolicationRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACC71E3B77D600A02D78 /* XCSymbolicationRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6A22240C5CA00173FCB /* XCUIDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACFD1E3B77D600A02D78 /* XCUIDevice.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6A32240C5CA00173FCB /* XCUIApplication+FBTouchAction.h in Headers */ = {isa = PBXBuildFile; fileRef = 71BD20711F86116100B36EC2 /* XCUIApplication+FBTouchAction.h */; }; + 641EE6A42240C5CA00173FCB /* FBCommandHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7751CAEDF0C008C271F /* FBCommandHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6A52240C5CA00173FCB /* FBSessionCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7601CAEDF0C008C271F /* FBSessionCommands.h */; }; + 641EE6A62240C5CA00173FCB /* FBImageIOScaler.h in Headers */ = {isa = PBXBuildFile; fileRef = 63CCF91021ECE4C700E94ABD /* FBImageIOScaler.h */; }; + 641EE6A72240C5CA00173FCB /* FBSession-Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7891CAEDF0C008C271F /* FBSession-Private.h */; }; + 641EE6A82240C5CA00173FCB /* NSString+FBXMLSafeString.h in Headers */ = {isa = PBXBuildFile; fileRef = 716E0BCC1E917E810087A825 /* NSString+FBXMLSafeString.h */; }; + 641EE6A92240C5CA00173FCB /* FBCommandStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7761CAEDF0C008C271F /* FBCommandStatus.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6AA2240C5CA00173FCB /* XCElementSnapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACBC1E3B77D600A02D78 /* XCElementSnapshot.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6AB2240C5CA00173FCB /* FBAlertViewCommands.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7501CAEDF0C008C271F /* FBAlertViewCommands.h */; }; + 641EE6AC2240C5CA00173FCB /* XCTWaiter.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACF41E3B77D600A02D78 /* XCTWaiter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6AD2240C5CA00173FCB /* XCTWaiterManagement-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACF71E3B77D600A02D78 /* XCTWaiterManagement-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6AE2240C5CA00173FCB /* XCElementSnapshot+FBHitPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = EE006EAE1EBA1AA9006900A4 /* XCElementSnapshot+FBHitPoint.h */; }; + 641EE6AF2240C5CA00173FCB /* XCTestContext.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACD41E3B77D600A02D78 /* XCTestContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6B02240C5CA00173FCB /* XCAccessibilityElement+FBComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 710C16CB21497A08006EA1D0 /* XCAccessibilityElement+FBComparison.h */; }; + 641EE6B12240C5CA00173FCB /* XCTWaiterDelegate-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACF51E3B77D600A02D78 /* XCTWaiterDelegate-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6B22240C5CA00173FCB /* _XCTestExpectationImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AC9D1E3B77D600A02D78 /* _XCTestExpectationImplementation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6B32240C5CA00173FCB /* XCAXClient_iOS.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACB81E3B77D600A02D78 /* XCAXClient_iOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6B42240C5CA00173FCB /* XCTWaiterManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACF81E3B77D600A02D78 /* XCTWaiterManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6B52240C5CA00173FCB /* XCTestDriverInterface-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACD71E3B77D600A02D78 /* XCTestDriverInterface-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6B62240C5CA00173FCB /* _XCTestSuiteImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACA01E3B77D600A02D78 /* _XCTestSuiteImplementation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6B72240C5CA00173FCB /* FBBaseActionsSynthesizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 714097411FAE1B0B008FB2C5 /* FBBaseActionsSynthesizer.h */; }; + 641EE6B82240C5CA00173FCB /* FBAlert.h in Headers */ = {isa = PBXBuildFile; fileRef = AD6C26921CF2379700F8B5FF /* FBAlert.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6B92240C5CA00173FCB /* XCUIElementQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AD021E3B77D600A02D78 /* XCUIElementQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6BA2240C5CA00173FCB /* XCPointerEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACC21E3B77D600A02D78 /* XCPointerEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6BB2240C5CA00173FCB /* XCSourceCodeRecording.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACC41E3B77D600A02D78 /* XCSourceCodeRecording.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6BC2240C5CA00173FCB /* FBRunLoopSpinner.h in Headers */ = {isa = PBXBuildFile; fileRef = EEE9B4701CD02B88009D2030 /* FBRunLoopSpinner.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6BD2240C5CA00173FCB /* FBErrorBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = EE3A18601CDE618F00DE4205 /* FBErrorBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6BE2240C5CA00173FCB /* XCApplicationMonitor_iOS.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACB51E3B77D600A02D78 /* XCApplicationMonitor_iOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6BF2240C5CA00173FCB /* FBKeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = EE3A18641CDE734B00DE4205 /* FBKeyboard.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6C02240C5CA00173FCB /* XCUIApplication+FBHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = AD6C269A1CF2494200F8B5FF /* XCUIApplication+FBHelpers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6C12240C5CA00173FCB /* _XCTestObservationCenterImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AC9F1E3B77D600A02D78 /* _XCTestObservationCenterImplementation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6C22240C5CA00173FCB /* XCUIDevice+FBHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = AD6C26961CF2481700F8B5FF /* XCUIDevice+FBHelpers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6C32240C5CA00173FCB /* FBClassChainQueryParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 71A7EAF71E224648001DA4F2 /* FBClassChainQueryParser.h */; }; + 641EE6C42240C5CA00173FCB /* FBMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9B76A51CF7A43900275851 /* FBMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6C52240C5CA00173FCB /* XCTestExpectationDelegate-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACD91E3B77D600A02D78 /* XCTestExpectationDelegate-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6C62240C5CA00173FCB /* XCTUIApplicationMonitor-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACF31E3B77D600A02D78 /* XCTUIApplicationMonitor-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6C72240C5CA00173FCB /* XCElementSnapshot+FBHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = EEE3763B1D59F81400ED88DD /* XCElementSnapshot+FBHelpers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6C82240C5CA00173FCB /* XCTKVOExpectation.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACE81E3B77D600A02D78 /* XCTKVOExpectation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6C92240C5CA00173FCB /* XCUIDevice+FBRotation.h in Headers */ = {isa = PBXBuildFile; fileRef = EEE3763D1D59F81400ED88DD /* XCUIDevice+FBRotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6CA2240C5CA00173FCB /* XCEventGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACBD1E3B77D600A02D78 /* XCEventGenerator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6CB2240C5CA00173FCB /* FBConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9B76A11CF7A43900275851 /* FBConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6CC2240C5CA00173FCB /* XCTestSuiteRun.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACE61E3B77D600A02D78 /* XCTestSuiteRun.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6CD2240C5CA00173FCB /* XCUIElementAsynchronousHandlerWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACFF1E3B77D600A02D78 /* XCUIElementAsynchronousHandlerWrapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6CE2240C5CA00173FCB /* XCTestLog.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACDB1E3B77D600A02D78 /* XCTestLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6CF2240C5CA00173FCB /* UITapGestureRecognizer-RecordingAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACB21E3B77D600A02D78 /* UITapGestureRecognizer-RecordingAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6D02240C5CA00173FCB /* XCDebugLogDelegate-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACB91E3B77D600A02D78 /* XCDebugLogDelegate-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6D12240C5CA00173FCB /* NSString-XCTAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACAB1E3B77D600A02D78 /* NSString-XCTAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6D22240C5CA00173FCB /* XCTestWaiter.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACE71E3B77D600A02D78 /* XCTestWaiter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6D32240C5CA00173FCB /* FBImageUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 7150348521A6DAD600A0F4BA /* FBImageUtils.h */; }; + 641EE6D42240C5CA00173FCB /* NSValue-XCTestAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACAC1E3B77D600A02D78 /* NSValue-XCTestAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6D52240C5CA00173FCB /* _XCTWaiterImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACA31E3B77D600A02D78 /* _XCTWaiterImpl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6D62240C5CA00173FCB /* FBLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9B76A31CF7A43900275851 /* FBLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6D72240C5CA00173FCB /* XCTestObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACE21E3B77D600A02D78 /* XCTestObserver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6D82240C5CA00173FCB /* XCUIElement.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACFE1E3B77D600A02D78 /* XCUIElement.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6D92240C5CA00173FCB /* XCKeyboardInputSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACBE1E3B77D600A02D78 /* XCKeyboardInputSolver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6DA2240C5CA00173FCB /* FBXCTestCaseImplementationFailureHoldingProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = EE7E271A1D06C69F001BEC7B /* FBXCTestCaseImplementationFailureHoldingProxy.h */; }; + 641EE6DB2240C5CA00173FCB /* FBPasteboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 71930C4020662E1F00D3AFEC /* FBPasteboard.h */; }; + 641EE6DC2240C5CA00173FCB /* FBAppiumActionsSynthesizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 714097451FAE1B32008FB2C5 /* FBAppiumActionsSynthesizer.h */; }; + 641EE6DD2240C5CA00173FCB /* FBDebugLogDelegateDecorator.h in Headers */ = {isa = PBXBuildFile; fileRef = EE7E27181D06C69F001BEC7B /* FBDebugLogDelegateDecorator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6DE2240C5CA00173FCB /* XCUIDevice+FBHealthCheck.h in Headers */ = {isa = PBXBuildFile; fileRef = EEDFE11F1D9C06F800E6FFE5 /* XCUIDevice+FBHealthCheck.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6DF2240C5CA00173FCB /* FBMjpegServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7155D701211DCEF400166C20 /* FBMjpegServer.h */; }; + 641EE6E02240C5CA00173FCB /* XCUIRecorderNodeFinderMatch.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AD051E3B77D600A02D78 /* XCUIRecorderNodeFinderMatch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6E12240C5CA00173FCB /* XCUIApplicationProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACFB1E3B77D600A02D78 /* XCUIApplicationProcess.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6E22240C5CA00173FCB /* FBW3CActionsSynthesizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 714097491FAE1B51008FB2C5 /* FBW3CActionsSynthesizer.h */; }; + 641EE6E32240C5CA00173FCB /* CDStructures.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACA41E3B77D600A02D78 /* CDStructures.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6E42240C5CA00173FCB /* XCKeyboardLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACC01E3B77D600A02D78 /* XCKeyboardLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6E52240C5CA00173FCB /* XCTAsyncActivity-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACCA1E3B77D600A02D78 /* XCTAsyncActivity-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6E62240C5CA00173FCB /* XCActivityRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACB41E3B77D600A02D78 /* XCActivityRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6E72240C5CA00173FCB /* XCUIElement+FBFind.h in Headers */ = {isa = PBXBuildFile; fileRef = EEBBD4891D47746D00656A81 /* XCUIElement+FBFind.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6E82240C5CA00173FCB /* XCTestManager_ManagerInterface-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACDD1E3B77D600A02D78 /* XCTestManager_ManagerInterface-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6E92240C5CA00173FCB /* FBFailureProofTestCase.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6A89381D0B38640083E92B /* FBFailureProofTestCase.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6EA2240C5CA00173FCB /* XCTTestRunSessionDelegate-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACF21E3B77D600A02D78 /* XCTTestRunSessionDelegate-Protocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6EB2240C5CA00173FCB /* XCTestCaseSuite.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACD21E3B77D600A02D78 /* XCTestCaseSuite.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6EC2240C5CA00173FCB /* _XCInternalTestRun.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35AC981E3B77D600A02D78 /* _XCInternalTestRun.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6ED2240C5CA00173FCB /* FBXPath-Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 712A0C861DA3E55D007D02E5 /* FBXPath-Private.h */; }; + 641EE6EE2240C5CA00173FCB /* XCKeyMappingPath.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACC11E3B77D600A02D78 /* XCKeyMappingPath.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 641EE6F02240C5CA00173FCB /* WebDriverAgent.bundle in Resources */ = {isa = PBXBuildFile; fileRef = EEDBEBBA1CB2681900A790A2 /* WebDriverAgent.bundle */; }; + 641EE6FC2240C5FD00173FCB /* WebDriverAgentLib_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 641EE6F82240C5CA00173FCB /* WebDriverAgentLib_tvOS.framework */; }; + 641EE6FD2240C61D00173FCB /* WebDriverAgentLib_tvOS.framework in Copy frameworks */ = {isa = PBXBuildFile; fileRef = 641EE6F82240C5CA00173FCB /* WebDriverAgentLib_tvOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 641EE6FF2240CD4900173FCB /* XCUIApplication+FBFocused.h in Headers */ = {isa = PBXBuildFile; fileRef = 641EE6FE2240CD4900173FCB /* XCUIApplication+FBFocused.h */; }; + 641EE7002240CD4900173FCB /* XCUIApplication+FBFocused.h in Headers */ = {isa = PBXBuildFile; fileRef = 641EE6FE2240CD4900173FCB /* XCUIApplication+FBFocused.h */; }; + 641EE7022240CDA200173FCB /* XCUIApplication+FBFocused.m in Sources */ = {isa = PBXBuildFile; fileRef = 641EE7012240CDA200173FCB /* XCUIApplication+FBFocused.m */; }; + 641EE7032240CDA200173FCB /* XCUIApplication+FBFocused.m in Sources */ = {isa = PBXBuildFile; fileRef = 641EE7012240CDA200173FCB /* XCUIApplication+FBFocused.m */; }; + 641EE7052240CDCF00173FCB /* XCUIElement+FBTVFocuse.h in Headers */ = {isa = PBXBuildFile; fileRef = 641EE7042240CDCF00173FCB /* XCUIElement+FBTVFocuse.h */; }; + 641EE7062240CDCF00173FCB /* XCUIElement+FBTVFocuse.h in Headers */ = {isa = PBXBuildFile; fileRef = 641EE7042240CDCF00173FCB /* XCUIElement+FBTVFocuse.h */; }; + 641EE7082240CDEB00173FCB /* XCUIElement+FBTVFocuse.m in Sources */ = {isa = PBXBuildFile; fileRef = 641EE7072240CDEB00173FCB /* XCUIElement+FBTVFocuse.m */; }; + 641EE7092240CDEB00173FCB /* XCUIElement+FBTVFocuse.m in Sources */ = {isa = PBXBuildFile; fileRef = 641EE7072240CDEB00173FCB /* XCUIElement+FBTVFocuse.m */; }; + 641EE70B2240CE2D00173FCB /* FBTVNavigationTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 641EE70A2240CE2D00173FCB /* FBTVNavigationTracker.h */; }; + 641EE70C2240CE2D00173FCB /* FBTVNavigationTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 641EE70A2240CE2D00173FCB /* FBTVNavigationTracker.h */; }; + 641EE70E2240CE4800173FCB /* FBTVNavigationTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 641EE70D2240CE4800173FCB /* FBTVNavigationTracker.m */; }; + 641EE70F2240CE4800173FCB /* FBTVNavigationTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 641EE70D2240CE4800173FCB /* FBTVNavigationTracker.m */; }; + 641EE7132240DE5E00173FCB /* RoutingHTTPServer.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 641EE7122240DE5E00173FCB /* RoutingHTTPServer.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 641EE7152240DE7800173FCB /* CocoaAsyncSocket.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 641EE7142240DE7800173FCB /* CocoaAsyncSocket.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 641EE7162240DE8700173FCB /* CocoaAsyncSocket.framework in Copy frameworks */ = {isa = PBXBuildFile; fileRef = 641EE7142240DE7800173FCB /* CocoaAsyncSocket.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 641EE7172240DE8C00173FCB /* RoutingHTTPServer.framework in Copy frameworks */ = {isa = PBXBuildFile; fileRef = 641EE7122240DE5E00173FCB /* RoutingHTTPServer.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 641EE7182240DFB400173FCB /* CocoaAsyncSocket.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 641EE7142240DE7800173FCB /* CocoaAsyncSocket.framework */; }; + 641EE7192240DFC100173FCB /* RoutingHTTPServer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 641EE7122240DE5E00173FCB /* RoutingHTTPServer.framework */; }; + 641EE73E2240F4CB00173FCB /* YYCache.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 641EE73D2240F4CB00173FCB /* YYCache.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 641EE73F2240F4E900173FCB /* YYCache.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 641EE73D2240F4CB00173FCB /* YYCache.framework */; }; 710181F8211DF584002FD3A8 /* CocoaAsyncSocket.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 710181F7211DF584002FD3A8 /* CocoaAsyncSocket.framework */; }; 71018201211DF62C002FD3A8 /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 71018200211DF62C002FD3A8 /* libxml2.tbd */; }; 7101820D211E026B002FD3A8 /* libAccessibility.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7101820C211E026B002FD3A8 /* libAccessibility.tbd */; }; @@ -370,6 +669,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 641EE6FA2240C5F400173FCB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 91F9DAE11B99DBC2001349B2 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 641EE5D52240C5CA00173FCB; + remoteInfo = WebDriverAgentLib_tvOS; + }; AD8D96F01D3C12960061268E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 91F9DAE11B99DBC2001349B2 /* Project object */; @@ -429,6 +735,32 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 641EE3472240C1EF00173FCB /* Copy frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 641EE7172240DE8C00173FCB /* RoutingHTTPServer.framework in Copy frameworks */, + 641EE7162240DE8700173FCB /* CocoaAsyncSocket.framework in Copy frameworks */, + 641EE6FD2240C61D00173FCB /* WebDriverAgentLib_tvOS.framework in Copy frameworks */, + ); + name = "Copy frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 641EE6F12240C5CA00173FCB /* Copy Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 641EE73E2240F4CB00173FCB /* YYCache.framework in Copy Frameworks */, + 641EE7152240DE7800173FCB /* CocoaAsyncSocket.framework in Copy Frameworks */, + 641EE7132240DE5E00173FCB /* RoutingHTTPServer.framework in Copy Frameworks */, + ); + name = "Copy Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; EE93CFF41CCA501300708122 /* Copy frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -467,6 +799,23 @@ 6385F4A5220A40760095BBDB /* XCUIApplicationProcessDelay.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XCUIApplicationProcessDelay.m; sourceTree = ""; }; 63CCF91021ECE4C700E94ABD /* FBImageIOScaler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBImageIOScaler.h; sourceTree = ""; }; 63CCF91121ECE4C700E94ABD /* FBImageIOScaler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBImageIOScaler.m; sourceTree = ""; }; + 641EE2CD2240BB5E00173FCB /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.1.sdk/usr/lib/libxml2.tbd; sourceTree = DEVELOPER_DIR; }; + 641EE2CF2240BB6700173FCB /* libAccessibility.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libAccessibility.tbd; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.1.sdk/usr/lib/libAccessibility.tbd; sourceTree = DEVELOPER_DIR; }; + 641EE2D12240BB7D00173FCB /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/AppleTVOS.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 641EE2DA2240BBE300173FCB /* WebDriverAgentRunner_tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebDriverAgentRunner_tvOS.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 641EE6F82240C5CA00173FCB /* WebDriverAgentLib_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WebDriverAgentLib_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 641EE6F92240C5CB00173FCB /* WebDriverAgentLib copy-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "WebDriverAgentLib copy-Info.plist"; path = "/Users/kazu/GitHub/WebDriverAgent/WebDriverAgentLib copy-Info.plist"; sourceTree = ""; }; + 641EE6FE2240CD4900173FCB /* XCUIApplication+FBFocused.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "XCUIApplication+FBFocused.h"; sourceTree = ""; }; + 641EE7012240CDA200173FCB /* XCUIApplication+FBFocused.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "XCUIApplication+FBFocused.m"; sourceTree = ""; }; + 641EE7042240CDCF00173FCB /* XCUIElement+FBTVFocuse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "XCUIElement+FBTVFocuse.h"; sourceTree = ""; }; + 641EE7072240CDEB00173FCB /* XCUIElement+FBTVFocuse.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "XCUIElement+FBTVFocuse.m"; sourceTree = ""; }; + 641EE70A2240CE2D00173FCB /* FBTVNavigationTracker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBTVNavigationTracker.h; sourceTree = ""; }; + 641EE70D2240CE4800173FCB /* FBTVNavigationTracker.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBTVNavigationTracker.m; sourceTree = ""; }; + 641EE7122240DE5E00173FCB /* RoutingHTTPServer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RoutingHTTPServer.framework; path = Carthage/Build/tvOS/RoutingHTTPServer.framework; sourceTree = ""; }; + 641EE7142240DE7800173FCB /* CocoaAsyncSocket.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CocoaAsyncSocket.framework; path = Carthage/Build/tvOS/CocoaAsyncSocket.framework; sourceTree = ""; }; + 641EE71A2240E0FD00173FCB /* YYCache.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = YYCache.framework; path = Carthage/Build/iOS/YYCache.framework; sourceTree = ""; }; + 641EE73A2240F49D00173FCB /* YYCache.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = YYCache.framework; path = Carthage/Build/tvOS/YYCache.framework; sourceTree = ""; }; + 641EE73D2240F4CB00173FCB /* YYCache.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = YYCache.framework; path = Carthage/Build/tvOS/YYCache.framework; sourceTree = ""; }; 710181F7211DF584002FD3A8 /* CocoaAsyncSocket.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CocoaAsyncSocket.framework; path = Carthage/Build/iOS/CocoaAsyncSocket.framework; sourceTree = ""; }; 71018200211DF62C002FD3A8 /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = usr/lib/libxml2.tbd; sourceTree = SDKROOT; }; 7101820C211E026B002FD3A8 /* libAccessibility.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libAccessibility.tbd; path = usr/lib/libAccessibility.tbd; sourceTree = SDKROOT; }; @@ -832,6 +1181,28 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 641EE2D72240BBE300173FCB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 641EE6FC2240C5FD00173FCB /* WebDriverAgentLib_tvOS.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 641EE6282240C5CA00173FCB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 641EE73F2240F4E900173FCB /* YYCache.framework in Frameworks */, + 641EE7192240DFC100173FCB /* RoutingHTTPServer.framework in Frameworks */, + 641EE7182240DFB400173FCB /* CocoaAsyncSocket.framework in Frameworks */, + 641EE6292240C5CA00173FCB /* libxml2.tbd in Frameworks */, + 641EE62A2240C5CA00173FCB /* libAccessibility.tbd in Frameworks */, + 641EE62E2240C5CA00173FCB /* XCTest.framework in Frameworks */, + 641EE62F2240C5CA00173FCB /* XCTAutomationSupport.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; EE158A951CBD452B00A3E3F0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -911,6 +1282,10 @@ 91F9DAE01B99DBC2001349B2 = { isa = PBXGroup; children = ( + 641EE71A2240E0FD00173FCB /* YYCache.framework */, + 641EE73D2240F4CB00173FCB /* YYCache.framework */, + 641EE7142240DE7800173FCB /* CocoaAsyncSocket.framework */, + 641EE7122240DE5E00173FCB /* RoutingHTTPServer.framework */, EEE5CABE1C80361500CBBDD9 /* Configurations */, 91F9DB731B99DDD8001349B2 /* PrivateHeaders */, 498495C81BB2E6FA009CC848 /* Resources */, @@ -921,6 +1296,7 @@ 91F9DAEA1B99DBC2001349B2 /* Products */, B6E83A410C45944B036B6B0F /* Frameworks */, AD42DD291CF121E600806E5D /* Modules */, + 641EE6F92240C5CB00173FCB /* WebDriverAgentLib copy-Info.plist */, ); indentWidth = 2; sourceTree = ""; @@ -937,6 +1313,8 @@ EE9B75EC1CF7956C00275851 /* IntegrationTests_1.xctest */, EE5095FE1EBCC9090028E2FE /* IntegrationTests_2.xctest */, EE22021C1ECC612200A29571 /* IntegrationTests_3.xctest */, + 641EE2DA2240BBE300173FCB /* WebDriverAgentRunner_tvOS.xctest */, + 641EE6F82240C5CA00173FCB /* WebDriverAgentLib_tvOS.framework */, ); name = Products; sourceTree = ""; @@ -971,6 +1349,10 @@ B6E83A410C45944B036B6B0F /* Frameworks */ = { isa = PBXGroup; children = ( + 641EE73A2240F49D00173FCB /* YYCache.framework */, + 641EE2D12240BB7D00173FCB /* XCTest.framework */, + 641EE2CF2240BB6700173FCB /* libAccessibility.tbd */, + 641EE2CD2240BB5E00173FCB /* libxml2.tbd */, 710181F7211DF584002FD3A8 /* CocoaAsyncSocket.framework */, E456BF72206BC17F00963F9F /* YYCache.framework */, AD42DD2B1CF1238500806E5D /* RoutingHTTPServer.framework */, @@ -1003,6 +1385,8 @@ AD6C269B1CF2494200F8B5FF /* XCUIApplication+FBHelpers.m */, EEC9EED420064FAA00BC0D5B /* XCUICoordinate+FBFix.h */, EEC9EED520064FAA00BC0D5B /* XCUICoordinate+FBFix.m */, + 641EE6FE2240CD4900173FCB /* XCUIApplication+FBFocused.h */, + 641EE7012240CDA200173FCB /* XCUIApplication+FBFocused.m */, 719CD8FA2126C88B00C7D0C2 /* XCUIApplication+FBAlert.h */, 719CD8FB2126C88B00C7D0C2 /* XCUIApplication+FBAlert.m */, 71BD20711F86116100B36EC2 /* XCUIApplication+FBTouchAction.h */, @@ -1037,6 +1421,8 @@ EEE376401D59F81400ED88DD /* XCUIElement+FBUtilities.m */, EEE376471D59FAE900ED88DD /* XCUIElement+FBWebDriverAttributes.h */, EEE376481D59FAE900ED88DD /* XCUIElement+FBWebDriverAttributes.m */, + 641EE7042240CDCF00173FCB /* XCUIElement+FBTVFocuse.h */, + 641EE7072240CDEB00173FCB /* XCUIElement+FBTVFocuse.m */, ); name = Categories; path = WebDriverAgentLib/Categories; @@ -1124,6 +1510,8 @@ 719CD8F62126C78F00C7D0C2 /* FBAlertsMonitor.h */, 719CD8F72126C78F00C7D0C2 /* FBAlertsMonitor.m */, 714097451FAE1B32008FB2C5 /* FBAppiumActionsSynthesizer.h */, + 641EE70A2240CE2D00173FCB /* FBTVNavigationTracker.h */, + 641EE70D2240CE4800173FCB /* FBTVNavigationTracker.m */, 71241D771FAE31F100B9559F /* FBAppiumActionsSynthesizer.m */, 714097411FAE1B0B008FB2C5 /* FBBaseActionsSynthesizer.h */, 7140974D1FAE20EE008FB2C5 /* FBBaseActionsSynthesizer.m */, @@ -1465,6 +1853,206 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 641EE6302240C5CA00173FCB /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 641EE6312240C5CA00173FCB /* XCUIElement+FBWebDriverAttributes.h in Headers */, + 641EE6322240C5CA00173FCB /* FBScreen.h in Headers */, + 641EE6332240C5CA00173FCB /* XCTestPrivateSymbols.h in Headers */, + 641EE6342240C5CA00173FCB /* XCUIElement+FBTyping.h in Headers */, + 641EE6352240C5CA00173FCB /* XCUIElement+FBUtilities.h in Headers */, + 641EE6362240C5CA00173FCB /* XCUIElement+FBScrolling.h in Headers */, + 641EE6372240C5CA00173FCB /* XCSourceCodeTreeNode.h in Headers */, + 641EE6382240C5CA00173FCB /* XCPointerEventPath.h in Headers */, + 641EE6392240C5CA00173FCB /* FBRouteRequest.h in Headers */, + 641EE63A2240C5CA00173FCB /* XCTest.h in Headers */, + 641EE63B2240C5CA00173FCB /* FBAlertsMonitor.h in Headers */, + 641EE63C2240C5CA00173FCB /* XCAccessibilityElement.h in Headers */, + 641EE63D2240C5CA00173FCB /* FBSession.h in Headers */, + 641EE63E2240C5CA00173FCB /* _XCTestImplementation.h in Headers */, + 641EE63F2240C5CA00173FCB /* FBTouchActionCommands.h in Headers */, + 641EE6402240C5CA00173FCB /* FBTouchIDCommands.h in Headers */, + 641EE6412240C5CA00173FCB /* XCUIApplication.h in Headers */, + 641EE6422240C5CA00173FCB /* FBCustomCommands.h in Headers */, + 641EE6432240C5CA00173FCB /* _XCTestCaseInterruptionException.h in Headers */, + 641EE6442240C5CA00173FCB /* FBOrientationCommands.h in Headers */, + 641EE6452240C5CA00173FCB /* XCUIScreen.h in Headers */, + 641EE6462240C5CA00173FCB /* XCTRunnerIDESession.h in Headers */, + 641EE6472240C5CA00173FCB /* FBRouteRequest-Private.h in Headers */, + 641EE6482240C5CA00173FCB /* XCTTestRunSession.h in Headers */, + 641EE6492240C5CA00173FCB /* XCTestProbe.h in Headers */, + 641EE64A2240C5CA00173FCB /* XCApplicationQuery.h in Headers */, + 641EE64B2240C5CA00173FCB /* XCTAsyncActivity.h in Headers */, + 641EE64C2240C5CA00173FCB /* XCTestMisuseObserver.h in Headers */, + 641EE64D2240C5CA00173FCB /* XCTRunnerDaemonSession.h in Headers */, + 641EE64E2240C5CA00173FCB /* FBApplication.h in Headers */, + 641EE64F2240C5CA00173FCB /* XCTestExpectationWaiter.h in Headers */, + 641EE6502240C5CA00173FCB /* UIGestureRecognizer-RecordingAdditions.h in Headers */, + 641EE6512240C5CA00173FCB /* XCKeyboardKeyMap.h in Headers */, + 641EE6522240C5CA00173FCB /* XCTNSPredicateExpectationObject-Protocol.h in Headers */, + 641EE6532240C5CA00173FCB /* WebDriverAgentLib.h in Headers */, + 641EE6542240C5CA00173FCB /* FBFindElementCommands.h in Headers */, + 641EE6552240C5CA00173FCB /* XCTestRun.h in Headers */, + 641EE6562240C5CA00173FCB /* FBWebServer.h in Headers */, + 641EE6572240C5CA00173FCB /* FBScreenshotCommands.h in Headers */, + 641EE6582240C5CA00173FCB /* _XCKVOExpectationImplementation.h in Headers */, + 641EE6592240C5CA00173FCB /* NSString+FBVisualLength.h in Headers */, + 641EE65A2240C5CA00173FCB /* FBXCTestDaemonsProxy.h in Headers */, + 641EE65B2240C5CA00173FCB /* XCUIElementHitPointCoordinate.h in Headers */, + 641EE65C2240C5CA00173FCB /* XCTDarwinNotificationExpectation.h in Headers */, + 641EE65D2240C5CA00173FCB /* XCTRunnerAutomationSession.h in Headers */, + 641EE65E2240C5CA00173FCB /* XCUICoordinate+FBFix.h in Headers */, + 641EE65F2240C5CA00173FCB /* XCSourceCodeTreeNodeEnumerator.h in Headers */, + 641EE6602240C5CA00173FCB /* XCUIElement+FBIsVisible.h in Headers */, + 641EE6612240C5CA00173FCB /* XCUIElement+FBTap.h in Headers */, + 641EE6622240C5CA00173FCB /* FBResponsePayload.h in Headers */, + 641EE6632240C5CA00173FCB /* FBUnknownCommands.h in Headers */, + 641EE7062240CDCF00173FCB /* XCUIElement+FBTVFocuse.h in Headers */, + 641EE6642240C5CA00173FCB /* NSPredicate+FBFormat.h in Headers */, + 641EE6652240C5CA00173FCB /* UILongPressGestureRecognizer-RecordingAdditions.h in Headers */, + 641EE6662240C5CA00173FCB /* XCTestCase.h in Headers */, + 641EE6672240C5CA00173FCB /* XCSymbolicatorHolder.h in Headers */, + 641EE6682240C5CA00173FCB /* XCUIApplicationImpl.h in Headers */, + 641EE6692240C5CA00173FCB /* UIPanGestureRecognizer-RecordingAdditions.h in Headers */, + 641EE66A2240C5CA00173FCB /* NSExpression+FBFormat.h in Headers */, + 641EE66B2240C5CA00173FCB /* _XCTestCaseImplementation.h in Headers */, + 641EE66C2240C5CA00173FCB /* UIPinchGestureRecognizer-RecordingAdditions.h in Headers */, + 641EE66D2240C5CA00173FCB /* XCTestManager_TestsInterface-Protocol.h in Headers */, + 641EE66E2240C5CA00173FCB /* XCUIApplication+FBAlert.h in Headers */, + 641EE66F2240C5CA00173FCB /* XCDeviceEvent.h in Headers */, + 641EE6702240C5CA00173FCB /* FBMathUtils.h in Headers */, + 641EE6712240C5CA00173FCB /* UISwipeGestureRecognizer-RecordingAdditions.h in Headers */, + 641EE6722240C5CA00173FCB /* FBElementUtils.h in Headers */, + 641EE6732240C5CA00173FCB /* FBDebugCommands.h in Headers */, + 641EE6742240C5CA00173FCB /* XCTestSuite.h in Headers */, + 641EE6752240C5CA00173FCB /* XCUICoordinate.h in Headers */, + 641EE6762240C5CA00173FCB /* XCTNSPredicateExpectation.h in Headers */, + 641EE6772240C5CA00173FCB /* XCTestObservationCenter.h in Headers */, + 641EE6782240C5CA00173FCB /* XCTNSNotificationExpectation.h in Headers */, + 641EE6792240C5CA00173FCB /* XCUIRecorderNodeFinder.h in Headers */, + 641EE67A2240C5CA00173FCB /* XCUIElement+FBAccessibility.h in Headers */, + 641EE7002240CD4900173FCB /* XCUIApplication+FBFocused.h in Headers */, + 641EE67B2240C5CA00173FCB /* XCUIRecorderUtilities.h in Headers */, + 641EE67C2240C5CA00173FCB /* XCTestCaseRun.h in Headers */, + 641EE67D2240C5CA00173FCB /* XCTestConfiguration.h in Headers */, + 641EE67E2240C5CA00173FCB /* _XCTDarwinNotificationExpectationImplementation.h in Headers */, + 641EE67F2240C5CA00173FCB /* XCTestExpectation.h in Headers */, + 641EE6802240C5CA00173FCB /* FBElementTypeTransformer.h in Headers */, + 641EE6812240C5CA00173FCB /* FBXCAXClientProxy.h in Headers */, + 641EE6822240C5CA00173FCB /* FBElementCache.h in Headers */, + 641EE6832240C5CA00173FCB /* XCTMetric.h in Headers */, + 641EE6842240C5CA00173FCB /* XCTestContextScope.h in Headers */, + 641EE6852240C5CA00173FCB /* XCUIElement+FBClassChain.h in Headers */, + 641EE6862240C5CA00173FCB /* FBResponseJSONPayload.h in Headers */, + 641EE6872240C5CA00173FCB /* XCTAutomationTarget-Protocol.h in Headers */, + 641EE6882240C5CA00173FCB /* FBElement.h in Headers */, + 641EE6892240C5CA00173FCB /* XCTAXClient-Protocol.h in Headers */, + 641EE68A2240C5CA00173FCB /* FBPredicate.h in Headers */, + 641EE68B2240C5CA00173FCB /* FBExceptionHandler.h in Headers */, + 641EE68C2240C5CA00173FCB /* FBRoute.h in Headers */, + 641EE68D2240C5CA00173FCB /* XCTestDriver.h in Headers */, + 641EE68E2240C5CA00173FCB /* _XCTNSNotificationExpectationImplementation.h in Headers */, + 641EE68F2240C5CA00173FCB /* XCSynthesizedEventRecord.h in Headers */, + 641EE6902240C5CA00173FCB /* FBInspectorCommands.h in Headers */, + 641EE6912240C5CA00173FCB /* FBApplicationProcessProxy.h in Headers */, + 641EE6922240C5CA00173FCB /* XCTWaiterDelegatePrivate-Protocol.h in Headers */, + 641EE6932240C5CA00173FCB /* XCTestManager_IDEInterface-Protocol.h in Headers */, + 641EE6942240C5CA00173FCB /* FBXPath.h in Headers */, + 641EE6952240C5CA00173FCB /* XCUIRecorderTimingMessage.h in Headers */, + 641EE6962240C5CA00173FCB /* XCApplicationMonitor.h in Headers */, + 641EE6972240C5CA00173FCB /* XCUIElement+FBForceTouch.h in Headers */, + 641EE6982240C5CA00173FCB /* FBRuntimeUtils.h in Headers */, + 641EE6992240C5CA00173FCB /* XCUIElement+FBPickerWheel.h in Headers */, + 641EE69A2240C5CA00173FCB /* XCTestObservation-Protocol.h in Headers */, + 641EE69B2240C5CA00173FCB /* _XCTNSPredicateExpectationImplementation.h in Headers */, + 641EE69C2240C5CA00173FCB /* FBElementCommands.h in Headers */, + 641EE69D2240C5CA00173FCB /* FBResponseFilePayload.h in Headers */, + 641EE69E2240C5CA00173FCB /* FBSpringboardApplication.h in Headers */, + 641EE69F2240C5CA00173FCB /* FBTCPSocket.h in Headers */, + 641EE6A02240C5CA00173FCB /* XCUIElement+FBUID.h in Headers */, + 641EE6A12240C5CA00173FCB /* XCSymbolicationRecord.h in Headers */, + 641EE6A22240C5CA00173FCB /* XCUIDevice.h in Headers */, + 641EE6A32240C5CA00173FCB /* XCUIApplication+FBTouchAction.h in Headers */, + 641EE6A42240C5CA00173FCB /* FBCommandHandler.h in Headers */, + 641EE6A52240C5CA00173FCB /* FBSessionCommands.h in Headers */, + 641EE70C2240CE2D00173FCB /* FBTVNavigationTracker.h in Headers */, + 641EE6A62240C5CA00173FCB /* FBImageIOScaler.h in Headers */, + 641EE6A72240C5CA00173FCB /* FBSession-Private.h in Headers */, + 641EE6A82240C5CA00173FCB /* NSString+FBXMLSafeString.h in Headers */, + 641EE6A92240C5CA00173FCB /* FBCommandStatus.h in Headers */, + 641EE6AA2240C5CA00173FCB /* XCElementSnapshot.h in Headers */, + 641EE6AB2240C5CA00173FCB /* FBAlertViewCommands.h in Headers */, + 641EE6AC2240C5CA00173FCB /* XCTWaiter.h in Headers */, + 641EE6AD2240C5CA00173FCB /* XCTWaiterManagement-Protocol.h in Headers */, + 641EE6AE2240C5CA00173FCB /* XCElementSnapshot+FBHitPoint.h in Headers */, + 641EE6AF2240C5CA00173FCB /* XCTestContext.h in Headers */, + 641EE6B02240C5CA00173FCB /* XCAccessibilityElement+FBComparison.h in Headers */, + 641EE6B12240C5CA00173FCB /* XCTWaiterDelegate-Protocol.h in Headers */, + 641EE6B22240C5CA00173FCB /* _XCTestExpectationImplementation.h in Headers */, + 641EE6B32240C5CA00173FCB /* XCAXClient_iOS.h in Headers */, + 641EE6B42240C5CA00173FCB /* XCTWaiterManager.h in Headers */, + 641EE6B52240C5CA00173FCB /* XCTestDriverInterface-Protocol.h in Headers */, + 641EE6B62240C5CA00173FCB /* _XCTestSuiteImplementation.h in Headers */, + 641EE6B72240C5CA00173FCB /* FBBaseActionsSynthesizer.h in Headers */, + 641EE6B82240C5CA00173FCB /* FBAlert.h in Headers */, + 641EE6B92240C5CA00173FCB /* XCUIElementQuery.h in Headers */, + 641EE6BA2240C5CA00173FCB /* XCPointerEvent.h in Headers */, + 641EE6BB2240C5CA00173FCB /* XCSourceCodeRecording.h in Headers */, + 641EE6BC2240C5CA00173FCB /* FBRunLoopSpinner.h in Headers */, + 641EE6BD2240C5CA00173FCB /* FBErrorBuilder.h in Headers */, + 641EE6BE2240C5CA00173FCB /* XCApplicationMonitor_iOS.h in Headers */, + 641EE6BF2240C5CA00173FCB /* FBKeyboard.h in Headers */, + 641EE6C02240C5CA00173FCB /* XCUIApplication+FBHelpers.h in Headers */, + 641EE6C12240C5CA00173FCB /* _XCTestObservationCenterImplementation.h in Headers */, + 641EE6C22240C5CA00173FCB /* XCUIDevice+FBHelpers.h in Headers */, + 641EE6C32240C5CA00173FCB /* FBClassChainQueryParser.h in Headers */, + 641EE6C42240C5CA00173FCB /* FBMacros.h in Headers */, + 641EE6C52240C5CA00173FCB /* XCTestExpectationDelegate-Protocol.h in Headers */, + 641EE6C62240C5CA00173FCB /* XCTUIApplicationMonitor-Protocol.h in Headers */, + 641EE6C72240C5CA00173FCB /* XCElementSnapshot+FBHelpers.h in Headers */, + 641EE6C82240C5CA00173FCB /* XCTKVOExpectation.h in Headers */, + 641EE6C92240C5CA00173FCB /* XCUIDevice+FBRotation.h in Headers */, + 641EE6CA2240C5CA00173FCB /* XCEventGenerator.h in Headers */, + 641EE6CB2240C5CA00173FCB /* FBConfiguration.h in Headers */, + 641EE6CC2240C5CA00173FCB /* XCTestSuiteRun.h in Headers */, + 641EE6CD2240C5CA00173FCB /* XCUIElementAsynchronousHandlerWrapper.h in Headers */, + 641EE6CE2240C5CA00173FCB /* XCTestLog.h in Headers */, + 641EE6CF2240C5CA00173FCB /* UITapGestureRecognizer-RecordingAdditions.h in Headers */, + 641EE6D02240C5CA00173FCB /* XCDebugLogDelegate-Protocol.h in Headers */, + 641EE6D12240C5CA00173FCB /* NSString-XCTAdditions.h in Headers */, + 641EE6D22240C5CA00173FCB /* XCTestWaiter.h in Headers */, + 641EE6D32240C5CA00173FCB /* FBImageUtils.h in Headers */, + 641EE6D42240C5CA00173FCB /* NSValue-XCTestAdditions.h in Headers */, + 641EE6D52240C5CA00173FCB /* _XCTWaiterImpl.h in Headers */, + 641EE6D62240C5CA00173FCB /* FBLogger.h in Headers */, + 641EE6D72240C5CA00173FCB /* XCTestObserver.h in Headers */, + 641EE6D82240C5CA00173FCB /* XCUIElement.h in Headers */, + 641EE6D92240C5CA00173FCB /* XCKeyboardInputSolver.h in Headers */, + 641EE6DA2240C5CA00173FCB /* FBXCTestCaseImplementationFailureHoldingProxy.h in Headers */, + 641EE6DB2240C5CA00173FCB /* FBPasteboard.h in Headers */, + 641EE6DC2240C5CA00173FCB /* FBAppiumActionsSynthesizer.h in Headers */, + 641EE6DD2240C5CA00173FCB /* FBDebugLogDelegateDecorator.h in Headers */, + 641EE6DE2240C5CA00173FCB /* XCUIDevice+FBHealthCheck.h in Headers */, + 641EE6DF2240C5CA00173FCB /* FBMjpegServer.h in Headers */, + 641EE6E02240C5CA00173FCB /* XCUIRecorderNodeFinderMatch.h in Headers */, + 641EE6E12240C5CA00173FCB /* XCUIApplicationProcess.h in Headers */, + 641EE6E22240C5CA00173FCB /* FBW3CActionsSynthesizer.h in Headers */, + 641EE6E32240C5CA00173FCB /* CDStructures.h in Headers */, + 641EE6E42240C5CA00173FCB /* XCKeyboardLayout.h in Headers */, + 641EE6E52240C5CA00173FCB /* XCTAsyncActivity-Protocol.h in Headers */, + 641EE6E62240C5CA00173FCB /* XCActivityRecord.h in Headers */, + 641EE6E72240C5CA00173FCB /* XCUIElement+FBFind.h in Headers */, + 641EE6E82240C5CA00173FCB /* XCTestManager_ManagerInterface-Protocol.h in Headers */, + 641EE6E92240C5CA00173FCB /* FBFailureProofTestCase.h in Headers */, + 641EE6EA2240C5CA00173FCB /* XCTTestRunSessionDelegate-Protocol.h in Headers */, + 641EE6EB2240C5CA00173FCB /* XCTestCaseSuite.h in Headers */, + 641EE6EC2240C5CA00173FCB /* _XCInternalTestRun.h in Headers */, + 641EE6ED2240C5CA00173FCB /* FBXPath-Private.h in Headers */, + 641EE6EE2240C5CA00173FCB /* XCKeyMappingPath.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; EE158A961CBD452B00A3E3F0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1520,6 +2108,7 @@ EE158AB41CBD456F00A3E3F0 /* XCUIElement+FBTap.h in Headers */, EE158ADC1CBD456F00A3E3F0 /* FBResponsePayload.h in Headers */, EE158ACC1CBD456F00A3E3F0 /* FBUnknownCommands.h in Headers */, + 641EE7052240CDCF00173FCB /* XCUIElement+FBTVFocuse.h in Headers */, 71A224E51DE2F56600844D55 /* NSPredicate+FBFormat.h in Headers */, EE35AD1F1E3B77D600A02D78 /* UILongPressGestureRecognizer-RecordingAdditions.h in Headers */, EE35AD411E3B77D600A02D78 /* XCTestCase.h in Headers */, @@ -1543,6 +2132,7 @@ EE35AD5B1E3B77D600A02D78 /* XCTNSNotificationExpectation.h in Headers */, EE35AD751E3B77D600A02D78 /* XCUIRecorderNodeFinder.h in Headers */, EE158AAE1CBD456F00A3E3F0 /* XCUIElement+FBAccessibility.h in Headers */, + 641EE6FF2240CD4900173FCB /* XCUIApplication+FBFocused.h in Headers */, EE35AD781E3B77D600A02D78 /* XCUIRecorderUtilities.h in Headers */, EE35AD421E3B77D600A02D78 /* XCTestCaseRun.h in Headers */, EE35AD441E3B77D600A02D78 /* XCTestConfiguration.h in Headers */, @@ -1586,6 +2176,7 @@ 71BD20731F86116100B36EC2 /* XCUIApplication+FBTouchAction.h in Headers */, EE158ACE1CBD456F00A3E3F0 /* FBCommandHandler.h in Headers */, EE158AC81CBD456F00A3E3F0 /* FBSessionCommands.h in Headers */, + 641EE70B2240CE2D00173FCB /* FBTVNavigationTracker.h in Headers */, 63CCF91221ECE4C700E94ABD /* FBImageIOScaler.h in Headers */, EE158AE31CBD456F00A3E3F0 /* FBSession-Private.h in Headers */, 716E0BCE1E917E810087A825 /* NSString+FBXMLSafeString.h in Headers */, @@ -1665,6 +2256,44 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 641EE2D92240BBE300173FCB /* WebDriverAgentRunner_tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 641EE2DF2240BBE300173FCB /* Build configuration list for PBXNativeTarget "WebDriverAgentRunner_tvOS" */; + buildPhases = ( + 641EE2D62240BBE300173FCB /* Sources */, + 641EE2D72240BBE300173FCB /* Frameworks */, + 641EE2D82240BBE300173FCB /* Resources */, + 641EE3472240C1EF00173FCB /* Copy frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 641EE6FB2240C5F400173FCB /* PBXTargetDependency */, + ); + name = WebDriverAgentRunner_tvOS; + productName = WebDriverAgent; + productReference = 641EE2DA2240BBE300173FCB /* WebDriverAgentRunner_tvOS.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; + 641EE5D52240C5CA00173FCB /* WebDriverAgentLib_tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 641EE6F52240C5CA00173FCB /* Build configuration list for PBXNativeTarget "WebDriverAgentLib_tvOS" */; + buildPhases = ( + 641EE5D62240C5CA00173FCB /* Sources */, + 641EE6282240C5CA00173FCB /* Frameworks */, + 641EE6302240C5CA00173FCB /* Headers */, + 641EE6EF2240C5CA00173FCB /* Resources */, + 641EE6F12240C5CA00173FCB /* Copy Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = WebDriverAgentLib_tvOS; + productName = WebDriverAgentLib_; + productReference = 641EE6F82240C5CA00173FCB /* WebDriverAgentLib_tvOS.framework */; + productType = "com.apple.product-type.framework"; + }; EE158A981CBD452B00A3E3F0 /* WebDriverAgentLib */ = { isa = PBXNativeTarget; buildConfigurationList = EE158AA01CBD452B00A3E3F0 /* Build configuration list for PBXNativeTarget "WebDriverAgentLib" */; @@ -1805,6 +2434,10 @@ LastUpgradeCheck = 0900; ORGANIZATIONNAME = Facebook; TargetAttributes = { + 641EE2D92240BBE300173FCB = { + CreatedOnToolsVersion = 10.1; + ProvisioningStyle = Automatic; + }; EE158A981CBD452B00A3E3F0 = { CreatedOnToolsVersion = 7.3; }; @@ -1838,7 +2471,9 @@ projectRoot = ""; targets = ( EE158A981CBD452B00A3E3F0 /* WebDriverAgentLib */, + 641EE5D52240C5CA00173FCB /* WebDriverAgentLib_tvOS */, EEF988291C486603005CA669 /* WebDriverAgentRunner */, + 641EE2D92240BBE300173FCB /* WebDriverAgentRunner_tvOS */, EE836C011C0F118600D87246 /* UnitTests */, EE9B75EB1CF7956C00275851 /* IntegrationTests_1 */, EE5095DD1EBCC9090028E2FE /* IntegrationTests_2 */, @@ -1849,6 +2484,21 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 641EE2D82240BBE300173FCB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 641EE6EF2240C5CA00173FCB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 641EE6F02240C5CA00173FCB /* WebDriverAgent.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; EE158A971CBD452B00A3E3F0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1903,6 +2553,105 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 641EE2D62240BBE300173FCB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 641EE3452240C1C800173FCB /* UITestingUITests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 641EE5D62240C5CA00173FCB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 641EE5D72240C5CA00173FCB /* FBScreenshotCommands.m in Sources */, + 641EE5D82240C5CA00173FCB /* FBPredicate.m in Sources */, + 641EE5D92240C5CA00173FCB /* XCUIElement+FBPickerWheel.m in Sources */, + 641EE5DA2240C5CA00173FCB /* XCUIApplicationProcessDelay.m in Sources */, + 641EE5DB2240C5CA00173FCB /* FBXPath.m in Sources */, + 641EE7032240CDA200173FCB /* XCUIApplication+FBFocused.m in Sources */, + 641EE5DC2240C5CA00173FCB /* XCUIApplication+FBAlert.m in Sources */, + 641EE5DD2240C5CA00173FCB /* FBAppiumActionsSynthesizer.m in Sources */, + 641EE70F2240CE4800173FCB /* FBTVNavigationTracker.m in Sources */, + 641EE5DE2240C5CA00173FCB /* XCUIApplication+FBTouchAction.m in Sources */, + 641EE5DF2240C5CA00173FCB /* FBWebServer.m in Sources */, + 641EE5E02240C5CA00173FCB /* FBTCPSocket.m in Sources */, + 641EE5E12240C5CA00173FCB /* FBErrorBuilder.m in Sources */, + 641EE5E22240C5CA00173FCB /* XCUIElement+FBClassChain.m in Sources */, + 641EE5E32240C5CA00173FCB /* NSExpression+FBFormat.m in Sources */, + 641EE5E42240C5CA00173FCB /* XCUIApplication+FBHelpers.m in Sources */, + 641EE5E52240C5CA00173FCB /* FBKeyboard.m in Sources */, + 641EE5E62240C5CA00173FCB /* FBElementUtils.m in Sources */, + 641EE5E72240C5CA00173FCB /* FBW3CActionsSynthesizer.m in Sources */, + 641EE5E82240C5CA00173FCB /* FBApplicationProcessProxy.m in Sources */, + 641EE5E92240C5CA00173FCB /* FBFailureProofTestCase.m in Sources */, + 641EE5EA2240C5CA00173FCB /* XCUIElement+FBIsVisible.m in Sources */, + 641EE5EB2240C5CA00173FCB /* XCUIElement+FBFind.m in Sources */, + 641EE5EC2240C5CA00173FCB /* FBResponsePayload.m in Sources */, + 641EE5ED2240C5CA00173FCB /* FBRoute.m in Sources */, + 641EE5EE2240C5CA00173FCB /* NSString+FBVisualLength.m in Sources */, + 641EE5EF2240C5CA00173FCB /* FBRunLoopSpinner.m in Sources */, + 641EE5F02240C5CA00173FCB /* FBAlertsMonitor.m in Sources */, + 641EE5F12240C5CA00173FCB /* FBClassChainQueryParser.m in Sources */, + 641EE5F22240C5CA00173FCB /* NSPredicate+FBFormat.m in Sources */, + 641EE5F32240C5CA00173FCB /* XCAccessibilityElement+FBComparison.m in Sources */, + 641EE5F42240C5CA00173FCB /* XCUIDevice+FBRotation.m in Sources */, + 641EE5F52240C5CA00173FCB /* XCUIElement+FBUID.m in Sources */, + 641EE5F62240C5CA00173FCB /* FBRouteRequest.m in Sources */, + 641EE5F72240C5CA00173FCB /* FBResponseJSONPayload.m in Sources */, + 641EE5F82240C5CA00173FCB /* FBXCTestCaseImplementationFailureHoldingProxy.m in Sources */, + 641EE5F92240C5CA00173FCB /* FBMjpegServer.m in Sources */, + 641EE5FA2240C5CA00173FCB /* XCUIDevice+FBHealthCheck.m in Sources */, + 641EE5FB2240C5CA00173FCB /* FBSpringboardApplication.m in Sources */, + 641EE5FC2240C5CA00173FCB /* FBResponseFilePayload.m in Sources */, + 641EE5FD2240C5CA00173FCB /* FBBaseActionsSynthesizer.m in Sources */, + 641EE5FE2240C5CA00173FCB /* XCUIElement+FBWebDriverAttributes.m in Sources */, + 641EE5FF2240C5CA00173FCB /* XCUIElement+FBForceTouch.m in Sources */, + 641EE6002240C5CA00173FCB /* FBTouchActionCommands.m in Sources */, + 641EE6012240C5CA00173FCB /* FBImageIOScaler.m in Sources */, + 641EE6022240C5CA00173FCB /* FBTouchIDCommands.m in Sources */, + 641EE6032240C5CA00173FCB /* FBDebugCommands.m in Sources */, + 641EE6042240C5CA00173FCB /* NSString+FBXMLSafeString.m in Sources */, + 641EE6052240C5CA00173FCB /* FBUnknownCommands.m in Sources */, + 641EE6062240C5CA00173FCB /* FBOrientationCommands.m in Sources */, + 641EE7092240CDEB00173FCB /* XCUIElement+FBTVFocuse.m in Sources */, + 641EE6072240C5CA00173FCB /* XCUICoordinate+FBFix.m in Sources */, + 641EE6082240C5CA00173FCB /* FBRuntimeUtils.m in Sources */, + 641EE6092240C5CA00173FCB /* XCUIElement+FBUtilities.m in Sources */, + 641EE60A2240C5CA00173FCB /* FBLogger.m in Sources */, + 641EE60B2240C5CA00173FCB /* FBCustomCommands.m in Sources */, + 641EE60C2240C5CA00173FCB /* XCUIDevice+FBHelpers.m in Sources */, + 641EE60D2240C5CA00173FCB /* XCTestPrivateSymbols.m in Sources */, + 641EE60E2240C5CA00173FCB /* XCUIElement+FBTyping.m in Sources */, + 641EE60F2240C5CA00173FCB /* XCUIElement+FBAccessibility.m in Sources */, + 641EE6102240C5CA00173FCB /* FBImageUtils.m in Sources */, + 641EE6112240C5CA00173FCB /* FBSession.m in Sources */, + 641EE6122240C5CA00173FCB /* FBFindElementCommands.m in Sources */, + 641EE6132240C5CA00173FCB /* FBDebugLogDelegateDecorator.m in Sources */, + 641EE6142240C5CA00173FCB /* FBAlertViewCommands.m in Sources */, + 641EE6152240C5CA00173FCB /* XCUIElement+FBScrolling.m in Sources */, + 641EE6162240C5CA00173FCB /* FBSessionCommands.m in Sources */, + 641EE6172240C5CA00173FCB /* FBInspectorCommands.m in Sources */, + 641EE6182240C5CA00173FCB /* XCElementSnapshot+FBHitPoint.m in Sources */, + 641EE6192240C5CA00173FCB /* FBConfiguration.m in Sources */, + 641EE61A2240C5CA00173FCB /* FBElementCache.m in Sources */, + 641EE61B2240C5CA00173FCB /* FBPasteboard.m in Sources */, + 641EE61C2240C5CA00173FCB /* FBAlert.m in Sources */, + 641EE61D2240C5CA00173FCB /* FBElementCommands.m in Sources */, + 641EE61E2240C5CA00173FCB /* FBExceptionHandler.m in Sources */, + 641EE61F2240C5CA00173FCB /* FBXCodeCompatibility.m in Sources */, + 641EE6202240C5CA00173FCB /* XCElementSnapshot+FBHelpers.m in Sources */, + 641EE6212240C5CA00173FCB /* FBElementTypeTransformer.m in Sources */, + 641EE6222240C5CA00173FCB /* FBApplication.m in Sources */, + 641EE6232240C5CA00173FCB /* FBScreen.m in Sources */, + 641EE6242240C5CA00173FCB /* FBXCTestDaemonsProxy.m in Sources */, + 641EE6252240C5CA00173FCB /* XCUIElement+FBTap.m in Sources */, + 641EE6262240C5CA00173FCB /* FBMathUtils.m in Sources */, + 641EE6272240C5CA00173FCB /* FBXCAXClientProxy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; EE158A941CBD452B00A3E3F0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1912,8 +2661,10 @@ 7136A47A1E8918E60024FC3D /* XCUIElement+FBPickerWheel.m in Sources */, 6385F4A7220A40760095BBDB /* XCUIApplicationProcessDelay.m in Sources */, 711084451DA3AA7500F913D6 /* FBXPath.m in Sources */, + 641EE7022240CDA200173FCB /* XCUIApplication+FBFocused.m in Sources */, 719CD8FD2126C88B00C7D0C2 /* XCUIApplication+FBAlert.m in Sources */, 71241D781FAE31F100B9559F /* FBAppiumActionsSynthesizer.m in Sources */, + 641EE70E2240CE4800173FCB /* FBTVNavigationTracker.m in Sources */, 71BD20741F86116100B36EC2 /* XCUIApplication+FBTouchAction.m in Sources */, EE158AE71CBD456F00A3E3F0 /* FBWebServer.m in Sources */, 715557D4211DBCE700613B26 /* FBTCPSocket.m in Sources */, @@ -1955,6 +2706,7 @@ 716E0BCF1E917E810087A825 /* NSString+FBXMLSafeString.m in Sources */, EE158ACD1CBD456F00A3E3F0 /* FBUnknownCommands.m in Sources */, EE158AC51CBD456F00A3E3F0 /* FBOrientationCommands.m in Sources */, + 641EE7082240CDEB00173FCB /* XCUIElement+FBTVFocuse.m in Sources */, EEC9EED720064FAA00BC0D5B /* XCUICoordinate+FBFix.m in Sources */, EE158AEB1CBD456F00A3E3F0 /* FBRuntimeUtils.m in Sources */, EEE376461D59F81400ED88DD /* XCUIElement+FBUtilities.m in Sources */, @@ -2100,6 +2852,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 641EE6FB2240C5F400173FCB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 641EE5D52240C5CA00173FCB /* WebDriverAgentLib_tvOS */; + targetProxy = 641EE6FA2240C5F400173FCB /* PBXContainerItemProxy */; + }; AD8D96F11D3C12960061268E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = EE158A981CBD452B00A3E3F0 /* WebDriverAgentLib */; @@ -2154,6 +2911,128 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 641EE2E02240BBE300173FCB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ""; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = WebDriverAgentRunner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.facebook.WebDriverAgentRunner; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = appletvos; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 12.1; + }; + name = Debug; + }; + 641EE2E12240BBE300173FCB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = ""; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = WebDriverAgentRunner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.facebook.WebDriverAgentRunner; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = appletvos; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 12.1; + }; + name = Release; + }; + 641EE6F62240C5CA00173FCB /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EEE5CABF1C80361500CBBDD9 /* ProjectSettings.xcconfig */; + buildSettings = { + CLANG_STATIC_ANALYZER_MODE = deep; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = NO; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = ( + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + "$(PLATFORM_DIR)/Developer/Library/PrivateFrameworks", + "$(PROJECT_DIR)/Carthage/Build/tvOS", + "$(PROJECT_DIR)/Carthage/Build/iOS", + "$(PROJECT_DIR)/Carthage/Build/Mac", + ); + GCC_TREAT_WARNINGS_AS_ERRORS = NO; + INFOPLIST_FILE = WebDriverAgentLib/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ""; + PRODUCT_BUNDLE_IDENTIFIER = com.facebook.WebDriverAgentLib; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 641EE6F72240C5CA00173FCB /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EEE5CABF1C80361500CBBDD9 /* ProjectSettings.xcconfig */; + buildSettings = { + CLANG_STATIC_ANALYZER_MODE = deep; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = NO; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = ( + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + "$(PLATFORM_DIR)/Developer/Library/PrivateFrameworks", + "$(PROJECT_DIR)/Carthage/Build/tvOS", + "$(PROJECT_DIR)/Carthage/Build/iOS", + "$(PROJECT_DIR)/Carthage/Build/Mac", + ); + GCC_TREAT_WARNINGS_AS_ERRORS = NO; + INFOPLIST_FILE = WebDriverAgentLib/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_LDFLAGS = ""; + PRODUCT_BUNDLE_IDENTIFIER = com.facebook.WebDriverAgentLib; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 91F9DB0A1B99DBC2001349B2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2541,6 +3420,24 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 641EE2DF2240BBE300173FCB /* Build configuration list for PBXNativeTarget "WebDriverAgentRunner_tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 641EE2E02240BBE300173FCB /* Debug */, + 641EE2E12240BBE300173FCB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 641EE6F52240C5CA00173FCB /* Build configuration list for PBXNativeTarget "WebDriverAgentLib_tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 641EE6F62240C5CA00173FCB /* Debug */, + 641EE6F72240C5CA00173FCB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 91F9DAE41B99DBC2001349B2 /* Build configuration list for PBXProject "WebDriverAgent" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentLib.xcscheme b/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentLib.xcscheme index a46c97e3d..223ff0fd1 100644 --- a/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentLib.xcscheme +++ b/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentLib.xcscheme @@ -26,7 +26,6 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - language = "" shouldUseLaunchSchemeArgsEnv = "YES"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner.xcscheme b/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner.xcscheme index 2c143c116..8ef138420 100644 --- a/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner.xcscheme +++ b/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner.xcscheme @@ -26,7 +26,6 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - language = "" systemAttachmentLifetime = "keepNever" shouldUseLaunchSchemeArgsEnv = "YES"> @@ -48,7 +47,6 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner_tvOS.xcscheme b/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner_tvOS.xcscheme new file mode 100644 index 000000000..846ad68f1 --- /dev/null +++ b/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner_tvOS.xcscheme @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WebDriverAgentLib/Categories/XCUIApplication+FBFocused.h b/WebDriverAgentLib/Categories/XCUIApplication+FBFocused.h new file mode 100644 index 000000000..6951e760c --- /dev/null +++ b/WebDriverAgentLib/Categories/XCUIApplication+FBFocused.h @@ -0,0 +1,24 @@ +/** + * Copyright (c) 2018-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import +#import "FBElement.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface XCUIApplication (FBFocused) + +/** + Return current focused element + */ +- (id)fb_focusedElement; + +@end + +NS_ASSUME_NONNULL_END diff --git a/WebDriverAgentLib/Categories/XCUIApplication+FBFocused.m b/WebDriverAgentLib/Categories/XCUIApplication+FBFocused.m new file mode 100644 index 000000000..a8fd1f6b7 --- /dev/null +++ b/WebDriverAgentLib/Categories/XCUIApplication+FBFocused.m @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2018-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "XCUIApplication+FBFocused.h" +#import "XCUIElement+FBWebDriverAttributes.h" + +@implementation XCUIApplication (FBFocused) + +- (id) fb_focusedElement +{ + XCUIElementQuery *query = [self descendantsMatchingType:XCUIElementTypeAny]; + return [query elementMatchingPredicate: [NSPredicate predicateWithFormat:@"hasFocus == true"]]; +} + +@end diff --git a/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m b/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m index 5c1f821c8..b0fe5f6bf 100644 --- a/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m +++ b/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m @@ -37,7 +37,7 @@ - (BOOL)fb_deactivateWithDuration:(NSTimeInterval)duration error:(NSError **)err [self fb_activate]; return YES; } - return [[FBSpringboardApplication fb_springboard] fb_tapApplicationWithIdentifier:applicationIdentifier error:error]; + return [[FBSpringboardApplication fb_springboard] fb_openApplicationWithIdentifier:applicationIdentifier error:error]; } - (NSDictionary *)fb_tree @@ -91,6 +91,7 @@ + (NSDictionary *)dictionaryForElement:(XCElementSnapshot *)snapshot recursive:( info[@"frame"] = NSStringFromCGRect(snapshot.wdFrame); info[@"isEnabled"] = [@([snapshot isWDEnabled]) stringValue]; info[@"isVisible"] = [@([snapshot isWDVisible]) stringValue]; + info[@"isFocused"] = [@([snapshot isWDFocused]) stringValue]; if (!recursive) { return info.copy; diff --git a/WebDriverAgentLib/Categories/XCUIApplication+FBTouchAction.m b/WebDriverAgentLib/Categories/XCUIApplication+FBTouchAction.m index 941ec2f78..155cff087 100644 --- a/WebDriverAgentLib/Categories/XCUIApplication+FBTouchAction.m +++ b/WebDriverAgentLib/Categories/XCUIApplication+FBTouchAction.m @@ -19,6 +19,8 @@ #import "FBXCTestDaemonsProxy.h" #import "XCEventGenerator.h" +#if !TARGET_OS_TV + @implementation XCUIApplication (FBTouchAction) + (BOOL)handleEventSynthesWithError:(NSError *)error @@ -57,5 +59,5 @@ - (BOOL)fb_synthesizeEvent:(XCSynthesizedEventRecord *)event error:(NSError *__a return [FBXCTestDaemonsProxy synthesizeEventWithRecord:event error:error]; } - @end +#endif diff --git a/WebDriverAgentLib/Categories/XCUICoordinate+FBFix.h b/WebDriverAgentLib/Categories/XCUICoordinate+FBFix.h index 55742a95c..14c8750eb 100644 --- a/WebDriverAgentLib/Categories/XCUICoordinate+FBFix.h +++ b/WebDriverAgentLib/Categories/XCUICoordinate+FBFix.h @@ -9,8 +9,10 @@ #import +#if !TARGET_OS_TV @interface XCUICoordinate (FBFix) - (CGPoint)fb_screenPoint; @end +#endif diff --git a/WebDriverAgentLib/Categories/XCUICoordinate+FBFix.m b/WebDriverAgentLib/Categories/XCUICoordinate+FBFix.m index 6b6aa62c3..5bac07392 100644 --- a/WebDriverAgentLib/Categories/XCUICoordinate+FBFix.m +++ b/WebDriverAgentLib/Categories/XCUICoordinate+FBFix.m @@ -13,6 +13,7 @@ #import "XCUIElement+FBUtilities.h" #import "XCElementSnapshot+FBHitPoint.h" +# if !TARGET_OS_TV @implementation XCUICoordinate (FBFix) - (CGPoint)fb_screenPoint @@ -37,3 +38,4 @@ - (CGPoint)fb_screenPoint } @end +#endif diff --git a/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m b/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m index 6fe17dd9a..7e2976793 100644 --- a/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m +++ b/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m @@ -90,11 +90,15 @@ - (BOOL)fb_unlockScreen:(NSError **)error } [self pressButton:XCUIDeviceButtonHome]; [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:FBHomeButtonCoolOffTime]]; +#if !TARGET_OS_TV if (SYSTEM_VERSION_LESS_THAN(@"10.0")) { [[FBApplication fb_activeApplication] swipeRight]; } else { [self pressButton:XCUIDeviceButtonHome]; } +#else + [self pressButton:XCUIDeviceButtonHome]; +#endif [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:FBHomeButtonCoolOffTime]]; return [[[[FBRunLoopSpinner new] timeout:FBScreenLockTimeout] @@ -110,7 +114,11 @@ - (NSData *)fb_screenshotWithError:(NSError*__autoreleasing*)error if (nil == screenshotData) { return nil; } +#if TARGET_OS_TV + return FBAdjustScreenshotOrientationForApplication(screenshotData); +#else return FBAdjustScreenshotOrientationForApplication(screenshotData, FBApplication.fb_activeApplication.interfaceOrientation); +#endif } - (NSData *)fb_rawScreenshotWithQuality:(NSUInteger)quality rect:(CGRect)rect error:(NSError*__autoreleasing*)error diff --git a/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.h b/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.h index f94877971..79271e628 100644 --- a/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.h +++ b/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.h @@ -12,6 +12,7 @@ NS_ASSUME_NONNULL_BEGIN +#if !TARGET_OS_TV @interface XCUIDevice (FBRotation) /** @@ -34,5 +35,6 @@ NS_ASSUME_NONNULL_BEGIN @property (strong, nonatomic, readonly) NSDictionary *fb_rotationMapping; @end +#endif NS_ASSUME_NONNULL_END diff --git a/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.m b/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.m index c25e0f1f7..6e91bdd9e 100644 --- a/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.m +++ b/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.m @@ -12,6 +12,7 @@ static const NSTimeInterval kFBWebDriverOrientationChangeDelay = 5.0; static const CGFloat FBRotationCoolOffTime = 1.f; +# if !TARGET_OS_TV @implementation XCUIDevice (FBRotation) - (BOOL)fb_setDeviceInterfaceOrientation:(UIDeviceOrientation)orientation @@ -67,3 +68,4 @@ - (NSDictionary *)fb_rotationMapping } @end +#endif diff --git a/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.m b/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.m index f2065f1a3..e75664ff7 100644 --- a/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.m +++ b/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.m @@ -193,9 +193,6 @@ - (BOOL)fb_isVisible NSArray *ancestors = self.fb_ancestors; XCElementSnapshot *parentWindow = ancestors.count > 1 ? [ancestors objectAtIndex:ancestors.count - 2] : nil; - XCElementSnapshot *appElement = ancestors.count > 0 ? [ancestors lastObject] : self; - - CGRect appFrame = appElement.frame; CGRect visibleRect = selfFrame; if (nil != parentWindow) { visibleRect = [self fb_frameInContainer:parentWindow hierarchyIntersection:nil]; @@ -205,6 +202,9 @@ - (BOOL)fb_isVisible } CGPoint midPoint = CGPointMake(visibleRect.origin.x + visibleRect.size.width / 2, visibleRect.origin.y + visibleRect.size.height / 2); +#if !TARGET_OS_TV // TV has no orientation, so it does not need to coordinate + XCElementSnapshot *appElement = ancestors.count > 0 ? [ancestors lastObject] : self; + CGRect appFrame = appElement.frame; CGRect windowFrame = nil == parentWindow ? selfFrame : parentWindow.frame; if ((appFrame.size.height > appFrame.size.width && windowFrame.size.height < windowFrame.size.width) || (appFrame.size.height < appFrame.size.width && windowFrame.size.height > windowFrame.size.width)) { @@ -213,6 +213,7 @@ - (BOOL)fb_isVisible // However, upside-down case cannot be covered this way, which is not important for Appium midPoint = FBInvertPointForApplication(midPoint, appFrame.size, FBApplication.fb_activeApplication.interfaceOrientation); } +#endif XCAccessibilityElement *hitElement = [self elementAtPoint:midPoint]; if (nil != hitElement) { if ([self.accessibilityElement isEqualToElement:hitElement]) { diff --git a/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.m b/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.m index a878420f2..9daf519c0 100644 --- a/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.m +++ b/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.m @@ -14,6 +14,7 @@ #import "XCUICoordinate.h" #import "XCUICoordinate+FBFix.h" +#if !TARGET_OS_TV @implementation XCUIElement (FBPickerWheel) static const NSTimeInterval VALUE_CHANGE_TIMEOUT = 2; @@ -57,3 +58,4 @@ - (BOOL)fb_selectPreviousOptionWithOffset:(CGFloat)offset error:(NSError **)erro } @end +#endif diff --git a/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.h b/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.h index 3aceb3988..1ee7c1dab 100644 --- a/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.h +++ b/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.h @@ -20,6 +20,8 @@ typedef NS_ENUM(NSUInteger, FBXCUIElementScrollDirection) { FBXCUIElementScrollDirectionHorizontal, }; +#if !TARGET_OS_TV + @interface XCUIElement (FBScrolling) /** @@ -82,4 +84,6 @@ typedef NS_ENUM(NSUInteger, FBXCUIElementScrollDirection) { @end +#endif + NS_ASSUME_NONNULL_END diff --git a/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.m b/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.m index 51ff120a7..e52eb22af 100644 --- a/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.m +++ b/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.m @@ -34,6 +34,8 @@ const CGFloat FBScrollCoolOffTime = 1.f; const CGFloat FBMinimumTouchEventDelay = 0.1f; +#if !TARGET_OS_TV + @interface XCElementSnapshot (FBScrolling) - (void)fb_scrollUpByNormalizedDistance:(CGFloat)distance inApplication:(XCUIApplication *)application; @@ -311,3 +313,5 @@ - (BOOL)fb_scrollAncestorScrollViewByVectorWithinScrollViewFrame:(CGVector)vecto } @end + +#endif diff --git a/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.h b/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.h new file mode 100644 index 000000000..6b25f9ab4 --- /dev/null +++ b/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.h @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2018-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +#if TARGET_OS_TV +@interface XCUIElement (FBTVFocuse) + +/** + Sets focus + + @param error If there is an error, upon return contains an NSError object that describes the problem. + @return YES if the operation succeeds, otherwise NO. + */ +- (BOOL)fb_setFocusWithError:(NSError**) error; + +/** + Select a focused element + + @param error If there is an error, upon return contains an NSError object that describes the problem. + @return YES if the operation succeeds, otherwise NO. + */ +- (BOOL)fb_selectWithError:(NSError**) error; + +@end +#endif + +NS_ASSUME_NONNULL_END diff --git a/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.m b/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.m new file mode 100644 index 000000000..99ab92a5b --- /dev/null +++ b/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.m @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2018-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "XCUIElement+FBTVFocuse.h" + +#import +#import "FBApplication.h" +#import "FBErrorBuilder.h" +#import +#import "XCUIElement+FBUtilities.h" +#import "XCUIElement+FBWebDriverAttributes.h" + +#if TARGET_OS_TV + +int const MAX_ITERATIONS_COUNT = 100; + +@implementation XCUIElement (FBTVFocuse) + +- (BOOL)fb_setFocusWithError:(NSError**) error +{ + [[FBApplication fb_activeApplication] fb_waitUntilSnapshotIsStable]; + + if (!self.wdEnabled) { + if (error) { + *error = [[FBErrorBuilder.builder withDescription: + [NSString stringWithFormat:@"'%@' element cannot be focused because it is disabled", self.description]] build]; + } + return NO; + } + + FBTVNavigationTracker *tracker = [FBTVNavigationTracker trackerWithTargetElement:self]; + for (int i = 0; i < MAX_ITERATIONS_COUNT; i++) { + if (self.hasFocus) { + return YES; + } + + if (!self.exists) { + if (error) { + *error = [[FBErrorBuilder.builder withDescription: + [NSString stringWithFormat:@"'%@' element is not reachable because it does not exist. Try to use XCUIRemote commands.", self.description]] build]; + } + return NO; + } + + FBTVDirection direction = tracker.directionToFocusedElement; + if (direction != FBTVDirectionNone) { + [[XCUIRemote sharedRemote] pressButton: (XCUIRemoteButton)direction]; + } + } + + return NO; +} + +- (BOOL)fb_selectWithError:(NSError**) error +{ + BOOL result = [self fb_setFocusWithError: error]; + if (result) { + [[XCUIRemote sharedRemote] pressButton:XCUIRemoteButtonSelect]; + } + return result; +} +@end + +#endif diff --git a/WebDriverAgentLib/Categories/XCUIElement+FBTap.m b/WebDriverAgentLib/Categories/XCUIElement+FBTap.m index 235865a5b..02c34c831 100644 --- a/WebDriverAgentLib/Categories/XCUIElement+FBTap.m +++ b/WebDriverAgentLib/Categories/XCUIElement+FBTap.m @@ -12,7 +12,7 @@ #import "XCUIApplication+FBTouchAction.h" #import "XCUIElement+FBUtilities.h" - +#if !TARGET_OS_TV @implementation XCUIElement (FBTap) - (BOOL)fb_tapWithError:(NSError **)error @@ -43,3 +43,4 @@ - (BOOL)fb_tapCoordinate:(CGPoint)relativeCoordinate error:(NSError **)error } @end +#endif diff --git a/WebDriverAgentLib/Categories/XCUIElement+FBTyping.m b/WebDriverAgentLib/Categories/XCUIElement+FBTyping.m index e1a580b2a..db07bf9c2 100644 --- a/WebDriverAgentLib/Categories/XCUIElement+FBTyping.m +++ b/WebDriverAgentLib/Categories/XCUIElement+FBTyping.m @@ -48,9 +48,16 @@ - (BOOL)fb_typeText:(NSString *)text error:(NSError **)error - (BOOL)fb_typeText:(NSString *)text frequency:(NSUInteger)frequency error:(NSError **)error { + // There is no ability to open text field via tap +#if TARGET_OS_TV + if (!self.hasKeyboardFocus) { + return [[[FBErrorBuilder builder] withDescription:@"Keyboard is not opened."] buildError:error]; + } +#else if (![self fb_prepareForTextInputWithError:error]) { return NO; } +#endif if (![FBKeyboard typeText:text frequency:frequency error:error]) { return NO; } diff --git a/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.m b/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.m index cb83ade0f..bef17ff14 100644 --- a/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.m +++ b/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.m @@ -226,6 +226,7 @@ - (BOOL)fb_waitUntilSnapshotIsStable return result; } +#if !TARGET_OS_TV - (NSData *)fb_screenshotWithError:(NSError **)error { if (CGRectIsEmpty(self.frame)) { @@ -268,5 +269,6 @@ - (NSData *)fb_screenshotWithError:(NSError **)error } return FBAdjustScreenshotOrientationForApplication(imageData, orientation); } +#endif @end diff --git a/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.m b/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.m index e7479ffe0..dfb67a077 100644 --- a/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.m +++ b/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.m @@ -191,6 +191,15 @@ - (BOOL)isWDVisible return [[self fb_cachedValueWithAttributeName:@"isWDVisible" valueGetter:getter] boolValue]; } +- (BOOL)isWDFocused +{ + id (^getter)(void) = ^id(void) { + return @(self.hasFocus); + }; + + return [[self fb_cachedValueWithAttributeName:@"hasFocus" valueGetter:getter] boolValue]; +} + - (BOOL)isWDAccessible { id (^getter)(void) = ^id(void) { diff --git a/WebDriverAgentLib/Commands/FBCustomCommands.m b/WebDriverAgentLib/Commands/FBCustomCommands.m index f330c65e4..ad6894cad 100644 --- a/WebDriverAgentLib/Commands/FBCustomCommands.m +++ b/WebDriverAgentLib/Commands/FBCustomCommands.m @@ -48,9 +48,11 @@ + (NSArray *)routes [[FBRoute GET:@"/wda/screen"] respondWithTarget:self action:@selector(handleGetScreen:)], [[FBRoute GET:@"/wda/activeAppInfo"] respondWithTarget:self action:@selector(handleActiveAppInfo:)], [[FBRoute GET:@"/wda/activeAppInfo"].withoutSession respondWithTarget:self action:@selector(handleActiveAppInfo:)], +#if !TARGET_OS_TV // tvOS does not provide relevant APIs [[FBRoute POST:@"/wda/setPasteboard"] respondWithTarget:self action:@selector(handleSetPasteboard:)], [[FBRoute POST:@"/wda/getPasteboard"] respondWithTarget:self action:@selector(handleGetPasteboard:)], [[FBRoute GET:@"/wda/batteryInfo"] respondWithTarget:self action:@selector(handleGetBatteryInfo:)], +#endif [[FBRoute POST:@"/wda/pressButton"] respondWithTarget:self action:@selector(handlePressButtonCommand:)], [[FBRoute POST:@"/wda/siri/activate"] respondWithTarget:self action:@selector(handleActivateSiri:)], ]; @@ -155,6 +157,7 @@ + (NSArray *)routes }); } +#if !TARGET_OS_TV + (id)handleSetPasteboard:(FBRouteRequest *)request { NSString *contentType = request.arguments[@"contentType"] ?: @"plaintext"; @@ -192,6 +195,7 @@ + (NSArray *)routes @"state": @([UIDevice currentDevice].batteryState) }); } +#endif + (id)handlePressButtonCommand:(FBRouteRequest *)request { diff --git a/WebDriverAgentLib/Commands/FBElementCommands.m b/WebDriverAgentLib/Commands/FBElementCommands.m index 18f9167d4..5308d903a 100644 --- a/WebDriverAgentLib/Commands/FBElementCommands.m +++ b/WebDriverAgentLib/Commands/FBElementCommands.m @@ -34,6 +34,7 @@ #import "XCUIElement+FBTyping.h" #import "XCUIElement+FBUtilities.h" #import "XCUIElement+FBWebDriverAttributes.h" +#import "XCUIElement+FBTVFocuse.h" #import "FBElementTypeTransformer.h" #import "XCUIElement.h" #import "XCUIElementQuery.h" @@ -66,6 +67,7 @@ + (NSArray *)routes [[FBRoute GET:@"/screenshot/:uuid"] respondWithTarget:self action:@selector(handleElementScreenshot:)], [[FBRoute GET:@"/wda/element/:uuid/accessible"] respondWithTarget:self action:@selector(handleGetAccessible:)], [[FBRoute GET:@"/wda/element/:uuid/accessibilityContainer"] respondWithTarget:self action:@selector(handleGetIsAccessibilityContainer:)], +#if !TARGET_OS_TV [[FBRoute POST:@"/wda/element/:uuid/swipe"] respondWithTarget:self action:@selector(handleSwipe:)], [[FBRoute POST:@"/wda/element/:uuid/pinch"] respondWithTarget:self action:@selector(handlePinch:)], [[FBRoute POST:@"/wda/element/:uuid/doubleTap"] respondWithTarget:self action:@selector(handleDoubleTap:)], @@ -77,8 +79,9 @@ + (NSArray *)routes [[FBRoute POST:@"/wda/tap/:uuid"] respondWithTarget:self action:@selector(handleTap:)], [[FBRoute POST:@"/wda/touchAndHold"] respondWithTarget:self action:@selector(handleTouchAndHoldCoordinate:)], [[FBRoute POST:@"/wda/doubleTap"] respondWithTarget:self action:@selector(handleDoubleTapCoordinate:)], - [[FBRoute POST:@"/wda/keys"] respondWithTarget:self action:@selector(handleKeys:)], [[FBRoute POST:@"/wda/pickerwheel/:uuid/select"] respondWithTarget:self action:@selector(handleWheelSelect:)], +#endif + [[FBRoute POST:@"/wda/keys"] respondWithTarget:self action:@selector(handleKeys:)], [[FBRoute POST:@"/wda/element/:uuid/forceTouch"] respondWithTarget:self action:@selector(handleForceTouch:)], ]; } @@ -162,10 +165,12 @@ + (NSArray *)routes if ([value isKindOfClass:[NSArray class]]) { textToType = [value componentsJoinedByString:@""]; } +#if !TARGET_OS_TV if (element.elementType == XCUIElementTypePickerWheel) { [element adjustToPickerWheelValue:textToType]; return FBResponseWithOK(); } +#endif if (element.elementType == XCUIElementTypeSlider) { CGFloat sliderValue = textToType.floatValue; if (sliderValue < 0.0 || sliderValue > 1.0 ) { @@ -206,6 +211,7 @@ + (NSArray *)routes return FBResponseWithElementUUID(elementUUID); } +#if !TARGET_OS_TV + (id)handleDoubleTap:(FBRouteRequest *)request { FBElementCache *elementCache = request.session.elementCache; @@ -245,6 +251,7 @@ + (NSArray *)routes [pressCoordinate pressForDuration:[request.arguments[@"duration"] doubleValue]]; return FBResponseWithOK(); } +#endif + (id)handleForceTouch:(FBRouteRequest *)request { @@ -266,6 +273,7 @@ + (NSArray *)routes return FBResponseWithOK(); } +#if !TARGET_OS_TV + (id)handleScroll:(FBRouteRequest *)request { FBElementCache *elementCache = request.session.elementCache; @@ -389,6 +397,7 @@ + (NSArray *)routes [element pinchWithScale:scale velocity:velocity]; return FBResponseWithOK(); } +#endif + (id)handleKeys:(FBRouteRequest *)request { @@ -403,8 +412,12 @@ + (NSArray *)routes + (id)handleGetWindowSize:(FBRouteRequest *)request { +#if TARGET_OS_TV + CGSize screenSize = request.session.activeApplication.frame.size; +#else CGRect frame = request.session.activeApplication.wdFrame; CGSize screenSize = FBAdjustDimensionsForApplication(frame.size, request.session.activeApplication.interfaceOrientation); +#endif return FBResponseWithStatus(FBCommandStatusNoError, @{ @"width": @(screenSize.width), @"height": @(screenSize.height), @@ -426,6 +439,8 @@ + (NSArray *)routes static const CGFloat DEFAULT_OFFSET = (CGFloat)0.2; +#if !TARGET_OS_TV + + (id)handleWheelSelect:(FBRouteRequest *)request { FBElementCache *elementCache = request.session.elementCache; @@ -456,8 +471,12 @@ + (NSArray *)routes return FBResponseWithOK(); } +#endif + #pragma mark - Helpers +#if !TARGET_OS_TV + + (id)handleScrollElementToVisible:(XCUIElement *)element withRequest:(FBRouteRequest *)request { NSError *error; @@ -527,5 +546,6 @@ + (XCUICoordinate *)gestureCoordinateWithCoordinate:(CGPoint)coordinate element: XCUICoordinate *appCoordinate = [[XCUICoordinate alloc] initWithElement:element normalizedOffset:CGVectorMake(0, 0)]; return [[XCUICoordinate alloc] initWithCoordinate:appCoordinate pointsOffset:CGVectorMake(coordinate.x, coordinate.y)]; } +#endif @end diff --git a/WebDriverAgentLib/Commands/FBOrientationCommands.m b/WebDriverAgentLib/Commands/FBOrientationCommands.m index 64f84118f..56d29fde4 100644 --- a/WebDriverAgentLib/Commands/FBOrientationCommands.m +++ b/WebDriverAgentLib/Commands/FBOrientationCommands.m @@ -29,6 +29,8 @@ .portraitUpsideDown = @"UIA_DEVICE_ORIENTATION_PORTRAIT_UPSIDEDOWN", }; +#if !TARGET_OS_TV + @implementation FBOrientationCommands #pragma mark - @@ -147,3 +149,5 @@ + (NSDictionary *)_wdOrientationsMapping } @end + +#endif diff --git a/WebDriverAgentLib/FBSpringboardApplication.h b/WebDriverAgentLib/FBSpringboardApplication.h index 7de642a5b..c42ae1941 100644 --- a/WebDriverAgentLib/FBSpringboardApplication.h +++ b/WebDriverAgentLib/FBSpringboardApplication.h @@ -21,6 +21,16 @@ extern NSString *const SPRINGBOARD_BUNDLE_ID; */ + (instancetype)fb_springboard; +/** + Opens application on SpringBoard(HeadBoard) app with given identifier + + @param identifier identifier of the application to tap + @param error If there is an error, upon return contains an NSError object that describes the problem. + @return YES if the operation succeeds, otherwise NO. + */ +- (BOOL)fb_openApplicationWithIdentifier:(NSString *)identifier error:(NSError **)error; + +#if TARGET_OS_IOS /** Taps application on SpringBoard app with given identifier @@ -30,6 +40,17 @@ extern NSString *const SPRINGBOARD_BUNDLE_ID; */ - (BOOL)fb_tapApplicationWithIdentifier:(NSString *)identifier error:(NSError **)error; +#elif TARGET_OS_TV +/** + Taps application on SpringBoard app with given identifier + + @param identifier identifier of the application to tap + @param error If there is an error, upon return contains an NSError object that describes the problem. + @return YES if the operation succeeds, otherwise NO. +*/ +- (BOOL)fb_selectApplicationWithIdentifier:(NSString *)identifier error:(NSError **)error; +#endif + /** Waits until application board is visible with timeout diff --git a/WebDriverAgentLib/FBSpringboardApplication.m b/WebDriverAgentLib/FBSpringboardApplication.m index 10b3d6daf..470d9d83d 100644 --- a/WebDriverAgentLib/FBSpringboardApplication.m +++ b/WebDriverAgentLib/FBSpringboardApplication.m @@ -22,7 +22,13 @@ #import "XCUIElement.h" #import "XCUIElementQuery.h" +#if TARGET_OS_TV +#import "XCUIElement+FBTVFocuse.h" + +NSString *const SPRINGBOARD_BUNDLE_ID = @"com.apple.HeadBoard"; +#else NSString *const SPRINGBOARD_BUNDLE_ID = @"com.apple.springboard"; +#endif @implementation FBSpringboardApplication @@ -36,6 +42,16 @@ + (instancetype)fb_springboard return _springboardApp; } +- (BOOL)fb_openApplicationWithIdentifier:(NSString *)identifier error:(NSError **)error +{ +#if TARGET_OS_TV + return [self fb_selectApplicationWithIdentifier:identifier error:error]; +#else + return [self fb_tapApplicationWithIdentifier:identifier error:error]; +#endif +} + +#if TARGET_OS_IOS - (BOOL)fb_tapApplicationWithIdentifier:(NSString *)identifier error:(NSError **)error { XCUIElementQuery *appElementsQuery = [[self descendantsMatchingType:XCUIElementTypeIcon] matchingIdentifier:identifier]; @@ -85,6 +101,34 @@ - (BOOL)fb_tapApplicationWithIdentifier:(NSString *)identifier error:(NSError ** } error:error]; } +#elif TARGET_OS_TV +- (BOOL)fb_selectApplicationWithIdentifier:(NSString *)identifier error:(NSError **)error +{ + XCUIElementQuery *appElementsQuery = [[self descendantsMatchingType:XCUIElementTypeIcon] matchingIdentifier:identifier]; + NSArray *matchedAppElements = appElementsQuery.allElementsBoundByIndex; + if (matchedAppElements.count == 0) { + return [[[FBErrorBuilder builder] + withDescriptionFormat:@"Cannot locate Headboard icon for '%@' application", identifier] + buildError:error]; + } + // Select the most recent installed application if there are multiple matches + XCUIElement *appElement = [matchedAppElements lastObject]; + if (![appElement fb_selectWithError:error]) { + return NO; + } + return + [[[[FBRunLoopSpinner new] + interval:0.3] + timeoutErrorMessage:@"Timeout waiting for application to activate"] + spinUntilTrue:^BOOL{ + FBApplication *activeApp = [FBApplication fb_activeApplication]; + return activeApp && + activeApp.processID != self.processID && + activeApp.fb_isVisible; + } error:error]; +} +#endif + - (BOOL)fb_waitUntilApplicationBoardIsVisible:(NSError **)error { return @@ -99,9 +143,14 @@ - (BOOL)fb_waitUntilApplicationBoardIsVisible:(NSError **)error - (BOOL)fb_isApplicationBoardVisible { [self resolve]; +#if TARGET_OS_TV + // TODO: Make sure the precise locator has been selected + return self.collectionViews[@"GridCollectionView"].isEnabled; +#else // the dock (and other icons) don't seem to be consistently reported as // visible. esp on iOS 11 but also on 10.3.3 return self.otherElements[@"Dock"].isEnabled; +#endif } @end diff --git a/WebDriverAgentLib/Routing/FBElement.h b/WebDriverAgentLib/Routing/FBElement.h index 5f7a7db6b..9aeb550a9 100644 --- a/WebDriverAgentLib/Routing/FBElement.h +++ b/WebDriverAgentLib/Routing/FBElement.h @@ -50,6 +50,9 @@ NS_ASSUME_NONNULL_BEGIN /*! Whether element is an accessibility container (contains children of any depth that are accessible) */ @property (nonatomic, readonly, getter = isWDAccessibilityContainer) BOOL wdAccessibilityContainer; +/*! Whether element is focused */ +@property (nonatomic, readonly, getter = isWDFocused) BOOL wdFocused; + /** Returns value of given property specified in WebDriver Spec Check the FBElement protocol to get list of supported attributes. diff --git a/WebDriverAgentLib/Utilities/FBAppiumActionsSynthesizer.h b/WebDriverAgentLib/Utilities/FBAppiumActionsSynthesizer.h index 2f29fbd23..090bacdd7 100644 --- a/WebDriverAgentLib/Utilities/FBAppiumActionsSynthesizer.h +++ b/WebDriverAgentLib/Utilities/FBAppiumActionsSynthesizer.h @@ -11,8 +11,10 @@ NS_ASSUME_NONNULL_BEGIN +#if !TARGET_OS_TV @interface FBAppiumActionsSynthesizer : FBBaseActionsSynthesizer @end +#endif NS_ASSUME_NONNULL_END diff --git a/WebDriverAgentLib/Utilities/FBAppiumActionsSynthesizer.m b/WebDriverAgentLib/Utilities/FBAppiumActionsSynthesizer.m index 7785f098f..978aaacf1 100644 --- a/WebDriverAgentLib/Utilities/FBAppiumActionsSynthesizer.m +++ b/WebDriverAgentLib/Utilities/FBAppiumActionsSynthesizer.m @@ -43,6 +43,7 @@ static NSString *const FB_OPTIONS_KEY = @"options"; static NSString *const FB_ELEMENT_KEY = @"element"; +#if !TARGET_OS_TV @interface FBAppiumGestureItem : FBBaseGestureItem @end @@ -489,3 +490,4 @@ - (nullable XCSynthesizedEventRecord *)synthesizeWithError:(NSError **)error @end +#endif diff --git a/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.h b/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.h index db6911249..fca8ce174 100644 --- a/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.h +++ b/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.h @@ -14,6 +14,7 @@ NS_ASSUME_NONNULL_BEGIN +#if !TARGET_OS_TV @interface FBBaseGestureItem : NSObject /*! Raw JSON representation of the corresponding action item */ @@ -121,5 +122,6 @@ NS_ASSUME_NONNULL_BEGIN - (nullable XCSynthesizedEventRecord *)synthesizeWithError:(NSError **)error; @end +#endif NS_ASSUME_NONNULL_END diff --git a/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.m b/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.m index fec313fd7..65baa515c 100644 --- a/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.m +++ b/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.m @@ -22,7 +22,7 @@ #import "XCSynthesizedEventRecord.h" #import "XCUIElement+FBUtilities.h" - +#if !TARGET_OS_TV @implementation FBBaseGestureItem + (NSString *)actionName @@ -185,3 +185,4 @@ - (nullable XCSynthesizedEventRecord *)synthesizeWithError:(NSError **)error } @end +#endif diff --git a/WebDriverAgentLib/Utilities/FBImageUtils.h b/WebDriverAgentLib/Utilities/FBImageUtils.h index e5298929d..59dc3e85a 100644 --- a/WebDriverAgentLib/Utilities/FBImageUtils.h +++ b/WebDriverAgentLib/Utilities/FBImageUtils.h @@ -15,5 +15,9 @@ BOOL FBIsJpegImage(NSData *imageData); /*! Returns YES if the data contains a PNG image */ BOOL FBIsPngImage(NSData *imageData); +#if TARGET_OS_TV +NSData *FBAdjustScreenshotOrientationForApplication(NSData *screenshotData); +#else /*! Fixes the screenshot orientation if necessary to match current screen orientation */ NSData *FBAdjustScreenshotOrientationForApplication(NSData *screenshotData, UIInterfaceOrientation orientation); +#endif diff --git a/WebDriverAgentLib/Utilities/FBImageUtils.m b/WebDriverAgentLib/Utilities/FBImageUtils.m index 815a3cc86..1c5450d4f 100644 --- a/WebDriverAgentLib/Utilities/FBImageUtils.m +++ b/WebDriverAgentLib/Utilities/FBImageUtils.m @@ -54,6 +54,16 @@ BOOL FBIsPngImage(NSData *imageData) return range.location != NSNotFound; } +#if TARGET_OS_TV +NSData *FBAdjustScreenshotOrientationForApplication(NSData *screenshotData) +{ + if (FBIsPngImage(screenshotData)) { + return screenshotData; + } + UIImage *image = [UIImage imageWithData:screenshotData]; + return (NSData *)UIImagePNGRepresentation(image); +} +#else NSData *FBAdjustScreenshotOrientationForApplication(NSData *screenshotData, UIInterfaceOrientation orientation) { UIImageOrientation imageOrientation; @@ -84,3 +94,4 @@ BOOL FBIsPngImage(NSData *imageData) // The resulting data should be a PNG image return (NSData *)UIImagePNGRepresentation(fixedImage); } +#endif diff --git a/WebDriverAgentLib/Utilities/FBMathUtils.h b/WebDriverAgentLib/Utilities/FBMathUtils.h index 860a048f6..858140bf3 100644 --- a/WebDriverAgentLib/Utilities/FBMathUtils.h +++ b/WebDriverAgentLib/Utilities/FBMathUtils.h @@ -28,6 +28,7 @@ BOOL FBSizeFuzzyEqualToSize(CGSize size1, CGSize size2, CGFloat threshold); /*! Returns whether rect are equal within given threshold */ BOOL FBRectFuzzyEqualToRect(CGRect rect1, CGRect rect2, CGFloat threshold); +#if !TARGET_OS_TV /*! Inverts point if necessary to match location on screen */ CGPoint FBInvertPointForApplication(CGPoint point, CGSize screenSize, UIInterfaceOrientation orientation); @@ -36,6 +37,7 @@ CGPoint FBInvertOffsetForOrientation(CGPoint offset, UIInterfaceOrientation orie /*! Inverts size if necessary to match current screen orientation */ CGSize FBAdjustDimensionsForApplication(CGSize actualSize, UIInterfaceOrientation orientation); +#endif /*! Replaces the wdRect dictionary passed as the argument with zero-size wdRect if any of its attributes equal to Infinity */ NSDictionary *FBwdRectNoInf(NSDictionary *wdRect); diff --git a/WebDriverAgentLib/Utilities/FBMathUtils.m b/WebDriverAgentLib/Utilities/FBMathUtils.m index af26b935f..c4b6455b3 100644 --- a/WebDriverAgentLib/Utilities/FBMathUtils.m +++ b/WebDriverAgentLib/Utilities/FBMathUtils.m @@ -40,6 +40,7 @@ BOOL FBRectFuzzyEqualToRect(CGRect rect1, CGRect rect2, CGFloat threshold) FBSizeFuzzyEqualToSize(rect1.size, rect2.size, threshold); } +#if !TARGET_OS_TV CGPoint FBInvertPointForApplication(CGPoint point, CGSize screenSize, UIInterfaceOrientation orientation) { switch (orientation) { @@ -84,6 +85,7 @@ This verification is just to make sure the bug is still there (since height is n } return actualSize; } +#endif NSDictionary *FBwdRectNoInf(NSDictionary *wdRect) { diff --git a/WebDriverAgentLib/Utilities/FBPasteboard.h b/WebDriverAgentLib/Utilities/FBPasteboard.h index 0fdd93d8a..9595162d4 100644 --- a/WebDriverAgentLib/Utilities/FBPasteboard.h +++ b/WebDriverAgentLib/Utilities/FBPasteboard.h @@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN +#if !TARGET_OS_TV @interface FBPasteboard : NSObject /** @@ -34,6 +35,7 @@ NS_ASSUME_NONNULL_BEGIN + (nullable NSData *)dataForType:(NSString *)type error:(NSError **)error; @end +#endif NS_ASSUME_NONNULL_END diff --git a/WebDriverAgentLib/Utilities/FBPasteboard.m b/WebDriverAgentLib/Utilities/FBPasteboard.m index 3d8df6015..149ad4f01 100644 --- a/WebDriverAgentLib/Utilities/FBPasteboard.m +++ b/WebDriverAgentLib/Utilities/FBPasteboard.m @@ -11,6 +11,7 @@ #import "FBErrorBuilder.h" +#if !TARGET_OS_TV @implementation FBPasteboard + (BOOL)setData:(NSData *)data forType:(NSString *)type error:(NSError **)error @@ -81,3 +82,4 @@ + (NSData *)dataForType:(NSString *)type error:(NSError **)error } @end +#endif diff --git a/WebDriverAgentLib/Utilities/FBTVNavigationTracker.h b/WebDriverAgentLib/Utilities/FBTVNavigationTracker.h new file mode 100644 index 000000000..e40dc294b --- /dev/null +++ b/WebDriverAgentLib/Utilities/FBTVNavigationTracker.h @@ -0,0 +1,51 @@ +/** + * Copyright (c) 2018-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import +#import +#import "FBElement.h" + +#if TARGET_OS_TV + +/** + Defines directions to move focuse to. + */ +typedef NS_ENUM(NSUInteger, FBTVDirection) { + FBTVDirectionUp = 0, + FBTVDirectionDown = 1, + FBTVDirectionLeft = 2, + FBTVDirectionRight = 3, + FBTVDirectionNone = 4 +}; + +NS_ASSUME_NONNULL_BEGIN + +@interface FBTVNavigationTracker : NSObject + +/** + Track the target element's point + + @param targetElement A target element which will track + @return An instancce of FBTVNavigationTracker + */ ++ (instancetype)trackerWithTargetElement: (id) targetElement; + +/** + Determine the correct direction to move the focus to the tracked target + element from the currently focused one + + @return FBTVDirection to move the focus to + */ +- (FBTVDirection)directionToFocusedElement; + +@end + +NS_ASSUME_NONNULL_END + +#endif diff --git a/WebDriverAgentLib/Utilities/FBTVNavigationTracker.m b/WebDriverAgentLib/Utilities/FBTVNavigationTracker.m new file mode 100644 index 000000000..bd5770955 --- /dev/null +++ b/WebDriverAgentLib/Utilities/FBTVNavigationTracker.m @@ -0,0 +1,147 @@ +/** + * Copyright (c) 2018-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#import "FBTVNavigationTracker.h" + +#import "FBApplication.h" +#import "FBMathUtils.h" +#import "XCUIApplication+FBFocused.h" +#import "XCUIElement+FBUtilities.h" +#import "XCUIElement+FBWebDriverAttributes.h" + +#if TARGET_OS_TV + +@interface FBTVNavigationItem : NSObject +@property (nonatomic, readonly) NSUInteger uid; +@property (nonatomic, readonly) NSMutableSet* directions; + ++ (instancetype)itemWithUid:(NSUInteger) uid; +@end + +@implementation FBTVNavigationItem + ++ (instancetype)itemWithUid:(NSUInteger) uid +{ + return [[FBTVNavigationItem alloc] initWithUid:uid]; +} + +- (instancetype)initWithUid:(NSUInteger) uid +{ + self = [super init]; + if(self) { + _uid = uid; + _directions = [NSMutableSet set]; + } + return self; +} + +@end + +@interface FBTVNavigationTracker () +@property (nonatomic, strong) id targetElement; +@property (nonatomic, assign) CGPoint targetCenter; +@property (nonatomic, strong) NSMutableDictionary* navigationItems; +@end + +@implementation FBTVNavigationTracker + ++ (instancetype)trackerWithTargetElement:(id)targetElement +{ + FBTVNavigationTracker *tracker = [[FBTVNavigationTracker alloc] initWithTargetElement:targetElement]; + tracker.targetElement = targetElement; + return tracker; +} + +- (instancetype)initWithTargetElement:(id)targetElement +{ + self = [super init]; + if(self) { + _targetElement = targetElement; + _targetCenter = FBRectGetCenter(targetElement.wdFrame); + _navigationItems = [NSMutableDictionary dictionary]; + } + return self; +} + +- (FBTVDirection)directionToFocusedElement +{ + id focused = self.focusedElement; + CGPoint focusedCenter = FBRectGetCenter(focused.wdFrame); + FBTVNavigationItem *item = [self navigationItemWithElement:focused]; + CGFloat yDelta = self.targetCenter.y - focusedCenter.y; + CGFloat xDelta = self.targetCenter.x - focusedCenter.x; + FBTVDirection direction; + if (fabs(yDelta) > fabs(xDelta)) { + direction = [self verticalDirectionWithItem:item andDelta:yDelta]; + if (direction == FBTVDirectionNone) { + direction = [self horizontalDirectionWithItem:item andDelta:xDelta]; + } + } else { + direction = [self horizontalDirectionWithItem:item andDelta:xDelta]; + if (direction == FBTVDirectionNone) { + direction = [self verticalDirectionWithItem:item andDelta:yDelta]; + } + } + + return direction; +} + +#pragma mark - Utilities +- (id)focusedElement +{ + return [FBApplication fb_activeApplication].fb_focusedElement; +} + +- (FBTVNavigationItem*)navigationItemWithElement:(id)element +{ + NSNumber *key = [NSNumber numberWithUnsignedInteger:element.wdUID]; + FBTVNavigationItem* item = [self.navigationItems objectForKey: key]; + if(item) { + return item; + } + item = [FBTVNavigationItem itemWithUid:element.wdUID]; + [self.navigationItems setObject:item forKey:key]; + return item; +} + +- (FBTVDirection)horizontalDirectionWithItem:(FBTVNavigationItem *)item andDelta:(CGFloat)delta +{ + // GCFloat is double in 64bit. tvOS is only for arm64 + if (delta > DBL_EPSILON && + ![item.directions containsObject: [NSNumber numberWithInteger: FBTVDirectionRight]]) { + [item.directions addObject: [NSNumber numberWithInteger: FBTVDirectionRight]]; + return FBTVDirectionRight; + } + if (delta < -DBL_EPSILON && + ![item.directions containsObject: [NSNumber numberWithInteger: FBTVDirectionLeft]]) { + [item.directions addObject: [NSNumber numberWithInteger: FBTVDirectionLeft]]; + return FBTVDirectionLeft; + } + return FBTVDirectionNone; +} + +- (FBTVDirection)verticalDirectionWithItem:(FBTVNavigationItem *)item andDelta:(CGFloat)delta +{ + // GCFloat is double in 64bit. tvOS is only for arm64 + if (delta > DBL_EPSILON && + ![item.directions containsObject: [NSNumber numberWithInteger: FBTVDirectionDown]]) { + [item.directions addObject: [NSNumber numberWithInteger: FBTVDirectionDown]]; + return FBTVDirectionDown; + } + if (delta < -DBL_EPSILON && + ![item.directions containsObject: [NSNumber numberWithInteger: FBTVDirectionUp]]) { + [item.directions addObject: [NSNumber numberWithInteger: FBTVDirectionUp]]; + return FBTVDirectionUp; + } + return FBTVDirectionNone; +} + +@end + +#endif diff --git a/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.h b/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.h index 38d4cc52d..e5ed479a7 100644 --- a/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.h +++ b/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.h @@ -11,8 +11,10 @@ NS_ASSUME_NONNULL_BEGIN +#if !TARGET_OS_TV @interface FBW3CActionsSynthesizer : FBBaseActionsSynthesizer @end +#endif NS_ASSUME_NONNULL_END diff --git a/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m b/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m index 9b2abc94a..c2eb10a1f 100644 --- a/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m +++ b/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m @@ -57,6 +57,7 @@ static NSString *const FB_KEY_ACTIONS = @"actions"; +#if !TARGET_OS_TV @interface FBW3CGestureItem : FBBaseGestureItem @property (nullable, readonly, nonatomic) FBBaseGestureItem *previousItem; @@ -492,3 +493,4 @@ - (nullable XCSynthesizedEventRecord *)synthesizeWithError:(NSError **)error } @end +#endif diff --git a/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.h b/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.h index 78132d19c..efd2a8bc1 100644 --- a/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.h +++ b/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.h @@ -22,7 +22,9 @@ NS_ASSUME_NONNULL_BEGIN + (id)testRunnerProxy; +#if !TARGET_OS_TV + (UIInterfaceOrientation)orientationWithApplication:(XCUIApplication *)application; +#endif + (BOOL)synthesizeEventWithRecord:(XCSynthesizedEventRecord *)record error:(NSError *__autoreleasing*)error; diff --git a/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.m b/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.m index b93b41887..d4515fb30 100644 --- a/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.m +++ b/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.m @@ -55,6 +55,7 @@ + (void)load } } +#if !TARGET_OS_TV + (UIInterfaceOrientation)orientationWithApplication:(XCUIApplication *)application { if (nil == FBXCTRunnerDaemonSessionClass || @@ -63,6 +64,7 @@ + (UIInterfaceOrientation)orientationWithApplication:(XCUIApplication *)applicat } return UIInterfaceOrientationPortrait; } +#endif + (BOOL)synthesizeEventWithRecord:(XCSynthesizedEventRecord *)record error:(NSError *__autoreleasing*)error { diff --git a/WebDriverAgentLib/Utilities/FBXPath.m b/WebDriverAgentLib/Utilities/FBXPath.m index ac8e96c79..c78822310 100644 --- a/WebDriverAgentLib/Utilities/FBXPath.m +++ b/WebDriverAgentLib/Utilities/FBXPath.m @@ -82,6 +82,13 @@ + (int)recordWithWriter:(xmlTextWriterPtr)writer forValue:(NSString *)value; @end +#if TARGET_OS_TV + +@interface FBFocusedAttribute : FBElementAttribute + +@end + +#endif const static char *_UTF8Encoding = "UTF-8"; @@ -422,6 +429,9 @@ + (int)recordWithWriter:(xmlTextWriterPtr)writer forElement:(id)eleme FBLabelAttribute.class, FBEnabledAttribute.class, FBVisibleAttribute.class, +#if TARGET_OS_TV + FBFocusedAttribute.class, +#endif FBXAttribute.class, FBYAttribute.class, FBWidthAttribute.class, @@ -520,6 +530,24 @@ + (NSString *)valueForElement:(id)element @end +#if TARGET_OS_TV + +@implementation FBFocusedAttribute + ++ (NSString *)name +{ + return @"focused"; +} + ++ (NSString *)valueForElement:(id)element +{ + return element.wdFocused ? @"true" : @"false"; +} + +@end + +#endif + @implementation FBDimensionAttribute + (NSString *)valueForElement:(id)element @@ -585,6 +613,3 @@ + (int)recordWithWriter:(xmlTextWriterPtr)writer forValue:(NSString *)value return rc; } @end - - - diff --git a/WebDriverAgentTests/IntegrationApp/Classes/FBNavigationController.m b/WebDriverAgentTests/IntegrationApp/Classes/FBNavigationController.m index c727913a6..f404c0ba3 100644 --- a/WebDriverAgentTests/IntegrationApp/Classes/FBNavigationController.m +++ b/WebDriverAgentTests/IntegrationApp/Classes/FBNavigationController.m @@ -11,10 +11,12 @@ @implementation FBNavigationController +#if !TARGET_OS_TV - (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } +#endif - (BOOL)shouldAutorotate { diff --git a/WebDriverAgentTests/IntegrationApp/Classes/ViewController.m b/WebDriverAgentTests/IntegrationApp/Classes/ViewController.m index 6014a5674..6a0d0441a 100644 --- a/WebDriverAgentTests/IntegrationApp/Classes/ViewController.m +++ b/WebDriverAgentTests/IntegrationApp/Classes/ViewController.m @@ -33,6 +33,7 @@ - (void)viewDidLayoutSubviews [self updateOrentationLabel]; } +#if !TARGET_OS_TV - (void)updateOrentationLabel { NSString *orientation = nil; @@ -55,5 +56,6 @@ - (void)updateOrentationLabel } self.orentationLabel.text = orientation; } +#endif @end