appium-webdriveragent 5.15.5 → 5.15.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/PrivateHeaders/XCTest/XCSynthesizedEventRecord.h +1 -0
  3. package/PrivateHeaders/XCTest/XCUIApplication.h +0 -1
  4. package/WebDriverAgent.xcodeproj/project.pbxproj +6 -18
  5. package/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.h +38 -0
  6. package/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m +148 -5
  7. package/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m +1 -1
  8. package/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.h +0 -1
  9. package/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.m +5 -3
  10. package/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.m +2 -2
  11. package/WebDriverAgentLib/Categories/XCUIElement+FBTyping.h +10 -0
  12. package/WebDriverAgentLib/Categories/XCUIElement+FBTyping.m +31 -15
  13. package/WebDriverAgentLib/Commands/FBAlertViewCommands.m +4 -4
  14. package/WebDriverAgentLib/Commands/FBCustomCommands.m +2 -2
  15. package/WebDriverAgentLib/Commands/FBDebugCommands.m +2 -3
  16. package/WebDriverAgentLib/Commands/FBElementCommands.m +3 -5
  17. package/WebDriverAgentLib/Commands/FBFindElementCommands.m +0 -1
  18. package/WebDriverAgentLib/Commands/FBOrientationCommands.m +9 -8
  19. package/WebDriverAgentLib/Commands/FBSessionCommands.m +7 -9
  20. package/WebDriverAgentLib/Commands/FBTouchActionCommands.m +0 -1
  21. package/WebDriverAgentLib/FBAlert.m +3 -3
  22. package/WebDriverAgentLib/Routing/FBSession.h +13 -14
  23. package/WebDriverAgentLib/Routing/FBSession.m +49 -46
  24. package/WebDriverAgentLib/Utilities/FBAlertsMonitor.m +3 -3
  25. package/WebDriverAgentLib/Utilities/FBConfiguration.h +1 -0
  26. package/WebDriverAgentLib/Utilities/FBConfiguration.m +16 -4
  27. package/WebDriverAgentLib/Utilities/FBKeyboard.h +0 -27
  28. package/WebDriverAgentLib/Utilities/FBKeyboard.m +6 -30
  29. package/WebDriverAgentLib/Utilities/FBMjpegServer.m +0 -1
  30. package/WebDriverAgentLib/Utilities/FBPasteboard.m +2 -2
  31. package/WebDriverAgentLib/Utilities/FBScreen.m +1 -2
  32. package/WebDriverAgentLib/Utilities/FBTVNavigationTracker.m +1 -2
  33. package/WebDriverAgentLib/Utilities/FBXCodeCompatibility.h +0 -33
  34. package/WebDriverAgentLib/Utilities/FBXCodeCompatibility.m +2 -40
  35. package/WebDriverAgentLib/WebDriverAgentLib.h +0 -1
  36. package/WebDriverAgentTests/IntegrationTests/FBAlertTests.m +5 -1
  37. package/WebDriverAgentTests/IntegrationTests/FBAppiumTouchActionsIntegrationTests.m +3 -0
  38. package/WebDriverAgentTests/IntegrationTests/FBAutoAlertsHandlerTests.m +2 -3
  39. package/WebDriverAgentTests/IntegrationTests/FBElementSwipingTests.m +6 -0
  40. package/WebDriverAgentTests/IntegrationTests/FBElementVisibilityTests.m +0 -1
  41. package/WebDriverAgentTests/IntegrationTests/FBIntegrationTestCase.h +1 -3
  42. package/WebDriverAgentTests/IntegrationTests/FBIntegrationTestCase.m +5 -5
  43. package/WebDriverAgentTests/IntegrationTests/FBKeyboardTests.m +0 -22
  44. package/WebDriverAgentTests/IntegrationTests/FBSafariAlertTests.m +1 -2
  45. package/WebDriverAgentTests/IntegrationTests/FBSessionIntegrationTests.m +11 -10
  46. package/WebDriverAgentTests/IntegrationTests/FBTapTest.m +10 -6
  47. package/WebDriverAgentTests/IntegrationTests/FBTypingTest.m +4 -0
  48. package/WebDriverAgentTests/IntegrationTests/FBW3CMultiTouchActionsIntegrationTests.m +0 -1
  49. package/WebDriverAgentTests/IntegrationTests/FBW3CTouchActionsIntegrationTests.m +3 -0
  50. package/WebDriverAgentTests/IntegrationTests/XCUIApplicationHelperTests.m +8 -8
  51. package/WebDriverAgentTests/IntegrationTests/XCUIDeviceHelperTests.m +5 -4
  52. package/WebDriverAgentTests/IntegrationTests/XCUIElementHelperIntegrationTests.m +0 -1
  53. package/WebDriverAgentTests/UnitTests/Doubles/{FBApplicationDouble.h → XCUIApplicationDouble.h} +1 -1
  54. package/WebDriverAgentTests/UnitTests/Doubles/{FBApplicationDouble.m → XCUIApplicationDouble.m} +3 -3
  55. package/WebDriverAgentTests/UnitTests/FBSessionTests.m +3 -3
  56. package/package.json +2 -2
  57. package/WebDriverAgentLib/FBApplication.h +0 -49
  58. package/WebDriverAgentLib/FBApplication.m +0 -185
package/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ ## [5.15.7](https://github.com/appium/WebDriverAgent/compare/v5.15.6...v5.15.7) (2024-01-16)
2
+
3
+
4
+ ### Miscellaneous Chores
5
+
6
+ * **deps-dev:** bump semantic-release from 22.0.12 to 23.0.0 ([#836](https://github.com/appium/WebDriverAgent/issues/836)) ([a3ac2c5](https://github.com/appium/WebDriverAgent/commit/a3ac2c58786955507a34d0adcc4a53cd30f55014))
7
+
8
+
9
+ ### Code Refactoring
10
+
11
+ * Ditch FBApplication in favour of XCUIApplication extensions ([#834](https://github.com/appium/WebDriverAgent/issues/834)) ([70a8d98](https://github.com/appium/WebDriverAgent/commit/70a8d98bc15d8fc615455be07fad9c37ff8d430b))
12
+
13
+ ## [5.15.6](https://github.com/appium/WebDriverAgent/compare/v5.15.5...v5.15.6) (2024-01-06)
14
+
15
+
16
+ ### Miscellaneous Chores
17
+
18
+ * Update keyboard typing implementation ([#832](https://github.com/appium/WebDriverAgent/issues/832)) ([06cfb3b](https://github.com/appium/WebDriverAgent/commit/06cfb3b2b895a0bec681218fce658bdfcb4d13e9))
19
+
1
20
  ## [5.15.5](https://github.com/appium/WebDriverAgent/compare/v5.15.4...v5.15.5) (2023-12-13)
2
21
 
3
22
 
@@ -25,6 +25,7 @@
25
25
  #if !TARGET_OS_TV
26
26
  - (id)initWithName:(NSString *)arg1 interfaceOrientation:(UIInterfaceOrientation)arg2;
27
27
  #endif
28
+ - (id)initWithName:(id)arg1;
28
29
  - (id)init;
29
30
  - (BOOL)synthesizeWithError:(NSError **)arg1;
30
31
 
@@ -39,7 +39,6 @@
39
39
  @property(readonly) id/*XCAccessibilityElement*/ accessibilityElement;
40
40
 
41
41
  + (instancetype)applicationWithPID:(pid_t)processID;
42
- /*! DO NOT USE DIRECTLY! Please use fb_activate instead */
43
42
  - (void)activate;
44
43
 
45
44
  - (void)dismissKeyboard;
@@ -109,7 +109,6 @@
109
109
  641EE61E2240C5CA00173FCB /* FBExceptionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = EEC088E71CB56DA400B65968 /* FBExceptionHandler.m */; };
110
110
  641EE61F2240C5CA00173FCB /* FBXCodeCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = EE5A24411F136C8D0078B1D9 /* FBXCodeCompatibility.m */; };
111
111
  641EE6212240C5CA00173FCB /* FBElementTypeTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7901CAEDF0C008C271F /* FBElementTypeTransformer.m */; };
112
- 641EE6222240C5CA00173FCB /* FBApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7671CAEDF0C008C271F /* FBApplication.m */; };
113
112
  641EE6232240C5CA00173FCB /* FBScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 715AFAC01FFA29180053896D /* FBScreen.m */; };
114
113
  641EE6242240C5CA00173FCB /* FBXCTestDaemonsProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = EE35AD7A1E3B80C000A02D78 /* FBXCTestDaemonsProxy.m */; };
115
114
  641EE6262240C5CA00173FCB /* FBMathUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = EE1888391DA661C400307AA8 /* FBMathUtils.m */; };
@@ -142,7 +141,6 @@
142
141
  641EE64B2240C5CA00173FCB /* XCTAsyncActivity.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACCB1E3B77D600A02D78 /* XCTAsyncActivity.h */; settings = {ATTRIBUTES = (Public, ); }; };
143
142
  641EE64C2240C5CA00173FCB /* XCTestMisuseObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACDF1E3B77D600A02D78 /* XCTestMisuseObserver.h */; settings = {ATTRIBUTES = (Public, ); }; };
144
143
  641EE64D2240C5CA00173FCB /* XCTRunnerDaemonSession.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACEF1E3B77D600A02D78 /* XCTRunnerDaemonSession.h */; settings = {ATTRIBUTES = (Public, ); }; };
145
- 641EE64E2240C5CA00173FCB /* FBApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7661CAEDF0C008C271F /* FBApplication.h */; settings = {ATTRIBUTES = (Public, ); }; };
146
144
  641EE64F2240C5CA00173FCB /* XCTestExpectationWaiter.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACDA1E3B77D600A02D78 /* XCTestExpectationWaiter.h */; settings = {ATTRIBUTES = (Public, ); }; };
147
145
  641EE6502240C5CA00173FCB /* UIGestureRecognizer-RecordingAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACAD1E3B77D600A02D78 /* UIGestureRecognizer-RecordingAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; };
148
146
  641EE6512240C5CA00173FCB /* XCKeyboardKeyMap.h in Headers */ = {isa = PBXBuildFile; fileRef = EE35ACBF1E3B77D600A02D78 /* XCKeyboardKeyMap.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -619,8 +617,6 @@
619
617
  EE158AE91CBD456F00A3E3F0 /* FBElementTypeTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7901CAEDF0C008C271F /* FBElementTypeTransformer.m */; };
620
618
  EE158AEA1CBD456F00A3E3F0 /* FBRuntimeUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7911CAEDF0C008C271F /* FBRuntimeUtils.h */; settings = {ATTRIBUTES = (Public, ); }; };
621
619
  EE158AEB1CBD456F00A3E3F0 /* FBRuntimeUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7921CAEDF0C008C271F /* FBRuntimeUtils.m */; };
622
- EE158AF51CBD456F00A3E3F0 /* FBApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = EE9AB7661CAEDF0C008C271F /* FBApplication.h */; settings = {ATTRIBUTES = (Public, ); }; };
623
- EE158AF61CBD456F00A3E3F0 /* FBApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = EE9AB7671CAEDF0C008C271F /* FBApplication.m */; };
624
620
  EE158B5A1CBD462100A3E3F0 /* WebDriverAgentLib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE158A991CBD452B00A3E3F0 /* WebDriverAgentLib.framework */; };
625
621
  EE158B5F1CBD47A000A3E3F0 /* WebDriverAgentLib.h in Headers */ = {isa = PBXBuildFile; fileRef = EE158B5E1CBD47A000A3E3F0 /* WebDriverAgentLib.h */; settings = {ATTRIBUTES = (Public, ); }; };
626
622
  EE18883A1DA661C400307AA8 /* FBMathUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = EE1888381DA661C400307AA8 /* FBMathUtils.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -756,7 +752,7 @@
756
752
  EE55B3271D1D54CF003AAAEC /* FBScrollingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EE55B3261D1D54CF003AAAEC /* FBScrollingTests.m */; };
757
753
  EE5A24421F136D360078B1D9 /* FBXCodeCompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = EE5A24411F136C8D0078B1D9 /* FBXCodeCompatibility.m */; };
758
754
  EE6A89261D0B19E60083E92B /* FBSessionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6A89251D0B19E60083E92B /* FBSessionTests.m */; };
759
- EE6A892B1D0B25820083E92B /* FBApplicationDouble.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6A89281D0B257B0083E92B /* FBApplicationDouble.m */; };
755
+ EE6A892B1D0B25820083E92B /* XCUIApplicationDouble.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6A89281D0B257B0083E92B /* XCUIApplicationDouble.m */; };
760
756
  EE6A892D1D0B2AF40083E92B /* FBErrorBuilderTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6A892C1D0B2AF40083E92B /* FBErrorBuilderTests.m */; };
761
757
  EE6A89371D0B35920083E92B /* FBFailureProofTestCaseTests.m in Sources */ = {isa = PBXBuildFile; fileRef = EE6A89361D0B35920083E92B /* FBFailureProofTestCaseTests.m */; };
762
758
  EE6A893A1D0B38640083E92B /* FBFailureProofTestCase.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6A89381D0B38640083E92B /* FBFailureProofTestCase.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -1254,8 +1250,8 @@
1254
1250
  EE5A24401F136C8D0078B1D9 /* FBXCodeCompatibility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBXCodeCompatibility.h; sourceTree = "<group>"; };
1255
1251
  EE5A24411F136C8D0078B1D9 /* FBXCodeCompatibility.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBXCodeCompatibility.m; sourceTree = "<group>"; };
1256
1252
  EE6A89251D0B19E60083E92B /* FBSessionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBSessionTests.m; sourceTree = "<group>"; };
1257
- EE6A89271D0B257B0083E92B /* FBApplicationDouble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBApplicationDouble.h; sourceTree = "<group>"; };
1258
- EE6A89281D0B257B0083E92B /* FBApplicationDouble.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBApplicationDouble.m; sourceTree = "<group>"; };
1253
+ EE6A89271D0B257B0083E92B /* XCUIApplicationDouble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XCUIApplicationDouble.h; sourceTree = "<group>"; };
1254
+ EE6A89281D0B257B0083E92B /* XCUIApplicationDouble.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XCUIApplicationDouble.m; sourceTree = "<group>"; };
1259
1255
  EE6A892C1D0B2AF40083E92B /* FBErrorBuilderTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBErrorBuilderTests.m; sourceTree = "<group>"; };
1260
1256
  EE6A89361D0B35920083E92B /* FBFailureProofTestCaseTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBFailureProofTestCaseTests.m; sourceTree = "<group>"; };
1261
1257
  EE6A89381D0B38640083E92B /* FBFailureProofTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBFailureProofTestCase.h; sourceTree = "<group>"; };
@@ -1296,8 +1292,6 @@
1296
1292
  EE9AB7631CAEDF0C008C271F /* FBTouchIDCommands.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBTouchIDCommands.m; sourceTree = "<group>"; };
1297
1293
  EE9AB7641CAEDF0C008C271F /* FBUnknownCommands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBUnknownCommands.h; sourceTree = "<group>"; };
1298
1294
  EE9AB7651CAEDF0C008C271F /* FBUnknownCommands.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FBUnknownCommands.m; sourceTree = "<group>"; };
1299
- EE9AB7661CAEDF0C008C271F /* FBApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FBApplication.h; path = WebDriverAgentLib/FBApplication.h; sourceTree = SOURCE_ROOT; };
1300
- EE9AB7671CAEDF0C008C271F /* FBApplication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FBApplication.m; path = WebDriverAgentLib/FBApplication.m; sourceTree = SOURCE_ROOT; };
1301
1295
  EE9AB7731CAEDF0C008C271F /* WebDriverAgent.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = WebDriverAgent.bundle; sourceTree = "<group>"; };
1302
1296
  EE9AB7751CAEDF0C008C271F /* FBCommandHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBCommandHandler.h; sourceTree = "<group>"; };
1303
1297
  EE9AB7761CAEDF0C008C271F /* FBCommandStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBCommandStatus.h; sourceTree = "<group>"; };
@@ -1615,8 +1609,8 @@
1615
1609
  13FFF2F1287DBEE600E561E4 /* XCElementSnapshotDouble.m */,
1616
1610
  ADBC39961D07842800327304 /* XCUIElementDouble.h */,
1617
1611
  ADBC39971D07842800327304 /* XCUIElementDouble.m */,
1618
- EE6A89271D0B257B0083E92B /* FBApplicationDouble.h */,
1619
- EE6A89281D0B257B0083E92B /* FBApplicationDouble.m */,
1612
+ EE6A89271D0B257B0083E92B /* XCUIApplicationDouble.h */,
1613
+ EE6A89281D0B257B0083E92B /* XCUIApplicationDouble.m */,
1620
1614
  );
1621
1615
  path = Doubles;
1622
1616
  sourceTree = "<group>";
@@ -2096,8 +2090,6 @@
2096
2090
  EE158B5E1CBD47A000A3E3F0 /* WebDriverAgentLib.h */,
2097
2091
  AD6C26921CF2379700F8B5FF /* FBAlert.h */,
2098
2092
  AD6C26931CF2379700F8B5FF /* FBAlert.m */,
2099
- EE9AB7661CAEDF0C008C271F /* FBApplication.h */,
2100
- EE9AB7671CAEDF0C008C271F /* FBApplication.m */,
2101
2093
  EE3A18641CDE734B00DE4205 /* FBKeyboard.h */,
2102
2094
  EE3A18651CDE734B00DE4205 /* FBKeyboard.m */,
2103
2095
  EE158B5D1CBD479000A3E3F0 /* Info.plist */,
@@ -2283,7 +2275,6 @@
2283
2275
  641EE64D2240C5CA00173FCB /* XCTRunnerDaemonSession.h in Headers */,
2284
2276
  714E14B929805CAE00375DD7 /* XCAXClient_iOS+FBSnapshotReqParams.h in Headers */,
2285
2277
  64B2650B228CE4FF002A5025 /* FBTVNavigationTracker-Private.h in Headers */,
2286
- 641EE64E2240C5CA00173FCB /* FBApplication.h in Headers */,
2287
2278
  641EE64F2240C5CA00173FCB /* XCTestExpectationWaiter.h in Headers */,
2288
2279
  13DE7A5C287CA444003243C6 /* FBXCElementSnapshotWrapper+Helpers.h in Headers */,
2289
2280
  641EE6502240C5CA00173FCB /* UIGestureRecognizer-RecordingAdditions.h in Headers */,
@@ -2515,7 +2506,6 @@
2515
2506
  EE35AD601E3B77D600A02D78 /* XCTRunnerDaemonSession.h in Headers */,
2516
2507
  71414ED62670A1EE003A8C5D /* LRUCacheNode.h in Headers */,
2517
2508
  64B2650A228CE4FF002A5025 /* FBTVNavigationTracker-Private.h in Headers */,
2518
- EE158AF51CBD456F00A3E3F0 /* FBApplication.h in Headers */,
2519
2509
  71B155DF23080CA600646AFB /* FBProtocolHelpers.h in Headers */,
2520
2510
  EE35AD4B1E3B77D600A02D78 /* XCTestExpectationWaiter.h in Headers */,
2521
2511
  EE35AD1E1E3B77D600A02D78 /* UIGestureRecognizer-RecordingAdditions.h in Headers */,
@@ -3158,7 +3148,6 @@
3158
3148
  641EE61F2240C5CA00173FCB /* FBXCodeCompatibility.m in Sources */,
3159
3149
  71E75E70254824230099FC87 /* XCUIElementQuery+FBHelpers.m in Sources */,
3160
3150
  641EE6212240C5CA00173FCB /* FBElementTypeTransformer.m in Sources */,
3161
- 641EE6222240C5CA00173FCB /* FBApplication.m in Sources */,
3162
3151
  13DE7A5E287CA444003243C6 /* FBXCElementSnapshotWrapper+Helpers.m in Sources */,
3163
3152
  641EE6232240C5CA00173FCB /* FBScreen.m in Sources */,
3164
3153
  71D04DCB25356C43008A052C /* XCUIElement+FBCaching.m in Sources */,
@@ -3292,7 +3281,6 @@
3292
3281
  E444DC9D249131D40060D7EB /* HTTPMessage.m in Sources */,
3293
3282
  E444DCB024913C220060D7EB /* RouteResponse.m in Sources */,
3294
3283
  71D3B3D7267FC7260076473D /* XCUIElement+FBResolve.m in Sources */,
3295
- EE158AF61CBD456F00A3E3F0 /* FBApplication.m in Sources */,
3296
3284
  715AFAC21FFA29180053896D /* FBScreen.m in Sources */,
3297
3285
  71B155DC230711E900646AFB /* FBCommandStatus.m in Sources */,
3298
3286
  EE35AD7C1E3B80C000A02D78 /* FBXCTestDaemonsProxy.m in Sources */,
@@ -3360,7 +3348,7 @@
3360
3348
  EE9B76591CF7987800275851 /* FBRouteTests.m in Sources */,
3361
3349
  7139145C1DF01A12005896C2 /* NSExpressionFBFormatTests.m in Sources */,
3362
3350
  71A224E81DE326C500844D55 /* NSPredicateFBFormatTests.m in Sources */,
3363
- EE6A892B1D0B25820083E92B /* FBApplicationDouble.m in Sources */,
3351
+ EE6A892B1D0B25820083E92B /* XCUIApplicationDouble.m in Sources */,
3364
3352
  716F0DA62A17323300CDD977 /* NSDictionaryFBUtf8SafeTests.m in Sources */,
3365
3353
  EE6A892D1D0B2AF40083E92B /* FBErrorBuilderTests.m in Sources */,
3366
3354
  712A0C851DA3E459007D02E5 /* FBXPathTests.m in Sources */,
@@ -122,6 +122,44 @@ NS_ASSUME_NONNULL_BEGIN
122
122
  */
123
123
  - (nullable NSArray<NSDictionary<NSString *, NSString*> *> *)fb_performAccessibilityAuditWithAuditTypes:(uint64_t)auditTypes
124
124
  error:(NSError **)error;
125
+ /**
126
+ Constructor used to get current active application
127
+ */
128
+ + (instancetype)fb_activeApplication;
129
+
130
+ /**
131
+ Constructor used to get current active application
132
+
133
+ @param bundleId The bundle identifier of an app, which should be selected as active by default
134
+ if it is present in the list of active applications
135
+ */
136
+ + (instancetype)fb_activeApplicationWithDefaultBundleId:(nullable NSString *)bundleId;
137
+
138
+ /**
139
+ Constructor used to get the system application (e.g. Springboard on iOS)
140
+ */
141
+ + (instancetype)fb_systemApplication;
142
+
143
+ /**
144
+ Retrieves the list of all currently active applications
145
+ */
146
+ + (NSArray<XCUIApplication *> *)fb_activeApplications;
147
+
148
+ /**
149
+ Switch to system app (called Springboard on iOS)
150
+
151
+ @param error If there is an error, upon return contains an NSError object that describes the problem.
152
+ @return YES if the operation succeeds, otherwise NO.
153
+ */
154
+ + (BOOL)fb_switchToSystemApplicationWithError:(NSError **)error;
155
+
156
+ /**
157
+ Determines whether the other app is the same as the current one
158
+
159
+ @param otherApp Other app instance
160
+ @return YES if the other app has the same identifier
161
+ */
162
+ - (BOOL)fb_isSameAppAs:(nullable XCUIApplication *)otherApp;
125
163
 
126
164
  @end
127
165
 
@@ -9,13 +9,14 @@
9
9
 
10
10
  #import "XCUIApplication+FBHelpers.h"
11
11
 
12
+ #import "FBActiveAppDetectionPoint.h"
12
13
  #import "FBElementTypeTransformer.h"
13
14
  #import "FBKeyboard.h"
14
15
  #import "FBLogger.h"
15
16
  #import "FBExceptions.h"
16
17
  #import "FBMacros.h"
17
18
  #import "FBMathUtils.h"
18
- #import "FBActiveAppDetectionPoint.h"
19
+ #import "FBRunLoopSpinner.h"
19
20
  #import "FBXCodeCompatibility.h"
20
21
  #import "FBXPath.h"
21
22
  #import "FBXCAccessibilityElement.h"
@@ -23,14 +24,19 @@
23
24
  #import "FBXCElementSnapshotWrapper+Helpers.h"
24
25
  #import "FBXCAXClientProxy.h"
25
26
  #import "FBXMLGenerationOptions.h"
27
+ #import "XCTestManager_ManagerInterface-Protocol.h"
28
+ #import "XCTestPrivateSymbols.h"
29
+ #import "XCTRunnerDaemonSession.h"
30
+ #import "XCUIApplication.h"
31
+ #import "XCUIApplicationImpl.h"
32
+ #import "XCUIApplicationProcess.h"
26
33
  #import "XCUIDevice+FBHelpers.h"
34
+ #import "XCUIElement.h"
27
35
  #import "XCUIElement+FBCaching.h"
28
36
  #import "XCUIElement+FBIsVisible.h"
29
37
  #import "XCUIElement+FBUtilities.h"
30
38
  #import "XCUIElement+FBWebDriverAttributes.h"
31
- #import "XCTestManager_ManagerInterface-Protocol.h"
32
- #import "XCTestPrivateSymbols.h"
33
- #import "XCTRunnerDaemonSession.h"
39
+ #import "XCUIElementQuery.h"
34
40
 
35
41
  static NSString* const FBUnknownBundleId = @"unknown";
36
42
 
@@ -141,7 +147,7 @@ NSDictionary<NSNumber *, NSString *> *auditTypeValuesToNames(void) {
141
147
  return NO;
142
148
  }
143
149
  [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:MAX(duration, .0)]];
144
- [self fb_activate];
150
+ [self activate];
145
151
  return YES;
146
152
  }
147
153
 
@@ -393,4 +399,141 @@ NSDictionary<NSNumber *, NSString *> *auditTypeValuesToNames(void) {
393
399
  return isSuccessful ? resultArray.copy : nil;
394
400
  }
395
401
 
402
+ + (instancetype)fb_activeApplication
403
+ {
404
+ return [self fb_activeApplicationWithDefaultBundleId:nil];
405
+ }
406
+
407
+ + (NSArray<XCUIApplication *> *)fb_activeApplications
408
+ {
409
+ NSArray<id<FBXCAccessibilityElement>> *activeApplicationElements = [FBXCAXClientProxy.sharedClient activeApplications];
410
+ NSMutableArray<XCUIApplication *> *result = [NSMutableArray array];
411
+ if (activeApplicationElements.count > 0) {
412
+ for (id<FBXCAccessibilityElement> applicationElement in activeApplicationElements) {
413
+ XCUIApplication *app = [XCUIApplication fb_applicationWithPID:applicationElement.processIdentifier];
414
+ if (nil != app) {
415
+ [result addObject:app];
416
+ }
417
+ }
418
+ }
419
+ return result.count > 0 ? result.copy : @[self.class.fb_systemApplication];
420
+ }
421
+
422
+ + (instancetype)fb_activeApplicationWithDefaultBundleId:(nullable NSString *)bundleId
423
+ {
424
+ NSArray<id<FBXCAccessibilityElement>> *activeApplicationElements = [FBXCAXClientProxy.sharedClient activeApplications];
425
+ id<FBXCAccessibilityElement> activeApplicationElement = nil;
426
+ id<FBXCAccessibilityElement> currentElement = nil;
427
+ if (nil != bundleId) {
428
+ currentElement = FBActiveAppDetectionPoint.sharedInstance.axElement;
429
+ if (nil != currentElement) {
430
+ NSArray<NSDictionary *> *appInfos = [self fb_appsInfoWithAxElements:@[currentElement]];
431
+ [FBLogger logFmt:@"Detected on-screen application: %@", appInfos.firstObject[@"bundleId"]];
432
+ if ([[appInfos.firstObject objectForKey:@"bundleId"] isEqualToString:(id)bundleId]) {
433
+ activeApplicationElement = currentElement;
434
+ }
435
+ }
436
+ }
437
+ if (nil == activeApplicationElement && activeApplicationElements.count > 1) {
438
+ if (nil != bundleId) {
439
+ NSArray<NSDictionary *> *appInfos = [self fb_appsInfoWithAxElements:activeApplicationElements];
440
+ NSMutableArray<NSString *> *bundleIds = [NSMutableArray array];
441
+ for (NSDictionary *appInfo in appInfos) {
442
+ [bundleIds addObject:(NSString *)appInfo[@"bundleId"]];
443
+ }
444
+ [FBLogger logFmt:@"Detected system active application(s): %@", bundleIds];
445
+ // Try to select the desired application first
446
+ for (NSUInteger appIdx = 0; appIdx < appInfos.count; appIdx++) {
447
+ if ([[[appInfos objectAtIndex:appIdx] objectForKey:@"bundleId"] isEqualToString:(id)bundleId]) {
448
+ activeApplicationElement = [activeApplicationElements objectAtIndex:appIdx];
449
+ break;
450
+ }
451
+ }
452
+ }
453
+ // Fall back to the "normal" algorithm if the desired application is either
454
+ // not set or is not active
455
+ if (nil == activeApplicationElement) {
456
+ if (nil == currentElement) {
457
+ currentElement = FBActiveAppDetectionPoint.sharedInstance.axElement;
458
+ }
459
+ if (nil == currentElement) {
460
+ [FBLogger log:@"Cannot precisely detect the current application. Will use the system's recently active one"];
461
+ if (nil == bundleId) {
462
+ [FBLogger log:@"Consider changing the 'defaultActiveApplication' setting to the bundle identifier of the desired application under test"];
463
+ }
464
+ } else {
465
+ for (id<FBXCAccessibilityElement> appElement in activeApplicationElements) {
466
+ if (appElement.processIdentifier == currentElement.processIdentifier) {
467
+ activeApplicationElement = appElement;
468
+ break;
469
+ }
470
+ }
471
+ }
472
+ }
473
+ }
474
+
475
+ if (nil != activeApplicationElement) {
476
+ XCUIApplication *application = [XCUIApplication fb_applicationWithPID:activeApplicationElement.processIdentifier];
477
+ if (nil != application) {
478
+ return application;
479
+ }
480
+ [FBLogger log:@"Cannot translate the active process identifier into an application object"];
481
+ }
482
+
483
+ if (activeApplicationElements.count > 0) {
484
+ [FBLogger logFmt:@"Getting the most recent active application (out of %@ total items)", @(activeApplicationElements.count)];
485
+ for (id<FBXCAccessibilityElement> appElement in activeApplicationElements) {
486
+ XCUIApplication *application = [XCUIApplication fb_applicationWithPID:appElement.processIdentifier];
487
+ if (nil != application) {
488
+ return application;
489
+ }
490
+ }
491
+ }
492
+
493
+ [FBLogger log:@"Cannot retrieve any active applications. Assuming the system application is the active one"];
494
+ return [self fb_systemApplication];
495
+ }
496
+
497
+ + (instancetype)fb_systemApplication
498
+ {
499
+ return [self fb_applicationWithPID:
500
+ [[FBXCAXClientProxy.sharedClient systemApplication] processIdentifier]];
501
+ }
502
+
503
+ + (instancetype)fb_applicationWithPID:(pid_t)processID
504
+ {
505
+ return [FBXCAXClientProxy.sharedClient monitoredApplicationWithProcessIdentifier:processID];
506
+ }
507
+
508
+ + (BOOL)fb_switchToSystemApplicationWithError:(NSError **)error
509
+ {
510
+ XCUIApplication *systemApp = self.fb_systemApplication;
511
+ @try {
512
+ if (!systemApp.running) {
513
+ [systemApp launch];
514
+ } else {
515
+ [systemApp activate];
516
+ }
517
+ } @catch (NSException *e) {
518
+ return [[[FBErrorBuilder alloc]
519
+ withDescription:nil == e ? @"Cannot open the home screen" : e.reason]
520
+ buildError:error];
521
+ }
522
+ return [[[[FBRunLoopSpinner new]
523
+ timeout:5]
524
+ timeoutErrorMessage:@"Timeout waiting until the home screen is visible"]
525
+ spinUntilTrue:^BOOL{
526
+ return [systemApp fb_isSameAppAs:self.fb_activeApplication];
527
+ }
528
+ error:error];
529
+ }
530
+
531
+ - (BOOL)fb_isSameAppAs:(nullable XCUIApplication *)otherApp
532
+ {
533
+ if (nil == otherApp) {
534
+ return NO;
535
+ }
536
+ return [self.bundleID isEqualToString:(NSString *)otherApp.bundleID];
537
+ }
538
+
396
539
  @end
@@ -56,7 +56,7 @@ static bool fb_isLocked;
56
56
 
57
57
  - (BOOL)fb_goToHomescreenWithError:(NSError **)error
58
58
  {
59
- return [FBApplication fb_switchToSystemApplicationWithError:error];
59
+ return [XCUIApplication fb_switchToSystemApplicationWithError:error];
60
60
  }
61
61
 
62
62
  - (BOOL)fb_lockScreen:(NSError **)error
@@ -8,7 +8,6 @@
8
8
  */
9
9
 
10
10
  #import <XCTest/XCTest.h>
11
- #import <WebDriverAgentLib/FBApplication.h>
12
11
 
13
12
  NS_ASSUME_NONNULL_BEGIN
14
13
 
@@ -10,6 +10,8 @@
10
10
  #import "XCUIDevice+FBRotation.h"
11
11
 
12
12
  #import "FBConfiguration.h"
13
+ #import "XCUIApplication.h"
14
+ #import "XCUIApplication+FBHelpers.h"
13
15
  #import "XCUIElement+FBUtilities.h"
14
16
 
15
17
  # if !TARGET_OS_TV
@@ -18,7 +20,7 @@
18
20
 
19
21
  - (BOOL)fb_setDeviceInterfaceOrientation:(UIDeviceOrientation)orientation
20
22
  {
21
- FBApplication *application = FBApplication.fb_activeApplication;
23
+ XCUIApplication *application = XCUIApplication.fb_activeApplication;
22
24
  [XCUIDevice sharedDevice].orientation = orientation;
23
25
  return [self waitUntilInterfaceIsAtOrientation:orientation application:application];
24
26
  }
@@ -30,12 +32,12 @@
30
32
  return NO;
31
33
  }
32
34
  NSInteger orientation = keysForRotationObj.firstObject.integerValue;
33
- FBApplication *application = FBApplication.fb_activeApplication;
35
+ XCUIApplication *application = XCUIApplication.fb_activeApplication;
34
36
  [XCUIDevice sharedDevice].orientation = orientation;
35
37
  return [self waitUntilInterfaceIsAtOrientation:orientation application:application];
36
38
  }
37
39
 
38
- - (BOOL)waitUntilInterfaceIsAtOrientation:(NSInteger)orientation application:(FBApplication *)application
40
+ - (BOOL)waitUntilInterfaceIsAtOrientation:(NSInteger)orientation application:(XCUIApplication *)application
39
41
  {
40
42
  // Tapping elements immediately after rotation may fail due to way UIKit is handling touches.
41
43
  // We should wait till UI cools off, before continuing
@@ -10,10 +10,10 @@
10
10
  #import "XCUIElement+FBTVFocuse.h"
11
11
 
12
12
  #import <XCTest/XCUIRemote.h>
13
- #import "FBApplication.h"
14
13
  #import "FBConfiguration.h"
15
14
  #import "FBErrorBuilder.h"
16
15
  #import <FBTVNavigationTracker.h>
16
+ #import "XCUIApplication+FBHelpers.h"
17
17
  #import "XCUIElement+FBUtilities.h"
18
18
  #import "XCUIElement+FBWebDriverAttributes.h"
19
19
 
@@ -25,7 +25,7 @@ int const MAX_ITERATIONS_COUNT = 100;
25
25
 
26
26
  - (BOOL)fb_setFocusWithError:(NSError**) error
27
27
  {
28
- [FBApplication.fb_activeApplication fb_waitUntilStableWithTimeout:FBConfiguration.animationCoolOffTimeout];
28
+ [XCUIApplication.fb_activeApplication fb_waitUntilStableWithTimeout:FBConfiguration.animationCoolOffTimeout];
29
29
 
30
30
  if (!self.wdEnabled) {
31
31
  if (error) {
@@ -11,6 +11,16 @@
11
11
 
12
12
  NS_ASSUME_NONNULL_BEGIN
13
13
 
14
+ /**
15
+ Types a text into the currently focused element.
16
+
17
+ @param text text that should be typed
18
+ @param typingSpeed Frequency of typing (letters per sec)
19
+ @param error If there is an error, upon return contains an NSError object that describes the problem.
20
+ @return YES if the operation succeeds, otherwise NO.
21
+ */
22
+ BOOL FBTypeText(NSString *text, NSUInteger typingSpeed, NSError **error);
23
+
14
24
  @interface XCUIElement (FBTyping)
15
25
 
16
26
  /**
@@ -11,17 +11,34 @@
11
11
 
12
12
  #import "FBConfiguration.h"
13
13
  #import "FBErrorBuilder.h"
14
- #import "FBKeyboard.h"
15
- #import "NSString+FBVisualLength.h"
16
14
  #import "FBXCElementSnapshotWrapper.h"
17
15
  #import "FBXCElementSnapshotWrapper+Helpers.h"
16
+ #import "FBXCodeCompatibility.h"
17
+ #import "FBXCTestDaemonsProxy.h"
18
+ #import "NSString+FBVisualLength.h"
18
19
  #import "XCUIDevice+FBHelpers.h"
19
20
  #import "XCUIElement+FBCaching.h"
20
21
  #import "XCUIElement+FBUtilities.h"
21
- #import "FBXCodeCompatibility.h"
22
+ #import "XCSynthesizedEventRecord.h"
23
+ #import "XCPointerEventPath.h"
22
24
 
25
+ #define MAX_TEXT_ABBR_LEN 12
23
26
  #define MAX_CLEAR_RETRIES 3
24
27
 
28
+ BOOL FBTypeText(NSString *text, NSUInteger typingSpeed, NSError **error)
29
+ {
30
+ NSString *name = text.length <= MAX_TEXT_ABBR_LEN
31
+ ? [NSString stringWithFormat:@"Type '%@'", text]
32
+ : [NSString stringWithFormat:@"Type '%@…'", [text substringToIndex:MAX_TEXT_ABBR_LEN]];
33
+ XCSynthesizedEventRecord *eventRecord = [[XCSynthesizedEventRecord alloc] initWithName:name];
34
+ XCPointerEventPath *ep = [[XCPointerEventPath alloc] initForTextInput];
35
+ [ep typeText:text
36
+ atOffset:0.0
37
+ typingSpeed:typingSpeed
38
+ shouldRedact:NO];
39
+ [eventRecord addPointerEventPath:ep];
40
+ return [FBXCTestDaemonsProxy synthesizeEventWithRecord:eventRecord error:error];
41
+ }
25
42
 
26
43
  @interface NSString (FBRepeat)
27
44
 
@@ -96,13 +113,12 @@
96
113
  id<FBXCElementSnapshot> snapshot = self.fb_isResolvedFromCache.boolValue
97
114
  ? self.lastSnapshot
98
115
  : self.fb_takeSnapshot;
99
- [self fb_prepareForTextInputWithSnapshot:[FBXCElementSnapshotWrapper ensureWrapped:snapshot]];
100
- if (shouldClear && ![self fb_clearTextWithSnapshot:self.lastSnapshot
101
- shouldPrepareForInput:NO
102
- error:error]) {
116
+ FBXCElementSnapshotWrapper *wrapped = [FBXCElementSnapshotWrapper ensureWrapped:snapshot];
117
+ [self fb_prepareForTextInputWithSnapshot:wrapped];
118
+ if (shouldClear && ![self fb_clearTextWithSnapshot:wrapped shouldPrepareForInput:NO error:error]) {
103
119
  return NO;
104
120
  }
105
- return [FBKeyboard typeText:text frequency:frequency error:error];
121
+ return FBTypeText(text, frequency, error);
106
122
  }
107
123
 
108
124
  - (BOOL)fb_clearTextWithError:(NSError **)error
@@ -122,15 +138,15 @@
122
138
  id currentValue = snapshot.value;
123
139
  if (nil != currentValue && ![currentValue isKindOfClass:NSString.class]) {
124
140
  return [[[FBErrorBuilder builder]
125
- withDescriptionFormat:@"The value of '%@' is not a string and thus cannot be edited", snapshot.fb_description]
126
- buildError:error];
141
+ withDescriptionFormat:@"The value of '%@' is not a string and thus cannot be edited", snapshot.fb_description]
142
+ buildError:error];
127
143
  }
128
-
144
+
129
145
  if (nil == currentValue || 0 == [currentValue fb_visualLength]) {
130
146
  // Short circuit if the content is not present
131
147
  return YES;
132
148
  }
133
-
149
+
134
150
  static NSString *backspaceDeleteSequence;
135
151
  static dispatch_once_t onceToken;
136
152
  dispatch_once(&onceToken, ^{
@@ -160,8 +176,8 @@
160
176
  } else if (retry >= MAX_CLEAR_RETRIES - 1) {
161
177
  // Last chance retry. Tripple-tap the field to select its content
162
178
  [self tapWithNumberOfTaps:3 numberOfTouches:1];
163
- return [FBKeyboard typeText:backspaceDeleteSequence error:error];
164
- } else if (![FBKeyboard typeText:backspacesToType error:error]) {
179
+ return FBTypeText(backspaceDeleteSequence, FBConfiguration.defaultTypingFrequency, error);
180
+ } else if (!FBTypeText(backspacesToType, FBConfiguration.defaultTypingFrequency, error)) {
165
181
  // 2nd operation
166
182
  return NO;
167
183
  }
@@ -181,7 +197,7 @@
181
197
  // kHIDPage_KeyboardOrKeypad did not work for tvOS's search field. (tvOS 17 at least)
182
198
  // Tested XCUIElementTypeSearchField and XCUIElementTypeTextView whch were
183
199
  // common search field and email/passowrd input in tvOS apps.
184
- return [FBKeyboard typeText:backspacesToType error:error];
200
+ return FBTypeText(backspacesToType, FBConfiguration.defaultTypingFrequency, error);
185
201
  #endif
186
202
  }
187
203
 
@@ -10,9 +10,9 @@
10
10
  #import "FBAlertViewCommands.h"
11
11
 
12
12
  #import "FBAlert.h"
13
- #import "FBApplication.h"
14
13
  #import "FBRouteRequest.h"
15
14
  #import "FBSession.h"
15
+ #import "XCUIApplication+FBHelpers.h"
16
16
 
17
17
  @implementation FBAlertViewCommands
18
18
 
@@ -38,7 +38,7 @@
38
38
 
39
39
  + (id<FBResponsePayload>)handleAlertGetTextCommand:(FBRouteRequest *)request
40
40
  {
41
- FBApplication *application = request.session.activeApplication ?: FBApplication.fb_activeApplication;
41
+ XCUIApplication *application = request.session.activeApplication ?: XCUIApplication.fb_activeApplication;
42
42
  NSString *alertText = [FBAlert alertWithApplication:application].text;
43
43
  if (!alertText) {
44
44
  return FBResponseWithStatus([FBCommandStatus noAlertOpenErrorWithMessage:nil
@@ -73,7 +73,7 @@
73
73
 
74
74
  + (id<FBResponsePayload>)handleAlertAcceptCommand:(FBRouteRequest *)request
75
75
  {
76
- FBApplication *application = request.session.activeApplication ?: FBApplication.fb_activeApplication;
76
+ XCUIApplication *application = request.session.activeApplication ?: XCUIApplication.fb_activeApplication;
77
77
  NSString *name = request.arguments[@"name"];
78
78
  FBAlert *alert = [FBAlert alertWithApplication:application];
79
79
  NSError *error;
@@ -96,7 +96,7 @@
96
96
 
97
97
  + (id<FBResponsePayload>)handleAlertDismissCommand:(FBRouteRequest *)request
98
98
  {
99
- FBApplication *application = request.session.activeApplication ?: FBApplication.fb_activeApplication;
99
+ XCUIApplication *application = request.session.activeApplication ?: XCUIApplication.fb_activeApplication;
100
100
  NSString *name = request.arguments[@"name"];
101
101
  FBAlert *alert = [FBAlert alertWithApplication:application];
102
102
  NSError *error;
@@ -12,7 +12,6 @@
12
12
  #import <XCTest/XCUIDevice.h>
13
13
  #import <CoreLocation/CoreLocation.h>
14
14
 
15
- #import "FBApplication.h"
16
15
  #import "FBConfiguration.h"
17
16
  #import "FBKeyboard.h"
18
17
  #import "FBNotificationsHelper.h"
@@ -24,6 +23,7 @@
24
23
  #import "FBScreen.h"
25
24
  #import "FBSession.h"
26
25
  #import "FBXCodeCompatibility.h"
26
+ #import "XCUIApplication.h"
27
27
  #import "XCUIApplication+FBHelpers.h"
28
28
  #import "XCUIDevice+FBHelpers.h"
29
29
  #import "XCUIElement.h"
@@ -171,7 +171,7 @@
171
171
 
172
172
  + (id<FBResponsePayload>)handleActiveAppInfo:(FBRouteRequest *)request
173
173
  {
174
- XCUIApplication *app = request.session.activeApplication ?: FBApplication.fb_activeApplication;
174
+ XCUIApplication *app = request.session.activeApplication ?: XCUIApplication.fb_activeApplication;
175
175
  return FBResponseWithObject(@{
176
176
  @"pid": @(app.processID),
177
177
  @"bundleId": app.bundleID,