appium-xcuitest-driver
Version:
Appium driver for iOS using XCUITest for backend
90 lines • 3.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NotificationClient = void 0;
const remotexpc_utils_1 = require("./remotexpc-utils");
const appium_ios_device_1 = require("appium-ios-device");
/**
* Unified Notification Proxy Client
*
* Provides a unified interface for notification proxy operations on iOS devices,
* automatically handling the differences between iOS < 18 (appium-ios-device)
* and iOS 18 and above (appium-ios-remotexpc NotificationProxyService).
*/
class NotificationClient {
service;
_isRemoteXPC;
log;
constructor(service, log, isRemoteXPC) {
this.service = service;
this.log = log;
this._isRemoteXPC = isRemoteXPC;
}
/**
* Check if this client is using RemoteXPC
*/
get isRemoteXPC() {
return this._isRemoteXPC;
}
/**
* Get service as RemoteXPC NotificationProxyService
*/
get remoteXPCNotificationProxy() {
return this.service;
}
/**
* Get service as iOS Device NotificationProxy
*/
get iosDeviceNotificationProxy() {
return this.service;
}
/**
* Create a notification client for device
*
* @param udid - Device UDID
* @param log - Appium logger instance
* @param useRemoteXPC - Whether to use remotexpc (use isIos18OrNewer(opts) to determine)
* @returns NotificationClient instance
*/
static async create(udid, log, useRemoteXPC) {
if (useRemoteXPC) {
try {
const Services = await (0, remotexpc_utils_1.getRemoteXPCServices)();
const notificationProxyService = await Services.startNotificationProxyService(udid);
return new NotificationClient(notificationProxyService, log, true);
}
catch (err) {
log.error((0, remotexpc_utils_1.formatRemoteXPCFallbackLog)('notification proxy', err));
}
}
// Fallback to appium-ios-device
const notificationProxy = await appium_ios_device_1.services.startNotificationProxyService(udid);
return new NotificationClient(notificationProxy, log, false);
}
/**
* Observe a specific notification and wait for it
*
* @param notificationName - Name of the notification to observe
* @returns Promise that resolves when the notification is received
*/
async observeNotification(notificationName) {
if (this.isRemoteXPC) {
await this.remoteXPCNotificationProxy.observe(notificationName);
}
else {
// iOS Device: Use callback-based observation wrapped in a promise
return new Promise((resolve) => {
this.iosDeviceNotificationProxy.observeNotification(notificationName, {
notification: resolve,
});
});
}
}
/**
* Close the notification service connection
*/
async close() {
this.service.close();
}
}
exports.NotificationClient = NotificationClient;
//# sourceMappingURL=notification-client.js.map