@swmansion/argent 0.23.0 → 0.23.1-next.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 (44) hide show
  1. package/README.md +1 -1
  2. package/bin/argent-android-devtools-0.1.0.apk +0 -0
  3. package/bin/darwin/ax-service +0 -0
  4. package/bin/darwin/tvos-ax-service +0 -0
  5. package/bin/darwin/tvos-hid-daemon +0 -0
  6. package/bin/tcp/ax-service +0 -0
  7. package/dist/cli-cmds.mjs +48 -20
  8. package/dist/installer.mjs +46 -18
  9. package/dist/ios-device-runner/ArgentRunner/ArgentRunner/RunnerHostApp.swift +37 -0
  10. package/dist/ios-device-runner/ArgentRunner/ArgentRunner.xcodeproj/project.pbxproj +389 -0
  11. package/dist/ios-device-runner/ArgentRunner/ArgentRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  12. package/dist/ios-device-runner/ArgentRunner/ArgentRunner.xcodeproj/xcshareddata/xcschemes/ArgentRunner.xcscheme +88 -0
  13. package/dist/ios-device-runner/ArgentRunner/ArgentRunnerUITests/ArgentExceptionGuard.h +16 -0
  14. package/dist/ios-device-runner/ArgentRunner/ArgentRunnerUITests/ArgentExceptionGuard.m +16 -0
  15. package/dist/ios-device-runner/ArgentRunner/ArgentRunnerUITests/ArgentRunnerSession+Commands.swift +280 -0
  16. package/dist/ios-device-runner/ArgentRunner/ArgentRunnerUITests/ArgentRunnerSession+Gestures.swift +149 -0
  17. package/dist/ios-device-runner/ArgentRunner/ArgentRunnerUITests/ArgentRunnerSession+Screenshot.swift +21 -0
  18. package/dist/ios-device-runner/ArgentRunner/ArgentRunnerUITests/ArgentRunnerSession+Snapshot.swift +327 -0
  19. package/dist/ios-device-runner/ArgentRunner/ArgentRunnerUITests/ArgentRunnerSession+TextEntry.swift +157 -0
  20. package/dist/ios-device-runner/ArgentRunner/ArgentRunnerUITests/ArgentRunnerSession.swift +410 -0
  21. package/dist/ios-device-runner/ArgentRunner/ArgentRunnerUITests/ArgentRunnerUITests-Bridging-Header.h +1 -0
  22. package/dist/ios-device-runner/ArgentRunner/ArgentRunnerUITests/CommandJournal.swift +134 -0
  23. package/dist/ios-device-runner/ArgentRunner/ArgentRunnerUITests/MainThreadGate.swift +111 -0
  24. package/dist/ios-device-runner/ArgentRunner/ArgentRunnerUITests/RunnerHTTPServer.swift +267 -0
  25. package/dist/ios-device-runner/ArgentRunner/ArgentRunnerUITests/RunnerProtocol.swift +331 -0
  26. package/dist/mcp-server.mjs +47 -19
  27. package/dist/tool-server.cjs +4224 -1388
  28. package/dylibs/libArgentInjectionBootstrap.dylib +0 -0
  29. package/dylibs/libKeyboardPatch.dylib +0 -0
  30. package/dylibs/libNativeDevtoolsIos.dylib +0 -0
  31. package/dylibs/tcp/libArgentInjectionBootstrap.dylib +0 -0
  32. package/dylibs/tcp/libKeyboardPatch.dylib +0 -0
  33. package/dylibs/tcp/libNativeDevtoolsIos.dylib +0 -0
  34. package/dylibs/tvos/libArgentInjectionBootstrap.dylib +0 -0
  35. package/dylibs/tvos/libKeyboardPatch.dylib +0 -0
  36. package/dylibs/tvos/libNativeDevtoolsIos.dylib +0 -0
  37. package/package.json +1 -1
  38. package/rules/argent.md +8 -3
  39. package/skills/argent-create-flow/SKILL.md +1 -0
  40. package/skills/argent-device-interact/SKILL.md +2 -0
  41. package/skills/argent-ios-device-interact/SKILL.md +18 -0
  42. package/skills/argent-ios-device-setup/SKILL.md +20 -0
  43. package/skills/argent-qa-flows/SKILL.md +2 -0
  44. package/skills/argent-screenshot-diff/SKILL.md +2 -0
package/README.md CHANGED
@@ -23,7 +23,7 @@ Argent drives a growing set of targets through a single toolkit, each with the r
23
23
 
24
24
  | Platform | Targets | Interaction |
25
25
  | ----------------- | ----------------------------------------------------------------------- | ---------------- |
26
- | **iOS** | Simulators | Touch / gesture |
26
+ | **iOS** | Simulators and physical iPhones (USB) | Touch / gesture |
27
27
  | **Android** | Emulators (AVDs) and physical devices over adb | Touch / gesture |
28
28
  | **TV** | Apple TV (tvOS), Android TV / Google TV, Amazon Fire TV (Vega) | D-pad / remote |
29
29
  | **Desktop & web** | Electron and Chromium apps (incl. React Native Web / Expo web) over CDP | Mouse / keyboard |
Binary file
Binary file
Binary file
Binary file
package/dist/cli-cmds.mjs CHANGED
@@ -1805,14 +1805,10 @@ async function sweepDeadStateFiles() {
1805
1805
  continue;
1806
1806
  }
1807
1807
  if (fs.existsSync(fresh.bundlePath)) continue;
1808
- const guarded = process.platform !== "win32";
1809
- if (guarded && !processCommandMatches(fresh.pid, fresh.bundlePath)) continue;
1808
+ if (!couldBeOurToolServer(fresh.pid, fresh.bundlePath)) continue;
1810
1809
  await unlink(file).catch(() => {
1811
1810
  });
1812
- void terminatePid(
1813
- fresh.pid,
1814
- guarded ? () => processCommandMatches(fresh.pid, fresh.bundlePath) : void 0
1815
- );
1811
+ void terminatePid(fresh.pid, () => couldBeOurToolServer(fresh.pid, fresh.bundlePath));
1816
1812
  }
1817
1813
  }
1818
1814
  var readState = readToolsServerState;
@@ -1851,20 +1847,37 @@ async function killToolServer(bundlePath) {
1851
1847
  await terminatePid(state2.pid);
1852
1848
  await clearToolsServerState(bundlePath ?? state2.bundlePath);
1853
1849
  }
1854
- function processCommandMatches(pid, marker) {
1850
+ var PS_BIN = ["/bin/ps", "/usr/bin/ps"].find((p) => fs.existsSync(p)) ?? "ps";
1851
+ var PS_WIDTH_FLAGS = ["-ww"];
1852
+ function readProcessCommandLine(pid, flags2 = PS_WIDTH_FLAGS) {
1853
+ return execFileSync(PS_BIN, [...flags2, "-p", String(pid), "-o", "command="], {
1854
+ encoding: "utf8",
1855
+ timeout: 2e3,
1856
+ // A recycled pid can sit on a process with an argv past Node's 1 MiB exec
1857
+ // default, where the overrun surfaces as ENOBUFS instead of a command line.
1858
+ // Same ceiling as tool-server's vega-process ps probes.
1859
+ maxBuffer: 16 * 1024 * 1024,
1860
+ // Piping ps's stderr is what puts a rejected flag ("ps: invalid option --
1861
+ // 'w'") into the thrown error's message.
1862
+ stdio: ["ignore", "pipe", "pipe"]
1863
+ }).trim();
1864
+ }
1865
+ function couldBeOurToolServer(pid, marker) {
1855
1866
  if (!marker) return false;
1867
+ if (process.platform === "win32") return true;
1868
+ let cmd;
1856
1869
  try {
1857
- const cmd = execFileSync("ps", ["-p", String(pid), "-o", "command="], {
1858
- encoding: "utf8",
1859
- timeout: 2e3,
1860
- stdio: ["ignore", "pipe", "ignore"]
1861
- }).trim();
1862
- if (!cmd) return false;
1863
- const escaped = marker.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1864
- return new RegExp(`(?:^|\\s)${escaped} start(?:\\s|$)`).test(cmd);
1865
- } catch {
1870
+ cmd = readProcessCommandLine(pid);
1871
+ } catch (err) {
1872
+ process.stderr.write(
1873
+ `[launcher] ps could not read pid ${pid}'s command line; leaving it alone: ${String(err)}
1874
+ `
1875
+ );
1866
1876
  return false;
1867
1877
  }
1878
+ if (!cmd) return false;
1879
+ const escaped = marker.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1880
+ return new RegExp(`(?:^|\\s)${escaped} start(?:\\s|$)`).test(cmd);
1868
1881
  }
1869
1882
  var LOCK_WAIT_TIMEOUT_MS = 3e4;
1870
1883
  var LOCK_STALE_MS = 45e3;
@@ -1953,8 +1966,8 @@ async function ensureToolsServer(paths) {
1953
1966
  const state2 = await readState(paths.bundlePath);
1954
1967
  const reuse = await reusableHandle(state2, paths.bundlePath, paths.version);
1955
1968
  if (reuse) return reuse;
1956
- if (state2 && state2.managed === "autospawn" && state2.bundlePath === paths.bundlePath && isProcessAlive(state2.pid) && processCommandMatches(state2.pid, state2.bundlePath)) {
1957
- await terminatePid(state2.pid, () => processCommandMatches(state2.pid, state2.bundlePath));
1969
+ if (state2 && state2.managed === "autospawn" && state2.bundlePath === paths.bundlePath && isProcessAlive(state2.pid) && couldBeOurToolServer(state2.pid, state2.bundlePath)) {
1970
+ await terminatePid(state2.pid, () => couldBeOurToolServer(state2.pid, state2.bundlePath));
1958
1971
  }
1959
1972
  await clearToolsServerState(paths.bundlePath);
1960
1973
  await sweepDeadStateFiles();
@@ -2290,6 +2303,18 @@ var FAILURE_CODES = {
2290
2303
  SIMULATOR_COMMAND_REJECTED: "SIMULATOR_COMMAND_REJECTED",
2291
2304
  SIMULATOR_COMMAND_ACK_TIMEOUT: "SIMULATOR_COMMAND_ACK_TIMEOUT",
2292
2305
  SIMULATOR_COMMAND_TRANSPORT_FAILED: "SIMULATOR_COMMAND_TRANSPORT_FAILED",
2306
+ // Physical iOS devices: the XCUITest-runner blueprint lifecycle, the runner
2307
+ // command client, and the `xcrun devicectl` subprocess wrapper (simulators
2308
+ // use the SIMULATOR_* set).
2309
+ IOS_DEVICE_RUNNER_FACTORY_OPTIONS_MISSING: "IOS_DEVICE_RUNNER_FACTORY_OPTIONS_MISSING",
2310
+ IOS_DEVICE_RUNNER_NOT_READY: "IOS_DEVICE_RUNNER_NOT_READY",
2311
+ IOS_DEVICE_RUNNER_TERMINATED: "IOS_DEVICE_RUNNER_TERMINATED",
2312
+ IOS_DEVICE_RUNNER_EXITED: "IOS_DEVICE_RUNNER_EXITED",
2313
+ // The runner answered a command with an ok:false envelope.
2314
+ IOS_DEVICE_RUNNER_COMMAND_FAILED: "IOS_DEVICE_RUNNER_COMMAND_FAILED",
2315
+ // The usbmux or HTTP exchange with a reachable runner failed.
2316
+ IOS_DEVICE_RUNNER_TRANSPORT_FAILED: "IOS_DEVICE_RUNNER_TRANSPORT_FAILED",
2317
+ IOS_DEVICECTL_COMMAND_FAILED: "IOS_DEVICECTL_COMMAND_FAILED",
2293
2318
  AX_QUERY_TIMEOUT: "AX_QUERY_TIMEOUT",
2294
2319
  AX_DAEMON_READY_TIMEOUT: "AX_DAEMON_READY_TIMEOUT",
2295
2320
  AX_DAEMON_EXITED_BEFORE_READY: "AX_DAEMON_EXITED_BEFORE_READY",
@@ -2460,6 +2485,7 @@ var FAILURE_CODES = {
2460
2485
  KEYBOARD_KEY_UNSUPPORTED: "KEYBOARD_KEY_UNSUPPORTED",
2461
2486
  KEYBOARD_CHARACTER_UNSUPPORTED: "KEYBOARD_CHARACTER_UNSUPPORTED",
2462
2487
  KEYBOARD_TEXT_AND_KEY_COMBINED: "KEYBOARD_TEXT_AND_KEY_COMBINED",
2488
+ KEYBOARD_INPUT_NOT_FOCUSED: "KEYBOARD_INPUT_NOT_FOCUSED",
2463
2489
  SECRET_PLACEHOLDER_UNKNOWN: "SECRET_PLACEHOLDER_UNKNOWN",
2464
2490
  SCREENSHOT_DIFF_INPUT_INVALID: "SCREENSHOT_DIFF_INPUT_INVALID",
2465
2491
  BOOT_DEVICE_TARGET_SELECTION_INVALID: "BOOT_DEVICE_TARGET_SELECTION_INVALID",
@@ -2504,7 +2530,9 @@ var FAILURE_COMMANDS = [
2504
2530
  "electron",
2505
2531
  "npm",
2506
2532
  "npx",
2507
- "unknown"
2533
+ "unknown",
2534
+ "devicectl",
2535
+ "xcodebuild"
2508
2536
  ];
2509
2537
  var FAILURE_SIGNAL_NAMES = [
2510
2538
  "SIGABRT",
@@ -7225,7 +7253,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
7225
7253
  var SESSION_ID2 = randomUUID5();
7226
7254
  function readCliVersion() {
7227
7255
  if (true) {
7228
- return "0.23.0";
7256
+ return "0.23.1-next.1";
7229
7257
  }
7230
7258
  return "0.0.0";
7231
7259
  }
@@ -15625,6 +15625,18 @@ var FAILURE_CODES = {
15625
15625
  SIMULATOR_COMMAND_REJECTED: "SIMULATOR_COMMAND_REJECTED",
15626
15626
  SIMULATOR_COMMAND_ACK_TIMEOUT: "SIMULATOR_COMMAND_ACK_TIMEOUT",
15627
15627
  SIMULATOR_COMMAND_TRANSPORT_FAILED: "SIMULATOR_COMMAND_TRANSPORT_FAILED",
15628
+ // Physical iOS devices: the XCUITest-runner blueprint lifecycle, the runner
15629
+ // command client, and the `xcrun devicectl` subprocess wrapper (simulators
15630
+ // use the SIMULATOR_* set).
15631
+ IOS_DEVICE_RUNNER_FACTORY_OPTIONS_MISSING: "IOS_DEVICE_RUNNER_FACTORY_OPTIONS_MISSING",
15632
+ IOS_DEVICE_RUNNER_NOT_READY: "IOS_DEVICE_RUNNER_NOT_READY",
15633
+ IOS_DEVICE_RUNNER_TERMINATED: "IOS_DEVICE_RUNNER_TERMINATED",
15634
+ IOS_DEVICE_RUNNER_EXITED: "IOS_DEVICE_RUNNER_EXITED",
15635
+ // The runner answered a command with an ok:false envelope.
15636
+ IOS_DEVICE_RUNNER_COMMAND_FAILED: "IOS_DEVICE_RUNNER_COMMAND_FAILED",
15637
+ // The usbmux or HTTP exchange with a reachable runner failed.
15638
+ IOS_DEVICE_RUNNER_TRANSPORT_FAILED: "IOS_DEVICE_RUNNER_TRANSPORT_FAILED",
15639
+ IOS_DEVICECTL_COMMAND_FAILED: "IOS_DEVICECTL_COMMAND_FAILED",
15628
15640
  AX_QUERY_TIMEOUT: "AX_QUERY_TIMEOUT",
15629
15641
  AX_DAEMON_READY_TIMEOUT: "AX_DAEMON_READY_TIMEOUT",
15630
15642
  AX_DAEMON_EXITED_BEFORE_READY: "AX_DAEMON_EXITED_BEFORE_READY",
@@ -15795,6 +15807,7 @@ var FAILURE_CODES = {
15795
15807
  KEYBOARD_KEY_UNSUPPORTED: "KEYBOARD_KEY_UNSUPPORTED",
15796
15808
  KEYBOARD_CHARACTER_UNSUPPORTED: "KEYBOARD_CHARACTER_UNSUPPORTED",
15797
15809
  KEYBOARD_TEXT_AND_KEY_COMBINED: "KEYBOARD_TEXT_AND_KEY_COMBINED",
15810
+ KEYBOARD_INPUT_NOT_FOCUSED: "KEYBOARD_INPUT_NOT_FOCUSED",
15798
15811
  SECRET_PLACEHOLDER_UNKNOWN: "SECRET_PLACEHOLDER_UNKNOWN",
15799
15812
  SCREENSHOT_DIFF_INPUT_INVALID: "SCREENSHOT_DIFF_INPUT_INVALID",
15800
15813
  BOOT_DEVICE_TARGET_SELECTION_INVALID: "BOOT_DEVICE_TARGET_SELECTION_INVALID",
@@ -15839,7 +15852,9 @@ var FAILURE_COMMANDS = [
15839
15852
  "electron",
15840
15853
  "npm",
15841
15854
  "npx",
15842
- "unknown"
15855
+ "unknown",
15856
+ "devicectl",
15857
+ "xcodebuild"
15843
15858
  ];
15844
15859
  var FAILURE_SIGNAL_NAMES = [
15845
15860
  "SIGABRT",
@@ -16610,7 +16625,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
16610
16625
  var SESSION_ID = randomUUID4();
16611
16626
  function readCliVersion() {
16612
16627
  if (true) {
16613
- return "0.23.0";
16628
+ return "0.23.1-next.1";
16614
16629
  }
16615
16630
  return "0.0.0";
16616
16631
  }
@@ -23031,15 +23046,11 @@ async function killToolServerForInstallDir(packageDir) {
23031
23046
  const fresh = await readStateFile(file);
23032
23047
  if (!fresh || fresh.pid !== state2.pid || fresh.bundlePath !== state2.bundlePath) continue;
23033
23048
  const alive = isProcessAlive(fresh.pid);
23034
- const guarded = process.platform !== "win32";
23035
- if (alive && guarded && !processCommandMatches(fresh.pid, fresh.bundlePath)) {
23049
+ if (alive && !couldBeOurToolServer(fresh.pid, fresh.bundlePath)) {
23036
23050
  continue;
23037
23051
  }
23038
23052
  if (alive) {
23039
- await terminatePid(
23040
- fresh.pid,
23041
- guarded ? () => processCommandMatches(fresh.pid, fresh.bundlePath) : void 0
23042
- );
23053
+ await terminatePid(fresh.pid, () => couldBeOurToolServer(fresh.pid, fresh.bundlePath));
23043
23054
  }
23044
23055
  await unlink(file).catch(() => {
23045
23056
  });
@@ -23047,20 +23058,37 @@ async function killToolServerForInstallDir(packageDir) {
23047
23058
  }
23048
23059
  return killed;
23049
23060
  }
23050
- function processCommandMatches(pid, marker) {
23061
+ var PS_BIN = ["/bin/ps", "/usr/bin/ps"].find((p) => fs16.existsSync(p)) ?? "ps";
23062
+ var PS_WIDTH_FLAGS = ["-ww"];
23063
+ function readProcessCommandLine(pid, flags = PS_WIDTH_FLAGS) {
23064
+ return execFileSync5(PS_BIN, [...flags, "-p", String(pid), "-o", "command="], {
23065
+ encoding: "utf8",
23066
+ timeout: 2e3,
23067
+ // A recycled pid can sit on a process with an argv past Node's 1 MiB exec
23068
+ // default, where the overrun surfaces as ENOBUFS instead of a command line.
23069
+ // Same ceiling as tool-server's vega-process ps probes.
23070
+ maxBuffer: 16 * 1024 * 1024,
23071
+ // Piping ps's stderr is what puts a rejected flag ("ps: invalid option --
23072
+ // 'w'") into the thrown error's message.
23073
+ stdio: ["ignore", "pipe", "pipe"]
23074
+ }).trim();
23075
+ }
23076
+ function couldBeOurToolServer(pid, marker) {
23051
23077
  if (!marker) return false;
23078
+ if (process.platform === "win32") return true;
23079
+ let cmd;
23052
23080
  try {
23053
- const cmd = execFileSync5("ps", ["-p", String(pid), "-o", "command="], {
23054
- encoding: "utf8",
23055
- timeout: 2e3,
23056
- stdio: ["ignore", "pipe", "ignore"]
23057
- }).trim();
23058
- if (!cmd) return false;
23059
- const escaped = marker.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
23060
- return new RegExp(`(?:^|\\s)${escaped} start(?:\\s|$)`).test(cmd);
23061
- } catch {
23081
+ cmd = readProcessCommandLine(pid);
23082
+ } catch (err) {
23083
+ process.stderr.write(
23084
+ `[launcher] ps could not read pid ${pid}'s command line; leaving it alone: ${String(err)}
23085
+ `
23086
+ );
23062
23087
  return false;
23063
23088
  }
23089
+ if (!cmd) return false;
23090
+ const escaped = marker.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
23091
+ return new RegExp(`(?:^|\\s)${escaped} start(?:\\s|$)`).test(cmd);
23064
23092
  }
23065
23093
 
23066
23094
  // ../argent-tools-client/src/link-config.ts
@@ -0,0 +1,37 @@
1
+ import UIKit
2
+
3
+ /// Placeholder host application for the Argent runner's UI-test bundle.
4
+ ///
5
+ /// It never participates in automation (every command targets another app by
6
+ /// bundle id), but XCUITest requires a host app to exist, and testmanagerd
7
+ /// launches it once when the session starts. The single black screen makes it
8
+ /// obvious on the device that the runner, not a user app, is frontmost.
9
+ @main
10
+ final class RunnerHostAppDelegate: UIResponder, UIApplicationDelegate {
11
+ var window: UIWindow?
12
+
13
+ func application(
14
+ _ application: UIApplication,
15
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
16
+ ) -> Bool {
17
+ let controller = UIViewController()
18
+ controller.view.backgroundColor = .black
19
+
20
+ let label = UILabel()
21
+ label.text = "Argent Runner"
22
+ label.textColor = .white
23
+ label.font = .systemFont(ofSize: 22, weight: .semibold)
24
+ label.translatesAutoresizingMaskIntoConstraints = false
25
+ controller.view.addSubview(label)
26
+ NSLayoutConstraint.activate([
27
+ label.centerXAnchor.constraint(equalTo: controller.view.centerXAnchor),
28
+ label.centerYAnchor.constraint(equalTo: controller.view.centerYAnchor),
29
+ ])
30
+
31
+ let window = UIWindow(frame: UIScreen.main.bounds)
32
+ window.rootViewController = controller
33
+ window.makeKeyAndVisible()
34
+ self.window = window
35
+ return true
36
+ }
37
+ }
@@ -0,0 +1,389 @@
1
+ // !$*UTF8*$!
2
+ {
3
+ archiveVersion = 1;
4
+ classes = {
5
+ };
6
+ objectVersion = 77;
7
+ objects = {
8
+
9
+ /* Begin PBXContainerItemProxy section */
10
+ A00000000000000000000025 /* PBXContainerItemProxy */ = {
11
+ isa = PBXContainerItemProxy;
12
+ containerPortal = A00000000000000000000001 /* Project object */;
13
+ proxyType = 1;
14
+ remoteGlobalIDString = A00000000000000000000011;
15
+ remoteInfo = ArgentRunner;
16
+ };
17
+ /* End PBXContainerItemProxy section */
18
+
19
+ /* Begin PBXFileReference section */
20
+ A00000000000000000000007 /* ArgentRunner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ArgentRunner.app; sourceTree = BUILT_PRODUCTS_DIR; };
21
+ A00000000000000000000008 /* ArgentRunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ArgentRunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
22
+ /* End PBXFileReference section */
23
+
24
+ /* Begin PBXFileSystemSynchronizedRootGroup section */
25
+ A00000000000000000000009 /* ArgentRunner */ = {
26
+ isa = PBXFileSystemSynchronizedRootGroup;
27
+ path = ArgentRunner;
28
+ sourceTree = "<group>";
29
+ };
30
+ A00000000000000000000010 /* ArgentRunnerUITests */ = {
31
+ isa = PBXFileSystemSynchronizedRootGroup;
32
+ path = ArgentRunnerUITests;
33
+ sourceTree = "<group>";
34
+ };
35
+ /* End PBXFileSystemSynchronizedRootGroup section */
36
+
37
+ /* Begin PBXFrameworksBuildPhase section */
38
+ A00000000000000000000016 /* Frameworks */ = {
39
+ isa = PBXFrameworksBuildPhase;
40
+ buildActionMask = 2147483647;
41
+ files = (
42
+ );
43
+ runOnlyForDeploymentPostprocessing = 0;
44
+ };
45
+ A00000000000000000000023 /* Frameworks */ = {
46
+ isa = PBXFrameworksBuildPhase;
47
+ buildActionMask = 2147483647;
48
+ files = (
49
+ );
50
+ runOnlyForDeploymentPostprocessing = 0;
51
+ };
52
+ /* End PBXFrameworksBuildPhase section */
53
+
54
+ /* Begin PBXGroup section */
55
+ A00000000000000000000005 = {
56
+ isa = PBXGroup;
57
+ children = (
58
+ A00000000000000000000009 /* ArgentRunner */,
59
+ A00000000000000000000010 /* ArgentRunnerUITests */,
60
+ A00000000000000000000006 /* Products */,
61
+ );
62
+ sourceTree = "<group>";
63
+ };
64
+ A00000000000000000000006 /* Products */ = {
65
+ isa = PBXGroup;
66
+ children = (
67
+ A00000000000000000000007 /* ArgentRunner.app */,
68
+ A00000000000000000000008 /* ArgentRunnerUITests.xctest */,
69
+ );
70
+ name = Products;
71
+ sourceTree = "<group>";
72
+ };
73
+ /* End PBXGroup section */
74
+
75
+ /* Begin PBXNativeTarget section */
76
+ A00000000000000000000011 /* ArgentRunner */ = {
77
+ isa = PBXNativeTarget;
78
+ buildConfigurationList = A00000000000000000000012 /* Build configuration list for PBXNativeTarget "ArgentRunner" */;
79
+ buildPhases = (
80
+ A00000000000000000000015 /* Sources */,
81
+ A00000000000000000000016 /* Frameworks */,
82
+ A00000000000000000000017 /* Resources */,
83
+ );
84
+ buildRules = (
85
+ );
86
+ dependencies = (
87
+ );
88
+ fileSystemSynchronizedGroups = (
89
+ A00000000000000000000009 /* ArgentRunner */,
90
+ );
91
+ name = ArgentRunner;
92
+ packageProductDependencies = (
93
+ );
94
+ productName = ArgentRunner;
95
+ productReference = A00000000000000000000007 /* ArgentRunner.app */;
96
+ productType = "com.apple.product-type.application";
97
+ };
98
+ A00000000000000000000018 /* ArgentRunnerUITests */ = {
99
+ isa = PBXNativeTarget;
100
+ buildConfigurationList = A00000000000000000000019 /* Build configuration list for PBXNativeTarget "ArgentRunnerUITests" */;
101
+ buildPhases = (
102
+ A00000000000000000000022 /* Sources */,
103
+ A00000000000000000000023 /* Frameworks */,
104
+ A00000000000000000000024 /* Resources */,
105
+ );
106
+ buildRules = (
107
+ );
108
+ dependencies = (
109
+ A00000000000000000000026 /* PBXTargetDependency */,
110
+ );
111
+ fileSystemSynchronizedGroups = (
112
+ A00000000000000000000010 /* ArgentRunnerUITests */,
113
+ );
114
+ name = ArgentRunnerUITests;
115
+ packageProductDependencies = (
116
+ );
117
+ productName = ArgentRunnerUITests;
118
+ productReference = A00000000000000000000008 /* ArgentRunnerUITests.xctest */;
119
+ productType = "com.apple.product-type.bundle.ui-testing";
120
+ };
121
+ /* End PBXNativeTarget section */
122
+
123
+ /* Begin PBXProject section */
124
+ A00000000000000000000001 /* Project object */ = {
125
+ isa = PBXProject;
126
+ attributes = {
127
+ BuildIndependentTargetsInParallel = 1;
128
+ LastUpgradeCheck = 2600;
129
+ TargetAttributes = {
130
+ A00000000000000000000011 = {
131
+ CreatedOnToolsVersion = 26.0;
132
+ };
133
+ A00000000000000000000018 = {
134
+ CreatedOnToolsVersion = 26.0;
135
+ TestTargetID = A00000000000000000000011;
136
+ };
137
+ };
138
+ };
139
+ buildConfigurationList = A00000000000000000000002 /* Build configuration list for PBXProject "ArgentRunner" */;
140
+ developmentRegion = en;
141
+ hasScannedForEncodings = 0;
142
+ knownRegions = (
143
+ en,
144
+ Base,
145
+ );
146
+ mainGroup = A00000000000000000000005;
147
+ minimizedProjectReferenceProxies = 1;
148
+ preferredProjectObjectVersion = 77;
149
+ productRefGroup = A00000000000000000000006 /* Products */;
150
+ projectDirPath = "";
151
+ projectRoot = "";
152
+ targets = (
153
+ A00000000000000000000011 /* ArgentRunner */,
154
+ A00000000000000000000018 /* ArgentRunnerUITests */,
155
+ );
156
+ };
157
+ /* End PBXProject section */
158
+
159
+ /* Begin PBXResourcesBuildPhase section */
160
+ A00000000000000000000017 /* Resources */ = {
161
+ isa = PBXResourcesBuildPhase;
162
+ buildActionMask = 2147483647;
163
+ files = (
164
+ );
165
+ runOnlyForDeploymentPostprocessing = 0;
166
+ };
167
+ A00000000000000000000024 /* Resources */ = {
168
+ isa = PBXResourcesBuildPhase;
169
+ buildActionMask = 2147483647;
170
+ files = (
171
+ );
172
+ runOnlyForDeploymentPostprocessing = 0;
173
+ };
174
+ /* End PBXResourcesBuildPhase section */
175
+
176
+ /* Begin PBXSourcesBuildPhase section */
177
+ A00000000000000000000015 /* Sources */ = {
178
+ isa = PBXSourcesBuildPhase;
179
+ buildActionMask = 2147483647;
180
+ files = (
181
+ );
182
+ runOnlyForDeploymentPostprocessing = 0;
183
+ };
184
+ A00000000000000000000022 /* Sources */ = {
185
+ isa = PBXSourcesBuildPhase;
186
+ buildActionMask = 2147483647;
187
+ files = (
188
+ );
189
+ runOnlyForDeploymentPostprocessing = 0;
190
+ };
191
+ /* End PBXSourcesBuildPhase section */
192
+
193
+ /* Begin PBXTargetDependency section */
194
+ A00000000000000000000026 /* PBXTargetDependency */ = {
195
+ isa = PBXTargetDependency;
196
+ target = A00000000000000000000011 /* ArgentRunner */;
197
+ targetProxy = A00000000000000000000025 /* PBXContainerItemProxy */;
198
+ };
199
+ /* End PBXTargetDependency section */
200
+
201
+ /* Begin XCBuildConfiguration section */
202
+ A00000000000000000000003 /* Debug */ = {
203
+ isa = XCBuildConfiguration;
204
+ buildSettings = {
205
+ ALWAYS_SEARCH_USER_PATHS = NO;
206
+ ARGENT_RUNNER_APP_BUNDLE_ID = com.argent.ios.runner;
207
+ ARGENT_RUNNER_TEST_BUNDLE_ID = "$(ARGENT_RUNNER_APP_BUNDLE_ID).uitests";
208
+ CLANG_ANALYZER_NONNULL = YES;
209
+ CLANG_ENABLE_MODULES = YES;
210
+ CLANG_ENABLE_OBJC_ARC = YES;
211
+ CLANG_ENABLE_OBJC_WEAK = YES;
212
+ CLANG_WARN_BOOL_CONVERSION = YES;
213
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
214
+ CLANG_WARN_EMPTY_BODY = YES;
215
+ CLANG_WARN_ENUM_CONVERSION = YES;
216
+ CLANG_WARN_INFINITE_RECURSION = YES;
217
+ CLANG_WARN_INT_CONVERSION = YES;
218
+ CLANG_WARN_UNREACHABLE_CODE = YES;
219
+ COPY_PHASE_STRIP = NO;
220
+ DEBUG_INFORMATION_FORMAT = dwarf;
221
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
222
+ ENABLE_TESTABILITY = YES;
223
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
224
+ GCC_C_LANGUAGE_STANDARD = gnu17;
225
+ GCC_NO_COMMON_BLOCKS = YES;
226
+ GCC_OPTIMIZATION_LEVEL = 0;
227
+ GCC_PREPROCESSOR_DEFINITIONS = (
228
+ "DEBUG=1",
229
+ "$(inherited)",
230
+ );
231
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
232
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
233
+ GCC_WARN_UNUSED_FUNCTION = YES;
234
+ GCC_WARN_UNUSED_VARIABLE = YES;
235
+ IPHONEOS_DEPLOYMENT_TARGET = 16.0;
236
+ ONLY_ACTIVE_ARCH = YES;
237
+ SDKROOT = iphoneos;
238
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
239
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
240
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
241
+ SWIFT_VERSION = 5.0;
242
+ TARGETED_DEVICE_FAMILY = 1;
243
+ };
244
+ name = Debug;
245
+ };
246
+ A00000000000000000000004 /* Release */ = {
247
+ isa = XCBuildConfiguration;
248
+ buildSettings = {
249
+ ALWAYS_SEARCH_USER_PATHS = NO;
250
+ ARGENT_RUNNER_APP_BUNDLE_ID = com.argent.ios.runner;
251
+ ARGENT_RUNNER_TEST_BUNDLE_ID = "$(ARGENT_RUNNER_APP_BUNDLE_ID).uitests";
252
+ CLANG_ANALYZER_NONNULL = YES;
253
+ CLANG_ENABLE_MODULES = YES;
254
+ CLANG_ENABLE_OBJC_ARC = YES;
255
+ CLANG_ENABLE_OBJC_WEAK = YES;
256
+ CLANG_WARN_BOOL_CONVERSION = YES;
257
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
258
+ CLANG_WARN_EMPTY_BODY = YES;
259
+ CLANG_WARN_ENUM_CONVERSION = YES;
260
+ CLANG_WARN_INFINITE_RECURSION = YES;
261
+ CLANG_WARN_INT_CONVERSION = YES;
262
+ CLANG_WARN_UNREACHABLE_CODE = YES;
263
+ COPY_PHASE_STRIP = NO;
264
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
265
+ ENABLE_NS_ASSERTIONS = NO;
266
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
267
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
268
+ GCC_C_LANGUAGE_STANDARD = gnu17;
269
+ GCC_NO_COMMON_BLOCKS = YES;
270
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
271
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
272
+ GCC_WARN_UNUSED_FUNCTION = YES;
273
+ GCC_WARN_UNUSED_VARIABLE = YES;
274
+ IPHONEOS_DEPLOYMENT_TARGET = 16.0;
275
+ SDKROOT = iphoneos;
276
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
277
+ SWIFT_COMPILATION_MODE = wholemodule;
278
+ SWIFT_VERSION = 5.0;
279
+ TARGETED_DEVICE_FAMILY = 1;
280
+ VALIDATE_PRODUCT = YES;
281
+ };
282
+ name = Release;
283
+ };
284
+ A00000000000000000000013 /* Debug */ = {
285
+ isa = XCBuildConfiguration;
286
+ buildSettings = {
287
+ CODE_SIGN_STYLE = Automatic;
288
+ CURRENT_PROJECT_VERSION = 1;
289
+ GENERATE_INFOPLIST_FILE = YES;
290
+ INFOPLIST_KEY_UIApplicationSceneManifest_Generation = NO;
291
+ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
292
+ INFOPLIST_KEY_UILaunchScreen_Generation = YES;
293
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
294
+ LD_RUNPATH_SEARCH_PATHS = (
295
+ "$(inherited)",
296
+ "@executable_path/Frameworks",
297
+ );
298
+ MARKETING_VERSION = 1.0;
299
+ PRODUCT_BUNDLE_IDENTIFIER = "$(ARGENT_RUNNER_APP_BUNDLE_ID)";
300
+ PRODUCT_NAME = "$(TARGET_NAME)";
301
+ SWIFT_EMIT_LOC_STRINGS = YES;
302
+ };
303
+ name = Debug;
304
+ };
305
+ A00000000000000000000014 /* Release */ = {
306
+ isa = XCBuildConfiguration;
307
+ buildSettings = {
308
+ CODE_SIGN_STYLE = Automatic;
309
+ CURRENT_PROJECT_VERSION = 1;
310
+ GENERATE_INFOPLIST_FILE = YES;
311
+ INFOPLIST_KEY_UIApplicationSceneManifest_Generation = NO;
312
+ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
313
+ INFOPLIST_KEY_UILaunchScreen_Generation = YES;
314
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
315
+ LD_RUNPATH_SEARCH_PATHS = (
316
+ "$(inherited)",
317
+ "@executable_path/Frameworks",
318
+ );
319
+ MARKETING_VERSION = 1.0;
320
+ PRODUCT_BUNDLE_IDENTIFIER = "$(ARGENT_RUNNER_APP_BUNDLE_ID)";
321
+ PRODUCT_NAME = "$(TARGET_NAME)";
322
+ SWIFT_EMIT_LOC_STRINGS = YES;
323
+ };
324
+ name = Release;
325
+ };
326
+ A00000000000000000000020 /* Debug */ = {
327
+ isa = XCBuildConfiguration;
328
+ buildSettings = {
329
+ CODE_SIGN_STYLE = Automatic;
330
+ CURRENT_PROJECT_VERSION = 1;
331
+ GENERATE_INFOPLIST_FILE = YES;
332
+ MARKETING_VERSION = 1.0;
333
+ PRODUCT_BUNDLE_IDENTIFIER = "$(ARGENT_RUNNER_TEST_BUNDLE_ID)";
334
+ PRODUCT_NAME = "$(TARGET_NAME)";
335
+ SWIFT_EMIT_LOC_STRINGS = NO;
336
+ SWIFT_OBJC_BRIDGING_HEADER = "ArgentRunnerUITests/ArgentRunnerUITests-Bridging-Header.h";
337
+ TEST_TARGET_NAME = ArgentRunner;
338
+ };
339
+ name = Debug;
340
+ };
341
+ A00000000000000000000021 /* Release */ = {
342
+ isa = XCBuildConfiguration;
343
+ buildSettings = {
344
+ CODE_SIGN_STYLE = Automatic;
345
+ CURRENT_PROJECT_VERSION = 1;
346
+ GENERATE_INFOPLIST_FILE = YES;
347
+ MARKETING_VERSION = 1.0;
348
+ PRODUCT_BUNDLE_IDENTIFIER = "$(ARGENT_RUNNER_TEST_BUNDLE_ID)";
349
+ PRODUCT_NAME = "$(TARGET_NAME)";
350
+ SWIFT_EMIT_LOC_STRINGS = NO;
351
+ SWIFT_OBJC_BRIDGING_HEADER = "ArgentRunnerUITests/ArgentRunnerUITests-Bridging-Header.h";
352
+ TEST_TARGET_NAME = ArgentRunner;
353
+ };
354
+ name = Release;
355
+ };
356
+ /* End XCBuildConfiguration section */
357
+
358
+ /* Begin XCConfigurationList section */
359
+ A00000000000000000000002 /* Build configuration list for PBXProject "ArgentRunner" */ = {
360
+ isa = XCConfigurationList;
361
+ buildConfigurations = (
362
+ A00000000000000000000003 /* Debug */,
363
+ A00000000000000000000004 /* Release */,
364
+ );
365
+ defaultConfigurationIsVisible = 0;
366
+ defaultConfigurationName = Release;
367
+ };
368
+ A00000000000000000000012 /* Build configuration list for PBXNativeTarget "ArgentRunner" */ = {
369
+ isa = XCConfigurationList;
370
+ buildConfigurations = (
371
+ A00000000000000000000013 /* Debug */,
372
+ A00000000000000000000014 /* Release */,
373
+ );
374
+ defaultConfigurationIsVisible = 0;
375
+ defaultConfigurationName = Release;
376
+ };
377
+ A00000000000000000000019 /* Build configuration list for PBXNativeTarget "ArgentRunnerUITests" */ = {
378
+ isa = XCConfigurationList;
379
+ buildConfigurations = (
380
+ A00000000000000000000020 /* Debug */,
381
+ A00000000000000000000021 /* Release */,
382
+ );
383
+ defaultConfigurationIsVisible = 0;
384
+ defaultConfigurationName = Release;
385
+ };
386
+ /* End XCConfigurationList section */
387
+ };
388
+ rootObject = A00000000000000000000001 /* Project object */;
389
+ }