@devicelab/maestro-runner-darwin-x64 1.1.25

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 (562) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +166 -0
  3. package/THIRD_PARTY_LICENSES +186 -0
  4. package/bin/maestro-runner +0 -0
  5. package/drivers/android/appium-uiautomator2-server-debug-androidTest.apk +0 -0
  6. package/drivers/android/appium-uiautomator2-server-v9.11.1.apk +0 -0
  7. package/drivers/android/devicelab-android-driver-test.apk +0 -0
  8. package/drivers/android/devicelab-android-driver.apk +0 -0
  9. package/drivers/android/settings_apk-debug.apk +0 -0
  10. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunner/App.swift +11 -0
  11. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunner.xcodeproj/project.pbxproj +523 -0
  12. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  13. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/ATTRIBUTION.md +73 -0
  14. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/Bridging-Header.h +4 -0
  15. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PixelDiff.swift +72 -0
  16. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCPointerEventPath.h +43 -0
  17. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCSynthesizedEventRecord.h +32 -0
  18. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCUIApplication+ActiveApp.h +23 -0
  19. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCUIDevice.h +30 -0
  20. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerObjCExceptionCatcher.h +11 -0
  21. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerObjCExceptionCatcher.m +16 -0
  22. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Alert.swift +155 -0
  23. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+CommandExecution.swift +961 -0
  24. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Environment.swift +37 -0
  25. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Interaction.swift +1864 -0
  26. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Lifecycle.swift +351 -0
  27. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Media.swift +81 -0
  28. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Models.swift +258 -0
  29. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+ScreenRecorder.swift +279 -0
  30. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Snapshot.swift +703 -0
  31. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+SystemModal.swift +230 -0
  32. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Transport.swift +137 -0
  33. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+TvRemote.swift +185 -0
  34. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests.swift +197 -0
  35. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SnapshotParams.h +28 -0
  36. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SnapshotParams.m +49 -0
  37. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SyntheticTyping.h +17 -0
  38. package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SyntheticTyping.m +86 -0
  39. package/drivers/ios/DevicelabIOSRunner/PROTOCOL.md +258 -0
  40. package/drivers/ios/DevicelabIOSRunner/README.md +38 -0
  41. package/drivers/ios/DevicelabIOSRunner/project.yml +49 -0
  42. package/drivers/ios/WebDriverAgent/.github/ISSUE_TEMPLATE.md +4 -0
  43. package/drivers/ios/WebDriverAgent/.github/actions/xcode-setup/action.yml +32 -0
  44. package/drivers/ios/WebDriverAgent/.github/dependabot.yml +22 -0
  45. package/drivers/ios/WebDriverAgent/.github/workflows/functional-test.yml +62 -0
  46. package/drivers/ios/WebDriverAgent/.github/workflows/pr-title.yml +10 -0
  47. package/drivers/ios/WebDriverAgent/.github/workflows/publish.js.yml +105 -0
  48. package/drivers/ios/WebDriverAgent/.github/workflows/unit-test.yml +30 -0
  49. package/drivers/ios/WebDriverAgent/.github/workflows/wda-package.yml +107 -0
  50. package/drivers/ios/WebDriverAgent/.github/workflows/wda-tests.yml +221 -0
  51. package/drivers/ios/WebDriverAgent/.mocharc.js +4 -0
  52. package/drivers/ios/WebDriverAgent/.releaserc +45 -0
  53. package/drivers/ios/WebDriverAgent/CHANGELOG.md +1547 -0
  54. package/drivers/ios/WebDriverAgent/CONTRIBUTING.md +35 -0
  55. package/drivers/ios/WebDriverAgent/Configurations/IOSSettings.xcconfig +31 -0
  56. package/drivers/ios/WebDriverAgent/Configurations/IOSTestSettings.xcconfig +1 -0
  57. package/drivers/ios/WebDriverAgent/Configurations/TVOSSettings.xcconfig +31 -0
  58. package/drivers/ios/WebDriverAgent/Configurations/TVOSTestSettings.xcconfig +1 -0
  59. package/drivers/ios/WebDriverAgent/Fastlane/Fastfile +13 -0
  60. package/drivers/ios/WebDriverAgent/Gemfile +3 -0
  61. package/drivers/ios/WebDriverAgent/LICENSE +30 -0
  62. package/drivers/ios/WebDriverAgent/PrivateHeaders/AccessibilityUtilities/AXSettings.h +15 -0
  63. package/drivers/ios/WebDriverAgent/PrivateHeaders/MobileCoreServices/LSApplicationWorkspace.h +127 -0
  64. package/drivers/ios/WebDriverAgent/PrivateHeaders/TextInput/TIPreferencesController.h +45 -0
  65. package/drivers/ios/WebDriverAgent/PrivateHeaders/UIKitCore/UIKeyboardImpl.h +27 -0
  66. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/CDStructures.h +28 -0
  67. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/NSString-XCTAdditions.h +11 -0
  68. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/NSValue-XCTestAdditions.h +11 -0
  69. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UIGestureRecognizer-RecordingAdditions.h +11 -0
  70. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UILongPressGestureRecognizer-RecordingAdditions.h +11 -0
  71. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UIPanGestureRecognizer-RecordingAdditions.h +11 -0
  72. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UIPinchGestureRecognizer-RecordingAdditions.h +11 -0
  73. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UISwipeGestureRecognizer-RecordingAdditions.h +11 -0
  74. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UITapGestureRecognizer-RecordingAdditions.h +11 -0
  75. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCAXClient_iOS.h +55 -0
  76. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCActivityRecord.h +39 -0
  77. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCApplicationMonitor.h +44 -0
  78. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCApplicationMonitor_iOS.h +18 -0
  79. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCApplicationQuery.h +23 -0
  80. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCDebugLogDelegate-Protocol.h +11 -0
  81. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCDeviceEvent.h +27 -0
  82. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCEventGenerator.h +73 -0
  83. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyMappingPath.h +36 -0
  84. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyboardInputSolver.h +41 -0
  85. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyboardKeyMap.h +101 -0
  86. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyboardLayout.h +35 -0
  87. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCPointerEvent.h +30 -0
  88. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCPointerEventPath.h +43 -0
  89. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSourceCodeRecording.h +42 -0
  90. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSourceCodeTreeNode.h +84 -0
  91. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSourceCodeTreeNodeEnumerator.h +18 -0
  92. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSymbolicationRecord.h +29 -0
  93. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSymbolicatorHolder.h +14 -0
  94. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSynthesizedEventRecord.h +32 -0
  95. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAXClient-Protocol.h +14 -0
  96. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAsyncActivity-Protocol.h +16 -0
  97. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAsyncActivity.h +23 -0
  98. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAutomationTarget-Protocol.h +12 -0
  99. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTDarwinNotificationExpectation.h +23 -0
  100. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTElementSetTransformer-Protocol.h +18 -0
  101. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTKVOExpectation.h +28 -0
  102. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTMetric.h +29 -0
  103. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTNSNotificationExpectation.h +27 -0
  104. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTNSPredicateExpectation.h +24 -0
  105. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTNSPredicateExpectationObject-Protocol.h +15 -0
  106. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTRunnerAutomationSession.h +21 -0
  107. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTRunnerDaemonSession.h +98 -0
  108. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTRunnerIDESession.h +65 -0
  109. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTTestRunSession.h +25 -0
  110. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTTestRunSessionDelegate-Protocol.h +17 -0
  111. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTUIApplicationMonitor-Protocol.h +17 -0
  112. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiter.h +55 -0
  113. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterDelegate-Protocol.h +16 -0
  114. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterDelegatePrivate-Protocol.h +12 -0
  115. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterManagement-Protocol.h +13 -0
  116. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterManager.h +28 -0
  117. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTest.h +34 -0
  118. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestCase.h +102 -0
  119. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestCaseRun.h +18 -0
  120. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestCaseSuite.h +19 -0
  121. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestConfiguration.h +66 -0
  122. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestContext.h +26 -0
  123. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestContextScope.h +19 -0
  124. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestDriver.h +38 -0
  125. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestDriverInterface-Protocol.h +14 -0
  126. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestExpectation.h +39 -0
  127. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestExpectationDelegate-Protocol.h +14 -0
  128. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestExpectationWaiter.h +17 -0
  129. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestLog.h +32 -0
  130. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestManager_IDEInterface-Protocol.h +36 -0
  131. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestManager_ManagerInterface-Protocol.h +54 -0
  132. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestManager_TestsInterface-Protocol.h +12 -0
  133. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestMisuseObserver.h +37 -0
  134. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestObservation-Protocol.h +20 -0
  135. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestObservationCenter.h +36 -0
  136. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestObserver.h +20 -0
  137. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestProbe.h +13 -0
  138. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestRun.h +39 -0
  139. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestSuite.h +48 -0
  140. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestSuiteRun.h +28 -0
  141. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestWaiter.h +14 -0
  142. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIApplication.h +60 -0
  143. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIApplicationImpl.h +38 -0
  144. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIApplicationProcess.h +85 -0
  145. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUICoordinate.h +44 -0
  146. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIDevice.h +30 -0
  147. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElement.h +74 -0
  148. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElementAsynchronousHandlerWrapper.h +19 -0
  149. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElementHitPointCoordinate.h +24 -0
  150. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElementQuery.h +70 -0
  151. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIHitPointResult.h +20 -0
  152. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderNodeFinder.h +65 -0
  153. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderNodeFinderMatch.h +25 -0
  154. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderTimingMessage.h +20 -0
  155. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderUtilities.h +45 -0
  156. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIScreen.h +27 -0
  157. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIScreenDataSource-Protocol.h +19 -0
  158. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCInternalTestRun.h +43 -0
  159. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCKVOExpectationImplementation.h +32 -0
  160. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTDarwinNotificationExpectationImplementation.h +27 -0
  161. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTNSNotificationExpectationImplementation.h +30 -0
  162. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTNSPredicateExpectationImplementation.h +29 -0
  163. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTWaiterImpl.h +41 -0
  164. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestCaseImplementation.h +70 -0
  165. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestCaseInterruptionException.h +13 -0
  166. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestExpectationImplementation.h +40 -0
  167. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestImplementation.h +14 -0
  168. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestObservationCenterImplementation.h +19 -0
  169. package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestSuiteImplementation.h +23 -0
  170. package/drivers/ios/WebDriverAgent/README.md +56 -0
  171. package/drivers/ios/WebDriverAgent/Scripts/build-webdriveragent.mjs +85 -0
  172. package/drivers/ios/WebDriverAgent/Scripts/build.sh +124 -0
  173. package/drivers/ios/WebDriverAgent/Scripts/ci/build-real.sh +24 -0
  174. package/drivers/ios/WebDriverAgent/Scripts/ci/build-sim.sh +15 -0
  175. package/drivers/ios/WebDriverAgent/Scripts/fetch-prebuilt-wda.mjs +69 -0
  176. package/drivers/ios/WebDriverAgent/Scripts/update-wda-version.mjs +42 -0
  177. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/project.pbxproj +4547 -0
  178. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  179. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  180. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationApp.xcscheme +87 -0
  181. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_1.xcscheme +86 -0
  182. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_2.xcscheme +86 -0
  183. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_3.xcscheme +86 -0
  184. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentLib.xcscheme +125 -0
  185. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentLib_tvOS.xcscheme +95 -0
  186. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner-nodebug.xcscheme +87 -0
  187. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner.xcscheme +114 -0
  188. package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner_tvOS.xcscheme +123 -0
  189. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/FBXCElementSnapshotWrapper+Helpers.h +100 -0
  190. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/FBXCElementSnapshotWrapper+Helpers.m +192 -0
  191. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSDictionary+FBUtf8SafeDictionary.h +39 -0
  192. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSDictionary+FBUtf8SafeDictionary.m +87 -0
  193. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSExpression+FBFormat.h +29 -0
  194. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSExpression+FBFormat.m +34 -0
  195. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBVisualLength.h +18 -0
  196. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBVisualLength.m +18 -0
  197. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBXMLSafeString.h +27 -0
  198. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBXMLSafeString.m +30 -0
  199. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCAXClient_iOS+FBSnapshotReqParams.h +25 -0
  200. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCAXClient_iOS+FBSnapshotReqParams.m +82 -0
  201. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCTIssue+FBPatcher.h +17 -0
  202. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCTIssue+FBPatcher.m +35 -0
  203. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBAlert.h +23 -0
  204. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBAlert.m +109 -0
  205. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBFocused.h +23 -0
  206. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.h +171 -0
  207. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m +645 -0
  208. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBQuiescence.h +24 -0
  209. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBQuiescence.m +28 -0
  210. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBTouchAction.h +29 -0
  211. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBTouchAction.m +75 -0
  212. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBUIInterruptions.h +22 -0
  213. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBUIInterruptions.m +31 -0
  214. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplicationProcess+FBQuiescence.h +27 -0
  215. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplicationProcess+FBQuiescence.m +118 -0
  216. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHealthCheck.h +30 -0
  217. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHealthCheck.m +47 -0
  218. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.h +193 -0
  219. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m +388 -0
  220. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.h +38 -0
  221. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.m +68 -0
  222. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBAccessibility.h +29 -0
  223. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBAccessibility.m +50 -0
  224. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCaching.h +19 -0
  225. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCaching.m +36 -0
  226. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBClassChain.h +57 -0
  227. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBClassChain.m +98 -0
  228. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCustomActions.h +27 -0
  229. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCustomActions.m +127 -0
  230. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBFind.h +75 -0
  231. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBFind.m +133 -0
  232. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBForceTouch.h +38 -0
  233. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBForceTouch.m +52 -0
  234. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.h +28 -0
  235. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.m +78 -0
  236. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBMinMax.h +33 -0
  237. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBMinMax.m +75 -0
  238. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.h +45 -0
  239. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.m +58 -0
  240. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBResolve.h +37 -0
  241. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBResolve.m +51 -0
  242. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.h +98 -0
  243. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.m +342 -0
  244. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBSwiping.h +38 -0
  245. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBSwiping.m +56 -0
  246. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.h +35 -0
  247. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.m +71 -0
  248. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTyping.h +64 -0
  249. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTyping.m +199 -0
  250. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUID.h +42 -0
  251. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUID.m +85 -0
  252. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.h +106 -0
  253. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.m +170 -0
  254. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBVisibleFrame.h +35 -0
  255. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBVisibleFrame.m +52 -0
  256. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.h +32 -0
  257. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.m +294 -0
  258. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElementQuery+FBHelpers.h +28 -0
  259. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElementQuery+FBHelpers.m +46 -0
  260. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBAlertViewCommands.h +19 -0
  261. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBAlertViewCommands.m +130 -0
  262. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBCustomCommands.h +19 -0
  263. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBCustomCommands.m +633 -0
  264. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBDebugCommands.h +19 -0
  265. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBDebugCommands.m +81 -0
  266. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBElementCommands.h +19 -0
  267. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBElementCommands.m +705 -0
  268. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBFindElementCommands.h +18 -0
  269. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBFindElementCommands.m +186 -0
  270. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBOrientationCommands.h +19 -0
  271. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBOrientationCommands.m +185 -0
  272. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBScreenshotCommands.h +19 -0
  273. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBScreenshotCommands.m +40 -0
  274. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBSessionCommands.h +19 -0
  275. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBSessionCommands.m +594 -0
  276. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchActionCommands.h +19 -0
  277. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchActionCommands.m +41 -0
  278. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchIDCommands.h +19 -0
  279. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchIDCommands.m +30 -0
  280. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBUnknownCommands.h +19 -0
  281. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBUnknownCommands.m +39 -0
  282. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBVideoCommands.h +19 -0
  283. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBVideoCommands.m +84 -0
  284. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/FBAlert.h +91 -0
  285. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/FBAlert.m +274 -0
  286. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Info.plist +26 -0
  287. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBCommandHandler.h +38 -0
  288. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBCommandStatus.h +80 -0
  289. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBCommandStatus.m +279 -0
  290. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElement.h +95 -0
  291. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementCache.h +61 -0
  292. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementCache.m +100 -0
  293. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementUtils.h +76 -0
  294. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementUtils.m +153 -0
  295. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptionHandler.h +29 -0
  296. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptionHandler.m +58 -0
  297. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptions.h +60 -0
  298. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptions.m +24 -0
  299. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBHTTPStatusCodes.h +581 -0
  300. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponseJSONPayload.h +29 -0
  301. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponseJSONPayload.m +59 -0
  302. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponsePayload.h +74 -0
  303. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponsePayload.m +148 -0
  304. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRoute.h +77 -0
  305. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRoute.m +174 -0
  306. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRouteRequest-Private.h +20 -0
  307. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRouteRequest.h +39 -0
  308. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRouteRequest.m +32 -0
  309. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingContainer.h +56 -0
  310. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingContainer.m +72 -0
  311. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingPromise.h +29 -0
  312. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingPromise.m +31 -0
  313. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingRequest.h +39 -0
  314. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingRequest.m +94 -0
  315. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBSession-Private.h +26 -0
  316. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBSession.h +141 -0
  317. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBSession.m +295 -0
  318. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBTCPSocket.h +65 -0
  319. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBTCPSocket.m +85 -0
  320. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBWebServer.h +52 -0
  321. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBWebServer.m +248 -0
  322. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCAccessibilityElement.h +34 -0
  323. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCAccessibilityElement.m +17 -0
  324. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCDeviceEvent.h +34 -0
  325. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCDeviceEvent.m +42 -0
  326. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshot.h +82 -0
  327. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshot.m +9 -0
  328. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshotWrapper.h +29 -0
  329. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshotWrapper.m +114 -0
  330. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAccessibilityTraits.h +20 -0
  331. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAccessibilityTraits.m +61 -0
  332. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBActiveAppDetectionPoint.h +56 -0
  333. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBActiveAppDetectionPoint.m +87 -0
  334. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAlertsMonitor.h +51 -0
  335. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAlertsMonitor.m +94 -0
  336. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.h +131 -0
  337. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.m +165 -0
  338. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBCapabilities.h +45 -0
  339. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBCapabilities.m +25 -0
  340. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBClassChainQueryParser.h +99 -0
  341. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBClassChainQueryParser.m +666 -0
  342. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBConfiguration.h +403 -0
  343. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBConfiguration.m +711 -0
  344. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBDebugLogDelegateDecorator.h +26 -0
  345. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBDebugLogDelegateDecorator.m +49 -0
  346. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementHelpers.h +29 -0
  347. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementHelpers.m +21 -0
  348. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementTypeTransformer.h +45 -0
  349. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementTypeTransformer.m +149 -0
  350. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBErrorBuilder.h +64 -0
  351. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBErrorBuilder.m +75 -0
  352. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBFailureProofTestCase.h +19 -0
  353. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBFailureProofTestCase.m +68 -0
  354. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageProcessor.h +55 -0
  355. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageProcessor.m +170 -0
  356. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageUtils.h +25 -0
  357. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageUtils.m +80 -0
  358. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBKeyboard.h +37 -0
  359. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBKeyboard.m +123 -0
  360. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBLogger.h +32 -0
  361. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBLogger.m +47 -0
  362. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMacros.h +57 -0
  363. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMathUtils.h +36 -0
  364. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMathUtils.m +63 -0
  365. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMjpegServer.h +24 -0
  366. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMjpegServer.m +151 -0
  367. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBNotificationsHelper.h +37 -0
  368. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBNotificationsHelper.m +29 -0
  369. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBPasteboard.h +40 -0
  370. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBPasteboard.m +172 -0
  371. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBProtocolHelpers.h +46 -0
  372. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBProtocolHelpers.m +144 -0
  373. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBReflectionUtils.h +23 -0
  374. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBReflectionUtils.m +31 -0
  375. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRunLoopSpinner.h +77 -0
  376. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRunLoopSpinner.m +94 -0
  377. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRuntimeUtils.h +79 -0
  378. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRuntimeUtils.m +112 -0
  379. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreen.h +22 -0
  380. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreen.m +21 -0
  381. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreenshot.h +44 -0
  382. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreenshot.m +227 -0
  383. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBSettings.h +48 -0
  384. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBSettings.m +42 -0
  385. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBTVNavigationTracker-Private.h +27 -0
  386. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBTVNavigationTracker.h +52 -0
  387. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBTVNavigationTracker.m +142 -0
  388. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBUnattachedAppLauncher.h +26 -0
  389. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBUnattachedAppLauncher.m +21 -0
  390. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsHelpers.h +42 -0
  391. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsHelpers.m +119 -0
  392. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.h +19 -0
  393. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m +885 -0
  394. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBWebServerParams.h +22 -0
  395. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBWebServerParams.m +23 -0
  396. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCAXClientProxy.h +49 -0
  397. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCAXClientProxy.m +119 -0
  398. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.h +45 -0
  399. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.m +359 -0
  400. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCodeCompatibility.h +80 -0
  401. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCodeCompatibility.m +99 -0
  402. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXMLGenerationOptions.h +45 -0
  403. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXMLGenerationOptions.m +25 -0
  404. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXPath-Private.h +56 -0
  405. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXPath.h +59 -0
  406. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXPath.m +979 -0
  407. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCache.h +66 -0
  408. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCache.m +146 -0
  409. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCacheNode.h +43 -0
  410. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCacheNode.m +51 -0
  411. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/NSPredicate+FBFormat.h +42 -0
  412. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/NSPredicate+FBFormat.m +69 -0
  413. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCTestPrivateSymbols.h +78 -0
  414. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCTestPrivateSymbols.m +107 -0
  415. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCUIApplicationProcessDelay.h +37 -0
  416. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCUIApplicationProcessDelay.m +83 -0
  417. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncSocket.h +1220 -0
  418. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncSocket.m +8812 -0
  419. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncUdpSocket.h +1036 -0
  420. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncUdpSocket.m +5868 -0
  421. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDNumber.h +12 -0
  422. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDNumber.m +88 -0
  423. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDRange.h +56 -0
  424. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDRange.m +106 -0
  425. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPConnection.h +107 -0
  426. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPConnection.m +2238 -0
  427. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPLogging.h +122 -0
  428. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPMessage.h +53 -0
  429. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPMessage.m +357 -0
  430. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPResponse.h +149 -0
  431. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPServer.h +126 -0
  432. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPServer.m +372 -0
  433. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/LICENSE +18 -0
  434. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPDataResponse.h +13 -0
  435. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPDataResponse.m +83 -0
  436. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPErrorResponse.h +9 -0
  437. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPErrorResponse.m +40 -0
  438. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/HTTPResponseProxy.h +13 -0
  439. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/HTTPResponseProxy.m +84 -0
  440. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/LICENSE +19 -0
  441. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/Route.h +18 -0
  442. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/Route.m +11 -0
  443. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteRequest.h +16 -0
  444. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteRequest.m +50 -0
  445. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteResponse.h +20 -0
  446. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteResponse.m +66 -0
  447. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingConnection.h +5 -0
  448. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingConnection.m +142 -0
  449. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingHTTPServer.h +55 -0
  450. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingHTTPServer.m +303 -0
  451. package/drivers/ios/WebDriverAgent/WebDriverAgentLib/WebDriverAgentLib.h +59 -0
  452. package/drivers/ios/WebDriverAgent/WebDriverAgentRunner/Info.plist +30 -0
  453. package/drivers/ios/WebDriverAgent/WebDriverAgentRunner/UITestingUITests.m +58 -0
  454. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/AppDelegate.h +14 -0
  455. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/AppDelegate.m +38 -0
  456. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBAlertViewController.h +14 -0
  457. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBAlertViewController.m +82 -0
  458. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBNavigationController.h +12 -0
  459. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBNavigationController.m +25 -0
  460. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBScrollViewController.h +13 -0
  461. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBScrollViewController.m +39 -0
  462. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBTableDataSource.h +16 -0
  463. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBTableDataSource.m +35 -0
  464. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/SceneDelegate.h +20 -0
  465. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/SceneDelegate.m +48 -0
  466. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchSpotView.h +17 -0
  467. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchSpotView.m +28 -0
  468. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchViewController.h +23 -0
  469. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchViewController.m +29 -0
  470. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchableView.h +29 -0
  471. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchableView.m +108 -0
  472. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/ViewController.h +12 -0
  473. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/ViewController.m +88 -0
  474. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Info.plist +71 -0
  475. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Resources/Base.lproj/Main.storyboard +620 -0
  476. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/main.m +15 -0
  477. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBAlertTests.m +194 -0
  478. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBAutoAlertsHandlerTests.m +73 -0
  479. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBConfigurationTests.m +38 -0
  480. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBElementAttributeTests.m +264 -0
  481. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBElementSwipingTests.m +127 -0
  482. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBElementVisibilityTests.m +73 -0
  483. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBFailureProofTestCaseTests.m +41 -0
  484. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBForceTouchTests.m +85 -0
  485. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBImageProcessorTests.m +82 -0
  486. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBIntegrationTestCase.h +76 -0
  487. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBIntegrationTestCase.m +140 -0
  488. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBKeyboardTests.m +61 -0
  489. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBPasteboardTests.m +91 -0
  490. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBPickerWheelSelectTests.m +55 -0
  491. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBSafariAlertTests.m +73 -0
  492. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBScreenTests.m +31 -0
  493. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBScrollingTests.m +126 -0
  494. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBSessionIntegrationTests.m +131 -0
  495. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBTapTest.m +103 -0
  496. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBTestMacros.h +33 -0
  497. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBTypingTest.m +68 -0
  498. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBVideoRecordingTests.m +64 -0
  499. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBW3CMultiTouchActionsIntegrationTests.m +124 -0
  500. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBW3CTouchActionsIntegrationTests.m +491 -0
  501. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBW3CTypeActionsTests.m +184 -0
  502. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBXPathIntegrationTests.m +157 -0
  503. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/Info.plist +24 -0
  504. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCElementSnapshotHelperTests.m +211 -0
  505. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCElementSnapshotHitPointTests.m +30 -0
  506. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIApplicationHelperTests.m +162 -0
  507. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIDeviceHealthCheckTests.m +27 -0
  508. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIDeviceHelperTests.m +220 -0
  509. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIDeviceRotationTests.m +84 -0
  510. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIElementAttributesTests.m +248 -0
  511. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIElementFBFindTests.m +472 -0
  512. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIElementHelperIntegrationTests.m +51 -0
  513. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCElementSnapshotDouble.h +16 -0
  514. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCElementSnapshotDouble.m +110 -0
  515. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIApplicationDouble.h +17 -0
  516. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIApplicationDouble.m +66 -0
  517. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.h +51 -0
  518. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.m +104 -0
  519. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBClassChainTests.m +313 -0
  520. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBConfigurationTests.m +60 -0
  521. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBElementCacheTests.m +124 -0
  522. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBElementTypeTransformerTests.m +45 -0
  523. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBElementUtilitiesTests.m +36 -0
  524. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBErrorBuilderTests.m +61 -0
  525. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBExceptionHandlerTests.m +59 -0
  526. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBLRUCacheTests.m +127 -0
  527. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBMathUtilsTests.m +113 -0
  528. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBProtocolHelpersTests.m +81 -0
  529. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBRouteTests.m +129 -0
  530. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBRunLoopSpinnerTests.m +98 -0
  531. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBRuntimeUtilsTests.m +45 -0
  532. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBSDKVersionTests.m +66 -0
  533. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBSessionTests.m +67 -0
  534. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBXMLSafeStringTests.m +35 -0
  535. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBXPathTests.m +155 -0
  536. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Info.plist +24 -0
  537. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/NSDictionaryFBUtf8SafeTests.m +34 -0
  538. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/NSExpressionFBFormatTests.m +60 -0
  539. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/NSPredicateFBFormatTests.m +72 -0
  540. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/XCUIElementHelpersTests.m +50 -0
  541. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/Doubles/XCUIElementDouble.h +46 -0
  542. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/Doubles/XCUIElementDouble.m +80 -0
  543. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/FBTVNavigationTrackerTests.m +86 -0
  544. package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/Info.plist +24 -0
  545. package/drivers/ios/WebDriverAgent/eslint.config.mjs +13 -0
  546. package/drivers/ios/WebDriverAgent/index.ts +7 -0
  547. package/drivers/ios/WebDriverAgent/lib/check-dependencies.ts +34 -0
  548. package/drivers/ios/WebDriverAgent/lib/constants.ts +18 -0
  549. package/drivers/ios/WebDriverAgent/lib/logger.ts +3 -0
  550. package/drivers/ios/WebDriverAgent/lib/no-session-proxy.ts +25 -0
  551. package/drivers/ios/WebDriverAgent/lib/types.ts +139 -0
  552. package/drivers/ios/WebDriverAgent/lib/utils.ts +342 -0
  553. package/drivers/ios/WebDriverAgent/lib/webdriveragent.ts +715 -0
  554. package/drivers/ios/WebDriverAgent/lib/xcodebuild.ts +488 -0
  555. package/drivers/ios/WebDriverAgent/package.json +102 -0
  556. package/drivers/ios/WebDriverAgent/test/functional/desired.ts +7 -0
  557. package/drivers/ios/WebDriverAgent/test/functional/helpers/simulator.ts +34 -0
  558. package/drivers/ios/WebDriverAgent/test/functional/webdriveragent-e2e-specs.ts +119 -0
  559. package/drivers/ios/WebDriverAgent/test/unit/utils-specs.ts +157 -0
  560. package/drivers/ios/WebDriverAgent/test/unit/webdriveragent-specs.ts +446 -0
  561. package/drivers/ios/WebDriverAgent/tsconfig.json +16 -0
  562. package/package.json +16 -0
@@ -0,0 +1,197 @@
1
+ //
2
+ // RunnerTests.swift
3
+ // AgentDeviceRunnerUITests
4
+ //
5
+ // Created by Michał Pierzchała on 30/01/2026.
6
+ //
7
+
8
+ import XCTest
9
+ import Network
10
+ #if canImport(UIKit)
11
+ import UIKit
12
+ typealias RunnerImage = UIImage
13
+ #elseif canImport(AppKit)
14
+ import AppKit
15
+ typealias RunnerImage = NSImage
16
+ #endif
17
+
18
+ final class RunnerTests: XCTestCase {
19
+ enum RunnerErrorDomain {
20
+ static let general = "AgentDeviceRunner"
21
+ static let exception = "AgentDeviceRunner.NSException"
22
+ }
23
+
24
+ enum RunnerErrorCode {
25
+ static let noResponseFromMainThread = 1
26
+ static let commandReturnedNoResponse = 2
27
+ static let mainThreadExecutionTimedOut = 3
28
+ static let objcException = 1
29
+ }
30
+
31
+ static let springboardBundleId = "com.apple.springboard"
32
+ static let defaultRecordingFps: Int32 = 15
33
+ static let maxListenerRetries = 5
34
+ static let listenerRetryDelay: TimeInterval = 1.0
35
+ var listener: NWListener?
36
+ var listenerRetriesRemaining = RunnerTests.maxListenerRetries
37
+ var doneExpectation: XCTestExpectation?
38
+ let app = XCUIApplication()
39
+ lazy var springboard = XCUIApplication(bundleIdentifier: Self.springboardBundleId)
40
+ var currentApp: XCUIApplication?
41
+ var currentBundleId: String?
42
+ let maxRequestBytes = 2 * 1024 * 1024
43
+ let maxSnapshotElements = 600
44
+ let fastSnapshotLimit = 300
45
+ let mainThreadExecutionTimeout: TimeInterval = 30
46
+ let appExistenceTimeout: TimeInterval = 30
47
+ let retryCooldown: TimeInterval = 0.2
48
+ // Local edit (not in upstream agent-device): post-snapshot/post-activate
49
+ // stabilization windows shortened from 0.2 / 0.25 s. Upstream value gives
50
+ // an AI-driven runner time for layout to settle between a read and the
51
+ // next interaction; maestro-runner's snapshot is part of selector
52
+ // resolution that's immediately followed by an interaction at a known
53
+ // coordinate, so a 50ms window is enough to absorb any in-flight UIKit
54
+ // layout pass without paying for hypothetical agent latency.
55
+ let postSnapshotInteractionDelay: TimeInterval = 0.05
56
+ let firstInteractionAfterActivateDelay: TimeInterval = 0.1
57
+ let scrollInteractionIdleTimeoutDefault: TimeInterval = 1.0
58
+ let tvRemoteDoublePressDelayDefault: TimeInterval = 0.0
59
+ let minRecordingFps = 1
60
+ let maxRecordingFps = 120
61
+ let minRecordingQuality = 5
62
+ let maxRecordingQuality = 10
63
+ var needsPostSnapshotInteractionDelay = false
64
+ var needsFirstInteractionDelay = false
65
+ // Local extension: cache the most recent idleCheck screenshot so
66
+ // subsequent calls in the same wait loop only need ONE fresh capture.
67
+ var lastIdleScreenshot: (image: RunnerImage, capturedAt: Date)?
68
+ static let idleScreenshotCacheTTL: TimeInterval = 1.0
69
+ var activeRecording: ScreenRecorder?
70
+ let interactiveTypes: Set<XCUIElement.ElementType> = [
71
+ .button,
72
+ .cell,
73
+ .checkBox,
74
+ .collectionView,
75
+ .link,
76
+ .menuItem,
77
+ .picker,
78
+ .searchField,
79
+ .segmentedControl,
80
+ .slider,
81
+ .stepper,
82
+ .switch,
83
+ .tabBar,
84
+ .textField,
85
+ .secureTextField,
86
+ .textView
87
+ ]
88
+ // Keep blocker actions narrow to avoid false positives from generic hittable containers.
89
+ let actionableTypes: Set<XCUIElement.ElementType> = [
90
+ .button,
91
+ .cell,
92
+ .link,
93
+ .menuItem,
94
+ .checkBox,
95
+ .switch
96
+ ]
97
+
98
+ // MARK: - XCTest Entry
99
+
100
+ override func setUp() {
101
+ continueAfterFailure = true
102
+ // Override XCTest's clipped snapshot request params so element trees are
103
+ // complete on deep React Native hierarchies (matches WDA / devicekit-ios).
104
+ DLApplyCompleteSnapshotParams()
105
+ }
106
+
107
+ @MainActor
108
+ func testCommand() throws {
109
+ doneExpectation = expectation(description: "agent-device command handled")
110
+ NSLog("AGENT_DEVICE_RUNNER_HEADLESS_STARTUP=1")
111
+ let queue = DispatchQueue(label: "agent-device.runner")
112
+ let desiredPort = RunnerEnv.resolvePort()
113
+ NSLog("AGENT_DEVICE_RUNNER_DESIRED_PORT=%d", desiredPort)
114
+ startListener(desiredPort: desiredPort, queue: queue)
115
+
116
+ guard let expectation = doneExpectation else {
117
+ XCTFail("runner expectation was not initialized")
118
+ return
119
+ }
120
+ NSLog("AGENT_DEVICE_RUNNER_WAITING")
121
+ let result = XCTWaiter.wait(for: [expectation], timeout: 24 * 60 * 60)
122
+ NSLog("AGENT_DEVICE_RUNNER_WAIT_RESULT=%@", String(describing: result))
123
+ if result != .completed {
124
+ XCTFail("runner wait ended with \(result)")
125
+ }
126
+ }
127
+
128
+ private func startListener(desiredPort: UInt16, queue: DispatchQueue) {
129
+ do {
130
+ let newListener = try makeRunnerListener(desiredPort: desiredPort)
131
+ listener = newListener
132
+ newListener.stateUpdateHandler = { [weak self] state in
133
+ switch state {
134
+ case .ready:
135
+ NSLog("AGENT_DEVICE_RUNNER_LISTENER_READY")
136
+ // A working listener proves recovery — restore the full retry
137
+ // budget so an occasional network-stack hiccup hours apart
138
+ // never accumulates into an exit.
139
+ self?.listenerRetriesRemaining = Self.maxListenerRetries
140
+ if let listenerPort = self?.listener?.port {
141
+ NSLog("AGENT_DEVICE_RUNNER_PORT=%d", listenerPort.rawValue)
142
+ } else {
143
+ NSLog("AGENT_DEVICE_RUNNER_PORT_NOT_SET")
144
+ }
145
+ case .failed(let error):
146
+ self?.handleListenerFailure(error, desiredPort: desiredPort, queue: queue)
147
+ default:
148
+ break
149
+ }
150
+ }
151
+ newListener.newConnectionHandler = { [weak self] conn in
152
+ conn.start(queue: queue)
153
+ self?.handle(connection: conn)
154
+ }
155
+ newListener.start(queue: queue)
156
+ } catch {
157
+ handleListenerFailure(error, desiredPort: desiredPort, queue: queue)
158
+ }
159
+ }
160
+
161
+ // The listener failing used to end the session immediately, so any
162
+ // transient failure in the sim's network stack (whose daemons are
163
+ // known to crash-loop on some runtime/Xcode combinations) silently
164
+ // killed the runner mid-session. Rebind on the same port instead —
165
+ // the host only knows this port — and exit only once the budget is
166
+ // exhausted, with the reason in the log for post-mortems.
167
+ private func handleListenerFailure(_ error: Error, desiredPort: UInt16, queue: DispatchQueue) {
168
+ NSLog(
169
+ "AGENT_DEVICE_RUNNER_LISTENER_FAILED=%@ retriesLeft=%d",
170
+ String(describing: error), listenerRetriesRemaining)
171
+ listener?.cancel()
172
+ listener = nil
173
+ guard listenerRetriesRemaining > 0 else {
174
+ NSLog("AGENT_DEVICE_RUNNER_EXIT reason=listener_failed error=%@", String(describing: error))
175
+ doneExpectation?.fulfill()
176
+ return
177
+ }
178
+ listenerRetriesRemaining -= 1
179
+ queue.asyncAfter(deadline: .now() + Self.listenerRetryDelay) { [weak self] in
180
+ self?.startListener(desiredPort: desiredPort, queue: queue)
181
+ }
182
+ }
183
+
184
+ private func makeRunnerListener(desiredPort: UInt16) throws -> NWListener {
185
+ if desiredPort > 0, let port = NWEndpoint.Port(rawValue: desiredPort) {
186
+ #if os(macOS)
187
+ let parameters = NWParameters.tcp
188
+ parameters.allowLocalEndpointReuse = true
189
+ parameters.requiredLocalEndpoint = .hostPort(host: "127.0.0.1", port: port)
190
+ return try NWListener(using: parameters)
191
+ #else
192
+ return try NWListener(using: .tcp, on: port)
193
+ #endif
194
+ }
195
+ return try NWListener(using: .tcp)
196
+ }
197
+ }
@@ -0,0 +1,28 @@
1
+ #ifndef SnapshotParams_h
2
+ #define SnapshotParams_h
3
+
4
+ #import <Foundation/Foundation.h>
5
+
6
+ NS_ASSUME_NONNULL_BEGIN
7
+
8
+ /**
9
+ * Overrides XCTest's accessibility-snapshot request parameters so
10
+ * `XCUIElement.snapshot()` returns a complete tree instead of XCTest's
11
+ * silently-clipped default.
12
+ *
13
+ * XCTest's `-[XCAXClient_iOS defaultParameters]` nominally defaults maxDepth /
14
+ * maxChildren / maxArrayCount to INT_MAX, but in practice the tree is clipped
15
+ * and elements behind modal views are dropped. This swizzles defaultParameters
16
+ * to re-assert generous limits and set `snapshotKeyHonorModalViews=0`, which is
17
+ * exactly what WebDriverAgent and mobile-next/devicekit-ios do. It is the fix
18
+ * for deep React Native trees where native shadow views and modal-obscured
19
+ * content were missing from our snapshot.
20
+ *
21
+ * Idempotent and safe: a no-op if XCAXClient_iOS is unavailable. Call once at
22
+ * runner startup, before the first snapshot.
23
+ */
24
+ void DLApplyCompleteSnapshotParams(void);
25
+
26
+ NS_ASSUME_NONNULL_END
27
+
28
+ #endif /* SnapshotParams_h */
@@ -0,0 +1,49 @@
1
+ #import "SnapshotParams.h"
2
+
3
+ #import <objc/runtime.h>
4
+
5
+ // Original implementation of -[XCAXClient_iOS defaultParameters], captured when
6
+ // we swap in our own so we can start from XCTest's real defaults and only
7
+ // override the keys we care about.
8
+ static NSDictionary *(*dl_original_defaultParameters)(id, SEL) = NULL;
9
+
10
+ // Bounded generous depth. INT_MAX invites runaway cost on pathological trees;
11
+ // 60 matches devicekit-ios and is deep enough for real React Native hierarchies
12
+ // while still defeating XCTest's default clipping.
13
+ static const int kDLSnapshotMaxDepth = 60;
14
+
15
+ static id dl_swizzled_defaultParameters(id self, SEL _cmd) {
16
+ NSDictionary *original =
17
+ dl_original_defaultParameters ? dl_original_defaultParameters(self, _cmd) : @{};
18
+ NSMutableDictionary *merged =
19
+ [NSMutableDictionary dictionaryWithDictionary:(original ?: @{})];
20
+ merged[@"maxDepth"] = @(kDLSnapshotMaxDepth);
21
+ merged[@"maxChildren"] = @(INT_MAX);
22
+ merged[@"maxArrayCount"] = @(INT_MAX);
23
+ // 0 == do NOT honor modal views, i.e. keep elements behind a modal/dialog in
24
+ // the snapshot. Our own hittable/occlusion pass still marks obscured elements
25
+ // as non-hittable, so this only adds completeness.
26
+ merged[@"snapshotKeyHonorModalViews"] = @0;
27
+ return [merged copy];
28
+ }
29
+
30
+ void DLApplyCompleteSnapshotParams(void) {
31
+ static dispatch_once_t once;
32
+ dispatch_once(&once, ^{
33
+ Class cls = NSClassFromString(@"XCAXClient_iOS");
34
+ if (cls == Nil) {
35
+ NSLog(@"DL_SNAPSHOT_PARAMS: XCAXClient_iOS unavailable; snapshot params unchanged");
36
+ return;
37
+ }
38
+ Method method =
39
+ class_getInstanceMethod(cls, NSSelectorFromString(@"defaultParameters"));
40
+ if (method == NULL) {
41
+ NSLog(@"DL_SNAPSHOT_PARAMS: -defaultParameters unavailable; snapshot params unchanged");
42
+ return;
43
+ }
44
+ dl_original_defaultParameters = (NSDictionary * (*)(id, SEL))
45
+ method_setImplementation(method, (IMP)dl_swizzled_defaultParameters);
46
+ NSLog(@"DL_SNAPSHOT_PARAMS: applied (maxDepth=%d, maxChildren=INT_MAX, honorModalViews=0)",
47
+ kDLSnapshotMaxDepth);
48
+ });
49
+ }
@@ -0,0 +1,17 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ NS_ASSUME_NONNULL_BEGIN
4
+
5
+ // Local extension (not in upstream agent-device). Synthesizes typing events
6
+ // via the private XCSynthesizedEventRecord + XCPointerEventPath +
7
+ // XCUIDevice.eventSynthesizer pathway — the same mechanism WebDriverAgent
8
+ // uses for FBTypeText. Unlike XCUIElement.typeText / XCUIApplication.typeText,
9
+ // this does NOT require XCUIElement.hasKeyboardFocus to be true. That is
10
+ // what makes it work for RN SecureTextField on iOS Simulator, where the
11
+ // keyboard appears visually but hasKeyboardFocus stays false and the public
12
+ // typeText APIs silently drop characters.
13
+ //
14
+ // Returns YES on success. Writes a NSError into *outError on failure.
15
+ BOOL DLSendSyntheticTyping(NSString *text, NSUInteger typingSpeed, NSError * _Nullable * _Nullable outError);
16
+
17
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,86 @@
1
+ #import "SyntheticTyping.h"
2
+ #import <UIKit/UIKit.h>
3
+ #import "PrivateHeaders/XCTest/XCSynthesizedEventRecord.h"
4
+ #import "PrivateHeaders/XCTest/XCPointerEventPath.h"
5
+ #import "PrivateHeaders/XCTest/XCUIDevice.h"
6
+
7
+ BOOL DLSendSyntheticTyping(NSString *text, NSUInteger typingSpeed, NSError * _Nullable * _Nullable outError) {
8
+ if (text.length == 0) {
9
+ return YES;
10
+ }
11
+ if (typingSpeed == 0) {
12
+ typingSpeed = 60; // matches WDA default
13
+ }
14
+
15
+ XCSynthesizedEventRecord *record =
16
+ [[XCSynthesizedEventRecord alloc] initWithName:@"DLSyntheticTyping"];
17
+ XCPointerEventPath *path = [[XCPointerEventPath alloc] initForTextInput];
18
+ [path typeText:text atOffset:0.0 typingSpeed:typingSpeed shouldRedact:NO];
19
+ [record addPointerEventPath:path];
20
+
21
+ id device = [XCUIDevice sharedDevice];
22
+ id synthesizer = [device valueForKey:@"eventSynthesizer"];
23
+ if (synthesizer == nil) {
24
+ if (outError) {
25
+ *outError = [NSError errorWithDomain:@"DevicelabIOSRunner"
26
+ code:1
27
+ userInfo:@{NSLocalizedDescriptionKey:
28
+ @"XCUIDevice.eventSynthesizer unavailable"}];
29
+ }
30
+ return NO;
31
+ }
32
+
33
+ __block BOOL done = NO;
34
+ __block NSError *innerError = nil;
35
+
36
+ SEL sel = NSSelectorFromString(@"synthesizeEvent:completion:");
37
+ if (![synthesizer respondsToSelector:sel]) {
38
+ if (outError) {
39
+ *outError = [NSError errorWithDomain:@"DevicelabIOSRunner"
40
+ code:2
41
+ userInfo:@{NSLocalizedDescriptionKey:
42
+ @"eventSynthesizer does not support synthesizeEvent:completion:"}];
43
+ }
44
+ return NO;
45
+ }
46
+
47
+ NSMethodSignature *sig = [synthesizer methodSignatureForSelector:sel];
48
+ NSInvocation *inv = [NSInvocation invocationWithMethodSignature:sig];
49
+ inv.target = synthesizer;
50
+ inv.selector = sel;
51
+ XCSynthesizedEventRecord *recordArg = record;
52
+ [inv setArgument:&recordArg atIndex:2];
53
+ void (^completion)(BOOL, NSError *) = ^(BOOL success, NSError *invokeError) {
54
+ if (invokeError != nil) {
55
+ innerError = invokeError;
56
+ }
57
+ done = YES;
58
+ };
59
+ [inv setArgument:&completion atIndex:3];
60
+ [inv invoke];
61
+
62
+ // Spin the run loop until the completion handler fires.
63
+ NSDate *deadline = [NSDate dateWithTimeIntervalSinceNow:30.0];
64
+ while (!done && [deadline timeIntervalSinceNow] > 0) {
65
+ [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
66
+ beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.05]];
67
+ }
68
+
69
+ if (!done) {
70
+ if (outError) {
71
+ *outError = [NSError errorWithDomain:@"DevicelabIOSRunner"
72
+ code:3
73
+ userInfo:@{NSLocalizedDescriptionKey:
74
+ @"synthesizeEvent timed out"}];
75
+ }
76
+ return NO;
77
+ }
78
+
79
+ if (innerError != nil) {
80
+ if (outError) {
81
+ *outError = innerError;
82
+ }
83
+ return NO;
84
+ }
85
+ return YES;
86
+ }
@@ -0,0 +1,258 @@
1
+ # devicelab-ios-runner — Wire Protocol v1
2
+
3
+ Internal HTTP+JSON protocol between maestro-runner's Go consumer (`pkg/driver/devicelab_ios/`) and the on-device XCUITest runner.
4
+
5
+ **Status:** v1 draft, no consumers yet. Free to evolve.
6
+ **Owners:** maestro-runner team.
7
+ **Stability:** owned outright. The protocol bumps on breaking change; see [Versioning](#versioning).
8
+
9
+ ## Design rules
10
+
11
+ These are non-negotiable. If a change conflicts with one of these, the change is wrong.
12
+
13
+ 1. **Stateless app binding.** Every command carries `appBundleId`. Runner caches `XCUIApplication(bundleIdentifier:)` until it changes. No session lifecycle.
14
+ 2. **No element IDs / element handles.** Operations target either coordinates or fresh selectors. Eliminates stale-element bugs and WebDriver session state entirely.
15
+ 3. **Full hierarchy, no filtering.** Snapshot returns every node with every accessibility attribute. No `interactiveOnly` / `compact` / occlusion / element caps. Flow selectors run on the Go side against the full tree.
16
+ 4. **Inline binary payloads.** Screenshots and recordings return base64 bytes in the JSON envelope. No file-on-device + fetch-back round trips.
17
+ 5. **Caller-chosen port.** Go side picks the port and injects via env var. Runner never picks a random port.
18
+ 6. **Both path and direction gestures.** Swipe / scroll accept either `(x, y, x2, y2, durationMs)` or `(direction, percent)`.
19
+ 7. **Every command times out.** Hard 30s ceiling enforced server-side. Hung commands cannot wedge the runner.
20
+
21
+ ## Transport
22
+
23
+ | Field | Value |
24
+ |---|---|
25
+ | Protocol | HTTP/1.1 over TCP |
26
+ | Host | `127.0.0.1` (simulator) or tunneled device port |
27
+ | Port | Caller-injected via `DEVICELAB_IOS_RUNNER_PORT` env var |
28
+ | Path | `POST /command` |
29
+ | Content-Type | `application/json; charset=utf-8` |
30
+ | Max request size | 4 MB (covers any reasonable `type` text payload) |
31
+ | Connection | Keep-alive supported; runner is single-threaded so requests serialize |
32
+
33
+ The runner also exposes `GET /health` (no JSON body, returns `200` once ready) for the Go side to await readiness without sending a command.
34
+
35
+ ## Port allocation
36
+
37
+ - Go side picks a free ephemeral port (`net.Listen("tcp", "127.0.0.1:0")`, immediately close, reuse port number).
38
+ - Inject the port into the runner via the `.xctestrun` `EnvironmentVariables.DEVICELAB_IOS_RUNNER_PORT` before invoking `xcodebuild test-without-building`.
39
+ - For real devices: same port on device, plus `iproxy <hostPort>:<devicePort>` (or equivalent via `pymobiledevice3`) so `127.0.0.1:<hostPort>` reaches the runner.
40
+
41
+ ## Request envelope
42
+
43
+ ```jsonc
44
+ {
45
+ "command": "<commandType>",
46
+ "appBundleId": "<bundle-id>", // required for app-targeted commands
47
+ // ... command-specific fields
48
+ }
49
+ ```
50
+
51
+ Unknown fields are ignored. Missing required fields produce `INVALID_ARGUMENT`.
52
+
53
+ ## Response envelope
54
+
55
+ ```jsonc
56
+ {
57
+ "ok": true,
58
+ "data": { /* command-specific */ }
59
+ }
60
+ ```
61
+
62
+ ```jsonc
63
+ {
64
+ "ok": false,
65
+ "error": {
66
+ "code": "ELEMENT_NOT_FOUND",
67
+ "message": "human-readable",
68
+ "details": { /* optional structured context */ }
69
+ }
70
+ }
71
+ ```
72
+
73
+ `data` is always an object (never an array or scalar). `error` is present iff `ok === false`.
74
+
75
+ ### Error codes
76
+
77
+ | Code | When |
78
+ |---|---|
79
+ | `INVALID_ARGUMENT` | Missing/invalid request field |
80
+ | `UNSUPPORTED_OPERATION` | Command exists but is not available in this build/platform |
81
+ | `APP_NOT_RUNNING` | `appBundleId` not foregrounded and could not be activated |
82
+ | `ELEMENT_NOT_FOUND` | Selector returned zero matches |
83
+ | `ELEMENT_NOT_INTERACTABLE` | Element matched but is not visible / enabled / hittable |
84
+ | `ALERT_PRESENT` | A system alert blocked the operation |
85
+ | `TIMEOUT` | Server-side 30s ceiling exceeded |
86
+ | `XCUI_EXCEPTION` | Underlying XCUITest threw an ObjC exception (retried once before this) |
87
+ | `RUNNER_INTERNAL` | Bug in the runner |
88
+
89
+ ## Versioning
90
+
91
+ - Protocol version is `1`. Single integer. Bumped on any breaking change to existing command shapes or response semantics.
92
+ - `GET /version` returns `{"protocolVersion": 1, "runnerBuild": "<sha-or-tag>"}`.
93
+ - The Go client asserts on connect that `protocolVersion` matches the version it was built against. Mismatch = hard error, no version negotiation.
94
+ - Adding new optional fields or new commands does not bump the version.
95
+
96
+ ## Command surface
97
+
98
+ ### Lifecycle
99
+
100
+ | Command | Inputs | Returns | Notes |
101
+ |---|---|---|---|
102
+ | `appLaunch` | `appBundleId`, `arguments[]?`, `environment{}?` | `{ pid, launched: true }` | `XCUIApplication(bundleIdentifier:).launch()`. Replaces cached `currentApp`. |
103
+ | `appActivate` | `appBundleId` | `{ pid, activated: true }` | Foreground without relaunch. |
104
+ | `appTerminate` | `appBundleId` | `{ terminated: true }` | |
105
+ | `appState` | `appBundleId` | `{ state: "running"|"notRunning"|"runningBackground" }` | |
106
+ | `appCurrent` | (none) | `{ appBundleId?, pid? }` | Returns currently foregrounded app. |
107
+ | `shutdown` | (none) | `{ shuttingDown: true }` | Runner exits cleanly. |
108
+ | `ping` | (none) | `{ uptimeMs }` | Round-trip baseline. |
109
+
110
+ ### Snapshot
111
+
112
+ | Command | Inputs | Returns |
113
+ |---|---|---|
114
+ | `snapshot` | `appBundleId?` | `{ nodes: [SnapshotNode] }` |
115
+ | `screenSize` | `appBundleId?` | `{ width, height, scale }` |
116
+
117
+ `snapshot` always returns the full tree. If `appBundleId` is omitted, snapshots the currently foregrounded app via `XCUIApplication()`. **No filtering, no caps, no occlusion computation.**
118
+
119
+ #### SnapshotNode
120
+
121
+ Flat array; tree reconstructed via `parentIndex`. Every node carries every available accessibility field — Go-side selectors decide what to match on.
122
+
123
+ ```jsonc
124
+ {
125
+ "index": 12,
126
+ "parentIndex": 5, // omitted for root
127
+ "depth": 3,
128
+ "type": "XCUIElementTypeButton", // raw XCUIElementType string
129
+ "identifier": "login-button", // .identifier — accessibility ID
130
+ "label": "Sign In", // .label
131
+ "value": "", // .value (e.g. text field contents)
132
+ "placeholderValue": "", // .placeholderValue
133
+ "rect": { "x": 32.0, "y": 624.6, "width": 338.0, "height": 50.0 },
134
+ "enabled": false,
135
+ "displayed": true, // visible in the viewport (rect inside screen bounds, not occluded by parent clipping)
136
+ "selected": false,
137
+ "focused": false,
138
+ "hittable": true // .isHittable
139
+ }
140
+ ```
141
+
142
+ **Deltas from agent-device's runner:** adds `identifier`, `value`, `placeholderValue`, `selected`, `focused`, `displayed`. Drops `interactiveOnly`/`compact`/occlusion logic.
143
+
144
+ ### Find
145
+
146
+ These are conveniences when the Go side already knows what it wants and does not need the full snapshot. They return one or more `SnapshotNode`s. **No element ID is retained** — the returned bounds are the caller's only handle.
147
+
148
+ | Command | Inputs | Returns |
149
+ |---|---|---|
150
+ | `findByIdentifier` | `appBundleId`, `identifier` | `{ found: bool, node?: SnapshotNode }` |
151
+ | `findByLabel` | `appBundleId`, `label`, `exact?: bool` | `{ found: bool, node?: SnapshotNode }` |
152
+ | `findByPredicate` | `appBundleId`, `predicate` | `{ found: bool, nodes: [SnapshotNode] }` |
153
+ | `findByClassChain` | `appBundleId`, `query` | `{ found: bool, nodes: [SnapshotNode] }` |
154
+
155
+ Selector strategies match WDA's: predicate strings and class chains map directly to `XCUIElement.matching(NSPredicate(...))` and the XCUIElementQuery class-chain syntax.
156
+
157
+ ### Gestures
158
+
159
+ All gestures accept `appBundleId` so the runner can target the right `XCUIApplication` for coordinate-space resolution.
160
+
161
+ | Command | Inputs | Returns |
162
+ |---|---|---|
163
+ | `tap` | `x, y` | `{ gestureStartMs, gestureEndMs, referenceWidth, referenceHeight }` |
164
+ | `doubleTap` | `x, y` | gesture timings |
165
+ | `longPress` | `x, y, durationMs` | gesture timings |
166
+ | `swipe` | EITHER `x, y, x2, y2, durationMs` OR `direction, percent` | gesture timings + `path: [{x,y},...]` |
167
+ | `scroll` | EITHER coordinate path OR `direction, percent` (same as swipe but with slower default duration) | gesture timings |
168
+ | `drag` | `x, y, x2, y2, durationMs` (press-before-move hold), `moveDurationMs?` (movement time — local addition; when set, drags via `press(forDuration:thenDragTo:withVelocity:thenHoldForDuration:)` with a 250ms settle before release, for dragAndDrop reorder semantics) | gesture timings + path |
169
+ | `pinch` | `x, y, scale, durationMs` | gesture timings |
170
+ | `pressButton` | `button: "home"|"lock"|"volumeUp"|"volumeDown"|"appSwitcher"` | `{ pressed: true }` |
171
+ | `rotate` | `orientation: "portrait"|"landscapeLeft"|"landscapeRight"|"portraitUpsideDown"` | `{ orientation }` |
172
+ | `appearance` | — | `{ appearance: "dark"|"light" }` |
173
+ | `setAppearance` | `appearance: "dark"|"light"` | `{ appearance }` — the appearance that took effect, re-read after setting, not the request echoed back |
174
+
175
+ **Delta from agent-device:** swipe + scroll accept coordinate paths AND direction. drag, pinch, pressButton, rotate kept; tapSeries / dragSeries / interactionFrame dropped (LLM-shaped, not needed for flows). `appearance` / `setAppearance` are local additions wrapping `XCUIDevice.appearance` (iOS 15+); they exist because `simctl ui appearance` covers only simulators, so this is what makes dark mode work on physical devices. `unspecified` is reported as `light` — nothing is being forced, and that is how it renders.
176
+
177
+ ### Text
178
+
179
+ | Command | Inputs | Returns |
180
+ |---|---|---|
181
+ | `type` | `text`, `typingFrequency?` | `{ typed }` |
182
+ | `eraseText` | `count` (number of chars to delete) | `{ erased }` |
183
+ | `keyPress` | `key: "enter"|"tab"|"backspace"|"escape"` | `{ pressed }` |
184
+ | `clipboardGet` | (none) | `{ text }` |
185
+ | `clipboardSet` | `text` | `{ set: true }` |
186
+
187
+ `type` sends keys to the currently focused element (caller is responsible for tapping to focus first — same as WDA today).
188
+
189
+ ### Alerts
190
+
191
+ | Command | Inputs | Returns |
192
+ |---|---|---|
193
+ | `alertVisible` | (none) | `{ visible: bool, button1Label?, button2Label? }` |
194
+ | `alertAccept` | (none) | `{ dismissed: true }` |
195
+ | `alertDismiss` | (none) | `{ dismissed: true }` |
196
+
197
+ ### URLs
198
+
199
+ | Command | Inputs | Returns |
200
+ |---|---|---|
201
+ | `openURL` | `url` | `{ opened: true }` |
202
+
203
+ Uses `XCUIDevice.shared.system.open(URL)` (iOS 15+) or SpringBoard tap path as fallback.
204
+
205
+ ### Settings (runtime)
206
+
207
+ | Command | Inputs | Returns |
208
+ |---|---|---|
209
+ | `setIdleTimeout` | `timeoutMs` (0 disables) | `{ set }` |
210
+ | `setTypingFrequency` | `freq` (chars/sec) | `{ set }` |
211
+ | `setFindTimeout` | `timeoutMs` | `{ set }` |
212
+
213
+ Cover `core.SetWaitForIdleTimeout`, `TypingFrequencyConfigurer`, `core.SetFindTimeout`.
214
+
215
+ ### Recording (Phase 5+; not in v1 minimum)
216
+
217
+ | Command | Inputs | Returns |
218
+ |---|---|---|
219
+ | `recordStart` | `outPath` (host path), `fps?`, `quality?` | `{ recording: true }` |
220
+ | `recordStop` | (none) | `{ bytes: <base64> }` or `{ outPath }` |
221
+
222
+ Deferred — `core.Driver` doesn't expose recording today; can add in Phase 6.
223
+
224
+ ## Out of scope for v1
225
+
226
+ These exist in maestro-runner today but stay on the **Go side** via `xcrun simctl` / `xcrun devicectl`, not in the runner:
227
+
228
+ - App install / uninstall (`simctl install` / `devicectl install`)
229
+ - Clear app data (uninstall + reinstall)
230
+ - Permission grants (`simctl privacy`, `devicectl set-permission`)
231
+ - Reset keychain (`simctl keychain reset`)
232
+ - Airplane mode (open Settings app, find toggle, tap — uses regular runner commands)
233
+ - Reading app container files
234
+
235
+ This split mirrors how the current `pkg/driver/wda/` and `pkg/driver/devicelab/` (Android) drivers do these via shell calls, not in-process.
236
+
237
+ ## Deltas from agent-device's protocol (with rationale)
238
+
239
+ | Item | agent-device | devicelab-ios-runner | Why |
240
+ |---|---|---|---|
241
+ | Element refs | `@e1`/`@e2` computed on TS side, used in tap | None | Stale-element risk; no benefit for flows that re-snapshot anyway |
242
+ | Snapshot filtering | `interactiveOnly`, `compact`, occlusion | None | LLM-shaped; flows need full tree for selector matching |
243
+ | Snapshot caps | 600 elements / 2 MB | None | Caps cause silent flow failures when the screen is busy |
244
+ | Screenshot return | File path on simulator | Inline base64 bytes | One round trip instead of two; works the same on real devices |
245
+ | Swipe | Direction only | Path OR direction | maestro-runner flows often use coordinate swipes for trackpads/sliders |
246
+ | Snapshot fields | `index/depth/type/label/rect/hittable/enabled` | + `identifier`, `value`, `placeholderValue`, `selected`, `focused`, `displayed` | Required by `id=` / `value=` / focus-aware selectors |
247
+ | Port allocation | Random if env unset | Always caller-injected | Real-device tunneling needs the port before launch |
248
+ | `readText` | Point-based (`x, y` required) | Use `findByIdentifier` or `snapshot` and read `label`/`value` directly | Single way to get text |
249
+ | App lifecycle | TS-side only (`simctl launch`) | Either runner (via `XCUIApplication.launch()`) or Go-side (`simctl`) | Runner-side is faster for warm flows; Go-side stays available |
250
+ | Recording | First-class command | Deferred to Phase 5+ | Not in `core.Driver` today |
251
+ | Protocol stability | "Maintainer document, can change" | Versioned, breaking changes bump version | We are the only consumer; cheap to be strict |
252
+
253
+ ## Open questions to revisit before Phase 3 implementation
254
+
255
+ - **`type` without a tap-to-focus first.** WDA's `SendKeys` works against the global keyboard. Should we require a focused element, or accept silent no-op? Current call sites all tap first — keep WDA semantics.
256
+ - **`displayed` semantics.** WDA's `isDisplayed` differs from XCUI's `isHittable`. We compute `displayed` as "rect intersects screen bounds AND parent clip path", `hittable` as raw `.isHittable`. Validate with TestHive flows.
257
+ - **Predicate string compatibility.** WDA supports a specific NSPredicate dialect via Appium. We should support the same dialect so existing flow selectors keep working — verify against `pkg/driver/wda/driver.go:findElementByWDA`.
258
+ - **`scroll` vs `swipe` duration defaults.** WDA scrolls slower than it swipes. Per react-navigation PR #13027, swipe duration tuning is touchy. Pick defaults that match upstream Maestro out of the gate.
@@ -0,0 +1,38 @@
1
+ # devicelab-ios-runner
2
+
3
+ XCUITest-based iOS automation runner for the `devicelab` driver in [maestro-runner](https://github.com/devicelab-dev/maestro-runner). On-device counterpart to [`devicelab-android-driver`](../devicelab-android-driver).
4
+
5
+ ## Goal
6
+
7
+ Replace `pkg/driver/wda/` in maestro-runner with a self-contained, owned XCUITest runner. Fix the two iOS blockers from react-navigation PR #13027:
8
+
9
+ 1. **No runtime third-party download** — runner is bundled in `maestro-runner` release artifacts; no fetch over the network at test time.
10
+ 2. **Local parity with upstream Maestro** — flows that pass under `maestro` must also pass under `maestro-runner` locally, with the same retry profile.
11
+
12
+ ## Status
13
+
14
+ **Phase 0 — Reference validation.** Building `callstackincubator/agent-device`'s XCUITest runner as a black-box sanity check that the architectural design (XCUITest + `Network.framework` HTTP + JSON command protocol) actually works for our flows before committing to a fresh Swift rewrite.
15
+
16
+ See [PLAN.md](./PLAN.md).
17
+
18
+ ## Layout (planned)
19
+
20
+ ```
21
+ devicelab-ios-runner/
22
+ ├── README.md
23
+ ├── PLAN.md # phased plan and acceptance criteria
24
+ ├── PROTOCOL.md # wire protocol spec (written after Phase 0)
25
+ ├── .gitignore
26
+ ├── DevicelabIOSRunner.xcodeproj/ # Xcode project (Phase 2+)
27
+ ├── DevicelabIOSRunner/ # UI test target sources (fresh Swift)
28
+ └── scripts/
29
+ └── build.sh # standalone build pipeline
30
+ ```
31
+
32
+ Built artifact will be vendored into `maestro-runner` at `drivers/ios/devicelab-ios-runner/` and bundled by `build-release.sh`.
33
+
34
+ ## References
35
+
36
+ - Architecture inspiration: [agent-device findings doc](../../temp/test/agent-device/findings-ios-android.md)
37
+ - Cloned agent-device repo (reference only): `/Users/omnarayan/work/temp/test/agent-device/`
38
+ - Android counterpart pattern: `/Users/omnarayan/work/support-tools/devicelab-android-driver`