appium-ios-remotexpc 0.6.2 → 0.7.0
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.
- package/CHANGELOG.md +6 -0
- package/build/src/index.d.ts +1 -1
- package/build/src/index.d.ts.map +1 -1
- package/build/src/lib/types.d.ts +100 -0
- package/build/src/lib/types.d.ts.map +1 -1
- package/build/src/services/ios/springboard-service/index.d.ts +39 -0
- package/build/src/services/ios/springboard-service/index.d.ts.map +1 -0
- package/build/src/services/ios/springboard-service/index.js +174 -0
- package/build/src/services.d.ts +2 -1
- package/build/src/services.d.ts.map +1 -1
- package/build/src/services.js +12 -0
- package/package.json +2 -1
- package/src/index.ts +2 -0
- package/src/lib/types.ts +111 -0
- package/src/services/ios/springboard-service/index.ts +197 -0
- package/src/services.ts +18 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [0.7.0](https://github.com/appium/appium-ios-remotexpc/compare/v0.6.2...v0.7.0) (2025-10-09)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* implement springboard service ([#79](https://github.com/appium/appium-ios-remotexpc/issues/79)) ([eae9b42](https://github.com/appium/appium-ios-remotexpc/commit/eae9b427dfb644a8b67f8eb76505d4aba7094311))
|
|
6
|
+
|
|
1
7
|
## [0.6.2](https://github.com/appium/appium-ios-remotexpc/compare/v0.6.1...v0.6.2) (2025-10-08)
|
|
2
8
|
|
|
3
9
|
### Bug Fixes
|
package/build/src/index.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ import { TunnelRegistryServer, startTunnelRegistryServer } from './lib/tunnel/tu
|
|
|
4
4
|
import { Usbmux, createUsbmux } from './lib/usbmux/index.js';
|
|
5
5
|
import * as Services from './services.js';
|
|
6
6
|
import { startCoreDeviceProxy } from './services/ios/tunnel-service/index.js';
|
|
7
|
-
export type { DiagnosticsService, MobileImageMounterService, NotificationProxyService, MobileConfigService, SyslogService, SocketInfo, TunnelResult, TunnelRegistry, TunnelRegistryEntry, DiagnosticsServiceWithConnection, MobileImageMounterServiceWithConnection, NotificationProxyServiceWithConnection, MobileConfigServiceWithConnection, } from './lib/types.js';
|
|
7
|
+
export type { DiagnosticsService, MobileImageMounterService, NotificationProxyService, MobileConfigService, SpringboardService, SyslogService, SocketInfo, TunnelResult, TunnelRegistry, TunnelRegistryEntry, DiagnosticsServiceWithConnection, MobileImageMounterServiceWithConnection, NotificationProxyServiceWithConnection, MobileConfigServiceWithConnection, SpringboardServiceWithConnection, } from './lib/types.js';
|
|
8
8
|
export { createUsbmux, Services, Usbmux, TunnelManager, PacketStreamServer, PacketStreamClient, createLockdownServiceByUDID, startCoreDeviceProxy, TunnelRegistryServer, startTunnelRegistryServer, };
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
package/build/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,YAAY,EACV,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,gCAAgC,EAChC,uCAAuC,EACvC,sCAAsC,EACtC,iCAAiC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,YAAY,EACV,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,gCAAgC,EAChC,uCAAuC,EACvC,sCAAsC,EACtC,iCAAiC,EACjC,gCAAgC,GACjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,EAC3B,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,GAC1B,CAAC"}
|
package/build/src/lib/types.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type { PacketData } from 'appium-ios-tuntap';
|
|
|
5
5
|
import { EventEmitter } from 'events';
|
|
6
6
|
import type { ServiceConnection } from '../service-connection.js';
|
|
7
7
|
import type { BaseService, Service } from '../services/ios/base-service.js';
|
|
8
|
+
import type { InterfaceOrientation } from '../services/ios/springboard-service/index.js';
|
|
8
9
|
import type { RemoteXpcConnection } from './remote-xpc/remote-xpc-connection.js';
|
|
9
10
|
import type { Device } from './usbmux/index.js';
|
|
10
11
|
/**
|
|
@@ -430,4 +431,103 @@ export interface MobileImageMounterServiceWithConnection {
|
|
|
430
431
|
/** The RemoteXPC connection for service management */
|
|
431
432
|
remoteXPC: RemoteXpcConnection;
|
|
432
433
|
}
|
|
434
|
+
/**
|
|
435
|
+
* Represents the instance side of SpringboardService
|
|
436
|
+
*/
|
|
437
|
+
export interface SpringboardService extends BaseService {
|
|
438
|
+
/**
|
|
439
|
+
* Gets the icon state
|
|
440
|
+
* @returns Promise resolving to the icon state
|
|
441
|
+
* e.g.
|
|
442
|
+
* [
|
|
443
|
+
* {
|
|
444
|
+
* displayIdentifier: 'com.apple.MobileSMS',
|
|
445
|
+
* displayName: 'Messages',
|
|
446
|
+
* iconModDate: 2025-09-03T12:55:46.400Z,
|
|
447
|
+
* bundleVersion: '1402.700.63.2.1',
|
|
448
|
+
* bundleIdentifier: 'com.apple.MobileSMS'
|
|
449
|
+
* },
|
|
450
|
+
* {
|
|
451
|
+
* displayIdentifier: 'com.apple.measure',
|
|
452
|
+
* displayName: 'Measure',
|
|
453
|
+
* iconModDate: 2025-09-03T12:55:49.522Z,
|
|
454
|
+
* bundleVersion: '175.100.3.0.1',
|
|
455
|
+
* bundleIdentifier: 'com.apple.measure'
|
|
456
|
+
* },
|
|
457
|
+
* ...
|
|
458
|
+
* ]
|
|
459
|
+
*/
|
|
460
|
+
getIconState(): Promise<PlistDictionary>;
|
|
461
|
+
/**
|
|
462
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation (maybe?)
|
|
463
|
+
* Sets the icon state
|
|
464
|
+
* @param newState where is the payload from getIconState
|
|
465
|
+
*/
|
|
466
|
+
setIconState(newState: PlistDictionary[]): Promise<void>;
|
|
467
|
+
/**
|
|
468
|
+
* Gets the icon PNG data for a given bundle ID
|
|
469
|
+
* @param bundleID The bundle ID of the app
|
|
470
|
+
* @returns {Promise<Buffer>} which is the PNG data of the app icon
|
|
471
|
+
*/
|
|
472
|
+
getIconPNGData(bundleID: string): Promise<Buffer>;
|
|
473
|
+
/**
|
|
474
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation
|
|
475
|
+
* Add payload structure when it is fixed
|
|
476
|
+
* Gets wallpaper info
|
|
477
|
+
* @param wallpaperName The name of the wallpaper
|
|
478
|
+
* @returns Promise resolving to the wallpaper info
|
|
479
|
+
*/
|
|
480
|
+
getWallpaperInfo(wallpaperName: string): Promise<PlistDictionary>;
|
|
481
|
+
/**
|
|
482
|
+
* Gets homescreen icon metrics
|
|
483
|
+
* @returns {Promise<PlistDictionary>}
|
|
484
|
+
* e.g.
|
|
485
|
+
* {
|
|
486
|
+
* homeScreenIconHeight: 64,
|
|
487
|
+
* homeScreenIconMaxPages: 15,
|
|
488
|
+
* homeScreenWidth: 414,
|
|
489
|
+
* homeScreenHeight: 896,
|
|
490
|
+
* homeScreenIconDockMaxCount: 4,
|
|
491
|
+
* homeScreenIconFolderMaxPages: 15,
|
|
492
|
+
* homeScreenIconWidth: 64,
|
|
493
|
+
* homeScreenIconRows: 6,
|
|
494
|
+
* homeScreenIconColumns: 4,
|
|
495
|
+
* homeScreenIconFolderColumns: 3,
|
|
496
|
+
* homeScreenIconFolderRows: 3
|
|
497
|
+
* }
|
|
498
|
+
*/
|
|
499
|
+
getHomescreenIconMetrics(): Promise<PlistDictionary>;
|
|
500
|
+
/**
|
|
501
|
+
* Gets the current interface orientation
|
|
502
|
+
* @returns {Promise<InterfaceOrientation>}
|
|
503
|
+
* 1 = Portrait
|
|
504
|
+
* 2 = PortraitUpsideDown
|
|
505
|
+
* 3 = Landscape
|
|
506
|
+
* 4 = LandscapeHomeToLeft
|
|
507
|
+
*/
|
|
508
|
+
getInterfaceOrientation(): Promise<InterfaceOrientation>;
|
|
509
|
+
/**
|
|
510
|
+
* Gets wallpaper preview image for homescreen and lockscreen
|
|
511
|
+
* @param wallpaperName
|
|
512
|
+
* @returns {Promise<Buffer>} which is a wallpaper preview image
|
|
513
|
+
*/
|
|
514
|
+
getWallpaperPreviewImage(wallpaperName: 'homescreen' | 'lockscreen'): Promise<Buffer>;
|
|
515
|
+
/**
|
|
516
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation
|
|
517
|
+
* Use getWallpaperPreviewImage('homescreen') instead
|
|
518
|
+
* Gets wallpaper PNG data
|
|
519
|
+
* @param wallpaperName
|
|
520
|
+
* @returns {Promise<Buffer>}
|
|
521
|
+
*/
|
|
522
|
+
getWallpaperPNGData(wallpaperName: string): Promise<Buffer>;
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* Represents a SpringboardService instance with its associated RemoteXPC connection
|
|
526
|
+
*/
|
|
527
|
+
export interface SpringboardServiceWithConnection {
|
|
528
|
+
/** The SpringboardService instance */
|
|
529
|
+
springboardService: SpringboardService;
|
|
530
|
+
/** The RemoteXPC connection for service management */
|
|
531
|
+
remoteXPC: RemoteXpcConnection;
|
|
532
|
+
}
|
|
433
533
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,MAAM,GACN,UAAU,GACV,eAAe,GACf,IAAI,CAAC;AAET;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,eAAe,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,MAAM,GACN,UAAU,GACV,QAAQ,GACR,aAAa,GACb,IAAI,CAAC;AAET;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAEpD,MAAM,WAAW,mBAAmB;IAClC,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC7C,kCAAkC;IAClC,QAAQ,EAAE;QACR,iDAAiD;QACjD,WAAW,EAAE,MAAM,CAAC;QACpB,8CAA8C;QAC9C,YAAY,EAAE,MAAM,CAAC;QACrB,yCAAyC;QACzC,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,UAAU,EAAE;QACV,+BAA+B;QAC/B,IAAI,EAAE,MAAM,CAAC;QACb,+BAA+B;QAC/B,OAAO,EAAE,MAAM,CAAC;QAChB,0DAA0D;QAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,MAAM,EAAE;QACN,+BAA+B;QAC/B,OAAO,EAAE,MAAM,CAAC;QAChB,0DAA0D;QAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAEpC;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAErC;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAElC;;;;OAIG;IACH,UAAU,CAAC,OAAO,CAAC,EAAE;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,eAAe,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,WAAW;IAC3D;;;OAGG;IACH,iCAAiC,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChE;;;;OAIG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACxD;;;;OAIG;IACH,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACrD;;;;OAIG;IACH,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IACpE;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD;;;OAGG;IACH,4BAA4B,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3D;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C;;;;OAIG;IACH,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD;;;OAGG;IACH,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC;;;OAGG;IACH,KAAK,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,kBAAkB,CAAC;CACrD;AAED;;;GAGG;AACH,MAAM,WAAW,gCAAgC;IAC/C,sCAAsC;IACtC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,wEAAwE;IACxE,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,sCAAsC;IACrD,4CAA4C;IAC5C,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,wEAAwE;IACxE,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,iCAAiC;IAChD,uCAAuC;IACvC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,wEAAwE;IACxE,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,iBAAiB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IACtD,+BAA+B;IAC/B,oBAAoB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD;;;;;;OAMG;IACH,KAAK,CACH,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC,EACtD,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAE5D;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAE9C;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAEhE;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAExD;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IAE3D;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,KAAK,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,WAAW;IAC5D;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE9C;;;OAGG;IACH,0BAA0B,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/C;;;;;OAKG;IACH,KAAK,CACH,aAAa,EAAE,MAAM,EACrB,qBAAqB,EAAE,MAAM,EAC7B,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;OAGG;IACH,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;OAGG;IACH,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7C;;;;OAIG;IACH,UAAU,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5D;;;OAGG;IACH,+BAA+B,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IAE5D;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE9B;;;;;OAKG;IACH,4BAA4B,CAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oCAAoC;IACnD;;OAEG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC;;;OAGG;IACH,KAAK,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,yBAAyB,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,uCAAuC;IACtD,6CAA6C;IAC7C,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,sDAAsD;IACtD,SAAS,EAAE,mBAAmB,CAAC;CAChC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type PlistDictionary, type SpringboardService as SpringboardInterface } from '../../../lib/types.js';
|
|
2
|
+
import { ServiceConnection } from '../../../service-connection.js';
|
|
3
|
+
import { BaseService } from '../base-service.js';
|
|
4
|
+
declare enum InterfaceOrientation {
|
|
5
|
+
PORTRAIT = 1,// 0 degrees (default)
|
|
6
|
+
PORTRAIT_UPSIDE_DOWN = 2,// 180 degrees
|
|
7
|
+
LANDSCAPE = 3,// 90 degrees clockwise
|
|
8
|
+
LANDSCAPE_HOME_TO_LEFT = 4
|
|
9
|
+
}
|
|
10
|
+
declare class SpringBoardService extends BaseService implements SpringboardInterface {
|
|
11
|
+
static readonly RSD_SERVICE_NAME = "com.apple.springboardservices.shim.remote";
|
|
12
|
+
private _conn;
|
|
13
|
+
constructor(address: [string, number]);
|
|
14
|
+
getIconState(): Promise<PlistDictionary>;
|
|
15
|
+
/**
|
|
16
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation (maybe?)
|
|
17
|
+
* Uncomment tests when it is fixed
|
|
18
|
+
*/
|
|
19
|
+
setIconState(newState?: PlistDictionary[]): Promise<void>;
|
|
20
|
+
getIconPNGData(bundleID: string): Promise<Buffer>;
|
|
21
|
+
/**
|
|
22
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation
|
|
23
|
+
* Add tests when it is fixed
|
|
24
|
+
*/
|
|
25
|
+
getWallpaperInfo(wallpaperName: string): Promise<PlistDictionary>;
|
|
26
|
+
getWallpaperPreviewImage(wallpaperName: 'homescreen' | 'lockscreen'): Promise<Buffer>;
|
|
27
|
+
getHomescreenIconMetrics(): Promise<PlistDictionary>;
|
|
28
|
+
getInterfaceOrientation(): Promise<InterfaceOrientation>;
|
|
29
|
+
/**
|
|
30
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation
|
|
31
|
+
* Add tests when it is fixed
|
|
32
|
+
*/
|
|
33
|
+
getWallpaperPNGData(wallpaperName: string): Promise<Buffer>;
|
|
34
|
+
connectToSpringboardService(): Promise<ServiceConnection>;
|
|
35
|
+
private sendRequestAndReceive;
|
|
36
|
+
private getServiceConfig;
|
|
37
|
+
}
|
|
38
|
+
export { SpringBoardService, InterfaceOrientation };
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/springboard-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,IAAI,oBAAoB,EAChD,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,aAAK,oBAAoB;IACvB,QAAQ,IAAI,CAAE,sBAAsB;IACpC,oBAAoB,IAAI,CAAE,cAAc;IACxC,SAAS,IAAI,CAAE,uBAAuB;IACtC,sBAAsB,IAAI;CAC3B;AAED,cAAM,kBAAmB,SAAQ,WAAY,YAAW,oBAAoB;IAC1E,MAAM,CAAC,QAAQ,CAAC,gBAAgB,+CACc;IAC9C,OAAO,CAAC,KAAK,CAAkC;gBAEnC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAI/B,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC;IAe9C;;;OAGG;IACG,YAAY,CAAC,QAAQ,GAAE,eAAe,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB7D,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBvD;;;OAGG;IACG,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAejE,wBAAwB,CAC5B,aAAa,EAAE,YAAY,GAAG,YAAY,GACzC,OAAO,CAAC,MAAM,CAAC;IAkBZ,wBAAwB,IAAI,OAAO,CAAC,eAAe,CAAC;IAgBpD,uBAAuB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAgB9D;;;OAGG;IACG,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB3D,2BAA2B,IAAI,OAAO,CAAC,iBAAiB,CAAC;YASjD,qBAAqB;IAWnC,OAAO,CAAC,gBAAgB;CASzB;AAED,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import {} from '../../../lib/types.js';
|
|
2
|
+
import { ServiceConnection } from '../../../service-connection.js';
|
|
3
|
+
import { BaseService } from '../base-service.js';
|
|
4
|
+
var InterfaceOrientation;
|
|
5
|
+
(function (InterfaceOrientation) {
|
|
6
|
+
InterfaceOrientation[InterfaceOrientation["PORTRAIT"] = 1] = "PORTRAIT";
|
|
7
|
+
InterfaceOrientation[InterfaceOrientation["PORTRAIT_UPSIDE_DOWN"] = 2] = "PORTRAIT_UPSIDE_DOWN";
|
|
8
|
+
InterfaceOrientation[InterfaceOrientation["LANDSCAPE"] = 3] = "LANDSCAPE";
|
|
9
|
+
InterfaceOrientation[InterfaceOrientation["LANDSCAPE_HOME_TO_LEFT"] = 4] = "LANDSCAPE_HOME_TO_LEFT";
|
|
10
|
+
})(InterfaceOrientation || (InterfaceOrientation = {}));
|
|
11
|
+
class SpringBoardService extends BaseService {
|
|
12
|
+
static RSD_SERVICE_NAME = 'com.apple.springboardservices.shim.remote';
|
|
13
|
+
_conn = null;
|
|
14
|
+
constructor(address) {
|
|
15
|
+
super(address);
|
|
16
|
+
}
|
|
17
|
+
async getIconState() {
|
|
18
|
+
try {
|
|
19
|
+
const req = {
|
|
20
|
+
command: 'getIconState',
|
|
21
|
+
formatVersion: '2',
|
|
22
|
+
};
|
|
23
|
+
return await this.sendRequestAndReceive(req);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error instanceof Error) {
|
|
27
|
+
throw new Error(`Failed to get Icon state: ${error.message}`);
|
|
28
|
+
}
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation (maybe?)
|
|
34
|
+
* Uncomment tests when it is fixed
|
|
35
|
+
*/
|
|
36
|
+
async setIconState(newState = []) {
|
|
37
|
+
try {
|
|
38
|
+
const req = {
|
|
39
|
+
command: 'setIconState',
|
|
40
|
+
iconState: newState,
|
|
41
|
+
};
|
|
42
|
+
await this.sendRequestAndReceive(req);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (error instanceof Error) {
|
|
46
|
+
throw new Error(`Failed to set icon state: ${error.message}`);
|
|
47
|
+
}
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async getIconPNGData(bundleID) {
|
|
52
|
+
try {
|
|
53
|
+
const req = {
|
|
54
|
+
command: 'getIconPNGData',
|
|
55
|
+
bundleId: bundleID,
|
|
56
|
+
};
|
|
57
|
+
const res = await this.sendRequestAndReceive(req);
|
|
58
|
+
return res.pngData;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (error instanceof Error) {
|
|
62
|
+
throw new Error(`Failed to get Icon PNG data: ${error.message}`);
|
|
63
|
+
}
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation
|
|
69
|
+
* Add tests when it is fixed
|
|
70
|
+
*/
|
|
71
|
+
async getWallpaperInfo(wallpaperName) {
|
|
72
|
+
try {
|
|
73
|
+
const req = {
|
|
74
|
+
command: 'getWallpaperInfo',
|
|
75
|
+
wallpaperName,
|
|
76
|
+
};
|
|
77
|
+
return await this.sendRequestAndReceive(req);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (error instanceof Error) {
|
|
81
|
+
throw new Error(`Failed to get wallpaper info: ${error.message}`);
|
|
82
|
+
}
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async getWallpaperPreviewImage(wallpaperName) {
|
|
87
|
+
try {
|
|
88
|
+
const req = {
|
|
89
|
+
command: 'getWallpaperPreviewImage',
|
|
90
|
+
wallpaperName,
|
|
91
|
+
};
|
|
92
|
+
const res = await this.sendRequestAndReceive(req);
|
|
93
|
+
return res.pngData;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
if (error instanceof Error) {
|
|
97
|
+
throw new Error(`Failed to get wallpaper preview image: ${error.message}`);
|
|
98
|
+
}
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async getHomescreenIconMetrics() {
|
|
103
|
+
try {
|
|
104
|
+
const req = {
|
|
105
|
+
command: 'getHomeScreenIconMetrics',
|
|
106
|
+
};
|
|
107
|
+
return await this.sendRequestAndReceive(req);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
if (error instanceof Error) {
|
|
111
|
+
throw new Error(`Failed to get homescreen icon metrics: ${error.message}`);
|
|
112
|
+
}
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async getInterfaceOrientation() {
|
|
117
|
+
try {
|
|
118
|
+
const req = {
|
|
119
|
+
command: 'getInterfaceOrientation',
|
|
120
|
+
};
|
|
121
|
+
const res = await this.sendRequestAndReceive(req);
|
|
122
|
+
return res.interfaceOrientation;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
if (error instanceof Error) {
|
|
126
|
+
throw new Error(`Failed to get interface orientation: ${error.message}`);
|
|
127
|
+
}
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation
|
|
133
|
+
* Add tests when it is fixed
|
|
134
|
+
*/
|
|
135
|
+
async getWallpaperPNGData(wallpaperName) {
|
|
136
|
+
try {
|
|
137
|
+
const req = {
|
|
138
|
+
command: 'getHomeScreenWallpaperPNGData',
|
|
139
|
+
wallpaperName,
|
|
140
|
+
};
|
|
141
|
+
const res = await this.sendRequestAndReceive(req);
|
|
142
|
+
return res.pngData;
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
if (error instanceof Error) {
|
|
146
|
+
throw new Error(`Failed to get wallpaper PNG data: ${error.message}`);
|
|
147
|
+
}
|
|
148
|
+
throw error;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async connectToSpringboardService() {
|
|
152
|
+
if (this._conn) {
|
|
153
|
+
return this._conn;
|
|
154
|
+
}
|
|
155
|
+
const service = this.getServiceConfig();
|
|
156
|
+
this._conn = await this.startLockdownService(service);
|
|
157
|
+
return this._conn;
|
|
158
|
+
}
|
|
159
|
+
async sendRequestAndReceive(request) {
|
|
160
|
+
if (!this._conn) {
|
|
161
|
+
this._conn = await this.connectToSpringboardService();
|
|
162
|
+
}
|
|
163
|
+
// Skip StartService response
|
|
164
|
+
await this._conn.sendAndReceive(request);
|
|
165
|
+
return await this._conn.sendPlistRequest(request);
|
|
166
|
+
}
|
|
167
|
+
getServiceConfig() {
|
|
168
|
+
return {
|
|
169
|
+
serviceName: SpringBoardService.RSD_SERVICE_NAME,
|
|
170
|
+
port: this.address[1].toString(),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
export { SpringBoardService, InterfaceOrientation };
|
package/build/src/services.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { RemoteXpcConnection } from './lib/remote-xpc/remote-xpc-connection.js';
|
|
2
|
-
import type { DiagnosticsServiceWithConnection, MobileConfigServiceWithConnection, MobileImageMounterServiceWithConnection, NotificationProxyServiceWithConnection, SyslogService as SyslogServiceType } from './lib/types.js';
|
|
2
|
+
import type { DiagnosticsServiceWithConnection, MobileConfigServiceWithConnection, MobileImageMounterServiceWithConnection, NotificationProxyServiceWithConnection, SpringboardServiceWithConnection, SyslogService as SyslogServiceType } from './lib/types.js';
|
|
3
3
|
export declare function startDiagnosticsService(udid: string): Promise<DiagnosticsServiceWithConnection>;
|
|
4
4
|
export declare function startNotificationProxyService(udid: string): Promise<NotificationProxyServiceWithConnection>;
|
|
5
5
|
export declare function startMobileConfigService(udid: string): Promise<MobileConfigServiceWithConnection>;
|
|
6
6
|
export declare function startMobileImageMounterService(udid: string): Promise<MobileImageMounterServiceWithConnection>;
|
|
7
|
+
export declare function startSpringboardService(udid: string): Promise<SpringboardServiceWithConnection>;
|
|
7
8
|
export declare function startSyslogService(udid: string): Promise<SyslogServiceType>;
|
|
8
9
|
export declare function createRemoteXPCConnection(udid: string): Promise<{
|
|
9
10
|
remoteXPC: RemoteXpcConnection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/services.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAGhF,OAAO,KAAK,EACV,gCAAgC,EAChC,iCAAiC,EACjC,uCAAuC,EACvC,sCAAsC,EACtC,aAAa,IAAI,iBAAiB,EACnC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/services.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAGhF,OAAO,KAAK,EACV,gCAAgC,EAChC,iCAAiC,EACjC,uCAAuC,EACvC,sCAAsC,EACtC,gCAAgC,EAChC,aAAa,IAAI,iBAAiB,EACnC,MAAM,gBAAgB,CAAC;AAWxB,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gCAAgC,CAAC,CAY3C;AAED,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,sCAAsC,CAAC,CAYjD;AAED,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,iCAAiC,CAAC,CAY5C;AACD,wBAAsB,8BAA8B,CAClD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,uCAAuC,CAAC,CAYlD;AAED,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gCAAgC,CAAC,CAY3C;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,iBAAiB,CAAC,CAG5B;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,MAAM;;;;;;;;GAO3D"}
|
package/build/src/services.js
CHANGED
|
@@ -6,6 +6,7 @@ import DiagnosticsService from './services/ios/diagnostic-service/index.js';
|
|
|
6
6
|
import { MobileConfigService } from './services/ios/mobile-config/index.js';
|
|
7
7
|
import MobileImageMounterService from './services/ios/mobile-image-mounter/index.js';
|
|
8
8
|
import { NotificationProxyService } from './services/ios/notification-proxy/index.js';
|
|
9
|
+
import { SpringBoardService } from './services/ios/springboard-service/index.js';
|
|
9
10
|
import SyslogService from './services/ios/syslog-service/index.js';
|
|
10
11
|
const APPIUM_XCUITEST_DRIVER_NAME = 'appium-xcuitest-driver';
|
|
11
12
|
const TUNNEL_REGISTRY_PORT = 'tunnelRegistryPort';
|
|
@@ -53,6 +54,17 @@ export async function startMobileImageMounterService(udid) {
|
|
|
53
54
|
]),
|
|
54
55
|
};
|
|
55
56
|
}
|
|
57
|
+
export async function startSpringboardService(udid) {
|
|
58
|
+
const { remoteXPC, tunnelConnection } = await createRemoteXPCConnection(udid);
|
|
59
|
+
const springboardService = remoteXPC.findService(SpringBoardService.RSD_SERVICE_NAME);
|
|
60
|
+
return {
|
|
61
|
+
remoteXPC: remoteXPC,
|
|
62
|
+
springboardService: new SpringBoardService([
|
|
63
|
+
tunnelConnection.host,
|
|
64
|
+
parseInt(springboardService.port, 10),
|
|
65
|
+
]),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
56
68
|
export async function startSyslogService(udid) {
|
|
57
69
|
const { tunnelConnection } = await createRemoteXPCConnection(udid);
|
|
58
70
|
return new SyslogService([tunnelConnection.host, tunnelConnection.port]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-ios-remotexpc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"main": "build/src/index.js",
|
|
5
5
|
"types": "build/src/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"test:notification": "mocha test/integration/notification-proxy-test.ts --exit --timeout 1m",
|
|
32
32
|
"test:image-mounter": "mocha test/integration/mobile-image-mounter-test.ts --exit --timeout 1m",
|
|
33
33
|
"test:mobile-config": "mocha test/integration/mobile-config-test.ts --exit --timeout 1m",
|
|
34
|
+
"test:springboard": "mocha test/integration/springboard-service-test.ts --exit --timeout 1m",
|
|
34
35
|
"test:unit": "mocha 'test/unit/**/*.ts' --exit --timeout 2m",
|
|
35
36
|
"test:tunnel-creation": "sudo tsx scripts/test-tunnel-creation.ts",
|
|
36
37
|
"test:tunnel-creation:lsof": "sudo tsx scripts/test-tunnel-creation.ts --keep-open"
|
package/src/index.ts
CHANGED
|
@@ -17,6 +17,7 @@ export type {
|
|
|
17
17
|
MobileImageMounterService,
|
|
18
18
|
NotificationProxyService,
|
|
19
19
|
MobileConfigService,
|
|
20
|
+
SpringboardService,
|
|
20
21
|
SyslogService,
|
|
21
22
|
SocketInfo,
|
|
22
23
|
TunnelResult,
|
|
@@ -26,6 +27,7 @@ export type {
|
|
|
26
27
|
MobileImageMounterServiceWithConnection,
|
|
27
28
|
NotificationProxyServiceWithConnection,
|
|
28
29
|
MobileConfigServiceWithConnection,
|
|
30
|
+
SpringboardServiceWithConnection,
|
|
29
31
|
} from './lib/types.js';
|
|
30
32
|
export {
|
|
31
33
|
createUsbmux,
|
package/src/lib/types.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { EventEmitter } from 'events';
|
|
|
6
6
|
|
|
7
7
|
import type { ServiceConnection } from '../service-connection.js';
|
|
8
8
|
import type { BaseService, Service } from '../services/ios/base-service.js';
|
|
9
|
+
import type { InterfaceOrientation } from '../services/ios/springboard-service/index.js';
|
|
9
10
|
import type { RemoteXpcConnection } from './remote-xpc/remote-xpc-connection.js';
|
|
10
11
|
import type { Device } from './usbmux/index.js';
|
|
11
12
|
|
|
@@ -508,3 +509,113 @@ export interface MobileImageMounterServiceWithConnection {
|
|
|
508
509
|
/** The RemoteXPC connection for service management */
|
|
509
510
|
remoteXPC: RemoteXpcConnection;
|
|
510
511
|
}
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
* Represents the instance side of SpringboardService
|
|
515
|
+
*/
|
|
516
|
+
export interface SpringboardService extends BaseService {
|
|
517
|
+
/**
|
|
518
|
+
* Gets the icon state
|
|
519
|
+
* @returns Promise resolving to the icon state
|
|
520
|
+
* e.g.
|
|
521
|
+
* [
|
|
522
|
+
* {
|
|
523
|
+
* displayIdentifier: 'com.apple.MobileSMS',
|
|
524
|
+
* displayName: 'Messages',
|
|
525
|
+
* iconModDate: 2025-09-03T12:55:46.400Z,
|
|
526
|
+
* bundleVersion: '1402.700.63.2.1',
|
|
527
|
+
* bundleIdentifier: 'com.apple.MobileSMS'
|
|
528
|
+
* },
|
|
529
|
+
* {
|
|
530
|
+
* displayIdentifier: 'com.apple.measure',
|
|
531
|
+
* displayName: 'Measure',
|
|
532
|
+
* iconModDate: 2025-09-03T12:55:49.522Z,
|
|
533
|
+
* bundleVersion: '175.100.3.0.1',
|
|
534
|
+
* bundleIdentifier: 'com.apple.measure'
|
|
535
|
+
* },
|
|
536
|
+
* ...
|
|
537
|
+
* ]
|
|
538
|
+
*/
|
|
539
|
+
getIconState(): Promise<PlistDictionary>;
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation (maybe?)
|
|
543
|
+
* Sets the icon state
|
|
544
|
+
* @param newState where is the payload from getIconState
|
|
545
|
+
*/
|
|
546
|
+
setIconState(newState: PlistDictionary[]): Promise<void>;
|
|
547
|
+
|
|
548
|
+
/**
|
|
549
|
+
* Gets the icon PNG data for a given bundle ID
|
|
550
|
+
* @param bundleID The bundle ID of the app
|
|
551
|
+
* @returns {Promise<Buffer>} which is the PNG data of the app icon
|
|
552
|
+
*/
|
|
553
|
+
getIconPNGData(bundleID: string): Promise<Buffer>;
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation
|
|
557
|
+
* Add payload structure when it is fixed
|
|
558
|
+
* Gets wallpaper info
|
|
559
|
+
* @param wallpaperName The name of the wallpaper
|
|
560
|
+
* @returns Promise resolving to the wallpaper info
|
|
561
|
+
*/
|
|
562
|
+
getWallpaperInfo(wallpaperName: string): Promise<PlistDictionary>;
|
|
563
|
+
|
|
564
|
+
/**
|
|
565
|
+
* Gets homescreen icon metrics
|
|
566
|
+
* @returns {Promise<PlistDictionary>}
|
|
567
|
+
* e.g.
|
|
568
|
+
* {
|
|
569
|
+
* homeScreenIconHeight: 64,
|
|
570
|
+
* homeScreenIconMaxPages: 15,
|
|
571
|
+
* homeScreenWidth: 414,
|
|
572
|
+
* homeScreenHeight: 896,
|
|
573
|
+
* homeScreenIconDockMaxCount: 4,
|
|
574
|
+
* homeScreenIconFolderMaxPages: 15,
|
|
575
|
+
* homeScreenIconWidth: 64,
|
|
576
|
+
* homeScreenIconRows: 6,
|
|
577
|
+
* homeScreenIconColumns: 4,
|
|
578
|
+
* homeScreenIconFolderColumns: 3,
|
|
579
|
+
* homeScreenIconFolderRows: 3
|
|
580
|
+
* }
|
|
581
|
+
*/
|
|
582
|
+
getHomescreenIconMetrics(): Promise<PlistDictionary>;
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Gets the current interface orientation
|
|
586
|
+
* @returns {Promise<InterfaceOrientation>}
|
|
587
|
+
* 1 = Portrait
|
|
588
|
+
* 2 = PortraitUpsideDown
|
|
589
|
+
* 3 = Landscape
|
|
590
|
+
* 4 = LandscapeHomeToLeft
|
|
591
|
+
*/
|
|
592
|
+
getInterfaceOrientation(): Promise<InterfaceOrientation>;
|
|
593
|
+
|
|
594
|
+
/**
|
|
595
|
+
* Gets wallpaper preview image for homescreen and lockscreen
|
|
596
|
+
* @param wallpaperName
|
|
597
|
+
* @returns {Promise<Buffer>} which is a wallpaper preview image
|
|
598
|
+
*/
|
|
599
|
+
getWallpaperPreviewImage(
|
|
600
|
+
wallpaperName: 'homescreen' | 'lockscreen',
|
|
601
|
+
): Promise<Buffer>;
|
|
602
|
+
|
|
603
|
+
/**
|
|
604
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation
|
|
605
|
+
* Use getWallpaperPreviewImage('homescreen') instead
|
|
606
|
+
* Gets wallpaper PNG data
|
|
607
|
+
* @param wallpaperName
|
|
608
|
+
* @returns {Promise<Buffer>}
|
|
609
|
+
*/
|
|
610
|
+
getWallpaperPNGData(wallpaperName: string): Promise<Buffer>;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
/**
|
|
614
|
+
* Represents a SpringboardService instance with its associated RemoteXPC connection
|
|
615
|
+
*/
|
|
616
|
+
export interface SpringboardServiceWithConnection {
|
|
617
|
+
/** The SpringboardService instance */
|
|
618
|
+
springboardService: SpringboardService;
|
|
619
|
+
/** The RemoteXPC connection for service management */
|
|
620
|
+
remoteXPC: RemoteXpcConnection;
|
|
621
|
+
}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type PlistDictionary,
|
|
3
|
+
type SpringboardService as SpringboardInterface,
|
|
4
|
+
} from '../../../lib/types.js';
|
|
5
|
+
import { ServiceConnection } from '../../../service-connection.js';
|
|
6
|
+
import { BaseService } from '../base-service.js';
|
|
7
|
+
|
|
8
|
+
enum InterfaceOrientation {
|
|
9
|
+
PORTRAIT = 1, // 0 degrees (default)
|
|
10
|
+
PORTRAIT_UPSIDE_DOWN = 2, // 180 degrees
|
|
11
|
+
LANDSCAPE = 3, // 90 degrees clockwise
|
|
12
|
+
LANDSCAPE_HOME_TO_LEFT = 4, // 270 degrees clockwise
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
class SpringBoardService extends BaseService implements SpringboardInterface {
|
|
16
|
+
static readonly RSD_SERVICE_NAME =
|
|
17
|
+
'com.apple.springboardservices.shim.remote';
|
|
18
|
+
private _conn: ServiceConnection | null = null;
|
|
19
|
+
|
|
20
|
+
constructor(address: [string, number]) {
|
|
21
|
+
super(address);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async getIconState(): Promise<PlistDictionary> {
|
|
25
|
+
try {
|
|
26
|
+
const req = {
|
|
27
|
+
command: 'getIconState',
|
|
28
|
+
formatVersion: '2',
|
|
29
|
+
};
|
|
30
|
+
return await this.sendRequestAndReceive(req);
|
|
31
|
+
} catch (error) {
|
|
32
|
+
if (error instanceof Error) {
|
|
33
|
+
throw new Error(`Failed to get Icon state: ${error.message}`);
|
|
34
|
+
}
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation (maybe?)
|
|
41
|
+
* Uncomment tests when it is fixed
|
|
42
|
+
*/
|
|
43
|
+
async setIconState(newState: PlistDictionary[] = []): Promise<void> {
|
|
44
|
+
try {
|
|
45
|
+
const req = {
|
|
46
|
+
command: 'setIconState',
|
|
47
|
+
iconState: newState,
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
await this.sendRequestAndReceive(req);
|
|
51
|
+
} catch (error) {
|
|
52
|
+
if (error instanceof Error) {
|
|
53
|
+
throw new Error(`Failed to set icon state: ${error.message}`);
|
|
54
|
+
}
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async getIconPNGData(bundleID: string): Promise<Buffer> {
|
|
60
|
+
try {
|
|
61
|
+
const req = {
|
|
62
|
+
command: 'getIconPNGData',
|
|
63
|
+
bundleId: bundleID,
|
|
64
|
+
};
|
|
65
|
+
const res = await this.sendRequestAndReceive(req);
|
|
66
|
+
return res.pngData as Buffer;
|
|
67
|
+
} catch (error) {
|
|
68
|
+
if (error instanceof Error) {
|
|
69
|
+
throw new Error(`Failed to get Icon PNG data: ${error.message}`);
|
|
70
|
+
}
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation
|
|
77
|
+
* Add tests when it is fixed
|
|
78
|
+
*/
|
|
79
|
+
async getWallpaperInfo(wallpaperName: string): Promise<PlistDictionary> {
|
|
80
|
+
try {
|
|
81
|
+
const req = {
|
|
82
|
+
command: 'getWallpaperInfo',
|
|
83
|
+
wallpaperName,
|
|
84
|
+
};
|
|
85
|
+
return await this.sendRequestAndReceive(req);
|
|
86
|
+
} catch (error) {
|
|
87
|
+
if (error instanceof Error) {
|
|
88
|
+
throw new Error(`Failed to get wallpaper info: ${error.message}`);
|
|
89
|
+
}
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async getWallpaperPreviewImage(
|
|
95
|
+
wallpaperName: 'homescreen' | 'lockscreen',
|
|
96
|
+
): Promise<Buffer> {
|
|
97
|
+
try {
|
|
98
|
+
const req = {
|
|
99
|
+
command: 'getWallpaperPreviewImage',
|
|
100
|
+
wallpaperName,
|
|
101
|
+
};
|
|
102
|
+
const res = await this.sendRequestAndReceive(req);
|
|
103
|
+
return res.pngData as Buffer;
|
|
104
|
+
} catch (error) {
|
|
105
|
+
if (error instanceof Error) {
|
|
106
|
+
throw new Error(
|
|
107
|
+
`Failed to get wallpaper preview image: ${error.message}`,
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
async getHomescreenIconMetrics(): Promise<PlistDictionary> {
|
|
115
|
+
try {
|
|
116
|
+
const req = {
|
|
117
|
+
command: 'getHomeScreenIconMetrics',
|
|
118
|
+
};
|
|
119
|
+
return await this.sendRequestAndReceive(req);
|
|
120
|
+
} catch (error) {
|
|
121
|
+
if (error instanceof Error) {
|
|
122
|
+
throw new Error(
|
|
123
|
+
`Failed to get homescreen icon metrics: ${error.message}`,
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
async getInterfaceOrientation(): Promise<InterfaceOrientation> {
|
|
131
|
+
try {
|
|
132
|
+
const req = {
|
|
133
|
+
command: 'getInterfaceOrientation',
|
|
134
|
+
};
|
|
135
|
+
const res = await this.sendRequestAndReceive(req);
|
|
136
|
+
return res.interfaceOrientation as InterfaceOrientation;
|
|
137
|
+
} catch (error) {
|
|
138
|
+
if (error instanceof Error) {
|
|
139
|
+
throw new Error(
|
|
140
|
+
`Failed to get interface orientation: ${error.message}`,
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* TODO: This does not work currently due to a bug in Apple protocol implementation
|
|
148
|
+
* Add tests when it is fixed
|
|
149
|
+
*/
|
|
150
|
+
async getWallpaperPNGData(wallpaperName: string): Promise<Buffer> {
|
|
151
|
+
try {
|
|
152
|
+
const req = {
|
|
153
|
+
command: 'getHomeScreenWallpaperPNGData',
|
|
154
|
+
wallpaperName,
|
|
155
|
+
};
|
|
156
|
+
const res = await this.sendRequestAndReceive(req);
|
|
157
|
+
return res.pngData as Buffer;
|
|
158
|
+
} catch (error) {
|
|
159
|
+
if (error instanceof Error) {
|
|
160
|
+
throw new Error(`Failed to get wallpaper PNG data: ${error.message}`);
|
|
161
|
+
}
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
async connectToSpringboardService(): Promise<ServiceConnection> {
|
|
167
|
+
if (this._conn) {
|
|
168
|
+
return this._conn;
|
|
169
|
+
}
|
|
170
|
+
const service = this.getServiceConfig();
|
|
171
|
+
this._conn = await this.startLockdownService(service);
|
|
172
|
+
return this._conn;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
private async sendRequestAndReceive(
|
|
176
|
+
request: PlistDictionary,
|
|
177
|
+
): Promise<PlistDictionary> {
|
|
178
|
+
if (!this._conn) {
|
|
179
|
+
this._conn = await this.connectToSpringboardService();
|
|
180
|
+
}
|
|
181
|
+
// Skip StartService response
|
|
182
|
+
await this._conn.sendAndReceive(request);
|
|
183
|
+
return await this._conn.sendPlistRequest(request);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
private getServiceConfig(): {
|
|
187
|
+
serviceName: string;
|
|
188
|
+
port: string;
|
|
189
|
+
} {
|
|
190
|
+
return {
|
|
191
|
+
serviceName: SpringBoardService.RSD_SERVICE_NAME,
|
|
192
|
+
port: this.address[1].toString(),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export { SpringBoardService, InterfaceOrientation };
|
package/src/services.ts
CHANGED
|
@@ -8,12 +8,14 @@ import type {
|
|
|
8
8
|
MobileConfigServiceWithConnection,
|
|
9
9
|
MobileImageMounterServiceWithConnection,
|
|
10
10
|
NotificationProxyServiceWithConnection,
|
|
11
|
+
SpringboardServiceWithConnection,
|
|
11
12
|
SyslogService as SyslogServiceType,
|
|
12
13
|
} from './lib/types.js';
|
|
13
14
|
import DiagnosticsService from './services/ios/diagnostic-service/index.js';
|
|
14
15
|
import { MobileConfigService } from './services/ios/mobile-config/index.js';
|
|
15
16
|
import MobileImageMounterService from './services/ios/mobile-image-mounter/index.js';
|
|
16
17
|
import { NotificationProxyService } from './services/ios/notification-proxy/index.js';
|
|
18
|
+
import { SpringBoardService } from './services/ios/springboard-service/index.js';
|
|
17
19
|
import SyslogService from './services/ios/syslog-service/index.js';
|
|
18
20
|
|
|
19
21
|
const APPIUM_XCUITEST_DRIVER_NAME = 'appium-xcuitest-driver';
|
|
@@ -82,6 +84,22 @@ export async function startMobileImageMounterService(
|
|
|
82
84
|
};
|
|
83
85
|
}
|
|
84
86
|
|
|
87
|
+
export async function startSpringboardService(
|
|
88
|
+
udid: string,
|
|
89
|
+
): Promise<SpringboardServiceWithConnection> {
|
|
90
|
+
const { remoteXPC, tunnelConnection } = await createRemoteXPCConnection(udid);
|
|
91
|
+
const springboardService = remoteXPC.findService(
|
|
92
|
+
SpringBoardService.RSD_SERVICE_NAME,
|
|
93
|
+
);
|
|
94
|
+
return {
|
|
95
|
+
remoteXPC: remoteXPC as RemoteXpcConnection,
|
|
96
|
+
springboardService: new SpringBoardService([
|
|
97
|
+
tunnelConnection.host,
|
|
98
|
+
parseInt(springboardService.port, 10),
|
|
99
|
+
]),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
85
103
|
export async function startSyslogService(
|
|
86
104
|
udid: string,
|
|
87
105
|
): Promise<SyslogServiceType> {
|