@limrun/appium-xcuitest-driver 10.4.3-lim.1

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 (444) hide show
  1. package/CHANGELOG.md +2600 -0
  2. package/LICENSE +201 -0
  3. package/README.md +55 -0
  4. package/build/index.d.ts +5 -0
  5. package/build/index.js +41 -0
  6. package/build/lib/app-infos-cache.d.ts +62 -0
  7. package/build/lib/app-infos-cache.d.ts.map +1 -0
  8. package/build/lib/app-infos-cache.js +180 -0
  9. package/build/lib/app-infos-cache.js.map +1 -0
  10. package/build/lib/app-utils.d.ts +89 -0
  11. package/build/lib/app-utils.d.ts.map +1 -0
  12. package/build/lib/app-utils.js +657 -0
  13. package/build/lib/app-utils.js.map +1 -0
  14. package/build/lib/commands/active-app-info.d.ts +9 -0
  15. package/build/lib/commands/active-app-info.d.ts.map +1 -0
  16. package/build/lib/commands/active-app-info.js +14 -0
  17. package/build/lib/commands/active-app-info.js.map +1 -0
  18. package/build/lib/commands/advanced-battery-types.d.ts +444 -0
  19. package/build/lib/commands/advanced-battery-types.d.ts.map +1 -0
  20. package/build/lib/commands/advanced-battery-types.js +8 -0
  21. package/build/lib/commands/advanced-battery-types.js.map +1 -0
  22. package/build/lib/commands/alert.d.ts +45 -0
  23. package/build/lib/commands/alert.d.ts.map +1 -0
  24. package/build/lib/commands/alert.js +87 -0
  25. package/build/lib/commands/alert.js.map +1 -0
  26. package/build/lib/commands/app-management.d.ts +153 -0
  27. package/build/lib/commands/app-management.d.ts.map +1 -0
  28. package/build/lib/commands/app-management.js +323 -0
  29. package/build/lib/commands/app-management.js.map +1 -0
  30. package/build/lib/commands/app-strings.d.ts +16 -0
  31. package/build/lib/commands/app-strings.d.ts.map +1 -0
  32. package/build/lib/commands/app-strings.js +30 -0
  33. package/build/lib/commands/app-strings.js.map +1 -0
  34. package/build/lib/commands/appearance.d.ts +22 -0
  35. package/build/lib/commands/appearance.d.ts.map +1 -0
  36. package/build/lib/commands/appearance.js +74 -0
  37. package/build/lib/commands/appearance.js.map +1 -0
  38. package/build/lib/commands/audit.d.ts +43 -0
  39. package/build/lib/commands/audit.d.ts.map +1 -0
  40. package/build/lib/commands/audit.js +31 -0
  41. package/build/lib/commands/audit.js.map +1 -0
  42. package/build/lib/commands/battery.d.ts +13 -0
  43. package/build/lib/commands/battery.d.ts.map +1 -0
  44. package/build/lib/commands/battery.js +49 -0
  45. package/build/lib/commands/battery.js.map +1 -0
  46. package/build/lib/commands/bidi/constants.d.ts +6 -0
  47. package/build/lib/commands/bidi/constants.d.ts.map +1 -0
  48. package/build/lib/commands/bidi/constants.js +10 -0
  49. package/build/lib/commands/bidi/constants.js.map +1 -0
  50. package/build/lib/commands/bidi/models.d.ts +9 -0
  51. package/build/lib/commands/bidi/models.d.ts.map +1 -0
  52. package/build/lib/commands/bidi/models.js +54 -0
  53. package/build/lib/commands/bidi/models.js.map +1 -0
  54. package/build/lib/commands/bidi/types.d.ts +26 -0
  55. package/build/lib/commands/bidi/types.d.ts.map +1 -0
  56. package/build/lib/commands/bidi/types.js +4 -0
  57. package/build/lib/commands/bidi/types.js.map +1 -0
  58. package/build/lib/commands/biometric.d.ts +32 -0
  59. package/build/lib/commands/biometric.d.ts.map +1 -0
  60. package/build/lib/commands/biometric.js +54 -0
  61. package/build/lib/commands/biometric.js.map +1 -0
  62. package/build/lib/commands/certificate.d.ts +50 -0
  63. package/build/lib/commands/certificate.d.ts.map +1 -0
  64. package/build/lib/commands/certificate.js +454 -0
  65. package/build/lib/commands/certificate.js.map +1 -0
  66. package/build/lib/commands/clipboard.d.ts +21 -0
  67. package/build/lib/commands/clipboard.d.ts.map +1 -0
  68. package/build/lib/commands/clipboard.js +36 -0
  69. package/build/lib/commands/clipboard.js.map +1 -0
  70. package/build/lib/commands/condition.d.ts +102 -0
  71. package/build/lib/commands/condition.d.ts.map +1 -0
  72. package/build/lib/commands/condition.js +146 -0
  73. package/build/lib/commands/condition.js.map +1 -0
  74. package/build/lib/commands/content-size.d.ts +30 -0
  75. package/build/lib/commands/content-size.d.ts.map +1 -0
  76. package/build/lib/commands/content-size.js +67 -0
  77. package/build/lib/commands/content-size.js.map +1 -0
  78. package/build/lib/commands/context.d.ts +191 -0
  79. package/build/lib/commands/context.d.ts.map +1 -0
  80. package/build/lib/commands/context.js +625 -0
  81. package/build/lib/commands/context.js.map +1 -0
  82. package/build/lib/commands/deviceInfo.d.ts +12 -0
  83. package/build/lib/commands/deviceInfo.d.ts.map +1 -0
  84. package/build/lib/commands/deviceInfo.js +25 -0
  85. package/build/lib/commands/deviceInfo.js.map +1 -0
  86. package/build/lib/commands/element.d.ts +108 -0
  87. package/build/lib/commands/element.d.ts.map +1 -0
  88. package/build/lib/commands/element.js +395 -0
  89. package/build/lib/commands/element.js.map +1 -0
  90. package/build/lib/commands/enum.d.ts +105 -0
  91. package/build/lib/commands/enum.d.ts.map +1 -0
  92. package/build/lib/commands/enum.js +113 -0
  93. package/build/lib/commands/enum.js.map +1 -0
  94. package/build/lib/commands/execute.d.ts +33 -0
  95. package/build/lib/commands/execute.d.ts.map +1 -0
  96. package/build/lib/commands/execute.js +142 -0
  97. package/build/lib/commands/execute.js.map +1 -0
  98. package/build/lib/commands/file-movement.d.ts +90 -0
  99. package/build/lib/commands/file-movement.d.ts.map +1 -0
  100. package/build/lib/commands/file-movement.js +477 -0
  101. package/build/lib/commands/file-movement.js.map +1 -0
  102. package/build/lib/commands/find.d.ts +21 -0
  103. package/build/lib/commands/find.d.ts.map +1 -0
  104. package/build/lib/commands/find.js +199 -0
  105. package/build/lib/commands/find.js.map +1 -0
  106. package/build/lib/commands/general.d.ts +137 -0
  107. package/build/lib/commands/general.d.ts.map +1 -0
  108. package/build/lib/commands/general.js +270 -0
  109. package/build/lib/commands/general.js.map +1 -0
  110. package/build/lib/commands/geolocation.d.ts +57 -0
  111. package/build/lib/commands/geolocation.d.ts.map +1 -0
  112. package/build/lib/commands/geolocation.js +58 -0
  113. package/build/lib/commands/geolocation.js.map +1 -0
  114. package/build/lib/commands/gesture.d.ts +283 -0
  115. package/build/lib/commands/gesture.d.ts.map +1 -0
  116. package/build/lib/commands/gesture.js +565 -0
  117. package/build/lib/commands/gesture.js.map +1 -0
  118. package/build/lib/commands/hid-event.d.ts +2773 -0
  119. package/build/lib/commands/hid-event.d.ts.map +1 -0
  120. package/build/lib/commands/hid-event.js +1633 -0
  121. package/build/lib/commands/hid-event.js.map +1 -0
  122. package/build/lib/commands/increase-contrast.d.ts +24 -0
  123. package/build/lib/commands/increase-contrast.d.ts.map +1 -0
  124. package/build/lib/commands/increase-contrast.js +49 -0
  125. package/build/lib/commands/increase-contrast.js.map +1 -0
  126. package/build/lib/commands/iohid.d.ts +1372 -0
  127. package/build/lib/commands/iohid.d.ts.map +1 -0
  128. package/build/lib/commands/iohid.js +63 -0
  129. package/build/lib/commands/iohid.js.map +1 -0
  130. package/build/lib/commands/keyboard.d.ts +32 -0
  131. package/build/lib/commands/keyboard.d.ts.map +1 -0
  132. package/build/lib/commands/keyboard.js +67 -0
  133. package/build/lib/commands/keyboard.js.map +1 -0
  134. package/build/lib/commands/keychains.d.ts +10 -0
  135. package/build/lib/commands/keychains.d.ts.map +1 -0
  136. package/build/lib/commands/keychains.js +22 -0
  137. package/build/lib/commands/keychains.js.map +1 -0
  138. package/build/lib/commands/localization.d.ts +17 -0
  139. package/build/lib/commands/localization.d.ts.map +1 -0
  140. package/build/lib/commands/localization.js +34 -0
  141. package/build/lib/commands/localization.js.map +1 -0
  142. package/build/lib/commands/location.d.ts +40 -0
  143. package/build/lib/commands/location.d.ts.map +1 -0
  144. package/build/lib/commands/location.js +121 -0
  145. package/build/lib/commands/location.js.map +1 -0
  146. package/build/lib/commands/lock.d.ts +23 -0
  147. package/build/lib/commands/lock.d.ts.map +1 -0
  148. package/build/lib/commands/lock.js +49 -0
  149. package/build/lib/commands/lock.js.map +1 -0
  150. package/build/lib/commands/log.d.ts +68 -0
  151. package/build/lib/commands/log.d.ts.map +1 -0
  152. package/build/lib/commands/log.js +287 -0
  153. package/build/lib/commands/log.js.map +1 -0
  154. package/build/lib/commands/memory.d.ts +11 -0
  155. package/build/lib/commands/memory.d.ts.map +1 -0
  156. package/build/lib/commands/memory.js +49 -0
  157. package/build/lib/commands/memory.js.map +1 -0
  158. package/build/lib/commands/navigation.d.ts +44 -0
  159. package/build/lib/commands/navigation.d.ts.map +1 -0
  160. package/build/lib/commands/navigation.js +121 -0
  161. package/build/lib/commands/navigation.js.map +1 -0
  162. package/build/lib/commands/notifications.d.ts +28 -0
  163. package/build/lib/commands/notifications.d.ts.map +1 -0
  164. package/build/lib/commands/notifications.js +64 -0
  165. package/build/lib/commands/notifications.js.map +1 -0
  166. package/build/lib/commands/pasteboard.d.ts +23 -0
  167. package/build/lib/commands/pasteboard.d.ts.map +1 -0
  168. package/build/lib/commands/pasteboard.js +43 -0
  169. package/build/lib/commands/pasteboard.js.map +1 -0
  170. package/build/lib/commands/pcap.d.ts +54 -0
  171. package/build/lib/commands/pcap.d.ts.map +1 -0
  172. package/build/lib/commands/pcap.js +149 -0
  173. package/build/lib/commands/pcap.js.map +1 -0
  174. package/build/lib/commands/performance.d.ts +85 -0
  175. package/build/lib/commands/performance.d.ts.map +1 -0
  176. package/build/lib/commands/performance.js +331 -0
  177. package/build/lib/commands/performance.js.map +1 -0
  178. package/build/lib/commands/permissions.d.ts +36 -0
  179. package/build/lib/commands/permissions.d.ts.map +1 -0
  180. package/build/lib/commands/permissions.js +80 -0
  181. package/build/lib/commands/permissions.js.map +1 -0
  182. package/build/lib/commands/proxy-helper.d.ts +15 -0
  183. package/build/lib/commands/proxy-helper.d.ts.map +1 -0
  184. package/build/lib/commands/proxy-helper.js +117 -0
  185. package/build/lib/commands/proxy-helper.js.map +1 -0
  186. package/build/lib/commands/record-audio.d.ts +69 -0
  187. package/build/lib/commands/record-audio.d.ts.map +1 -0
  188. package/build/lib/commands/record-audio.js +228 -0
  189. package/build/lib/commands/record-audio.js.map +1 -0
  190. package/build/lib/commands/recordscreen.d.ts +89 -0
  191. package/build/lib/commands/recordscreen.d.ts.map +1 -0
  192. package/build/lib/commands/recordscreen.js +326 -0
  193. package/build/lib/commands/recordscreen.js.map +1 -0
  194. package/build/lib/commands/screenshots.d.ts +16 -0
  195. package/build/lib/commands/screenshots.d.ts.map +1 -0
  196. package/build/lib/commands/screenshots.js +129 -0
  197. package/build/lib/commands/screenshots.js.map +1 -0
  198. package/build/lib/commands/simctl.d.ts +27 -0
  199. package/build/lib/commands/simctl.d.ts.map +1 -0
  200. package/build/lib/commands/simctl.js +65 -0
  201. package/build/lib/commands/simctl.js.map +1 -0
  202. package/build/lib/commands/source.d.ts +16 -0
  203. package/build/lib/commands/source.d.ts.map +1 -0
  204. package/build/lib/commands/source.js +128 -0
  205. package/build/lib/commands/source.js.map +1 -0
  206. package/build/lib/commands/timeouts.d.ts +53 -0
  207. package/build/lib/commands/timeouts.d.ts.map +1 -0
  208. package/build/lib/commands/timeouts.js +71 -0
  209. package/build/lib/commands/timeouts.js.map +1 -0
  210. package/build/lib/commands/types.d.ts +539 -0
  211. package/build/lib/commands/types.d.ts.map +1 -0
  212. package/build/lib/commands/types.js +3 -0
  213. package/build/lib/commands/types.js.map +1 -0
  214. package/build/lib/commands/web.d.ts +297 -0
  215. package/build/lib/commands/web.d.ts.map +1 -0
  216. package/build/lib/commands/web.js +1029 -0
  217. package/build/lib/commands/web.js.map +1 -0
  218. package/build/lib/commands/xctest-record-screen.d.ts +92 -0
  219. package/build/lib/commands/xctest-record-screen.d.ts.map +1 -0
  220. package/build/lib/commands/xctest-record-screen.js +193 -0
  221. package/build/lib/commands/xctest-record-screen.js.map +1 -0
  222. package/build/lib/commands/xctest.d.ts +71 -0
  223. package/build/lib/commands/xctest.d.ts.map +1 -0
  224. package/build/lib/commands/xctest.js +257 -0
  225. package/build/lib/commands/xctest.js.map +1 -0
  226. package/build/lib/css-converter.d.ts +10 -0
  227. package/build/lib/css-converter.d.ts.map +1 -0
  228. package/build/lib/css-converter.js +258 -0
  229. package/build/lib/css-converter.js.map +1 -0
  230. package/build/lib/desired-caps.d.ts +506 -0
  231. package/build/lib/desired-caps.d.ts.map +1 -0
  232. package/build/lib/desired-caps.js +400 -0
  233. package/build/lib/desired-caps.js.map +1 -0
  234. package/build/lib/device-connections-factory.d.ts +13 -0
  235. package/build/lib/device-connections-factory.d.ts.map +1 -0
  236. package/build/lib/device-connections-factory.js +244 -0
  237. package/build/lib/device-connections-factory.js.map +1 -0
  238. package/build/lib/device-log/helpers.d.ts +10 -0
  239. package/build/lib/device-log/helpers.d.ts.map +1 -0
  240. package/build/lib/device-log/helpers.js +37 -0
  241. package/build/lib/device-log/helpers.js.map +1 -0
  242. package/build/lib/device-log/ios-crash-log.d.ts +34 -0
  243. package/build/lib/device-log/ios-crash-log.d.ts.map +1 -0
  244. package/build/lib/device-log/ios-crash-log.js +141 -0
  245. package/build/lib/device-log/ios-crash-log.js.map +1 -0
  246. package/build/lib/device-log/ios-device-log.d.ts +19 -0
  247. package/build/lib/device-log/ios-device-log.d.ts.map +1 -0
  248. package/build/lib/device-log/ios-device-log.js +42 -0
  249. package/build/lib/device-log/ios-device-log.js.map +1 -0
  250. package/build/lib/device-log/ios-log.d.ts +24 -0
  251. package/build/lib/device-log/ios-log.d.ts.map +1 -0
  252. package/build/lib/device-log/ios-log.js +50 -0
  253. package/build/lib/device-log/ios-log.js.map +1 -0
  254. package/build/lib/device-log/ios-performance-log.d.ts +18 -0
  255. package/build/lib/device-log/ios-performance-log.d.ts.map +1 -0
  256. package/build/lib/device-log/ios-performance-log.js +43 -0
  257. package/build/lib/device-log/ios-performance-log.js.map +1 -0
  258. package/build/lib/device-log/ios-simulator-log.d.ts +38 -0
  259. package/build/lib/device-log/ios-simulator-log.d.ts.map +1 -0
  260. package/build/lib/device-log/ios-simulator-log.js +184 -0
  261. package/build/lib/device-log/ios-simulator-log.js.map +1 -0
  262. package/build/lib/device-log/line-consuming-log.d.ts +9 -0
  263. package/build/lib/device-log/line-consuming-log.d.ts.map +1 -0
  264. package/build/lib/device-log/line-consuming-log.js +16 -0
  265. package/build/lib/device-log/line-consuming-log.js.map +1 -0
  266. package/build/lib/device-log/safari-console-log.d.ts +67 -0
  267. package/build/lib/device-log/safari-console-log.d.ts.map +1 -0
  268. package/build/lib/device-log/safari-console-log.js +81 -0
  269. package/build/lib/device-log/safari-console-log.js.map +1 -0
  270. package/build/lib/device-log/safari-network-log.d.ts +75 -0
  271. package/build/lib/device-log/safari-network-log.d.ts.map +1 -0
  272. package/build/lib/device-log/safari-network-log.js +47 -0
  273. package/build/lib/device-log/safari-network-log.js.map +1 -0
  274. package/build/lib/doctor/checks.d.ts +3 -0
  275. package/build/lib/doctor/checks.d.ts.map +1 -0
  276. package/build/lib/doctor/checks.js +39 -0
  277. package/build/lib/doctor/checks.js.map +1 -0
  278. package/build/lib/doctor/optional-checks.d.ts +46 -0
  279. package/build/lib/doctor/optional-checks.d.ts.map +1 -0
  280. package/build/lib/doctor/optional-checks.js +129 -0
  281. package/build/lib/doctor/optional-checks.js.map +1 -0
  282. package/build/lib/doctor/required-checks.d.ts +42 -0
  283. package/build/lib/doctor/required-checks.d.ts.map +1 -0
  284. package/build/lib/doctor/required-checks.js +94 -0
  285. package/build/lib/doctor/required-checks.js.map +1 -0
  286. package/build/lib/doctor/utils.d.ts +8 -0
  287. package/build/lib/doctor/utils.d.ts.map +1 -0
  288. package/build/lib/doctor/utils.js +21 -0
  289. package/build/lib/doctor/utils.js.map +1 -0
  290. package/build/lib/driver.d.ts +2429 -0
  291. package/build/lib/driver.d.ts.map +1 -0
  292. package/build/lib/driver.js +1967 -0
  293. package/build/lib/driver.js.map +1 -0
  294. package/build/lib/execute-method-map.d.ts +552 -0
  295. package/build/lib/execute-method-map.d.ts.map +1 -0
  296. package/build/lib/execute-method-map.js +586 -0
  297. package/build/lib/execute-method-map.js.map +1 -0
  298. package/build/lib/ios-fs-helpers.d.ts +75 -0
  299. package/build/lib/ios-fs-helpers.d.ts.map +1 -0
  300. package/build/lib/ios-fs-helpers.js +370 -0
  301. package/build/lib/ios-fs-helpers.js.map +1 -0
  302. package/build/lib/ios-generic-simulators.d.ts +6 -0
  303. package/build/lib/ios-generic-simulators.d.ts.map +1 -0
  304. package/build/lib/ios-generic-simulators.js +14 -0
  305. package/build/lib/ios-generic-simulators.js.map +1 -0
  306. package/build/lib/logger.d.ts +3 -0
  307. package/build/lib/logger.d.ts.map +1 -0
  308. package/build/lib/logger.js +6 -0
  309. package/build/lib/logger.js.map +1 -0
  310. package/build/lib/method-map.d.ts +229 -0
  311. package/build/lib/method-map.d.ts.map +1 -0
  312. package/build/lib/method-map.js +200 -0
  313. package/build/lib/method-map.js.map +1 -0
  314. package/build/lib/real-device-clients/base-device-client.d.ts +22 -0
  315. package/build/lib/real-device-clients/base-device-client.d.ts.map +1 -0
  316. package/build/lib/real-device-clients/base-device-client.js +14 -0
  317. package/build/lib/real-device-clients/base-device-client.js.map +1 -0
  318. package/build/lib/real-device-clients/py-ios-device-client.d.ts +21 -0
  319. package/build/lib/real-device-clients/py-ios-device-client.d.ts.map +1 -0
  320. package/build/lib/real-device-clients/py-ios-device-client.js +125 -0
  321. package/build/lib/real-device-clients/py-ios-device-client.js.map +1 -0
  322. package/build/lib/real-device-management.d.ts +53 -0
  323. package/build/lib/real-device-management.d.ts.map +1 -0
  324. package/build/lib/real-device-management.js +128 -0
  325. package/build/lib/real-device-management.js.map +1 -0
  326. package/build/lib/real-device.d.ts +112 -0
  327. package/build/lib/real-device.d.ts.map +1 -0
  328. package/build/lib/real-device.js +352 -0
  329. package/build/lib/real-device.js.map +1 -0
  330. package/build/lib/simulator-management.d.ts +96 -0
  331. package/build/lib/simulator-management.d.ts.map +1 -0
  332. package/build/lib/simulator-management.js +278 -0
  333. package/build/lib/simulator-management.js.map +1 -0
  334. package/build/lib/stubs.d.ts +3 -0
  335. package/build/lib/stubs.d.ts.map +1 -0
  336. package/build/lib/stubs.js +3 -0
  337. package/build/lib/stubs.js.map +1 -0
  338. package/build/lib/types.d.ts +31 -0
  339. package/build/lib/types.d.ts.map +1 -0
  340. package/build/lib/types.js +3 -0
  341. package/build/lib/types.js.map +1 -0
  342. package/build/lib/utils.d.ts +191 -0
  343. package/build/lib/utils.d.ts.map +1 -0
  344. package/build/lib/utils.js +549 -0
  345. package/build/lib/utils.js.map +1 -0
  346. package/build/lib/xcrun.d.ts +3 -0
  347. package/build/lib/xcrun.d.ts.map +1 -0
  348. package/build/lib/xcrun.js +17 -0
  349. package/build/lib/xcrun.js.map +1 -0
  350. package/index.js +7 -0
  351. package/lib/app-infos-cache.js +187 -0
  352. package/lib/app-utils.js +710 -0
  353. package/lib/commands/active-app-info.js +12 -0
  354. package/lib/commands/advanced-battery-types.ts +454 -0
  355. package/lib/commands/alert.js +88 -0
  356. package/lib/commands/app-management.js +346 -0
  357. package/lib/commands/app-strings.js +30 -0
  358. package/lib/commands/appearance.js +71 -0
  359. package/lib/commands/audit.js +31 -0
  360. package/lib/commands/battery.js +45 -0
  361. package/lib/commands/bidi/constants.ts +6 -0
  362. package/lib/commands/bidi/models.ts +55 -0
  363. package/lib/commands/bidi/types.ts +31 -0
  364. package/lib/commands/biometric.js +53 -0
  365. package/lib/commands/certificate.js +497 -0
  366. package/lib/commands/clipboard.js +35 -0
  367. package/lib/commands/condition.js +155 -0
  368. package/lib/commands/content-size.js +68 -0
  369. package/lib/commands/context.js +705 -0
  370. package/lib/commands/deviceInfo.js +27 -0
  371. package/lib/commands/element.js +423 -0
  372. package/lib/commands/enum.ts +108 -0
  373. package/lib/commands/execute.js +153 -0
  374. package/lib/commands/file-movement.js +510 -0
  375. package/lib/commands/find.js +205 -0
  376. package/lib/commands/general.js +278 -0
  377. package/lib/commands/geolocation.js +56 -0
  378. package/lib/commands/gesture.js +596 -0
  379. package/lib/commands/hid-event.ts +1634 -0
  380. package/lib/commands/increase-contrast.js +50 -0
  381. package/lib/commands/iohid.js +64 -0
  382. package/lib/commands/keyboard.js +62 -0
  383. package/lib/commands/keychains.js +18 -0
  384. package/lib/commands/localization.js +30 -0
  385. package/lib/commands/location.js +131 -0
  386. package/lib/commands/lock.js +46 -0
  387. package/lib/commands/log.js +327 -0
  388. package/lib/commands/memory.js +51 -0
  389. package/lib/commands/navigation.js +125 -0
  390. package/lib/commands/notifications.js +66 -0
  391. package/lib/commands/pasteboard.js +42 -0
  392. package/lib/commands/pcap.js +168 -0
  393. package/lib/commands/performance.js +392 -0
  394. package/lib/commands/permissions.js +85 -0
  395. package/lib/commands/proxy-helper.js +122 -0
  396. package/lib/commands/record-audio.js +264 -0
  397. package/lib/commands/recordscreen.js +391 -0
  398. package/lib/commands/screenshots.js +137 -0
  399. package/lib/commands/simctl.js +71 -0
  400. package/lib/commands/source.js +131 -0
  401. package/lib/commands/timeouts.js +68 -0
  402. package/lib/commands/types.ts +648 -0
  403. package/lib/commands/web.js +1113 -0
  404. package/lib/commands/xctest-record-screen.js +204 -0
  405. package/lib/commands/xctest.js +285 -0
  406. package/lib/css-converter.js +311 -0
  407. package/lib/desired-caps.js +396 -0
  408. package/lib/device-connections-factory.js +269 -0
  409. package/lib/device-log/helpers.ts +40 -0
  410. package/lib/device-log/ios-crash-log.ts +166 -0
  411. package/lib/device-log/ios-device-log.ts +51 -0
  412. package/lib/device-log/ios-log.ts +70 -0
  413. package/lib/device-log/ios-performance-log.ts +50 -0
  414. package/lib/device-log/ios-simulator-log.ts +202 -0
  415. package/lib/device-log/line-consuming-log.ts +16 -0
  416. package/lib/device-log/safari-console-log.ts +117 -0
  417. package/lib/device-log/safari-network-log.ts +120 -0
  418. package/lib/doctor/checks.ts +3 -0
  419. package/lib/doctor/optional-checks.ts +173 -0
  420. package/lib/doctor/required-checks.ts +120 -0
  421. package/lib/doctor/utils.ts +18 -0
  422. package/lib/driver.js +2316 -0
  423. package/lib/execute-method-map.ts +585 -0
  424. package/lib/ios-fs-helpers.js +355 -0
  425. package/lib/ios-generic-simulators.js +11 -0
  426. package/lib/logger.js +5 -0
  427. package/lib/method-map.js +196 -0
  428. package/lib/real-device-clients/base-device-client.ts +34 -0
  429. package/lib/real-device-clients/py-ios-device-client.ts +149 -0
  430. package/lib/real-device-management.js +133 -0
  431. package/lib/real-device.js +347 -0
  432. package/lib/simulator-management.js +324 -0
  433. package/lib/stubs.ts +3 -0
  434. package/lib/types.ts +33 -0
  435. package/lib/utils.js +551 -0
  436. package/lib/xcrun.js +16 -0
  437. package/package.json +175 -0
  438. package/scripts/build-docs.js +56 -0
  439. package/scripts/build-wda.js +42 -0
  440. package/scripts/download-wda-sim.mjs +68 -0
  441. package/scripts/image-mounter.mjs +239 -0
  442. package/scripts/open-wda.mjs +15 -0
  443. package/scripts/tunnel-creation.mjs +359 -0
  444. package/scripts/utils.js +16 -0
package/package.json ADDED
@@ -0,0 +1,175 @@
1
+ {
2
+ "name": "@limrun/appium-xcuitest-driver",
3
+ "description": "Appium driver for iOS using XCUITest for backend",
4
+ "keywords": [
5
+ "appium",
6
+ "ios",
7
+ "webdriveragent",
8
+ "xcuitest",
9
+ "xctest"
10
+ ],
11
+ "version": "10.4.3-lim.1",
12
+ "author": "Appium Contributors",
13
+ "license": "Apache-2.0",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/appium/appium-xcuitest-driver.git"
17
+ },
18
+ "bugs": {
19
+ "url": "https://github.com/appium/appium-xcuitest-driver/issues"
20
+ },
21
+ "engines": {
22
+ "node": "^20.19.0 || ^22.12.0 || >=24.0.0",
23
+ "npm": ">=10"
24
+ },
25
+ "appium": {
26
+ "driverName": "xcuitest",
27
+ "automationName": "XCUITest",
28
+ "platformNames": [
29
+ "iOS",
30
+ "tvOS"
31
+ ],
32
+ "mainClass": "XCUITestDriver",
33
+ "scripts": {
34
+ "build-wda": "./scripts/build-wda.js",
35
+ "open-wda": "./scripts/open-wda.mjs",
36
+ "tunnel-creation": "./scripts/tunnel-creation.mjs",
37
+ "download-wda-sim": "./scripts/download-wda-sim.mjs",
38
+ "image-mounter": "./scripts/image-mounter.mjs"
39
+ },
40
+ "schema": {
41
+ "$schema": "http://json-schema.org/draft-07/schema",
42
+ "type": "object",
43
+ "properties": {
44
+ "webdriveragent-port": {
45
+ "appiumCliDest": "wdaLocalPort",
46
+ "default": 8100,
47
+ "description": "Local port used for communication with WebDriverAgent",
48
+ "maximum": 65535,
49
+ "minimum": 1,
50
+ "type": "integer"
51
+ }
52
+ },
53
+ "additionalProperties": false,
54
+ "title": "XCUITest Driver Configuration",
55
+ "description": "Appium configuration schema for the XCUITest driver."
56
+ },
57
+ "doctor": {
58
+ "checks": [
59
+ "./build/lib/doctor/required-checks.js",
60
+ "./build/lib/doctor/optional-checks.js"
61
+ ]
62
+ }
63
+ },
64
+ "main": "./build/index.js",
65
+ "bin": {},
66
+ "directories": {
67
+ "lib": "lib"
68
+ },
69
+ "files": [
70
+ "index.js",
71
+ "lib",
72
+ "scripts",
73
+ "build/index.js",
74
+ "build/index.d.ts",
75
+ "build/lib",
76
+ "!.DS_Store",
77
+ "CHANGELOG.md",
78
+ "LICENSE",
79
+ "npm-shrinkwrap.json"
80
+ ],
81
+ "types": "./build/index.d.ts",
82
+ "dependencies": {
83
+ "@appium/strongbox": "^1.0.0-rc.1",
84
+ "@colors/colors": "^1.6.0",
85
+ "appium-idb": "^2.0.0",
86
+ "appium-ios-device": "^3.0.0",
87
+ "@limrun/appium-ios-simulator": "7.0.2-lim.1",
88
+ "appium-remote-debugger": "^15.0.3",
89
+ "appium-webdriveragent": "^10.2.1",
90
+ "@limrun/appium-xcode": "6.1.2-lim.1",
91
+ "async-lock": "^1.4.0",
92
+ "asyncbox": "^3.0.0",
93
+ "bluebird": "^3.7.2",
94
+ "commander": "^14.0.1",
95
+ "css-selector-parser": "^3.0.0",
96
+ "js2xmlparser2": "^0.x",
97
+ "lodash": "^4.17.21",
98
+ "lru-cache": "^11.1.0",
99
+ "moment": "^2.29.4",
100
+ "moment-timezone": "^0.x",
101
+ "node-devicectl": "^1.1.0",
102
+ "@limrun/node-simctl": "^8.0.5-lim.1",
103
+ "portscanner": "^2.2.0",
104
+ "semver": "^7.5.4",
105
+ "source-map-support": "^0.x",
106
+ "teen_process": "^3.0.0",
107
+ "winston": "^3.17.0",
108
+ "ws": "^8.13.0"
109
+ },
110
+ "optionalDependencies": {
111
+ "appium-ios-remotexpc": "^0.x"
112
+ },
113
+ "scripts": {
114
+ "build": "tsc -b",
115
+ "clean": "npm run build -- --clean",
116
+ "dev": "npm run build -- --watch",
117
+ "build:docs": "appium-docs build",
118
+ "dev:docs": "appium-docs build --serve",
119
+ "publish:docs": "appium-docs build --deploy --push -b docs-site -m 'docs: auto-build docs for appium-xcuitest-driver@%s' --alias latest",
120
+ "lint": "eslint .",
121
+ "lint:commit": "commitlint",
122
+ "lint:fix": "npm run lint -- --fix",
123
+ "format": "prettier -w ./lib",
124
+ "install-docs-deps": "appium-docs init --no-mkdocs",
125
+ "prepare": "npm run rebuild",
126
+ "rebuild": "npm run clean; npm run build",
127
+ "test": "mocha --exit --timeout 1m \"./test/unit/**/*-specs.js\"",
128
+ "e2e-test": "mocha --exit --timeout 10m \"./test/functional/**/*-specs.js\"",
129
+ "e2e-test:basic": "mocha \"./test/functional/basic\" --exit --timeout 10m",
130
+ "e2e-test:device": "mocha \"./test/functional/device\" --exit --timeout 10m",
131
+ "e2e-test:driver": "mocha \"./test/functional/driver\" --exit --timeout 10m",
132
+ "e2e-test:long": "mocha \"./test/functional/long\" --exit --timeout 10m",
133
+ "e2e-test:parallel": "mocha \"./test/functional/parallel\" --exit --timeout 10m",
134
+ "e2e-test:web": "mocha \"./test/functional/web\" --exit --timeout 10m",
135
+ "e2e-test:native-web-tap": "mocha \"./test/functional/web/safari-nativewebtap-e2e-specs.js\" --exit --timeout 10m",
136
+ "start": "appium --relaxed-security --port 4567 --keep-alive-timeout 1200"
137
+ },
138
+ "prettier": {
139
+ "bracketSpacing": false,
140
+ "printWidth": 100,
141
+ "singleQuote": true
142
+ },
143
+ "peerDependencies": {
144
+ "appium": "^3.0.0-rc.2"
145
+ },
146
+ "devDependencies": {
147
+ "@appium/docutils": "^2.0.0-rc.1",
148
+ "@appium/eslint-config-appium-ts": "^2.0.0-rc.1",
149
+ "@appium/test-support": "^4.0.0-rc.1",
150
+ "@appium/tsconfig": "^1.0.0-rc.1",
151
+ "@appium/types": "^1.0.0-rc.1",
152
+ "@semantic-release/changelog": "^6.0.3",
153
+ "@semantic-release/git": "^10.0.1",
154
+ "@types/bluebird": "^3.5.38",
155
+ "@types/lodash": "^4.14.196",
156
+ "@types/mocha": "^10.0.1",
157
+ "@types/node": "^24.0.1",
158
+ "@types/portscanner": "^2.1.1",
159
+ "axios": "^1.4.0",
160
+ "chai": "^6.0.0",
161
+ "chai-as-promised": "^8.0.0",
162
+ "conventional-changelog-conventionalcommits": "^9.0.0",
163
+ "mocha": "^11.0.1",
164
+ "mocha-junit-reporter": "^2.2.1",
165
+ "mocha-multi-reporters": "^1.5.1",
166
+ "pem": "^1.14.8",
167
+ "prettier": "^3.0.0",
168
+ "semantic-release": "^25.0.0",
169
+ "sharp": "^0.x",
170
+ "sinon": "^21.0.0",
171
+ "ts-node": "^10.9.1",
172
+ "typescript": "^5.4.2",
173
+ "webdriverio": "^9.4.1"
174
+ }
175
+ }
@@ -0,0 +1,56 @@
1
+ // for simplicity this file is not transpiled and is run directly via an npm script
2
+ /* eslint-disable promise/prefer-await-to-callbacks */
3
+ /* eslint-disable promise/prefer-await-to-then */
4
+
5
+ const {deploy} = require('@appium/docutils');
6
+ const {logger} = require('appium/support');
7
+ const path = require('path');
8
+ const semver = require('semver');
9
+ const {version} = require('../package.json');
10
+
11
+ const log = logger.getLogger('Docs');
12
+
13
+ const DOCS_REMOTE = 'origin';
14
+ const DOCS_BRANCH = 'docs-site';
15
+ const DOCS_PREFIX = false;
16
+ const REPO_DIR = path.resolve(__dirname, '..');
17
+ const LATEST_ALIAS = 'latest';
18
+
19
+ const packageJson = require.resolve('../package.json');
20
+
21
+ const branch = process.env.APPIUM_DOCS_BRANCH ?? DOCS_BRANCH;
22
+ const deployPrefix = process.env.APPIUM_DOCS_PREFIX ?? DOCS_PREFIX;
23
+ const remote = process.env.APPIUM_DOCS_REMOTE ?? DOCS_REMOTE;
24
+
25
+ const push = Boolean(process.env.APPIUM_DOCS_PUBLISH);
26
+
27
+ async function main() {
28
+ log.info(`Building XCUI docs and committing to ${DOCS_BRANCH}`);
29
+ const {major, minor} = semver.parse(version);
30
+ const deployVersion = `${major}.${minor}`;
31
+
32
+ const mkdocsYml = path.join(REPO_DIR, 'mkdocs.yml');
33
+
34
+ log.info(`Building docs for version ${deployVersion}`);
35
+ await deploy({
36
+ mkDocsYml: mkdocsYml,
37
+ push,
38
+ branch,
39
+ deployPrefix,
40
+ remote,
41
+ packageJson,
42
+ deployVersion,
43
+ message: `docs: auto-build docs for appium-xcuitest-driver@${deployVersion}`,
44
+ alias: LATEST_ALIAS,
45
+ });
46
+ log.info(`Docs built`);
47
+ }
48
+
49
+ if (require.main === module) {
50
+ main().catch((err) => {
51
+ console.error(err); // eslint-disable-line no-console
52
+ process.exitCode = 1;
53
+ });
54
+ }
55
+
56
+ module.exports = main;
@@ -0,0 +1,42 @@
1
+ const {WebDriverAgent} = require('appium-webdriveragent');
2
+ const xcode = require('@limrun/appium-xcode');
3
+ const {Simctl} = require('@limrun/node-simctl');
4
+ const {getSimulator} = require('@limrun/appium-ios-simulator');
5
+ const {logger} = require('appium/support');
6
+ const {parseArgValue} = require('./utils');
7
+
8
+ const log = logger.getLogger('WDA');
9
+
10
+ async function build() {
11
+ const customDevice = parseArgValue('name');
12
+ const xcodeVersion = await xcode.getVersion(true);
13
+ const platformVersion = parseArgValue('sdk') || (await xcode.getMaxIOSSDK());
14
+ const iosDevices = await new Simctl().getDevices(platformVersion, 'iOS');
15
+ const verifyDevicePresence = (info) => {
16
+ if (!info) {
17
+ throw new Error(
18
+ `Cannot find any available iOS ${platformVersion} ${customDevice ? `${customDevice} ` : ''}simulator on your system. Only the following simulators are available:\n${iosDevices.map((e) => e.name).join('\n')}`,
19
+ );
20
+ }
21
+ return info;
22
+ };
23
+ const deviceInfo = verifyDevicePresence(
24
+ iosDevices.find(({name}) => name.includes(customDevice || 'iPhone')),
25
+ );
26
+ const device = await getSimulator(deviceInfo.udid, {
27
+ platform: deviceInfo.platform,
28
+ checkExistence: false,
29
+ });
30
+ const wda = new WebDriverAgent(xcodeVersion, {
31
+ iosSdkVersion: platformVersion,
32
+ platformVersion,
33
+ showXcodeLog: true,
34
+ device,
35
+ });
36
+ log.info(
37
+ `Building WDA for ${deviceInfo.name} ${platformVersion} with udid '${deviceInfo.udid}' Simulator...`,
38
+ );
39
+ await wda.xcodebuild.start(true);
40
+ }
41
+
42
+ (async () => await build())();
@@ -0,0 +1,68 @@
1
+ import {fs, logger, zip, net, node} from 'appium/support.js';
2
+ import _ from 'lodash';
3
+ import os from 'os';
4
+ import path from 'path';
5
+ import {parseArgValue} from './utils.js';
6
+
7
+ const log = logger.getLogger('download-wda-sim');
8
+ const wdaUrl = (version, zipFileName) =>
9
+ `https://github.com/appium/WebDriverAgent/releases/download/v${version}/${zipFileName}`;
10
+ const destZip = (platform) => {
11
+ const scheme = `WebDriverAgentRunner${_.toLower(platform) === 'tvos' ? '_tvOS' : ''}`;
12
+ return `${scheme}-Build-Sim-${os.arch() === 'arm64' ? 'arm64' : 'x86_64'}.zip`;
13
+ };
14
+
15
+ /**
16
+ * Return installed appium-webdriveragent package version
17
+ * @returns {number}
18
+ */
19
+ async function webdriveragentPkgVersion() {
20
+ const pkgPath = path.join(
21
+ node.getModuleRootSync('appium-xcuitest-driver', import.meta.url),
22
+ 'node_modules',
23
+ 'appium-webdriveragent',
24
+ 'package.json'
25
+ );
26
+ return JSON.parse(await fs.readFile(pkgPath, 'utf8')).version;
27
+ };
28
+
29
+ /**
30
+ * Prepare the working root directory.
31
+ * @returns {string} Root directory to download and unzip.
32
+ */
33
+ async function prepareRootDir() {
34
+ const destDirRoot = parseArgValue('outdir');
35
+ if (!destDirRoot) {
36
+ throw new Error(`--outdir is required`);
37
+ }
38
+ const destDir = path.resolve(process.cwd(), destDirRoot);
39
+ if (await fs.exists(destDir)) {
40
+ throw new Error(`${destDir} already exists`);
41
+ }
42
+ await fs.mkdir(destDir, {recursive: true});
43
+ return destDir;
44
+ }
45
+
46
+ async function getWDAPrebuiltPackage() {
47
+ const destDir = await prepareRootDir();
48
+ const platform = parseArgValue('platform');
49
+ const zipFileName = destZip(platform);
50
+ const wdaVersion = await webdriveragentPkgVersion();
51
+ const urlToDownload = wdaUrl(wdaVersion, zipFileName);
52
+ const downloadedZipFile = path.join(destDir, zipFileName);
53
+ try {
54
+ log.info(`Downloading ${urlToDownload}`);
55
+ await net.downloadFile(urlToDownload, downloadedZipFile);
56
+
57
+ log.info(`Unpacking ${downloadedZipFile} into ${destDir}`);
58
+ await zip.extractAllTo(downloadedZipFile, destDir);
59
+
60
+ log.info(`Deleting ${downloadedZipFile}`);
61
+ } finally {
62
+ if (await fs.exists(downloadedZipFile)) {
63
+ await fs.unlink(downloadedZipFile);
64
+ }
65
+ }
66
+ }
67
+
68
+ (async () => await getWDAPrebuiltPackage())();
@@ -0,0 +1,239 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Image mounter script for mounting and unmounting Personalized Developer Disk Image on iOS devices
4
+ * This script provides a CLI interface to mount/unmount DDI via remote XPC services
5
+ */
6
+
7
+ import {logger} from 'appium/support.js';
8
+ import {promises as fs} from 'fs';
9
+ import path from 'path';
10
+ import {Command} from 'commander';
11
+
12
+ const log = logger.getLogger('ImageMounter');
13
+
14
+ /**
15
+ * ImageMounter class for managing image mounting and unmounting operations
16
+ */
17
+ class ImageMounter {
18
+ constructor() {
19
+ this.remoteXPCModule = null;
20
+ }
21
+
22
+ async initializeRemoteXPC() {
23
+ if (this.remoteXPCModule) {
24
+ return this.remoteXPCModule;
25
+ }
26
+
27
+ try {
28
+ this.remoteXPCModule = await import('appium-ios-remotexpc');
29
+ return this.remoteXPCModule;
30
+ } catch {
31
+ throw new Error(
32
+ 'appium-ios-remotexpc is not installed. Please install it using:\n' +
33
+ 'npm install appium-ios-remotexpc\n\n' +
34
+ 'Note: This is an optional dependency required for image mounting functionality.'
35
+ );
36
+ }
37
+ }
38
+
39
+ async validateFile(filePath, fileType) {
40
+ const absolutePath = path.resolve(filePath);
41
+
42
+ try {
43
+ const stat = await fs.stat(absolutePath);
44
+
45
+ if (!stat.isFile()) {
46
+ throw new Error(`${fileType} path is not a file: ${absolutePath}`);
47
+ }
48
+
49
+ return absolutePath;
50
+ } catch (error) {
51
+ if (error.code === 'ENOENT') {
52
+ throw new Error(`${fileType} file not found: ${absolutePath}`);
53
+ }
54
+ throw error;
55
+ }
56
+ }
57
+
58
+ async getTargetDevice(udid) {
59
+ const {createUsbmux} = await this.initializeRemoteXPC();
60
+
61
+ log.info('Connecting to usbmuxd...');
62
+ const usbmux = await createUsbmux();
63
+
64
+ const devices = await usbmux.listDevices();
65
+ if (devices.length === 0) {
66
+ await usbmux.close();
67
+ throw new Error(
68
+ 'No iOS devices found. Ensure a device is connected, unlocked, and trusted. ' +
69
+ 'See https://appium.github.io/appium-xcuitest-driver/latest/preparation/real-device-config/ for details.'
70
+ );
71
+ }
72
+
73
+ let targetDevice;
74
+ if (udid) {
75
+ targetDevice = devices.find((device) => device.Properties.SerialNumber === udid);
76
+ if (!targetDevice) {
77
+ await usbmux.close();
78
+ throw new Error(
79
+ `Device with UDID ${udid} not found. Available devices:\n` +
80
+ devices.map((d) => ` - ${d.Properties.SerialNumber}`).join('\n')
81
+ );
82
+ }
83
+ } else {
84
+ if (devices.length > 1) {
85
+ log.warn(`Multiple devices found. Using first device: ${devices[0].Properties.SerialNumber}`);
86
+ log.warn('Available devices:');
87
+ devices.forEach((device) =>
88
+ log.warn(` - ${device.Properties.SerialNumber}`
89
+ ));
90
+ log.warn('Use --udid flag to specify a particular device.');
91
+ }
92
+ targetDevice = devices[0];
93
+ }
94
+
95
+ return {usbmux, targetDevice};
96
+ }
97
+
98
+ async withImageMounterService(udid, fn) {
99
+ const {usbmux, targetDevice} = await this.getTargetDevice(udid);
100
+ const deviceUdid = targetDevice.Properties.SerialNumber;
101
+
102
+ try {
103
+ const remoteXPCModule = await this.initializeRemoteXPC();
104
+ const {
105
+ Services
106
+ } = remoteXPCModule;
107
+
108
+ log.info('Starting mobile image mounter service...');
109
+ const {
110
+ mobileImageMounterService: imageMounterService,
111
+ remoteXPC
112
+ } = await Services.startMobileImageMounterService(deviceUdid);
113
+
114
+ try {
115
+ return await fn(imageMounterService, deviceUdid);
116
+ } finally {
117
+ await imageMounterService.cleanup();
118
+ if (remoteXPC) {
119
+ log.info(`Closing remoteXPC connection for device ${deviceUdid}`);
120
+ await remoteXPC.close();
121
+ }
122
+ }
123
+ } finally {
124
+ await usbmux.close();
125
+ }
126
+ }
127
+
128
+ /**
129
+ * Mount Personalized Developer Disk Image on device
130
+ * @param {string} imagePath - Path to the .dmg file
131
+ * @param {string} manifestPath - Path to the BuildManifest.plist file
132
+ * @param {string} trustCachePath - Path to the .trustcache file
133
+ * @param {string} [udid] - Device UDID
134
+ */
135
+ async mount(imagePath, manifestPath, trustCachePath, udid) {
136
+ const [validatedImagePath, validatedManifestPath, validatedTrustCachePath] = await Promise.all([
137
+ this.validateFile(imagePath, 'Image (.dmg)'),
138
+ this.validateFile(manifestPath, 'Build Manifest (.plist)'),
139
+ this.validateFile(trustCachePath, 'Trust Cache (.trustcache)')
140
+ ]);
141
+
142
+ await this.withImageMounterService(udid, async (imageMounterService, deviceUdid) => {
143
+ log.info(`Mounting image on device: ${deviceUdid}`);
144
+
145
+ if (await imageMounterService.isPersonalizedImageMounted()) {
146
+ log.info('✅ Personalized image is already mounted on the device');
147
+ return;
148
+ }
149
+
150
+ await imageMounterService.mount(
151
+ validatedImagePath,
152
+ validatedManifestPath,
153
+ validatedTrustCachePath
154
+ );
155
+
156
+ log.info('✅ Image mounted successfully!');
157
+ });
158
+ }
159
+
160
+ /**
161
+ * Unmount image from device
162
+ * @param {string} [udid] - Device UDID
163
+ * @param {string} [mountPath='/System/Developer'] - Mount path to unmount
164
+ */
165
+ async unmount(udid, mountPath = '/System/Developer') {
166
+ await this.withImageMounterService(udid, async (imageMounterService, deviceUdid) => {
167
+ log.info(`Unmounting image from device: ${deviceUdid}`);
168
+ log.info(`Mount path: ${mountPath}`);
169
+
170
+ await imageMounterService.unmountImage(mountPath);
171
+ log.info('✅ Image unmounted successfully!');
172
+ });
173
+ }
174
+ }
175
+
176
+ /**
177
+ * CLI with Commander.js
178
+ */
179
+ async function main() {
180
+ const program = new Command();
181
+ const imageMounter = new ImageMounter();
182
+
183
+ program
184
+ .name('appium driver run xcuitest image-mounter')
185
+ .description('Mount and unmount Developer Disk Images on iOS devices')
186
+ .version('1.0.0')
187
+ .addHelpText('after', `
188
+ NOTE:
189
+ This script requires the 'appium-ios-remotexpc' package to be installed.
190
+ Install it using: npm install appium-ios-remotexpc`);
191
+
192
+ // Mount command
193
+ program
194
+ .command('mount')
195
+ .description('Mount a Developer Disk Image on iOS device')
196
+ .requiredOption('-i, --image <path>', 'Path to the .dmg image file')
197
+ .requiredOption('-m, --manifest <path>', 'Path to the BuildManifest.plist file')
198
+ .requiredOption('-t, --trustcache <path>', 'Path to the .trustcache file')
199
+ .option('-u, --udid <udid>', 'Target device UDID (optional, uses first device if not specified)')
200
+ .addHelpText('after', `
201
+ EXAMPLES:
202
+ # Mount Developer Disk Image
203
+ appium driver run xcuitest image-mounter mount --image DeveloperDiskImage.dmg --manifest BuildManifest.plist --trustcache DeveloperDiskImage.trustcache
204
+
205
+ # Mount on specific device
206
+ appium driver run xcuitest image-mounter mount --image DeveloperDiskImage.dmg --manifest BuildManifest.plist --trustcache DeveloperDiskImage.trustcache --udid <udid>`)
207
+ .action(async (options) => {
208
+ await imageMounter.mount(
209
+ options.image,
210
+ options.manifest,
211
+ options.trustcache,
212
+ options.udid
213
+ );
214
+ });
215
+
216
+ // Unmount command
217
+ program
218
+ .command('unmount')
219
+ .description('Unmount a Developer Disk Image from iOS device')
220
+ .option('-u, --udid <udid>', 'Target device UDID (optional, uses first device if not specified)')
221
+ .option('-p, --mount-path <path>', 'Mount path to unmount', '/System/Developer')
222
+ .addHelpText('after', `
223
+ EXAMPLES:
224
+ # Unmount from default path
225
+ appium driver run xcuitest image-mounter unmount
226
+
227
+ # Unmount from specific device
228
+ appium driver run xcuitest image-mounter unmount --udid <udid>`)
229
+ .action(async (options) => {
230
+ await imageMounter.unmount(
231
+ options.udid,
232
+ options.mountPath
233
+ );
234
+ });
235
+
236
+ await program.parseAsync(process.argv);
237
+ }
238
+
239
+ (async () => await main())();
@@ -0,0 +1,15 @@
1
+ import path from 'node:path';
2
+ import { exec } from 'teen_process';
3
+ import { logger } from 'appium/support.js';
4
+ import { BOOTSTRAP_PATH } from 'appium-webdriveragent';
5
+
6
+ const log = logger.getLogger('WDA');
7
+ const XCODEPROJ_NAME = 'WebDriverAgent.xcodeproj';
8
+
9
+ async function openWda() {
10
+ const dstPath = path.resolve(BOOTSTRAP_PATH, XCODEPROJ_NAME);
11
+ log.info(`Opening '${dstPath}'`);
12
+ await exec('open', [dstPath]);
13
+ }
14
+
15
+ (async () => await openWda())();