@swmansion/argent 0.23.0 → 0.23.1-next.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.
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 +17 -2
  8. package/dist/installer.mjs +17 -2
  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 +16 -1
  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
@@ -2290,6 +2290,18 @@ var FAILURE_CODES = {
2290
2290
  SIMULATOR_COMMAND_REJECTED: "SIMULATOR_COMMAND_REJECTED",
2291
2291
  SIMULATOR_COMMAND_ACK_TIMEOUT: "SIMULATOR_COMMAND_ACK_TIMEOUT",
2292
2292
  SIMULATOR_COMMAND_TRANSPORT_FAILED: "SIMULATOR_COMMAND_TRANSPORT_FAILED",
2293
+ // Physical iOS devices: the XCUITest-runner blueprint lifecycle, the runner
2294
+ // command client, and the `xcrun devicectl` subprocess wrapper (simulators
2295
+ // use the SIMULATOR_* set).
2296
+ IOS_DEVICE_RUNNER_FACTORY_OPTIONS_MISSING: "IOS_DEVICE_RUNNER_FACTORY_OPTIONS_MISSING",
2297
+ IOS_DEVICE_RUNNER_NOT_READY: "IOS_DEVICE_RUNNER_NOT_READY",
2298
+ IOS_DEVICE_RUNNER_TERMINATED: "IOS_DEVICE_RUNNER_TERMINATED",
2299
+ IOS_DEVICE_RUNNER_EXITED: "IOS_DEVICE_RUNNER_EXITED",
2300
+ // The runner answered a command with an ok:false envelope.
2301
+ IOS_DEVICE_RUNNER_COMMAND_FAILED: "IOS_DEVICE_RUNNER_COMMAND_FAILED",
2302
+ // The usbmux or HTTP exchange with a reachable runner failed.
2303
+ IOS_DEVICE_RUNNER_TRANSPORT_FAILED: "IOS_DEVICE_RUNNER_TRANSPORT_FAILED",
2304
+ IOS_DEVICECTL_COMMAND_FAILED: "IOS_DEVICECTL_COMMAND_FAILED",
2293
2305
  AX_QUERY_TIMEOUT: "AX_QUERY_TIMEOUT",
2294
2306
  AX_DAEMON_READY_TIMEOUT: "AX_DAEMON_READY_TIMEOUT",
2295
2307
  AX_DAEMON_EXITED_BEFORE_READY: "AX_DAEMON_EXITED_BEFORE_READY",
@@ -2460,6 +2472,7 @@ var FAILURE_CODES = {
2460
2472
  KEYBOARD_KEY_UNSUPPORTED: "KEYBOARD_KEY_UNSUPPORTED",
2461
2473
  KEYBOARD_CHARACTER_UNSUPPORTED: "KEYBOARD_CHARACTER_UNSUPPORTED",
2462
2474
  KEYBOARD_TEXT_AND_KEY_COMBINED: "KEYBOARD_TEXT_AND_KEY_COMBINED",
2475
+ KEYBOARD_INPUT_NOT_FOCUSED: "KEYBOARD_INPUT_NOT_FOCUSED",
2463
2476
  SECRET_PLACEHOLDER_UNKNOWN: "SECRET_PLACEHOLDER_UNKNOWN",
2464
2477
  SCREENSHOT_DIFF_INPUT_INVALID: "SCREENSHOT_DIFF_INPUT_INVALID",
2465
2478
  BOOT_DEVICE_TARGET_SELECTION_INVALID: "BOOT_DEVICE_TARGET_SELECTION_INVALID",
@@ -2504,7 +2517,9 @@ var FAILURE_COMMANDS = [
2504
2517
  "electron",
2505
2518
  "npm",
2506
2519
  "npx",
2507
- "unknown"
2520
+ "unknown",
2521
+ "devicectl",
2522
+ "xcodebuild"
2508
2523
  ];
2509
2524
  var FAILURE_SIGNAL_NAMES = [
2510
2525
  "SIGABRT",
@@ -7225,7 +7240,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
7225
7240
  var SESSION_ID2 = randomUUID5();
7226
7241
  function readCliVersion() {
7227
7242
  if (true) {
7228
- return "0.23.0";
7243
+ return "0.23.1-next.0";
7229
7244
  }
7230
7245
  return "0.0.0";
7231
7246
  }
@@ -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.0";
16614
16629
  }
16615
16630
  return "0.0.0";
16616
16631
  }
@@ -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
+ }
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Workspace
3
+ version = "1.0">
4
+ <FileRef
5
+ location = "self:">
6
+ </FileRef>
7
+ </Workspace>
@@ -0,0 +1,88 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Scheme
3
+ LastUpgradeVersion = "2600"
4
+ version = "1.7">
5
+ <BuildAction
6
+ parallelizeBuildables = "YES"
7
+ buildImplicitDependencies = "YES">
8
+ <BuildActionEntries>
9
+ <BuildActionEntry
10
+ buildForTesting = "YES"
11
+ buildForRunning = "YES"
12
+ buildForProfiling = "YES"
13
+ buildForArchiving = "YES"
14
+ buildForAnalyzing = "YES">
15
+ <BuildableReference
16
+ BuildableIdentifier = "primary"
17
+ BlueprintIdentifier = "A00000000000000000000011"
18
+ BuildableName = "ArgentRunner.app"
19
+ BlueprintName = "ArgentRunner"
20
+ ReferencedContainer = "container:ArgentRunner.xcodeproj">
21
+ </BuildableReference>
22
+ </BuildActionEntry>
23
+ </BuildActionEntries>
24
+ </BuildAction>
25
+ <TestAction
26
+ buildConfiguration = "Debug"
27
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
+ shouldUseLaunchSchemeArgsEnv = "YES">
30
+ <Testables>
31
+ <TestableReference
32
+ skipped = "NO">
33
+ <BuildableReference
34
+ BuildableIdentifier = "primary"
35
+ BlueprintIdentifier = "A00000000000000000000018"
36
+ BuildableName = "ArgentRunnerUITests.xctest"
37
+ BlueprintName = "ArgentRunnerUITests"
38
+ ReferencedContainer = "container:ArgentRunner.xcodeproj">
39
+ </BuildableReference>
40
+ </TestableReference>
41
+ </Testables>
42
+ </TestAction>
43
+ <LaunchAction
44
+ buildConfiguration = "Debug"
45
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
46
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
47
+ launchStyle = "0"
48
+ useCustomWorkingDirectory = "NO"
49
+ ignoresPersistentStateOnLaunch = "NO"
50
+ debugDocumentVersioning = "YES"
51
+ debugServiceExtension = "internal"
52
+ allowLocationSimulation = "YES">
53
+ <BuildableProductRunnable
54
+ runnableDebuggingMode = "0">
55
+ <BuildableReference
56
+ BuildableIdentifier = "primary"
57
+ BlueprintIdentifier = "A00000000000000000000011"
58
+ BuildableName = "ArgentRunner.app"
59
+ BlueprintName = "ArgentRunner"
60
+ ReferencedContainer = "container:ArgentRunner.xcodeproj">
61
+ </BuildableReference>
62
+ </BuildableProductRunnable>
63
+ </LaunchAction>
64
+ <ProfileAction
65
+ buildConfiguration = "Release"
66
+ shouldUseLaunchSchemeArgsEnv = "YES"
67
+ savedToolIdentifier = ""
68
+ useCustomWorkingDirectory = "NO"
69
+ debugDocumentVersioning = "YES">
70
+ <BuildableProductRunnable
71
+ runnableDebuggingMode = "0">
72
+ <BuildableReference
73
+ BuildableIdentifier = "primary"
74
+ BlueprintIdentifier = "A00000000000000000000011"
75
+ BuildableName = "ArgentRunner.app"
76
+ BlueprintName = "ArgentRunner"
77
+ ReferencedContainer = "container:ArgentRunner.xcodeproj">
78
+ </BuildableReference>
79
+ </BuildableProductRunnable>
80
+ </ProfileAction>
81
+ <AnalyzeAction
82
+ buildConfiguration = "Debug">
83
+ </AnalyzeAction>
84
+ <ArchiveAction
85
+ buildConfiguration = "Release"
86
+ revealArchiveInOrganizer = "YES">
87
+ </ArchiveAction>
88
+ </Scheme>
@@ -0,0 +1,16 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ NS_ASSUME_NONNULL_BEGIN
4
+
5
+ /// Runs a block inside an Objective-C @try so the NSExceptions XCTest's
6
+ /// accessibility machinery throws (stale elements, AX server errors) surface
7
+ /// as a returned description instead of crashing the whole test process;
8
+ /// Swift cannot catch them on its own.
9
+ @interface ArgentExceptionGuard : NSObject
10
+
11
+ /// Returns nil when the block completed, otherwise "Name: reason".
12
+ + (NSString *_Nullable)runCatching:(NS_NOESCAPE dispatch_block_t)block;
13
+
14
+ @end
15
+
16
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,16 @@
1
+ #import "ArgentExceptionGuard.h"
2
+
3
+ @implementation ArgentExceptionGuard
4
+
5
+ + (NSString *_Nullable)runCatching:(NS_NOESCAPE dispatch_block_t)block {
6
+ @try {
7
+ block();
8
+ return nil;
9
+ } @catch (NSException *exception) {
10
+ NSString *name = exception.name ?: @"NSException";
11
+ NSString *reason = exception.reason ?: @"unhandled Objective-C exception";
12
+ return [NSString stringWithFormat:@"%@: %@", name, reason];
13
+ }
14
+ }
15
+
16
+ @end