@limrun/cli 0.6.0 → 0.6.2

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/README.md CHANGED
@@ -370,6 +370,9 @@ lim xcode build ./MyProject --scheme MyApp --workspace MyApp.xcworkspace
370
370
  # Build and upload artifact
371
371
  lim xcode build ./MyProject --scheme MyApp --upload my-app-build
372
372
 
373
+ # Signed device build
374
+ lim xcode build ./MyProject --scheme MyApp --certificate-p12 ./certificate.p12 --certificate-password "$P12_PASSWORD" --provisioning-profile ./profile.mobileprovision --upload signed-device-build.ipa
375
+
373
376
  # Attach an existing simulator so builds auto-install there
374
377
  lim xcode attach-simulator ios_abc123 --id sandbox_def456
375
378
 
@@ -595,6 +598,9 @@ lim xcode build ./MyProject --scheme MyApp --workspace MyApp.xcworkspace
595
598
  # 4. Upload build artifact
596
599
  lim xcode build ./MyProject --scheme MyApp --upload my-app-build
597
600
 
601
+ # Signed device builds default to --sdk iphoneos when signing assets are provided
602
+ lim xcode build ./MyProject --scheme MyApp --certificate-p12 ./certificate.p12 --certificate-password "$P12_PASSWORD" --provisioning-profile ./profile.mobileprovision --upload signed-device-build.ipa
603
+
598
604
  # 5. Download the artifact
599
605
  lim asset pull my-app-build -o ./build-output
600
606
  ```
@@ -603,6 +609,8 @@ lim asset pull my-app-build -o ./build-output
603
609
 
604
610
  `lim xcode build [PATH]` automatically performs a one-shot code sync for the given project path before invoking `xcodebuild`. The sync step automatically ignores build artifacts (`build/`, `DerivedData/`, `.build/`), dependency folders (`Pods/`, `Carthage/Build/`, `.swiftpm/`), and user-specific files (`xcuserdata/`, `.dSYM/`).
605
611
 
612
+ Provide `--certificate-p12`, `--certificate-password`, and `--provisioning-profile` together to sign a real-device build. When signing assets are provided without `--sdk`, the CLI builds with `iphoneos`; pass `--sdk watchos` for signed watchOS device builds.
613
+
606
614
  ---
607
615
 
608
616
  ## Configuration
@@ -4,7 +4,7 @@ export default class AndroidGet extends BaseCommand {
4
4
  static description: string;
5
5
  static examples: string[];
6
6
  static args: {
7
- id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ id: import("@oclif/core/lib/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
8
  };
9
9
  static flags: {
10
10
  'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -1 +1 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/android/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,OAAO,SAAiD;IAC/D,MAAM,CAAC,WAAW,SACmI;IACrJ,MAAM,CAAC,QAAQ,WAAuF;IAEtG,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB3B"}
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/android/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,OAAO,SAAiD;IAC/D,MAAM,CAAC,WAAW,SACmI;IACrJ,MAAM,CAAC,QAAQ,WAAkF;IAEjG,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsB3B"}
@@ -7,28 +7,36 @@ class AndroidGet extends base_command_1.BaseCommand {
7
7
  const { args, flags } = await this.parse(AndroidGet);
8
8
  this.setParsedFlags(flags);
9
9
  await this.withAuth(async () => {
10
- const instance = await this.client.androidInstances.get(args.id);
10
+ const resolvedInstance = this.resolveAndroidInstance(args.id);
11
+ const instance = await this.client.androidInstances.get(resolvedInstance.id);
11
12
  if (flags.json) {
12
13
  this.outputJson(instance);
13
14
  }
14
15
  else {
15
16
  const signedStreamUrl = this.signedStreamUrl(instance.status);
16
- this.outputTable(['Field', 'Value'], [
17
- ['ID', instance.metadata.id],
18
- ['Name', instance.metadata.displayName || ''],
19
- ['Region', instance.spec.region],
20
- ['State', instance.status.state],
21
- ...(signedStreamUrl ? [['Signed Stream URL', signedStreamUrl]] : []),
22
- ]);
17
+ this.output(`ID: ${instance.metadata.id}`);
18
+ this.output(`Name: ${instance.metadata.displayName || ''}`);
19
+ this.output(`Region: ${instance.spec.region}`);
20
+ this.output(`State: ${instance.status.state}`);
21
+ this.output(`Console URL: ${this.consoleStreamUrl(instance.metadata.id)}`);
22
+ if (instance.status.apiUrl)
23
+ this.output(`API URL: ${instance.status.apiUrl}`);
24
+ if (instance.status.adbWebSocketUrl)
25
+ this.output(`ADB WebSocket URL: ${instance.status.adbWebSocketUrl}`);
26
+ if (signedStreamUrl)
27
+ this.output(`Signed Stream URL: ${signedStreamUrl}`);
23
28
  }
24
29
  });
25
30
  }
26
31
  }
27
32
  AndroidGet.summary = 'Get details for a specific Android instance';
28
33
  AndroidGet.description = 'Fetch detailed metadata for a single Android instance, including region, state, and display name. Use `--json` to inspect the full API response.';
29
- AndroidGet.examples = ['<%= config.bin %> android get <ID>', '<%= config.bin %> android get <ID> --json'];
34
+ AndroidGet.examples = ['<%= config.bin %> android get', '<%= config.bin %> android get <ID> --json'];
30
35
  AndroidGet.args = {
31
- id: core_1.Args.string({ description: 'Android instance ID to fetch', required: true }),
36
+ id: core_1.Args.string({
37
+ description: 'Android instance ID to fetch. Defaults to the last created Android instance.',
38
+ required: false,
39
+ }),
32
40
  };
33
41
  AndroidGet.flags = { ...base_command_1.BaseCommand.baseFlags };
34
42
  exports.default = AndroidGet;
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/android/get.ts"],"names":[],"mappings":";;AAAA,sCAAmC;AACnC,qDAAiD;AAEjD,MAAqB,UAAW,SAAQ,0BAAW;IAYjD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC9D,IAAI,CAAC,WAAW,CACd,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB;oBACE,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;oBAC7C,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;oBAChC,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;oBAChC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACrE,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AAjCM,kBAAO,GAAG,6CAA6C,CAAC;AACxD,sBAAW,GAChB,kJAAkJ,CAAC;AAC9I,mBAAQ,GAAG,CAAC,oCAAoC,EAAE,2CAA2C,CAAC,CAAC;AAE/F,eAAI,GAAG;IACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,8BAA8B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CACjF,CAAC;AAEK,gBAAK,GAAG,EAAE,GAAG,0BAAW,CAAC,SAAS,EAAE,CAAC;kBAVzB,UAAU"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/android/get.ts"],"names":[],"mappings":";;AAAA,sCAAmC;AACnC,qDAAiD;AAEjD,MAAqB,UAAW,SAAQ,0BAAW;IAejD,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAC7E,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC9D,IAAI,CAAC,MAAM,CAAC,OAAO,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,QAAQ,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,MAAM,CAAC,WAAW,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,UAAU,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC3E,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM;oBAAE,IAAI,CAAC,MAAM,CAAC,YAAY,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9E,IAAI,QAAQ,CAAC,MAAM,CAAC,eAAe;oBAAE,IAAI,CAAC,MAAM,CAAC,sBAAsB,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;gBAC1G,IAAI,eAAe;oBAAE,IAAI,CAAC,MAAM,CAAC,sBAAsB,eAAe,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AAnCM,kBAAO,GAAG,6CAA6C,CAAC;AACxD,sBAAW,GAChB,kJAAkJ,CAAC;AAC9I,mBAAQ,GAAG,CAAC,+BAA+B,EAAE,2CAA2C,CAAC,CAAC;AAE1F,eAAI,GAAG;IACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,8EAA8E;QAC3F,QAAQ,EAAE,KAAK;KAChB,CAAC;CACH,CAAC;AAEK,gBAAK,GAAG,EAAE,GAAG,0BAAW,CAAC,SAAS,EAAE,CAAC;kBAbzB,UAAU"}
@@ -4,7 +4,7 @@ export default class IosGet extends BaseCommand {
4
4
  static description: string;
5
5
  static examples: string[];
6
6
  static args: {
7
- id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ id: import("@oclif/core/lib/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
8
  };
9
9
  static flags: {
10
10
  'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -1 +1 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/ios/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,OAAO,SAA6C;IAC3D,MAAM,CAAC,WAAW,SAC+H;IACjJ,MAAM,CAAC,QAAQ,WAA+E;IAE9F,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB3B"}
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/ios/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,OAAO,SAA6C;IAC3D,MAAM,CAAC,WAAW,SAC+H;IACjJ,MAAM,CAAC,QAAQ,WAA0E;IAEzF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwB3B"}
@@ -7,28 +7,37 @@ class IosGet extends base_command_1.BaseCommand {
7
7
  const { args, flags } = await this.parse(IosGet);
8
8
  this.setParsedFlags(flags);
9
9
  await this.withAuth(async () => {
10
- const instance = await this.client.iosInstances.get(args.id);
10
+ const resolvedInstance = this.resolveIosInstance(args.id);
11
+ const instance = await this.client.iosInstances.get(resolvedInstance.id);
11
12
  if (flags.json) {
12
13
  this.outputJson(instance);
13
14
  }
14
15
  else {
15
16
  const signedStreamUrl = this.signedStreamUrl(instance.status);
16
- this.outputTable(['Field', 'Value'], [
17
- ['ID', instance.metadata.id],
18
- ['Name', instance.metadata.displayName || ''],
19
- ['Region', instance.spec.region],
20
- ['State', instance.status.state],
21
- ...(signedStreamUrl ? [['Signed Stream URL', signedStreamUrl]] : []),
22
- ]);
17
+ this.output(`ID: ${instance.metadata.id}`);
18
+ this.output(`Name: ${instance.metadata.displayName || ''}`);
19
+ this.output(`Region: ${instance.spec.region}`);
20
+ this.output(`State: ${instance.status.state}`);
21
+ this.output(`Console URL: ${this.consoleStreamUrl(instance.metadata.id)}`);
22
+ if (instance.status.apiUrl)
23
+ this.output(`API URL: ${instance.status.apiUrl}`);
24
+ if (instance.status.sandbox?.xcode?.url) {
25
+ this.output(`Xcode Sandbox URL: ${instance.status.sandbox.xcode.url}`);
26
+ }
27
+ if (signedStreamUrl)
28
+ this.output(`Signed Stream URL: ${signedStreamUrl}`);
23
29
  }
24
30
  });
25
31
  }
26
32
  }
27
33
  IosGet.summary = 'Get details for a specific iOS instance';
28
34
  IosGet.description = 'Fetch detailed metadata for a single iOS instance, including region, state, and display name. Use `--json` to inspect the full API response.';
29
- IosGet.examples = ['<%= config.bin %> ios get <ID>', '<%= config.bin %> ios get <ID> --json'];
35
+ IosGet.examples = ['<%= config.bin %> ios get', '<%= config.bin %> ios get <ID> --json'];
30
36
  IosGet.args = {
31
- id: core_1.Args.string({ description: 'iOS instance ID to fetch', required: true }),
37
+ id: core_1.Args.string({
38
+ description: 'iOS instance ID to fetch. Defaults to the last created iOS instance.',
39
+ required: false,
40
+ }),
32
41
  };
33
42
  IosGet.flags = { ...base_command_1.BaseCommand.baseFlags };
34
43
  exports.default = IosGet;
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/ios/get.ts"],"names":[],"mappings":";;AAAA,sCAAmC;AACnC,qDAAiD;AAEjD,MAAqB,MAAO,SAAQ,0BAAW;IAY7C,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7D,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC9D,IAAI,CAAC,WAAW,CACd,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB;oBACE,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;oBAC7C,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;oBAChC,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;oBAChC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACrE,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AAjCM,cAAO,GAAG,yCAAyC,CAAC;AACpD,kBAAW,GAChB,8IAA8I,CAAC;AAC1I,eAAQ,GAAG,CAAC,gCAAgC,EAAE,uCAAuC,CAAC,CAAC;AAEvF,WAAI,GAAG;IACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CAC7E,CAAC;AAEK,YAAK,GAAG,EAAE,GAAG,0BAAW,CAAC,SAAS,EAAE,CAAC;kBAVzB,MAAM"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/ios/get.ts"],"names":[],"mappings":";;AAAA,sCAAmC;AACnC,qDAAiD;AAEjD,MAAqB,MAAO,SAAQ,0BAAW;IAe7C,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACzE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC9D,IAAI,CAAC,MAAM,CAAC,OAAO,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,QAAQ,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,MAAM,CAAC,WAAW,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,UAAU,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC3E,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM;oBAAE,IAAI,CAAC,MAAM,CAAC,YAAY,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9E,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;oBACxC,IAAI,CAAC,MAAM,CAAC,sBAAsB,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACzE,CAAC;gBACD,IAAI,eAAe;oBAAE,IAAI,CAAC,MAAM,CAAC,sBAAsB,eAAe,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AArCM,cAAO,GAAG,yCAAyC,CAAC;AACpD,kBAAW,GAChB,8IAA8I,CAAC;AAC1I,eAAQ,GAAG,CAAC,2BAA2B,EAAE,uCAAuC,CAAC,CAAC;AAElF,WAAI,GAAG;IACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,sEAAsE;QACnF,QAAQ,EAAE,KAAK;KAChB,CAAC;CACH,CAAC;AAEK,YAAK,GAAG,EAAE,GAAG,0BAAW,CAAC,SAAS,EAAE,CAAC;kBAbzB,MAAM"}
@@ -14,6 +14,9 @@ export default class XcodeBuild extends BaseCommand {
14
14
  sdk: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
15
  upload: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
16
  'signed-upload-url': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
+ 'certificate-p12': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
+ 'certificate-password': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
19
+ 'provisioning-profile': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
20
  'basis-cache-dir': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
21
  'max-patch-bytes': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
19
22
  ignore: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -24,5 +27,6 @@ export default class XcodeBuild extends BaseCommand {
24
27
  create: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
25
28
  };
26
29
  run(): Promise<void>;
30
+ private buildSigningOptions;
27
31
  }
28
32
  //# sourceMappingURL=build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,OAAO,SAAwC;IACtD,MAAM,CAAC,WAAW,SACwR;IAE1S,MAAM,CAAC,QAAQ,WAYb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;MAmCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqE3B"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/build.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAQjD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,OAAO,SAAwC;IACtD,MAAM,CAAC,WAAW,SACwR;IAE1S,MAAM,CAAC,QAAQ,WAab;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;MA8CV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAkFZ,mBAAmB;CA+BlC"}
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const promises_1 = require("node:fs/promises");
3
4
  const core_1 = require("@oclif/core");
4
5
  const base_command_1 = require("../../base-command");
5
6
  const ignore_patterns_1 = require("../../lib/ignore-patterns");
6
7
  const duration_1 = require("../../lib/duration");
7
8
  const additional_files_1 = require("../../lib/additional-files");
9
+ const DEVICE_SDKS = new Set(['iphoneos', 'watchos']);
10
+ const SIMULATOR_SDKS = new Set(['iphonesimulator', 'watchsimulator']);
8
11
  class XcodeBuild extends base_command_1.BaseCommand {
9
12
  async run() {
10
13
  const { args, flags } = await this.parse(XcodeBuild);
@@ -24,6 +27,19 @@ class XcodeBuild extends base_command_1.BaseCommand {
24
27
  if (flags.sdk)
25
28
  settings.sdk = flags.sdk;
26
29
  const options = {};
30
+ const signing = await this.buildSigningOptions(flags);
31
+ if (signing) {
32
+ if (flags.sdk && SIMULATOR_SDKS.has(flags.sdk)) {
33
+ this.error('Signing is only supported for device SDK builds. Use --sdk iphoneos or --sdk watchos.');
34
+ }
35
+ if (!flags.sdk) {
36
+ settings.sdk = 'iphoneos';
37
+ }
38
+ else if (!DEVICE_SDKS.has(flags.sdk)) {
39
+ this.error('Signing is only supported for device SDK builds. Use --sdk iphoneos or --sdk watchos.');
40
+ }
41
+ options.signing = signing;
42
+ }
27
43
  if (flags.upload && flags['signed-upload-url']) {
28
44
  this.error('Use either --upload or --signed-upload-url, not both.');
29
45
  }
@@ -66,6 +82,23 @@ class XcodeBuild extends base_command_1.BaseCommand {
66
82
  }
67
83
  });
68
84
  }
85
+ async buildSigningOptions(flags) {
86
+ const hasCertificate = flags['certificate-p12'] !== undefined;
87
+ const hasPassword = flags['certificate-password'] !== undefined;
88
+ const hasProfile = flags['provisioning-profile'] !== undefined;
89
+ const hasAnySigningFlag = hasCertificate || hasPassword || hasProfile;
90
+ if (!hasAnySigningFlag) {
91
+ return undefined;
92
+ }
93
+ if (!hasCertificate || !hasPassword || !hasProfile) {
94
+ this.error('Signed device builds require --certificate-p12, --certificate-password, and --provisioning-profile.');
95
+ }
96
+ return {
97
+ certificateP12Base64: (await (0, promises_1.readFile)(flags['certificate-p12'])).toString('base64'),
98
+ certificatePassword: flags['certificate-password'],
99
+ provisioningProfileBase64: (await (0, promises_1.readFile)(flags['provisioning-profile'])).toString('base64'),
100
+ };
101
+ }
69
102
  }
70
103
  XcodeBuild.summary = 'Run xcodebuild on an Xcode sandbox';
71
104
  XcodeBuild.description = 'Sync a local project path once (or the current working directory if omitted), then trigger a remote xcodebuild with streaming output. This works with standalone Xcode instances and can also target an iOS instance with `--xcode` enabled or created via `xcode create --ios` when you pass `--id`.';
@@ -76,6 +109,7 @@ XcodeBuild.examples = [
76
109
  '<%= config.bin %> xcode build ./MyProject --id <xcode-instance-ID>',
77
110
  '<%= config.bin %> xcode build --scheme MyApp --workspace MyApp.xcworkspace',
78
111
  '<%= config.bin %> xcode build --scheme WatchApp --sdk watchsimulator',
112
+ '<%= config.bin %> xcode build ./MyProject --scheme MyApp --certificate-p12 ./certificate.p12 --certificate-password "$P12_PASSWORD" --provisioning-profile ./profile.mobileprovision --upload signed-device-build.ipa',
79
113
  '<%= config.bin %> xcode build --id <ios-instance-ID> --project MyApp.xcodeproj --upload ios-build.zip',
80
114
  '<%= config.bin %> xcode build --signed-upload-url <url>',
81
115
  '<%= config.bin %> xcode build ./MyProject --basis-cache-dir ./.limsync-cache --max-patch-bytes 2097152',
@@ -106,6 +140,15 @@ XcodeBuild.flags = {
106
140
  'signed-upload-url': core_1.Flags.string({
107
141
  description: 'Presigned URL to upload the resulting build artifact to.',
108
142
  }),
143
+ 'certificate-p12': core_1.Flags.string({
144
+ description: 'Path to a PKCS#12 (.p12) signing certificate. Requires --certificate-password and --provisioning-profile.',
145
+ }),
146
+ 'certificate-password': core_1.Flags.string({
147
+ description: 'Password for the PKCS#12 signing certificate.',
148
+ }),
149
+ 'provisioning-profile': core_1.Flags.string({
150
+ description: 'Path to a .mobileprovision profile. Requires --certificate-p12 and --certificate-password.',
151
+ }),
109
152
  'basis-cache-dir': core_1.Flags.string({
110
153
  description: 'Directory to use for the client-side delta sync cache during the pre-build sync step.',
111
154
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/xcode/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/xcode/build.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ export default class XcodeGet extends BaseCommand {
4
4
  static description: string;
5
5
  static examples: string[];
6
6
  static args: {
7
- id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ id: import("@oclif/core/lib/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
8
  };
9
9
  static flags: {
10
10
  'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -1 +1 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAAW;IAC/C,MAAM,CAAC,OAAO,SAA+C;IAC7D,MAAM,CAAC,WAAW,SACyI;IAC3J,MAAM,CAAC,QAAQ,WAAmF;IAElG,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB3B"}
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/xcode/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAAW;IAC/C,MAAM,CAAC,OAAO,SAA+C;IAC7D,MAAM,CAAC,WAAW,SACyI;IAC3J,MAAM,CAAC,QAAQ,WAA8E;IAE7F,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;MAAgC;IAEtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuC3B"}
@@ -7,28 +7,52 @@ class XcodeGet extends base_command_1.BaseCommand {
7
7
  const { args, flags } = await this.parse(XcodeGet);
8
8
  this.setParsedFlags(flags);
9
9
  await this.withAuth(async () => {
10
- const instance = await this.client.xcodeInstances.get(args.id);
10
+ const target = await this.resolveXcodeTarget(args.id);
11
+ if (target.type === 'ios') {
12
+ const instance = await this.client.iosInstances.get(target.id);
13
+ if (flags.json) {
14
+ this.outputJson(instance);
15
+ }
16
+ else {
17
+ const signedStreamUrl = this.signedStreamUrl(instance.status);
18
+ this.output(`ID: ${instance.metadata.id}`);
19
+ this.output(`Type: iOS with Xcode sandbox`);
20
+ this.output(`Name: ${instance.metadata.displayName || ''}`);
21
+ this.output(`Region: ${instance.spec.region}`);
22
+ this.output(`State: ${instance.status.state}`);
23
+ this.output(`Console URL: ${this.consoleStreamUrl(instance.metadata.id)}`);
24
+ if (instance.status.sandbox?.xcode?.url) {
25
+ this.output(`Xcode Sandbox URL: ${instance.status.sandbox.xcode.url}`);
26
+ }
27
+ if (signedStreamUrl)
28
+ this.output(`Signed Stream URL: ${signedStreamUrl}`);
29
+ }
30
+ return;
31
+ }
11
32
  if (flags.json) {
12
- this.outputJson(instance);
33
+ this.outputJson(target);
13
34
  }
14
35
  else {
15
- const signedStreamUrl = this.signedStreamUrl(instance.status);
16
- this.outputTable(['Field', 'Value'], [
17
- ['ID', instance.metadata.id],
18
- ['Name', instance.metadata.displayName || ''],
19
- ['Region', instance.spec.region],
20
- ['State', instance.status.state],
21
- ...(signedStreamUrl ? [['Signed Stream URL', signedStreamUrl]] : []),
22
- ]);
36
+ this.output(`ID: ${target.id}`);
37
+ this.output(`Type: Xcode sandbox`);
38
+ this.output(`Name: ${target.metadata?.displayName || ''}`);
39
+ this.output(`Region: ${target.spec?.region || ''}`);
40
+ this.output(`State: ${target.status?.state || ''}`);
41
+ this.output(`Console URL: ${this.consoleStreamUrl(target.id)}`);
42
+ if (target.apiUrl)
43
+ this.output(`API URL: ${target.apiUrl}`);
23
44
  }
24
45
  });
25
46
  }
26
47
  }
27
48
  XcodeGet.summary = 'Get details for a specific Xcode instance';
28
49
  XcodeGet.description = 'Fetch detailed metadata for a single Xcode sandbox instance, including region, state, and display name. Use `--json` to inspect the full API response.';
29
- XcodeGet.examples = ['<%= config.bin %> xcode get <ID>', '<%= config.bin %> xcode get <ID> --json'];
50
+ XcodeGet.examples = ['<%= config.bin %> xcode get', '<%= config.bin %> xcode get <ID> --json'];
30
51
  XcodeGet.args = {
31
- id: core_1.Args.string({ description: 'Xcode instance ID to fetch', required: true }),
52
+ id: core_1.Args.string({
53
+ description: 'Xcode instance ID to fetch. Defaults to the last created Xcode target.',
54
+ required: false,
55
+ }),
32
56
  };
33
57
  XcodeGet.flags = { ...base_command_1.BaseCommand.baseFlags };
34
58
  exports.default = XcodeGet;
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/xcode/get.ts"],"names":[],"mappings":";;AAAA,sCAAmC;AACnC,qDAAiD;AAEjD,MAAqB,QAAS,SAAQ,0BAAW;IAY/C,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/D,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAC1C,QAAQ,CAAC,MAAkD,CAC5D,CAAC;gBACF,IAAI,CAAC,WAAW,CACd,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB;oBACE,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;oBAC7C,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;oBAChC,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;oBAChC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACrE,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AAnCM,gBAAO,GAAG,2CAA2C,CAAC;AACtD,oBAAW,GAChB,wJAAwJ,CAAC;AACpJ,iBAAQ,GAAG,CAAC,kCAAkC,EAAE,yCAAyC,CAAC,CAAC;AAE3F,aAAI,GAAG;IACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CAC/E,CAAC;AAEK,cAAK,GAAG,EAAE,GAAG,0BAAW,CAAC,SAAS,EAAE,CAAC;kBAVzB,QAAQ"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/xcode/get.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@limrun/cli",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "description": "Use remote XCode, iOS Simulator, Android Emulator and more to build and test apps from Linux, Windows or macOS.",
5
5
  "bin": {
6
6
  "lim": "./bin/run.js"