appium-ios-remotexpc 0.4.0 → 0.4.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [0.4.1](https://github.com/appium/appium-ios-remotexpc/compare/v0.4.0...v0.4.1) (2025-09-13)
2
+
3
+ ### Bug Fixes
4
+
5
+ * call identifiers command once in case of TSS ([#69](https://github.com/appium/appium-ios-remotexpc/issues/69)) ([f7ac423](https://github.com/appium/appium-ios-remotexpc/commit/f7ac4237353a116b96cc3f770268b12b20b2d5c4))
6
+
1
7
  ## [0.4.0](https://github.com/appium/appium-ios-remotexpc/compare/v0.3.3...v0.4.0) (2025-09-13)
2
8
 
3
9
  ### Features
@@ -61,11 +61,10 @@ export declare class TSSRequest {
61
61
  }
62
62
  /**
63
63
  * Get manifest from Apple's TSS (Ticket Signing Server)
64
- * @param ecid The device ECID
64
+ * @param personalizationIdentifiers The device personalization identifiers
65
65
  * @param buildManifest The build manifest dictionary
66
- * @param queryPersonalizationIdentifiers Function to query personalization identifiers
67
66
  * @param queryNonce Function to query nonce
68
67
  * @returns Promise resolving to the manifest bytes
69
68
  */
70
- export declare function getManifestFromTSS(ecid: number, buildManifest: PlistDictionary, queryPersonalizationIdentifiers: () => Promise<PlistDictionary>, queryNonce: (personalizedImageType: string) => Promise<Buffer>): Promise<Buffer>;
69
+ export declare function getManifestFromTSS(personalizationIdentifiers: PlistDictionary, buildManifest: PlistDictionary, queryNonce: (personalizedImageType: string) => Promise<Buffer>): Promise<Buffer>;
71
70
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/tss/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAWnD,qBAAa,QAAS,SAAQ,KAAK;gBACrB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,0BAA2B,SAAQ,QAAQ;gBAC1C,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE;QACX,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAClC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE;QACL,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;QAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,kBAAkB,CAAC,EAAE,aAAa,CAAC;IACnC,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;CAC1C;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAkB;;IAUlC;;;;;;OAMG;IACH,MAAM,CAAC,wBAAwB,CAC7B,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,eAAe,EAC3B,KAAK,EAAE,kBAAkB,EAAE,GAC1B,eAAe;IA6DlB;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAItC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;CAwD1C;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,eAAe,EAC9B,+BAA+B,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,EAC/D,UAAU,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC7D,OAAO,CAAC,MAAM,CAAC,CAyGjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/tss/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAWnD,qBAAa,QAAS,SAAQ,KAAK;gBACrB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,0BAA2B,SAAQ,QAAQ;gBAC1C,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE;QACX,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAClC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE;QACL,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;QAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,kBAAkB,CAAC,EAAE,aAAa,CAAC;IACnC,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;CAC1C;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAkB;;IAUlC;;;;;;OAMG;IACH,MAAM,CAAC,wBAAwB,CAC7B,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,eAAe,EAC3B,KAAK,EAAE,kBAAkB,EAAE,GAC1B,eAAe;IA6DlB;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAItC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;CAwD1C;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,0BAA0B,EAAE,eAAe,EAC3C,aAAa,EAAE,eAAe,EAC9B,UAAU,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC7D,OAAO,CAAC,MAAM,CAAC,CAyGjB"}
@@ -152,21 +152,20 @@ export class TSSRequest {
152
152
  }
153
153
  /**
154
154
  * Get manifest from Apple's TSS (Ticket Signing Server)
155
- * @param ecid The device ECID
155
+ * @param personalizationIdentifiers The device personalization identifiers
156
156
  * @param buildManifest The build manifest dictionary
157
- * @param queryPersonalizationIdentifiers Function to query personalization identifiers
158
157
  * @param queryNonce Function to query nonce
159
158
  * @returns Promise resolving to the manifest bytes
160
159
  */
161
- export async function getManifestFromTSS(ecid, buildManifest, queryPersonalizationIdentifiers, queryNonce) {
160
+ export async function getManifestFromTSS(personalizationIdentifiers, buildManifest, queryNonce) {
162
161
  log.debug('Starting TSS manifest generation process');
163
162
  const request = new TSSRequest();
164
- const personalizationIdentifiers = await queryPersonalizationIdentifiers();
165
163
  for (const [key, value] of Object.entries(personalizationIdentifiers)) {
166
164
  if (key.startsWith('Ap,')) {
167
165
  request.update({ [key]: value });
168
166
  }
169
167
  }
168
+ const ecid = personalizationIdentifiers.UniqueChipID;
170
169
  const boardId = personalizationIdentifiers.BoardId;
171
170
  const chipId = personalizationIdentifiers.ChipID;
172
171
  let buildIdentity = null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/mobile-image-mounter/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,yBAAyB,IAAI,kCAAkC,EAC/D,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD;;GAEG;AACH,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;CACpC;AAED;;;;;;GAMG;AACH,cAAM,yBACJ,SAAQ,WACR,YAAW,kCAAkC;IAE7C,MAAM,CAAC,QAAQ,CAAC,gBAAgB,uDACsB;IAGtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAW;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAoB;IACpE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAiB;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAkB;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAuB;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAGrD,OAAO,CAAC,UAAU,CAAkC;gBAExC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAIrC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;OAIG;IACG,MAAM,CACV,SAAS,SAAuC,GAC/C,OAAO,CAAC,MAAM,EAAE,CAAC;IAUpB;;;OAGG;IACG,0BAA0B,IAAI,OAAO,CAAC,OAAO,CAAC;IAQpD;;;;;;OAMG;IACG,KAAK,CACT,aAAa,EAAE,MAAM,EACrB,qBAAqB,EAAE,MAAM,EAC7B,kBAAkB,EAAE,MAAM,EAC1B,SAAS,CAAC,EAAE,eAAe,GAC1B,OAAO,CAAC,IAAI,CAAC;IAgEhB;;;OAGG;IACG,YAAY,CAChB,SAAS,SAAuC,GAC/C,OAAO,CAAC,IAAI,CAAC;IAsBhB;;;OAGG;IACG,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC;IAYlD;;;;OAIG;IACG,UAAU,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBjE;;;OAGG;IACG,+BAA+B,IAAI,OAAO,CAAC,eAAe,CAAC;IAQjE;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAKnC;;;;;OAKG;IACG,4BAA4B,CAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAgClB;;;;;;OAMG;IACG,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,SAAiD,GACvD,OAAO,CAAC,IAAI,CAAC;IAiChB;;;;;OAKG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC;YA4BF,WAAW;IAczB;;;;OAIG;YACW,oBAAoB;YAmBpB,4BAA4B;IAyC1C,OAAO,CAAC,qBAAqB;YASf,kCAAkC;IAchD,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,YAAY;YAMN,YAAY;CAiB3B;AAED,eAAe,yBAAyB,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/services/ios/mobile-image-mounter/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,yBAAyB,IAAI,kCAAkC,EAC/D,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD;;GAEG;AACH,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;CACpC;AAED;;;;;;GAMG;AACH,cAAM,yBACJ,SAAQ,WACR,YAAW,kCAAkC;IAE7C,MAAM,CAAC,QAAQ,CAAC,gBAAgB,uDACsB;IAGtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAW;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAoB;IACpE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAiB;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAkB;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAuB;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAGrD,OAAO,CAAC,UAAU,CAAkC;gBAExC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAIrC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;OAIG;IACG,MAAM,CACV,SAAS,SAAuC,GAC/C,OAAO,CAAC,MAAM,EAAE,CAAC;IAUpB;;;OAGG;IACG,0BAA0B,IAAI,OAAO,CAAC,OAAO,CAAC;IAQpD;;;;;;OAMG;IACG,KAAK,CACT,aAAa,EAAE,MAAM,EACrB,qBAAqB,EAAE,MAAM,EAC7B,kBAAkB,EAAE,MAAM,EAC1B,SAAS,CAAC,EAAE,eAAe,GAC1B,OAAO,CAAC,IAAI,CAAC;IAgEhB;;;OAGG;IACG,YAAY,CAChB,SAAS,SAAuC,GAC/C,OAAO,CAAC,IAAI,CAAC;IAsBhB;;;OAGG;IACG,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC;IAYlD;;;;OAIG;IACG,UAAU,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBjE;;;OAGG;IACG,+BAA+B,IAAI,OAAO,CAAC,eAAe,CAAC;IAQjE;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAKnC;;;;;OAKG;IACG,4BAA4B,CAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAgClB;;;;;;OAMG;IACG,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,SAAiD,GACvD,OAAO,CAAC,IAAI,CAAC;IAiChB;;;;;OAKG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC;YA4BF,WAAW;IAczB;;;;OAIG;YACW,oBAAoB;YAmBpB,4BAA4B;IAiC1C,OAAO,CAAC,qBAAqB;YASf,kCAAkC;IAchD,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,YAAY;YAMN,YAAY;CAiB3B;AAED,eAAe,yBAAyB,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
@@ -296,11 +296,7 @@ class MobileImageMounterService extends BaseService {
296
296
  if (error.message?.includes('MissingManifestError')) {
297
297
  log.debug('Personalization manifest not found on device, using TSS...');
298
298
  const identifiers = await this.queryPersonalizationIdentifiers();
299
- const ecid = identifiers.UniqueChipID;
300
- if (!ecid) {
301
- throw new Error('Could not retrieve device ECID from personalization identifiers');
302
- }
303
- const manifest = await getManifestFromTSS(ecid, buildManifest, () => this.queryPersonalizationIdentifiers(), (type) => this.queryNonce(type));
299
+ const manifest = await getManifestFromTSS(identifiers, buildManifest, (type) => this.queryNonce(type));
304
300
  log.debug('Successfully generated manifest from TSS');
305
301
  return manifest;
306
302
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-ios-remotexpc",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "main": "build/src/index.js",
5
5
  "types": "build/src/index.d.ts",
6
6
  "type": "module",
@@ -219,29 +219,27 @@ export class TSSRequest {
219
219
 
220
220
  /**
221
221
  * Get manifest from Apple's TSS (Ticket Signing Server)
222
- * @param ecid The device ECID
222
+ * @param personalizationIdentifiers The device personalization identifiers
223
223
  * @param buildManifest The build manifest dictionary
224
- * @param queryPersonalizationIdentifiers Function to query personalization identifiers
225
224
  * @param queryNonce Function to query nonce
226
225
  * @returns Promise resolving to the manifest bytes
227
226
  */
228
227
  export async function getManifestFromTSS(
229
- ecid: number,
228
+ personalizationIdentifiers: PlistDictionary,
230
229
  buildManifest: PlistDictionary,
231
- queryPersonalizationIdentifiers: () => Promise<PlistDictionary>,
232
230
  queryNonce: (personalizedImageType: string) => Promise<Buffer>,
233
231
  ): Promise<Buffer> {
234
232
  log.debug('Starting TSS manifest generation process');
235
233
 
236
234
  const request = new TSSRequest();
237
235
 
238
- const personalizationIdentifiers = await queryPersonalizationIdentifiers();
239
236
  for (const [key, value] of Object.entries(personalizationIdentifiers)) {
240
237
  if (key.startsWith('Ap,')) {
241
238
  request.update({ [key]: value });
242
239
  }
243
240
  }
244
241
 
242
+ const ecid = personalizationIdentifiers.UniqueChipID as number;
245
243
  const boardId = personalizationIdentifiers.BoardId as number;
246
244
  const chipId = personalizationIdentifiers.ChipID as number;
247
245
 
@@ -440,18 +440,10 @@ class MobileImageMounterService
440
440
  log.debug('Personalization manifest not found on device, using TSS...');
441
441
 
442
442
  const identifiers = await this.queryPersonalizationIdentifiers();
443
- const ecid = identifiers.UniqueChipID as number;
444
-
445
- if (!ecid) {
446
- throw new Error(
447
- 'Could not retrieve device ECID from personalization identifiers',
448
- );
449
- }
450
443
 
451
444
  const manifest = await getManifestFromTSS(
452
- ecid,
445
+ identifiers,
453
446
  buildManifest,
454
- () => this.queryPersonalizationIdentifiers(),
455
447
  (type: string) => this.queryNonce(type),
456
448
  );
457
449