Use one xcode project for all platforms

Seto Elkahfi committed Jul 30, 2026 at 19:15 UTC d0a5f4c0cc72147c1f1c038acef4c524328c6df9
29 files changed +1537 -1142
README.md
+14 -12
@@ -22,7 +22,7 @@ Add the package URL to an Xcode project or Swift package:
22
23 ```swift
24 dependencies: [
25 - .package(url: "https://github.com/smbcloudXYZ/xcrs-controlkit.git", from: "0.1.0")
25 + .package(url: "https://github.com/ondeinference/xcrs-controlkit.git", from: "0.1.0")
26 ]
27 ```
28
@@ -39,25 +39,27 @@ if capabilities.supports(.remoteButtons) {
39
40 ## Runner projects
41
42 -Runner implementations belong outside the Swift package target:
42 +Runner implementations belong outside the Swift package target. All platforms
43 +share one Xcode project generated with XcodeGen:
44
45 ```text
46 Runners/
46 -├── iOS/
47 -├── tvOS/
48 -├── watchOS/
49 -├── visionOS/
50 -└── macOS/
47 +├── project.yml # XcodeGen spec
48 +├── XCRSControlKitRunner.xcodeproj # one project, per-platform targets/schemes
49 +├── Shared/ # transport + RPC server
50 +├── iOS/ # iOS / iPadOS host app
51 +├── tvOS/ # tvOS host app
52 +└── visionOS/ # visionOS host app
53 ```
54
53 -Each runner can import `XCRSControlKit` while using the appropriate Apple
54 -frameworks and Xcode test target for its platform.
55 +Each platform gets its own application and UI-test targets and a matching
56 +scheme (`ControlKit-iOS`, `ControlKit-tvOS`, `ControlKit-visionOS`) while
57 +importing `XCRSControlKit` and sharing the transport. See `Runners/README.md`.
58
59 ## Status
60
58 -The package currently provides the public cross-platform contract. Native
59 -runner projects and transport implementations are being added incrementally,
60 -starting with iOS and tvOS.
61 +The package provides the public cross-platform contract. Native ControlKit
62 +runners currently support iOS, iPadOS, tvOS, and visionOS.
63
64 ## License
65
Runners/README.md
+42 -5
@@ -1,8 +1,45 @@
1 # Platform runners
2
3 -Platform runners are separate Xcode projects rather than SwiftPM targets.
4 -They import the local `XCRSControlKit` package and expose XCTest or
5 -XCUITest-specific automation over the runner transport.
3 +All native runners live in a **single Xcode project**,
4 +`XCRSControlKitRunner.xcodeproj`, generated from `project.yml` with
5 +[XcodeGen](https://github.com/yonaskolb/XcodeGen). Each Apple platform has its
6 +own application and UI-test targets plus a matching scheme, while the transport
7 +and RPC logic are shared.
8
7 -Use one project per Apple platform so each runner can define its own schemes,
8 -host app, deployment target, signing configuration, and platform capabilities.
9 +```text
10 +Runners/
11 +├── project.yml # XcodeGen spec (source of truth)
12 +├── XCRSControlKitRunner.xcodeproj # generated; do not hand-edit
13 +├── Shared/ # transport + RPC server, shared by all targets
14 +│ ├── ControlKitRPCServer.swift
15 +│ └── ControlKitRunnerUITests.swift
16 +├── iOS/ # iOS / iPadOS host app + assets
17 +├── tvOS/ # tvOS host app + assets
18 +└── visionOS/ # visionOS host app + assets
19 +```
20 +
21 +## Targets and schemes
22 +
23 +| Scheme | App target | UI-test target | Platform |
24 +|---|---|---|---|
25 +| `ControlKit-iOS` | `ControlKit-iOS` | `ControlKit-iOS-UITests` | iOS / iPadOS |
26 +| `ControlKit-tvOS` | `ControlKit-tvOS` | `ControlKit-tvOS-UITests` | tvOS |
27 +| `ControlKit-visionOS` | `ControlKit-visionOS` | `ControlKit-visionOS-UITests` | visionOS |
28 +
29 +Each UI-test target compiles the shared `Shared/` sources for its platform, so
30 +platform behaviour is selected at compile time via `#if os(...)` in
31 +`ControlKitRPCServer.swift`. Per-platform bundle identifiers, device families,
32 +app icons, and deployment targets keep signing and packaging independent.
33 +
34 +## Regenerating the project
35 +
36 +After editing `project.yml` (or adding a platform folder), regenerate:
37 +
38 +```sh
39 +brew install xcodegen # once
40 +cd Runners
41 +xcodegen generate
42 +```
43 +
44 +The generated `.xcodeproj` is committed so contributors without XcodeGen can
45 +still open and build the runners; only structural changes require regeneration.
Runners/Shared/ControlKitRPCServer.swift renamed
+37 -16
@@ -76,6 +76,8 @@ final class ControlKitRPCServer {
76 let platform: XCRSControlKitPlatform = {
77 #if os(tvOS)
78 return .tvOS
79 + #elseif os(visionOS)
80 + return .visionOS
81 #else
82 return .iOS
83 #endif
@@ -102,22 +104,19 @@ final class ControlKitRPCServer {
104 XCUIApplication(bundleIdentifier: bundleIdentifier).terminate()
105 return try response(result: ["success": true], id: request.id)
106 case "device.io.tap":
105 - #if os(tvOS)
106 - throw RunnerError.unsupportedButton("touch")
107 + #if os(tvOS) || os(visionOS)
108 + throw RunnerError.unsupportedInteraction("touch")
109 #else
108 - let x = try doubleParameter("x", request.params)
109 - let y = try doubleParameter("y", request.params)
110 - let application = foregroundApplication(request.params)
111 - let frame = application.frame
112 - let coordinate = application.coordinate(
113 - withNormalizedOffset: CGVector(
114 - dx: max(0, min(1, x / Double(frame.width))),
115 - dy: max(0, min(1, y / Double(frame.height)))
116 - )
117 - )
118 - coordinate.tap()
110 + try tap(request.params)
111 return try response(result: ["success": true], id: request.id)
112 #endif
113 + case "device.io.spatial.tap":
114 + #if os(visionOS)
115 + try tap(request.params)
116 + return try response(result: ["success": true], id: request.id)
117 + #else
118 + throw RunnerError.unsupportedInteraction("spatial tap")
119 + #endif
120 case "device.io.text":
121 let text = try stringParameter("text", request.params)
122 foregroundApplication(request.params).typeText(text)
@@ -145,13 +144,16 @@ final class ControlKitRPCServer {
144 throw RunnerError.unsupportedButton(button)
145 }
146 XCUIRemote.shared.press(press)
148 - #else
147 + return try response(result: ["success": true], id: request.id)
148 + #elseif os(iOS)
149 guard button == "home" else {
150 throw RunnerError.unsupportedButton(button)
151 }
152 XCUIDevice.shared.press(.home)
153 - #endif
153 return try response(result: ["success": true], id: request.id)
154 + #else
155 + throw RunnerError.unsupportedButton(button)
156 + #endif
157 default:
158 return try response(error: -32601, message: "Method not found", id: request.id)
159 }
@@ -164,6 +166,22 @@ final class ControlKitRPCServer {
166 return XCUIApplication()
167 }
168
169 + #if !os(tvOS)
170 + private func tap(_ params: [String: Any]) throws {
171 + let x = try doubleParameter("x", params)
172 + let y = try doubleParameter("y", params)
173 + let application = foregroundApplication(params)
174 + let frame = application.frame
175 + let coordinate = application.coordinate(
176 + withNormalizedOffset: CGVector(
177 + dx: max(0, min(1, x / Double(frame.width))),
178 + dy: max(0, min(1, y / Double(frame.height)))
179 + )
180 + )
181 + coordinate.tap()
182 + }
183 + #endif
184 +
185 private func stringParameter(_ name: String, _ params: [String: Any]) throws -> String {
186 guard let value = params[name] as? String, !value.isEmpty else {
187 throw RunnerError.invalidParameter(name)
@@ -256,13 +274,16 @@ private final class RPCHandler: ChannelInboundHandler {
274 private enum RunnerError: LocalizedError {
275 case invalidParameter(String)
276 case unsupportedButton(String)
277 + case unsupportedInteraction(String)
278
279 var errorDescription: String? {
280 switch self {
281 case .invalidParameter(let name):
282 return "Missing or invalid parameter: \(name)"
283 case .unsupportedButton(let button):
265 - return "Unsupported iOS button: \(button)"
284 + return "Unsupported button: \(button)"
285 + case .unsupportedInteraction(let interaction):
286 + return "Unsupported interaction: \(interaction)"
287 }
288 }
289 }
Runners/Shared/ControlKitRunnerUITests.swift renamed
Runners/XCRSControlKitRunner.xcodeproj/project.pbxproj new
+944
@@ -0,0 +1,944 @@
1 +// !$*UTF8*$!
2 +{
3 + archiveVersion = 1;
4 + classes = {
5 + };
6 + objectVersion = 77;
7 + objects = {
8 +
9 +/* Begin PBXBuildFile section */
10 + 0BF8E6E42A39CE747AD5ED5D /* ControlKitRunnerUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F818EB333BD812EBDAC7 /* ControlKitRunnerUITests.swift */; };
11 + 0DFC449880A304B5154D7F6D /* XCRSControlKit in Frameworks */ = {isa = PBXBuildFile; productRef = BE99FEAB3F75651FC71BB9B5 /* XCRSControlKit */; };
12 + 100DCE12F169B8A38E219931 /* ControlKitRPCServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976BFE251DB7DC2248C8D0E7 /* ControlKitRPCServer.swift */; };
13 + 25622E0215D89F31880E6356 /* ControlKitRunnerUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F818EB333BD812EBDAC7 /* ControlKitRunnerUITests.swift */; };
14 + 3CAE36F48F2BB14EC17B1A49 /* NIOHTTP1 in Frameworks */ = {isa = PBXBuildFile; productRef = 39DF23C6EF63909919D192E1 /* NIOHTTP1 */; };
15 + 4D29102252109822A895B881 /* NIOPosix in Frameworks */ = {isa = PBXBuildFile; productRef = C9A26D0E7AB404E7BE27C778 /* NIOPosix */; };
16 + 57C6D92B45E7092A5C2AD7D2 /* ControlKitRunnerApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FB5CFB03469D6F6B4B90338 /* ControlKitRunnerApp.swift */; };
17 + 57E28C91935955E0FCA55C21 /* NIOCore in Frameworks */ = {isa = PBXBuildFile; productRef = 1EEBDB1A27DC2D28A6BB1B95 /* NIOCore */; };
18 + 5C1F1D551479D29CA351EEF1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E395E1A9D0B3259F9C816109 /* Assets.xcassets */; };
19 + 673EB3CCA913F73C710B72B0 /* NIOCore in Frameworks */ = {isa = PBXBuildFile; productRef = 58494EA2BBD98AE84158250F /* NIOCore */; };
20 + 6D60E555ABB299495F608B27 /* NIOPosix in Frameworks */ = {isa = PBXBuildFile; productRef = 2B7D7F431DC211BEDBFC374A /* NIOPosix */; };
21 + 6F0CF3B6D51AEB5C4F3E1827 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 06ABEBF2BC26029BF199977C /* README.md */; };
22 + 7CAF0B42FF68BF36CAC8C8CD /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8A09FB52496A952CB13C163B /* Assets.xcassets */; };
23 + 7D3C77F9ABF4E0CD672DCEF5 /* NIOHTTP1 in Frameworks */ = {isa = PBXBuildFile; productRef = 84A03CA7B1A8BF405AD3F3C4 /* NIOHTTP1 */; };
24 + 8F79A6E8A60191E7A095D2F2 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 3DFF0D230E8E7D8DF4E8AF86 /* README.md */; };
25 + 93235E8B38222B9CC779ED84 /* XCRSControlKit in Frameworks */ = {isa = PBXBuildFile; productRef = 50AB05BF2C324210174A3476 /* XCRSControlKit */; };
26 + 9540EFD6CC87D6DEF2FBFC0F /* ControlKitRPCServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976BFE251DB7DC2248C8D0E7 /* ControlKitRPCServer.swift */; };
27 + 986705883AA98C348CFE6E72 /* XCRSControlKit in Frameworks */ = {isa = PBXBuildFile; productRef = 17A1603CDD0A79E07FAC7D43 /* XCRSControlKit */; };
28 + 9DFD228E556F05433F75A568 /* NIOHTTP1 in Frameworks */ = {isa = PBXBuildFile; productRef = EE8C054B1BC0620402AEA51B /* NIOHTTP1 */; };
29 + B2A57E383F93751851FE880C /* NIOCore in Frameworks */ = {isa = PBXBuildFile; productRef = F83D3AB07112BE3B5C5CEEB0 /* NIOCore */; };
30 + B986DCE75E07965CA4C1E7F8 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = D11F41B613A58B56653C16C6 /* README.md */; };
31 + BEFE1733DCB97BE06F428AD2 /* ControlKitRunnerApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 898E84DC2CE45F3463AA7E5D /* ControlKitRunnerApp.swift */; };
32 + C0DC985C9D52F33FFB8943E8 /* ControlKitRPCServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976BFE251DB7DC2248C8D0E7 /* ControlKitRPCServer.swift */; };
33 + C552103B6652E1005DB6B8C3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1D9522A60419FFC7F405FE88 /* Assets.xcassets */; };
34 + C8B2C54C0B06115DE7F14ACE /* ControlKitRunnerApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A32F608A3A429B81416D59FC /* ControlKitRunnerApp.swift */; };
35 + D96F5E268D3AFF7DC328622A /* ControlKitRunnerUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D582F818EB333BD812EBDAC7 /* ControlKitRunnerUITests.swift */; };
36 + E7D00D2B9B79391ABB28574C /* NIOPosix in Frameworks */ = {isa = PBXBuildFile; productRef = FFAF906BB53F58598BDAE35B /* NIOPosix */; };
37 +/* End PBXBuildFile section */
38 +
39 +/* Begin PBXContainerItemProxy section */
40 + 154A64286F9DFB5C95CF695E /* PBXContainerItemProxy */ = {
41 + isa = PBXContainerItemProxy;
42 + containerPortal = A886E2D8FDDF1B058227A931 /* Project object */;
43 + proxyType = 1;
44 + remoteGlobalIDString = 9F5E3C368E274D9C0BF1AC09;
45 + remoteInfo = "ControlKit-iOS";
46 + };
47 + 30BC4151DCEA5E8BE24D8C93 /* PBXContainerItemProxy */ = {
48 + isa = PBXContainerItemProxy;
49 + containerPortal = A886E2D8FDDF1B058227A931 /* Project object */;
50 + proxyType = 1;
51 + remoteGlobalIDString = 720F3EC917A0116B593FBBBB;
52 + remoteInfo = "ControlKit-visionOS";
53 + };
54 + AEE01B43669A92A0B635826C /* PBXContainerItemProxy */ = {
55 + isa = PBXContainerItemProxy;
56 + containerPortal = A886E2D8FDDF1B058227A931 /* Project object */;
57 + proxyType = 1;
58 + remoteGlobalIDString = 029C796A915A8119077A2F2D;
59 + remoteInfo = "ControlKit-tvOS";
60 + };
61 +/* End PBXContainerItemProxy section */
62 +
63 +/* Begin PBXFileReference section */
64 + 06ABEBF2BC26029BF199977C /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
65 + 08CFC4F37BB1C3444B435EC8 /* ControlKit-tvOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; name = "ControlKit-tvOS.app"; path = ControlKit.app; sourceTree = BUILT_PRODUCTS_DIR; };
66 + 0AF2C936A45BEF3E427051E8 /* ControlKit-iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; name = "ControlKit-iOS.app"; path = ControlKit.app; sourceTree = BUILT_PRODUCTS_DIR; };
67 + 1D9522A60419FFC7F405FE88 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
68 + 2A9F28238A4519F25B302BD1 /* ControlKit-visionOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; name = "ControlKit-visionOS.app"; path = ControlKit.app; sourceTree = BUILT_PRODUCTS_DIR; };
69 + 3DFF0D230E8E7D8DF4E8AF86 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
70 + 5A89F5048B0CAE4988FB1203 /* ControlKit-visionOS-UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = "ControlKit-visionOS-UITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
71 + 5FB5CFB03469D6F6B4B90338 /* ControlKitRunnerApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlKitRunnerApp.swift; sourceTree = "<group>"; };
72 + 898E84DC2CE45F3463AA7E5D /* ControlKitRunnerApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlKitRunnerApp.swift; sourceTree = "<group>"; };
73 + 8A09FB52496A952CB13C163B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
74 + 904DF2F8A56B8FA1C5EE1431 /* ControlKit-tvOS-UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = "ControlKit-tvOS-UITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
75 + 976BFE251DB7DC2248C8D0E7 /* ControlKitRPCServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlKitRPCServer.swift; sourceTree = "<group>"; };
76 + A32F608A3A429B81416D59FC /* ControlKitRunnerApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlKitRunnerApp.swift; sourceTree = "<group>"; };
77 + D11F41B613A58B56653C16C6 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
78 + D1DCCDE3A93E1CF31802D658 /* xcrs-controlkit */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "xcrs-controlkit"; path = ..; sourceTree = SOURCE_ROOT; };
79 + D582F818EB333BD812EBDAC7 /* ControlKitRunnerUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlKitRunnerUITests.swift; sourceTree = "<group>"; };
80 + E395E1A9D0B3259F9C816109 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
81 + F93B11596E43814F825966AC /* ControlKit-iOS-UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = "ControlKit-iOS-UITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
82 +/* End PBXFileReference section */
83 +
84 +/* Begin PBXFrameworksBuildPhase section */
85 + 2A75581ED579005C72375AAB /* Frameworks */ = {
86 + isa = PBXFrameworksBuildPhase;
87 + buildActionMask = 2147483647;
88 + files = (
89 + 0DFC449880A304B5154D7F6D /* XCRSControlKit in Frameworks */,
90 + B2A57E383F93751851FE880C /* NIOCore in Frameworks */,
91 + 3CAE36F48F2BB14EC17B1A49 /* NIOHTTP1 in Frameworks */,
92 + 4D29102252109822A895B881 /* NIOPosix in Frameworks */,
93 + );
94 + runOnlyForDeploymentPostprocessing = 0;
95 + };
96 + A2E874DC4FFAB2E95DCD1F03 /* Frameworks */ = {
97 + isa = PBXFrameworksBuildPhase;
98 + buildActionMask = 2147483647;
99 + files = (
100 + 986705883AA98C348CFE6E72 /* XCRSControlKit in Frameworks */,
101 + 57E28C91935955E0FCA55C21 /* NIOCore in Frameworks */,
102 + 7D3C77F9ABF4E0CD672DCEF5 /* NIOHTTP1 in Frameworks */,
103 + 6D60E555ABB299495F608B27 /* NIOPosix in Frameworks */,
104 + );
105 + runOnlyForDeploymentPostprocessing = 0;
106 + };
107 + C3E100C6F6D5156EFA83374F /* Frameworks */ = {
108 + isa = PBXFrameworksBuildPhase;
109 + buildActionMask = 2147483647;
110 + files = (
111 + 93235E8B38222B9CC779ED84 /* XCRSControlKit in Frameworks */,
112 + 673EB3CCA913F73C710B72B0 /* NIOCore in Frameworks */,
113 + 9DFD228E556F05433F75A568 /* NIOHTTP1 in Frameworks */,
114 + E7D00D2B9B79391ABB28574C /* NIOPosix in Frameworks */,
115 + );
116 + runOnlyForDeploymentPostprocessing = 0;
117 + };
118 +/* End PBXFrameworksBuildPhase section */
119 +
120 +/* Begin PBXGroup section */
121 + 0AD16B636A496FC575FABB2F /* Shared */ = {
122 + isa = PBXGroup;
123 + children = (
124 + 976BFE251DB7DC2248C8D0E7 /* ControlKitRPCServer.swift */,
125 + D582F818EB333BD812EBDAC7 /* ControlKitRunnerUITests.swift */,
126 + );
127 + path = Shared;
128 + sourceTree = "<group>";
129 + };
130 + 18CD92B06EDA4B61503FE8DA /* visionOS */ = {
131 + isa = PBXGroup;
132 + children = (
133 + 8A09FB52496A952CB13C163B /* Assets.xcassets */,
134 + A32F608A3A429B81416D59FC /* ControlKitRunnerApp.swift */,
135 + 06ABEBF2BC26029BF199977C /* README.md */,
136 + );
137 + path = visionOS;
138 + sourceTree = "<group>";
139 + };
140 + 2D1B85549DE31AFEDF5D1159 /* Products */ = {
141 + isa = PBXGroup;
142 + children = (
143 + F93B11596E43814F825966AC /* ControlKit-iOS-UITests.xctest */,
144 + 0AF2C936A45BEF3E427051E8 /* ControlKit-iOS.app */,
145 + 904DF2F8A56B8FA1C5EE1431 /* ControlKit-tvOS-UITests.xctest */,
146 + 08CFC4F37BB1C3444B435EC8 /* ControlKit-tvOS.app */,
147 + 5A89F5048B0CAE4988FB1203 /* ControlKit-visionOS-UITests.xctest */,
148 + 2A9F28238A4519F25B302BD1 /* ControlKit-visionOS.app */,
149 + );
150 + name = Products;
151 + sourceTree = "<group>";
152 + };
153 + 8BF319E1B3CB4CA319D804BA = {
154 + isa = PBXGroup;
155 + children = (
156 + CEE9E165E43396ABDCF722E3 /* iOS */,
157 + AAF9A6C2C031D435E78F618D /* Packages */,
158 + 0AD16B636A496FC575FABB2F /* Shared */,
159 + F3830AB6FA85799037B91E7D /* tvOS */,
160 + 18CD92B06EDA4B61503FE8DA /* visionOS */,
161 + 2D1B85549DE31AFEDF5D1159 /* Products */,
162 + );
163 + sourceTree = "<group>";
164 + };
165 + AAF9A6C2C031D435E78F618D /* Packages */ = {
166 + isa = PBXGroup;
167 + children = (
168 + D1DCCDE3A93E1CF31802D658 /* xcrs-controlkit */,
169 + );
170 + name = Packages;
171 + sourceTree = "<group>";
172 + };
173 + CEE9E165E43396ABDCF722E3 /* iOS */ = {
174 + isa = PBXGroup;
175 + children = (
176 + E395E1A9D0B3259F9C816109 /* Assets.xcassets */,
177 + 898E84DC2CE45F3463AA7E5D /* ControlKitRunnerApp.swift */,
178 + D11F41B613A58B56653C16C6 /* README.md */,
179 + );
180 + path = iOS;
181 + sourceTree = "<group>";
182 + };
183 + F3830AB6FA85799037B91E7D /* tvOS */ = {
184 + isa = PBXGroup;
185 + children = (
186 + 1D9522A60419FFC7F405FE88 /* Assets.xcassets */,
187 + 5FB5CFB03469D6F6B4B90338 /* ControlKitRunnerApp.swift */,
188 + 3DFF0D230E8E7D8DF4E8AF86 /* README.md */,
189 + );
190 + path = tvOS;
191 + sourceTree = "<group>";
192 + };
193 +/* End PBXGroup section */
194 +
195 +/* Begin PBXNativeTarget section */
196 + 029C796A915A8119077A2F2D /* ControlKit-tvOS */ = {
197 + isa = PBXNativeTarget;
198 + buildConfigurationList = F90CA1FF8DF178C6B4D2D56F /* Build configuration list for PBXNativeTarget "ControlKit-tvOS" */;
199 + buildPhases = (
200 + 764FCDFA07EA6064FF3C21DE /* Sources */,
201 + A88C8E544C02C1D56E86A9C7 /* Resources */,
202 + );
203 + buildRules = (
204 + );
205 + dependencies = (
206 + );
207 + name = "ControlKit-tvOS";
208 + packageProductDependencies = (
209 + );
210 + productName = "ControlKit-tvOS";
211 + productReference = 08CFC4F37BB1C3444B435EC8 /* ControlKit-tvOS.app */;
212 + productType = "com.apple.product-type.application";
213 + };
214 + 09F6B446FD034D1BCF7FE56B /* ControlKit-visionOS-UITests */ = {
215 + isa = PBXNativeTarget;
216 + buildConfigurationList = B47E47F03867048313ED0BC9 /* Build configuration list for PBXNativeTarget "ControlKit-visionOS-UITests" */;
217 + buildPhases = (
218 + 5FC626904619877E61D287BC /* Sources */,
219 + A2E874DC4FFAB2E95DCD1F03 /* Frameworks */,
220 + );
221 + buildRules = (
222 + );
223 + dependencies = (
224 + 55C3178DB2606813467C97CC /* PBXTargetDependency */,
225 + );
226 + name = "ControlKit-visionOS-UITests";
227 + packageProductDependencies = (
228 + 17A1603CDD0A79E07FAC7D43 /* XCRSControlKit */,
229 + 1EEBDB1A27DC2D28A6BB1B95 /* NIOCore */,
230 + 84A03CA7B1A8BF405AD3F3C4 /* NIOHTTP1 */,
231 + 2B7D7F431DC211BEDBFC374A /* NIOPosix */,
232 + );
233 + productName = "ControlKit-visionOS-UITests";
234 + productReference = 5A89F5048B0CAE4988FB1203 /* ControlKit-visionOS-UITests.xctest */;
235 + productType = "com.apple.product-type.bundle.ui-testing";
236 + };
237 + 720F3EC917A0116B593FBBBB /* ControlKit-visionOS */ = {
238 + isa = PBXNativeTarget;
239 + buildConfigurationList = A3E875F2C0588D2AFB728EC8 /* Build configuration list for PBXNativeTarget "ControlKit-visionOS" */;
240 + buildPhases = (
241 + 25A5679D9AB0D84C081D9343 /* Sources */,
242 + 23790115E256D87FAB658E0B /* Resources */,
243 + );
244 + buildRules = (
245 + );
246 + dependencies = (
247 + );
248 + name = "ControlKit-visionOS";
249 + packageProductDependencies = (
250 + );
251 + productName = "ControlKit-visionOS";
252 + productReference = 2A9F28238A4519F25B302BD1 /* ControlKit-visionOS.app */;
253 + productType = "com.apple.product-type.application";
254 + };
255 + 8B29B60E49F265583C3FB987 /* ControlKit-tvOS-UITests */ = {
256 + isa = PBXNativeTarget;
257 + buildConfigurationList = DC1656DA116F4F1E1E7A9039 /* Build configuration list for PBXNativeTarget "ControlKit-tvOS-UITests" */;
258 + buildPhases = (
259 + 5132E84347A81C2E808C959B /* Sources */,
260 + C3E100C6F6D5156EFA83374F /* Frameworks */,
261 + );
262 + buildRules = (
263 + );
264 + dependencies = (
265 + F37FD1FE4F9670C2C355615F /* PBXTargetDependency */,
266 + );
267 + name = "ControlKit-tvOS-UITests";
268 + packageProductDependencies = (
269 + 50AB05BF2C324210174A3476 /* XCRSControlKit */,
270 + 58494EA2BBD98AE84158250F /* NIOCore */,
271 + EE8C054B1BC0620402AEA51B /* NIOHTTP1 */,
272 + FFAF906BB53F58598BDAE35B /* NIOPosix */,
273 + );
274 + productName = "ControlKit-tvOS-UITests";
275 + productReference = 904DF2F8A56B8FA1C5EE1431 /* ControlKit-tvOS-UITests.xctest */;
276 + productType = "com.apple.product-type.bundle.ui-testing";
277 + };
278 + 9F5E3C368E274D9C0BF1AC09 /* ControlKit-iOS */ = {
279 + isa = PBXNativeTarget;
280 + buildConfigurationList = 42681BF128073F8CD1146052 /* Build configuration list for PBXNativeTarget "ControlKit-iOS" */;
281 + buildPhases = (
282 + 5AC070701AB330C954DC582E /* Sources */,
283 + FE06AFC9AE7B730022308652 /* Resources */,
284 + );
285 + buildRules = (
286 + );
287 + dependencies = (
288 + );
289 + name = "ControlKit-iOS";
290 + packageProductDependencies = (
291 + );
292 + productName = "ControlKit-iOS";
293 + productReference = 0AF2C936A45BEF3E427051E8 /* ControlKit-iOS.app */;
294 + productType = "com.apple.product-type.application";
295 + };
296 + CD73A40CAB68D297974A7E90 /* ControlKit-iOS-UITests */ = {
297 + isa = PBXNativeTarget;
298 + buildConfigurationList = 83E3FC025793339356561648 /* Build configuration list for PBXNativeTarget "ControlKit-iOS-UITests" */;
299 + buildPhases = (
300 + 47F2DEFAC8AF9B4172ECBF89 /* Sources */,
301 + 2A75581ED579005C72375AAB /* Frameworks */,
302 + );
303 + buildRules = (
304 + );
305 + dependencies = (
306 + 8DD5F5247778B29E6ABA8859 /* PBXTargetDependency */,
307 + );
308 + name = "ControlKit-iOS-UITests";
309 + packageProductDependencies = (
310 + BE99FEAB3F75651FC71BB9B5 /* XCRSControlKit */,
311 + F83D3AB07112BE3B5C5CEEB0 /* NIOCore */,
312 + 39DF23C6EF63909919D192E1 /* NIOHTTP1 */,
313 + C9A26D0E7AB404E7BE27C778 /* NIOPosix */,
314 + );
315 + productName = "ControlKit-iOS-UITests";
316 + productReference = F93B11596E43814F825966AC /* ControlKit-iOS-UITests.xctest */;
317 + productType = "com.apple.product-type.bundle.ui-testing";
318 + };
319 +/* End PBXNativeTarget section */
320 +
321 +/* Begin PBXProject section */
322 + A886E2D8FDDF1B058227A931 /* Project object */ = {
323 + isa = PBXProject;
324 + attributes = {
325 + BuildIndependentTargetsInParallel = YES;
326 + LastUpgradeCheck = 1430;
327 + TargetAttributes = {
328 + 09F6B446FD034D1BCF7FE56B = {
329 + TestTargetID = 720F3EC917A0116B593FBBBB;
330 + };
331 + 8B29B60E49F265583C3FB987 = {
332 + TestTargetID = 029C796A915A8119077A2F2D;
333 + };
334 + CD73A40CAB68D297974A7E90 = {
335 + TestTargetID = 9F5E3C368E274D9C0BF1AC09;
336 + };
337 + };
338 + };
339 + buildConfigurationList = 5DD1F1B919E5F8BC9E03021C /* Build configuration list for PBXProject "XCRSControlKitRunner" */;
340 + developmentRegion = en;
341 + hasScannedForEncodings = 0;
342 + knownRegions = (
343 + Base,
344 + en,
345 + );
346 + mainGroup = 8BF319E1B3CB4CA319D804BA;
347 + minimizedProjectReferenceProxies = 1;
348 + packageReferences = (
349 + 097CD02F3C7519204C9CDC73 /* XCRemoteSwiftPackageReference "swift-nio" */,
350 + B1F1238966374497306EE6F6 /* XCLocalSwiftPackageReference ".." */,
351 + );
352 + preferredProjectObjectVersion = 77;
353 + productRefGroup = 2D1B85549DE31AFEDF5D1159 /* Products */;
354 + projectDirPath = "";
355 + projectRoot = "";
356 + targets = (
357 + 9F5E3C368E274D9C0BF1AC09 /* ControlKit-iOS */,
358 + CD73A40CAB68D297974A7E90 /* ControlKit-iOS-UITests */,
359 + 029C796A915A8119077A2F2D /* ControlKit-tvOS */,
360 + 8B29B60E49F265583C3FB987 /* ControlKit-tvOS-UITests */,
361 + 720F3EC917A0116B593FBBBB /* ControlKit-visionOS */,
362 + 09F6B446FD034D1BCF7FE56B /* ControlKit-visionOS-UITests */,
363 + );
364 + };
365 +/* End PBXProject section */
366 +
367 +/* Begin PBXResourcesBuildPhase section */
368 + 23790115E256D87FAB658E0B /* Resources */ = {
369 + isa = PBXResourcesBuildPhase;
370 + buildActionMask = 2147483647;
371 + files = (
372 + 7CAF0B42FF68BF36CAC8C8CD /* Assets.xcassets in Resources */,
373 + 6F0CF3B6D51AEB5C4F3E1827 /* README.md in Resources */,
374 + );
375 + runOnlyForDeploymentPostprocessing = 0;
376 + };
377 + A88C8E544C02C1D56E86A9C7 /* Resources */ = {
378 + isa = PBXResourcesBuildPhase;
379 + buildActionMask = 2147483647;
380 + files = (
381 + C552103B6652E1005DB6B8C3 /* Assets.xcassets in Resources */,
382 + 8F79A6E8A60191E7A095D2F2 /* README.md in Resources */,
383 + );
384 + runOnlyForDeploymentPostprocessing = 0;
385 + };
386 + FE06AFC9AE7B730022308652 /* Resources */ = {
387 + isa = PBXResourcesBuildPhase;
388 + buildActionMask = 2147483647;
389 + files = (
390 + 5C1F1D551479D29CA351EEF1 /* Assets.xcassets in Resources */,
391 + B986DCE75E07965CA4C1E7F8 /* README.md in Resources */,
392 + );
393 + runOnlyForDeploymentPostprocessing = 0;
394 + };
395 +/* End PBXResourcesBuildPhase section */
396 +
397 +/* Begin PBXSourcesBuildPhase section */
398 + 25A5679D9AB0D84C081D9343 /* Sources */ = {
399 + isa = PBXSourcesBuildPhase;
400 + buildActionMask = 2147483647;
401 + files = (
402 + C8B2C54C0B06115DE7F14ACE /* ControlKitRunnerApp.swift in Sources */,
403 + );
404 + runOnlyForDeploymentPostprocessing = 0;
405 + };
406 + 47F2DEFAC8AF9B4172ECBF89 /* Sources */ = {
407 + isa = PBXSourcesBuildPhase;
408 + buildActionMask = 2147483647;
409 + files = (
410 + C0DC985C9D52F33FFB8943E8 /* ControlKitRPCServer.swift in Sources */,
411 + 0BF8E6E42A39CE747AD5ED5D /* ControlKitRunnerUITests.swift in Sources */,
412 + );
413 + runOnlyForDeploymentPostprocessing = 0;
414 + };
415 + 5132E84347A81C2E808C959B /* Sources */ = {
416 + isa = PBXSourcesBuildPhase;
417 + buildActionMask = 2147483647;
418 + files = (
419 + 100DCE12F169B8A38E219931 /* ControlKitRPCServer.swift in Sources */,
420 + D96F5E268D3AFF7DC328622A /* ControlKitRunnerUITests.swift in Sources */,
421 + );
422 + runOnlyForDeploymentPostprocessing = 0;
423 + };
424 + 5AC070701AB330C954DC582E /* Sources */ = {
425 + isa = PBXSourcesBuildPhase;
426 + buildActionMask = 2147483647;
427 + files = (
428 + BEFE1733DCB97BE06F428AD2 /* ControlKitRunnerApp.swift in Sources */,
429 + );
430 + runOnlyForDeploymentPostprocessing = 0;
431 + };
432 + 5FC626904619877E61D287BC /* Sources */ = {
433 + isa = PBXSourcesBuildPhase;
434 + buildActionMask = 2147483647;
435 + files = (
436 + 9540EFD6CC87D6DEF2FBFC0F /* ControlKitRPCServer.swift in Sources */,
437 + 25622E0215D89F31880E6356 /* ControlKitRunnerUITests.swift in Sources */,
438 + );
439 + runOnlyForDeploymentPostprocessing = 0;
440 + };
441 + 764FCDFA07EA6064FF3C21DE /* Sources */ = {
442 + isa = PBXSourcesBuildPhase;
443 + buildActionMask = 2147483647;
444 + files = (
445 + 57C6D92B45E7092A5C2AD7D2 /* ControlKitRunnerApp.swift in Sources */,
446 + );
447 + runOnlyForDeploymentPostprocessing = 0;
448 + };
449 +/* End PBXSourcesBuildPhase section */
450 +
451 +/* Begin PBXTargetDependency section */
452 + 55C3178DB2606813467C97CC /* PBXTargetDependency */ = {
453 + isa = PBXTargetDependency;
454 + target = 720F3EC917A0116B593FBBBB /* ControlKit-visionOS */;
455 + targetProxy = 30BC4151DCEA5E8BE24D8C93 /* PBXContainerItemProxy */;
456 + };
457 + 8DD5F5247778B29E6ABA8859 /* PBXTargetDependency */ = {
458 + isa = PBXTargetDependency;
459 + target = 9F5E3C368E274D9C0BF1AC09 /* ControlKit-iOS */;
460 + targetProxy = 154A64286F9DFB5C95CF695E /* PBXContainerItemProxy */;
461 + };
462 + F37FD1FE4F9670C2C355615F /* PBXTargetDependency */ = {
463 + isa = PBXTargetDependency;
464 + target = 029C796A915A8119077A2F2D /* ControlKit-tvOS */;
465 + targetProxy = AEE01B43669A92A0B635826C /* PBXContainerItemProxy */;
466 + };
467 +/* End PBXTargetDependency section */
468 +
469 +/* Begin XCBuildConfiguration section */
470 + 05E1C3E341C64C4F40D8F6EF /* Release */ = {
471 + isa = XCBuildConfiguration;
472 + buildSettings = {
473 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
474 + CODE_SIGN_IDENTITY = "iPhone Developer";
475 + INFOPLIST_KEY_UIRequiresFullScreen = YES;
476 + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
477 + LD_RUNPATH_SEARCH_PATHS = (
478 + "$(inherited)",
479 + "@executable_path/Frameworks",
480 + );
481 + PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.ios.runner";
482 + PRODUCT_NAME = ControlKit;
483 + SDKROOT = iphoneos;
484 + TARGETED_DEVICE_FAMILY = "1,2";
485 + };
486 + name = Release;
487 + };
488 + 21F4165C7F57458C04C5805E /* Debug */ = {
489 + isa = XCBuildConfiguration;
490 + buildSettings = {
491 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
492 + CODE_SIGN_IDENTITY = "iPhone Developer";
493 + INFOPLIST_KEY_UIRequiresFullScreen = YES;
494 + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
495 + LD_RUNPATH_SEARCH_PATHS = (
496 + "$(inherited)",
497 + "@executable_path/Frameworks",
498 + );
499 + PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.ios.runner";
500 + PRODUCT_NAME = ControlKit;
501 + SDKROOT = iphoneos;
502 + TARGETED_DEVICE_FAMILY = "1,2";
503 + };
504 + name = Debug;
505 + };
506 + 2E51B9F5C20DD197F5FA4F07 /* Debug */ = {
507 + isa = XCBuildConfiguration;
508 + buildSettings = {
509 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
510 + LD_RUNPATH_SEARCH_PATHS = (
511 + "$(inherited)",
512 + "@executable_path/Frameworks",
513 + );
514 + PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.visionos.runner";
515 + PRODUCT_NAME = ControlKit;
516 + SDKROOT = xros;
517 + TARGETED_DEVICE_FAMILY = 7;
518 + };
519 + name = Debug;
520 + };
521 + 41FF10163C9AB188CF4891AF /* Debug */ = {
522 + isa = XCBuildConfiguration;
523 + buildSettings = {
524 + BUNDLE_LOADER = "$(TEST_HOST)";
525 + LD_RUNPATH_SEARCH_PATHS = (
526 + "$(inherited)",
527 + "@executable_path/Frameworks",
528 + "@loader_path/Frameworks",
529 + );
530 + PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.visionos.runnerUITests";
531 + SDKROOT = xros;
532 + TARGETED_DEVICE_FAMILY = 7;
533 + TEST_TARGET_NAME = "ControlKit-visionOS";
534 + };
535 + name = Debug;
536 + };
537 + 51FACD26B90FED54CC62D2FD /* Debug */ = {
538 + isa = XCBuildConfiguration;
539 + buildSettings = {
540 + ALWAYS_SEARCH_USER_PATHS = NO;
541 + CLANG_ANALYZER_NONNULL = YES;
542 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
543 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
544 + CLANG_CXX_LIBRARY = "libc++";
545 + CLANG_ENABLE_MODULES = YES;
546 + CLANG_ENABLE_OBJC_ARC = YES;
547 + CLANG_ENABLE_OBJC_WEAK = YES;
548 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
549 + CLANG_WARN_BOOL_CONVERSION = YES;
550 + CLANG_WARN_COMMA = YES;
551 + CLANG_WARN_CONSTANT_CONVERSION = YES;
552 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
553 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
554 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
555 + CLANG_WARN_EMPTY_BODY = YES;
556 + CLANG_WARN_ENUM_CONVERSION = YES;
557 + CLANG_WARN_INFINITE_RECURSION = YES;
558 + CLANG_WARN_INT_CONVERSION = YES;
559 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
560 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
561 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
562 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
563 + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
564 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
565 + CLANG_WARN_STRICT_PROTOTYPES = YES;
566 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
567 + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
568 + CLANG_WARN_UNREACHABLE_CODE = YES;
569 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
570 + COPY_PHASE_STRIP = NO;
571 + DEBUG_INFORMATION_FORMAT = dwarf;
572 + ENABLE_STRICT_OBJC_MSGSEND = YES;
573 + ENABLE_TESTABILITY = YES;
574 + GCC_C_LANGUAGE_STANDARD = gnu11;
575 + GCC_DYNAMIC_NO_PIC = NO;
576 + GCC_NO_COMMON_BLOCKS = YES;
577 + GCC_OPTIMIZATION_LEVEL = 0;
578 + GCC_PREPROCESSOR_DEFINITIONS = (
579 + "$(inherited)",
580 + "DEBUG=1",
581 + );
582 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
583 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
584 + GCC_WARN_UNDECLARED_SELECTOR = YES;
585 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
586 + GCC_WARN_UNUSED_FUNCTION = YES;
587 + GCC_WARN_UNUSED_VARIABLE = YES;
588 + GENERATE_INFOPLIST_FILE = YES;
589 + INFOPLIST_KEY_CFBundleDisplayName = ControlKit;
590 + IPHONEOS_DEPLOYMENT_TARGET = 16.0;
591 + LD_RUNPATH_SEARCH_PATHS = (
592 + "$(inherited)",
593 + "@executable_path/Frameworks",
594 + );
595 + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
596 + MTL_FAST_MATH = YES;
597 + ONLY_ACTIVE_ARCH = YES;
598 + PRODUCT_NAME = "$(TARGET_NAME)";
599 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
600 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
601 + SWIFT_VERSION = 5.9;
602 + TVOS_DEPLOYMENT_TARGET = 16.0;
603 + XROS_DEPLOYMENT_TARGET = 1.0;
604 + };
605 + name = Debug;
606 + };
607 + 540AA08AAD985F8F777D57E1 /* Release */ = {
608 + isa = XCBuildConfiguration;
609 + buildSettings = {
610 + BUNDLE_LOADER = "$(TEST_HOST)";
611 + LD_RUNPATH_SEARCH_PATHS = (
612 + "$(inherited)",
613 + "@executable_path/Frameworks",
614 + "@loader_path/Frameworks",
615 + );
616 + PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.visionos.runnerUITests";
617 + SDKROOT = xros;
618 + TARGETED_DEVICE_FAMILY = 7;
619 + TEST_TARGET_NAME = "ControlKit-visionOS";
620 + };
621 + name = Release;
622 + };
623 + 5CCFC05738690F1B9995260B /* Release */ = {
624 + isa = XCBuildConfiguration;
625 + buildSettings = {
626 + BUNDLE_LOADER = "$(TEST_HOST)";
627 + LD_RUNPATH_SEARCH_PATHS = (
628 + "$(inherited)",
629 + "@executable_path/Frameworks",
630 + "@loader_path/Frameworks",
631 + );
632 + PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.ios.runnerUITests";
633 + SDKROOT = iphoneos;
634 + TARGETED_DEVICE_FAMILY = "1,2";
635 + TEST_TARGET_NAME = "ControlKit-iOS";
636 + };
637 + name = Release;
638 + };
639 + 5DFC622632D5C806ABD2166A /* Debug */ = {
640 + isa = XCBuildConfiguration;
641 + buildSettings = {
642 + BUNDLE_LOADER = "$(TEST_HOST)";
643 + LD_RUNPATH_SEARCH_PATHS = (
644 + "$(inherited)",
645 + "@executable_path/Frameworks",
646 + "@loader_path/Frameworks",
647 + );
648 + PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.tvos.runnerUITests";
649 + SDKROOT = appletvos;
650 + TARGETED_DEVICE_FAMILY = 3;
651 + TEST_TARGET_NAME = "ControlKit-tvOS";
652 + };
653 + name = Debug;
654 + };
655 + 75D889A99C7B6070232E7838 /* Release */ = {
656 + isa = XCBuildConfiguration;
657 + buildSettings = {
658 + BUNDLE_LOADER = "$(TEST_HOST)";
659 + LD_RUNPATH_SEARCH_PATHS = (
660 + "$(inherited)",
661 + "@executable_path/Frameworks",
662 + "@loader_path/Frameworks",
663 + );
664 + PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.tvos.runnerUITests";
665 + SDKROOT = appletvos;
666 + TARGETED_DEVICE_FAMILY = 3;
667 + TEST_TARGET_NAME = "ControlKit-tvOS";
668 + };
669 + name = Release;
670 + };
671 + 83055E7AC43FEEB9B1276EDA /* Debug */ = {
672 + isa = XCBuildConfiguration;
673 + buildSettings = {
674 + BUNDLE_LOADER = "$(TEST_HOST)";
675 + LD_RUNPATH_SEARCH_PATHS = (
676 + "$(inherited)",
677 + "@executable_path/Frameworks",
678 + "@loader_path/Frameworks",
679 + );
680 + PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.ios.runnerUITests";
681 + SDKROOT = iphoneos;
682 + TARGETED_DEVICE_FAMILY = "1,2";
683 + TEST_TARGET_NAME = "ControlKit-iOS";
684 + };
685 + name = Debug;
686 + };
687 + 8E1F608170D5A28461B0F169 /* Debug */ = {
688 + isa = XCBuildConfiguration;
689 + buildSettings = {
690 + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
691 + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
692 + LD_RUNPATH_SEARCH_PATHS = (
693 + "$(inherited)",
694 + "@executable_path/Frameworks",
695 + );
696 + PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.tvos.runner";
697 + PRODUCT_NAME = ControlKit;
698 + SDKROOT = appletvos;
699 + TARGETED_DEVICE_FAMILY = 3;
700 + };
701 + name = Debug;
702 + };
703 + 9E70A7B791C8304A746AD74D /* Release */ = {
704 + isa = XCBuildConfiguration;
705 + buildSettings = {
706 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
707 + LD_RUNPATH_SEARCH_PATHS = (
708 + "$(inherited)",
709 + "@executable_path/Frameworks",
710 + );
711 + PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.visionos.runner";
712 + PRODUCT_NAME = ControlKit;
713 + SDKROOT = xros;
714 + TARGETED_DEVICE_FAMILY = 7;
715 + };
716 + name = Release;
717 + };
718 + AE247B8CB1FB1A6E8E8B8696 /* Release */ = {
719 + isa = XCBuildConfiguration;
720 + buildSettings = {
721 + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
722 + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
723 + LD_RUNPATH_SEARCH_PATHS = (
724 + "$(inherited)",
725 + "@executable_path/Frameworks",
726 + );
727 + PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.tvos.runner";
728 + PRODUCT_NAME = ControlKit;
729 + SDKROOT = appletvos;
730 + TARGETED_DEVICE_FAMILY = 3;
731 + };
732 + name = Release;
733 + };
734 + E4C3287EEC34289D60AD8369 /* Release */ = {
735 + isa = XCBuildConfiguration;
736 + buildSettings = {
737 + ALWAYS_SEARCH_USER_PATHS = NO;
738 + CLANG_ANALYZER_NONNULL = YES;
739 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
740 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
741 + CLANG_CXX_LIBRARY = "libc++";
742 + CLANG_ENABLE_MODULES = YES;
743 + CLANG_ENABLE_OBJC_ARC = YES;
744 + CLANG_ENABLE_OBJC_WEAK = YES;
745 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
746 + CLANG_WARN_BOOL_CONVERSION = YES;
747 + CLANG_WARN_COMMA = YES;
748 + CLANG_WARN_CONSTANT_CONVERSION = YES;
749 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
750 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
751 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
752 + CLANG_WARN_EMPTY_BODY = YES;
753 + CLANG_WARN_ENUM_CONVERSION = YES;
754 + CLANG_WARN_INFINITE_RECURSION = YES;
755 + CLANG_WARN_INT_CONVERSION = YES;
756 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
757 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
758 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
759 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
760 + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
761 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
762 + CLANG_WARN_STRICT_PROTOTYPES = YES;
763 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
764 + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
765 + CLANG_WARN_UNREACHABLE_CODE = YES;
766 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
767 + COPY_PHASE_STRIP = NO;
768 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
769 + ENABLE_NS_ASSERTIONS = NO;
770 + ENABLE_STRICT_OBJC_MSGSEND = YES;
771 + GCC_C_LANGUAGE_STANDARD = gnu11;
772 + GCC_NO_COMMON_BLOCKS = YES;
773 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
774 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
775 + GCC_WARN_UNDECLARED_SELECTOR = YES;
776 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
777 + GCC_WARN_UNUSED_FUNCTION = YES;
778 + GCC_WARN_UNUSED_VARIABLE = YES;
779 + GENERATE_INFOPLIST_FILE = YES;
780 + INFOPLIST_KEY_CFBundleDisplayName = ControlKit;
781 + IPHONEOS_DEPLOYMENT_TARGET = 16.0;
782 + LD_RUNPATH_SEARCH_PATHS = (
783 + "$(inherited)",
784 + "@executable_path/Frameworks",
785 + );
786 + MTL_ENABLE_DEBUG_INFO = NO;
787 + MTL_FAST_MATH = YES;
788 + PRODUCT_NAME = "$(TARGET_NAME)";
789 + SWIFT_COMPILATION_MODE = wholemodule;
790 + SWIFT_OPTIMIZATION_LEVEL = "-O";
791 + SWIFT_VERSION = 5.9;
792 + TVOS_DEPLOYMENT_TARGET = 16.0;
793 + XROS_DEPLOYMENT_TARGET = 1.0;
794 + };
795 + name = Release;
796 + };
797 +/* End XCBuildConfiguration section */
798 +
799 +/* Begin XCConfigurationList section */
800 + 42681BF128073F8CD1146052 /* Build configuration list for PBXNativeTarget "ControlKit-iOS" */ = {
801 + isa = XCConfigurationList;
802 + buildConfigurations = (
803 + 21F4165C7F57458C04C5805E /* Debug */,
804 + 05E1C3E341C64C4F40D8F6EF /* Release */,
805 + );
806 + defaultConfigurationIsVisible = 0;
807 + defaultConfigurationName = Debug;
808 + };
809 + 5DD1F1B919E5F8BC9E03021C /* Build configuration list for PBXProject "XCRSControlKitRunner" */ = {
810 + isa = XCConfigurationList;
811 + buildConfigurations = (
812 + 51FACD26B90FED54CC62D2FD /* Debug */,
813 + E4C3287EEC34289D60AD8369 /* Release */,
814 + );
815 + defaultConfigurationIsVisible = 0;
816 + defaultConfigurationName = Debug;
817 + };
818 + 83E3FC025793339356561648 /* Build configuration list for PBXNativeTarget "ControlKit-iOS-UITests" */ = {
819 + isa = XCConfigurationList;
820 + buildConfigurations = (
821 + 83055E7AC43FEEB9B1276EDA /* Debug */,
822 + 5CCFC05738690F1B9995260B /* Release */,
823 + );
824 + defaultConfigurationIsVisible = 0;
825 + defaultConfigurationName = Debug;
826 + };
827 + A3E875F2C0588D2AFB728EC8 /* Build configuration list for PBXNativeTarget "ControlKit-visionOS" */ = {
828 + isa = XCConfigurationList;
829 + buildConfigurations = (
830 + 2E51B9F5C20DD197F5FA4F07 /* Debug */,
831 + 9E70A7B791C8304A746AD74D /* Release */,
832 + );
833 + defaultConfigurationIsVisible = 0;
834 + defaultConfigurationName = Debug;
835 + };
836 + B47E47F03867048313ED0BC9 /* Build configuration list for PBXNativeTarget "ControlKit-visionOS-UITests" */ = {
837 + isa = XCConfigurationList;
838 + buildConfigurations = (
839 + 41FF10163C9AB188CF4891AF /* Debug */,
840 + 540AA08AAD985F8F777D57E1 /* Release */,
841 + );
842 + defaultConfigurationIsVisible = 0;
843 + defaultConfigurationName = Debug;
844 + };
845 + DC1656DA116F4F1E1E7A9039 /* Build configuration list for PBXNativeTarget "ControlKit-tvOS-UITests" */ = {
846 + isa = XCConfigurationList;
847 + buildConfigurations = (
848 + 5DFC622632D5C806ABD2166A /* Debug */,
849 + 75D889A99C7B6070232E7838 /* Release */,
850 + );
851 + defaultConfigurationIsVisible = 0;
852 + defaultConfigurationName = Debug;
853 + };
854 + F90CA1FF8DF178C6B4D2D56F /* Build configuration list for PBXNativeTarget "ControlKit-tvOS" */ = {
855 + isa = XCConfigurationList;
856 + buildConfigurations = (
857 + 8E1F608170D5A28461B0F169 /* Debug */,
858 + AE247B8CB1FB1A6E8E8B8696 /* Release */,
859 + );
860 + defaultConfigurationIsVisible = 0;
861 + defaultConfigurationName = Debug;
862 + };
863 +/* End XCConfigurationList section */
864 +
865 +/* Begin XCLocalSwiftPackageReference section */
866 + B1F1238966374497306EE6F6 /* XCLocalSwiftPackageReference ".." */ = {
867 + isa = XCLocalSwiftPackageReference;
868 + relativePath = ..;
869 + };
870 +/* End XCLocalSwiftPackageReference section */
871 +
872 +/* Begin XCRemoteSwiftPackageReference section */
873 + 097CD02F3C7519204C9CDC73 /* XCRemoteSwiftPackageReference "swift-nio" */ = {
874 + isa = XCRemoteSwiftPackageReference;
875 + repositoryURL = "https://github.com/apple/swift-nio.git";
876 + requirement = {
877 + kind = upToNextMajorVersion;
878 + minimumVersion = 2.0.0;
879 + };
880 + };
881 +/* End XCRemoteSwiftPackageReference section */
882 +
883 +/* Begin XCSwiftPackageProductDependency section */
884 + 17A1603CDD0A79E07FAC7D43 /* XCRSControlKit */ = {
885 + isa = XCSwiftPackageProductDependency;
886 + productName = XCRSControlKit;
887 + };
888 + 1EEBDB1A27DC2D28A6BB1B95 /* NIOCore */ = {
889 + isa = XCSwiftPackageProductDependency;
890 + package = 097CD02F3C7519204C9CDC73 /* XCRemoteSwiftPackageReference "swift-nio" */;
891 + productName = NIOCore;
892 + };
893 + 2B7D7F431DC211BEDBFC374A /* NIOPosix */ = {
894 + isa = XCSwiftPackageProductDependency;
895 + package = 097CD02F3C7519204C9CDC73 /* XCRemoteSwiftPackageReference "swift-nio" */;
896 + productName = NIOPosix;
897 + };
898 + 39DF23C6EF63909919D192E1 /* NIOHTTP1 */ = {
899 + isa = XCSwiftPackageProductDependency;
900 + package = 097CD02F3C7519204C9CDC73 /* XCRemoteSwiftPackageReference "swift-nio" */;
901 + productName = NIOHTTP1;
902 + };
903 + 50AB05BF2C324210174A3476 /* XCRSControlKit */ = {
904 + isa = XCSwiftPackageProductDependency;
905 + productName = XCRSControlKit;
906 + };
907 + 58494EA2BBD98AE84158250F /* NIOCore */ = {
908 + isa = XCSwiftPackageProductDependency;
909 + package = 097CD02F3C7519204C9CDC73 /* XCRemoteSwiftPackageReference "swift-nio" */;
910 + productName = NIOCore;
911 + };
912 + 84A03CA7B1A8BF405AD3F3C4 /* NIOHTTP1 */ = {
913 + isa = XCSwiftPackageProductDependency;
914 + package = 097CD02F3C7519204C9CDC73 /* XCRemoteSwiftPackageReference "swift-nio" */;
915 + productName = NIOHTTP1;
916 + };
917 + BE99FEAB3F75651FC71BB9B5 /* XCRSControlKit */ = {
918 + isa = XCSwiftPackageProductDependency;
919 + productName = XCRSControlKit;
920 + };
921 + C9A26D0E7AB404E7BE27C778 /* NIOPosix */ = {
922 + isa = XCSwiftPackageProductDependency;
923 + package = 097CD02F3C7519204C9CDC73 /* XCRemoteSwiftPackageReference "swift-nio" */;
924 + productName = NIOPosix;
925 + };
926 + EE8C054B1BC0620402AEA51B /* NIOHTTP1 */ = {
927 + isa = XCSwiftPackageProductDependency;
928 + package = 097CD02F3C7519204C9CDC73 /* XCRemoteSwiftPackageReference "swift-nio" */;
929 + productName = NIOHTTP1;
930 + };
931 + F83D3AB07112BE3B5C5CEEB0 /* NIOCore */ = {
932 + isa = XCSwiftPackageProductDependency;
933 + package = 097CD02F3C7519204C9CDC73 /* XCRemoteSwiftPackageReference "swift-nio" */;
934 + productName = NIOCore;
935 + };
936 + FFAF906BB53F58598BDAE35B /* NIOPosix */ = {
937 + isa = XCSwiftPackageProductDependency;
938 + package = 097CD02F3C7519204C9CDC73 /* XCRemoteSwiftPackageReference "swift-nio" */;
939 + productName = NIOPosix;
940 + };
941 +/* End XCSwiftPackageProductDependency section */
942 + };
943 + rootObject = A886E2D8FDDF1B058227A931 /* Project object */;
944 +}
Runners/XCRSControlKitRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new
+7
@@ -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>
Runners/XCRSControlKitRunner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved renamed
+1 -2
@@ -1,5 +1,4 @@
1 {
2 - "originHash" : "dc64d5a9a584c1afdd2823a6335adce6e83ebd68e5e5f250156866e5bdc7e973",
2 "pins" : [
3 {
4 "identity" : "swift-atomics",
@@ -38,5 +37,5 @@
37 }
38 }
39 ],
41 - "version" : 3
40 + "version" : 2
41 }
Runners/XCRSControlKitRunner.xcodeproj/xcshareddata/xcschemes/ControlKit-iOS.xcscheme renamed
+37 -17
@@ -1,11 +1,10 @@
1 <?xml version="1.0" encoding="UTF-8"?>
2 <Scheme
3 - LastUpgradeVersion = "2660"
4 - version = "1.7">
3 + LastUpgradeVersion = "1430"
4 + version = "1.3">
5 <BuildAction
6 parallelizeBuildables = "YES"
7 - buildImplicitDependencies = "YES"
8 - buildArchitectures = "Automatic">
7 + buildImplicitDependencies = "YES">
8 <BuildActionEntries>
9 <BuildActionEntry
10 buildForTesting = "YES"
@@ -15,9 +14,23 @@
14 buildForAnalyzing = "YES">
15 <BuildableReference
16 BuildableIdentifier = "primary"
18 - BlueprintIdentifier = "297E6EBCF6A5F1F8FE403639"
17 + BlueprintIdentifier = "9F5E3C368E274D9C0BF1AC09"
18 BuildableName = "ControlKit.app"
20 - BlueprintName = "XCRSControlKitRunner"
19 + BlueprintName = "ControlKit-iOS"
20 + ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
21 + </BuildableReference>
22 + </BuildActionEntry>
23 + <BuildActionEntry
24 + buildForTesting = "YES"
25 + buildForRunning = "NO"
26 + buildForProfiling = "NO"
27 + buildForArchiving = "NO"
28 + buildForAnalyzing = "NO">
29 + <BuildableReference
30 + BuildableIdentifier = "primary"
31 + BlueprintIdentifier = "CD73A40CAB68D297974A7E90"
32 + BuildableName = "ControlKit-iOS-UITests.xctest"
33 + BlueprintName = "ControlKit-iOS-UITests"
34 ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
35 </BuildableReference>
36 </BuildActionEntry>
@@ -27,16 +40,24 @@
40 buildConfiguration = "Debug"
41 selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
42 selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
30 - shouldUseLaunchSchemeArgsEnv = "YES"
31 - shouldAutocreateTestPlan = "YES">
43 + shouldUseLaunchSchemeArgsEnv = "YES">
44 + <MacroExpansion>
45 + <BuildableReference
46 + BuildableIdentifier = "primary"
47 + BlueprintIdentifier = "9F5E3C368E274D9C0BF1AC09"
48 + BuildableName = "ControlKit.app"
49 + BlueprintName = "ControlKit-iOS"
50 + ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
51 + </BuildableReference>
52 + </MacroExpansion>
53 <Testables>
54 <TestableReference
55 skipped = "NO">
56 <BuildableReference
57 BuildableIdentifier = "primary"
37 - BlueprintIdentifier = "40F02CDFEAF28D1FA9935842"
38 - BuildableName = "XCRSControlKitRunnerUITests.xctest"
39 - BlueprintName = "XCRSControlKitRunnerUITests"
58 + BlueprintIdentifier = "CD73A40CAB68D297974A7E90"
59 + BuildableName = "ControlKit-iOS-UITests.xctest"
60 + BlueprintName = "ControlKit-iOS-UITests"
61 ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
62 </BuildableReference>
63 </TestableReference>
@@ -51,15 +72,14 @@
72 ignoresPersistentStateOnLaunch = "NO"
73 debugDocumentVersioning = "YES"
74 debugServiceExtension = "internal"
54 - allowLocationSimulation = "YES"
55 - queueDebuggingEnableBacktraceRecording = "Yes">
75 + allowLocationSimulation = "YES">
76 <BuildableProductRunnable
77 runnableDebuggingMode = "0">
78 <BuildableReference
79 BuildableIdentifier = "primary"
60 - BlueprintIdentifier = "297E6EBCF6A5F1F8FE403639"
80 + BlueprintIdentifier = "9F5E3C368E274D9C0BF1AC09"
81 BuildableName = "ControlKit.app"
62 - BlueprintName = "XCRSControlKitRunner"
82 + BlueprintName = "ControlKit-iOS"
83 ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
84 </BuildableReference>
85 </BuildableProductRunnable>
@@ -74,9 +94,9 @@
94 runnableDebuggingMode = "0">
95 <BuildableReference
96 BuildableIdentifier = "primary"
77 - BlueprintIdentifier = "297E6EBCF6A5F1F8FE403639"
97 + BlueprintIdentifier = "9F5E3C368E274D9C0BF1AC09"
98 BuildableName = "ControlKit.app"
79 - BlueprintName = "XCRSControlKitRunner"
99 + BlueprintName = "ControlKit-iOS"
100 ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
101 </BuildableReference>
102 </BuildableProductRunnable>
Runners/XCRSControlKitRunner.xcodeproj/xcshareddata/xcschemes/ControlKit-tvOS.xcscheme renamed
+37 -17
@@ -1,11 +1,10 @@
1 <?xml version="1.0" encoding="UTF-8"?>
2 <Scheme
3 - LastUpgradeVersion = "2660"
4 - version = "1.7">
3 + LastUpgradeVersion = "1430"
4 + version = "1.3">
5 <BuildAction
6 parallelizeBuildables = "YES"
7 - buildImplicitDependencies = "YES"
8 - buildArchitectures = "Automatic">
7 + buildImplicitDependencies = "YES">
8 <BuildActionEntries>
9 <BuildActionEntry
10 buildForTesting = "YES"
@@ -15,9 +14,23 @@
14 buildForAnalyzing = "YES">
15 <BuildableReference
16 BuildableIdentifier = "primary"
18 - BlueprintIdentifier = "65C69F9323FE4A33A9BD5CFD"
17 + BlueprintIdentifier = "029C796A915A8119077A2F2D"
18 BuildableName = "ControlKit.app"
20 - BlueprintName = "XCRSControlKitRunner"
19 + BlueprintName = "ControlKit-tvOS"
20 + ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
21 + </BuildableReference>
22 + </BuildActionEntry>
23 + <BuildActionEntry
24 + buildForTesting = "YES"
25 + buildForRunning = "NO"
26 + buildForProfiling = "NO"
27 + buildForArchiving = "NO"
28 + buildForAnalyzing = "NO">
29 + <BuildableReference
30 + BuildableIdentifier = "primary"
31 + BlueprintIdentifier = "8B29B60E49F265583C3FB987"
32 + BuildableName = "ControlKit-tvOS-UITests.xctest"
33 + BlueprintName = "ControlKit-tvOS-UITests"
34 ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
35 </BuildableReference>
36 </BuildActionEntry>
@@ -27,16 +40,24 @@
40 buildConfiguration = "Debug"
41 selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
42 selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
30 - shouldUseLaunchSchemeArgsEnv = "YES"
31 - shouldAutocreateTestPlan = "YES">
43 + shouldUseLaunchSchemeArgsEnv = "YES">
44 + <MacroExpansion>
45 + <BuildableReference
46 + BuildableIdentifier = "primary"
47 + BlueprintIdentifier = "029C796A915A8119077A2F2D"
48 + BuildableName = "ControlKit.app"
49 + BlueprintName = "ControlKit-tvOS"
50 + ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
51 + </BuildableReference>
52 + </MacroExpansion>
53 <Testables>
54 <TestableReference
55 skipped = "NO">
56 <BuildableReference
57 BuildableIdentifier = "primary"
37 - BlueprintIdentifier = "3D3C633B3F1CE5F513D7F973"
38 - BuildableName = "XCRSControlKitRunnerUITests.xctest"
39 - BlueprintName = "XCRSControlKitRunnerUITests"
58 + BlueprintIdentifier = "8B29B60E49F265583C3FB987"
59 + BuildableName = "ControlKit-tvOS-UITests.xctest"
60 + BlueprintName = "ControlKit-tvOS-UITests"
61 ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
62 </BuildableReference>
63 </TestableReference>
@@ -51,15 +72,14 @@
72 ignoresPersistentStateOnLaunch = "NO"
73 debugDocumentVersioning = "YES"
74 debugServiceExtension = "internal"
54 - allowLocationSimulation = "YES"
55 - queueDebuggingEnableBacktraceRecording = "Yes">
75 + allowLocationSimulation = "YES">
76 <BuildableProductRunnable
77 runnableDebuggingMode = "0">
78 <BuildableReference
79 BuildableIdentifier = "primary"
60 - BlueprintIdentifier = "65C69F9323FE4A33A9BD5CFD"
80 + BlueprintIdentifier = "029C796A915A8119077A2F2D"
81 BuildableName = "ControlKit.app"
62 - BlueprintName = "XCRSControlKitRunner"
82 + BlueprintName = "ControlKit-tvOS"
83 ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
84 </BuildableReference>
85 </BuildableProductRunnable>
@@ -74,9 +94,9 @@
94 runnableDebuggingMode = "0">
95 <BuildableReference
96 BuildableIdentifier = "primary"
77 - BlueprintIdentifier = "65C69F9323FE4A33A9BD5CFD"
97 + BlueprintIdentifier = "029C796A915A8119077A2F2D"
98 BuildableName = "ControlKit.app"
79 - BlueprintName = "XCRSControlKitRunner"
99 + BlueprintName = "ControlKit-tvOS"
100 ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
101 </BuildableReference>
102 </BuildableProductRunnable>
Runners/XCRSControlKitRunner.xcodeproj/xcshareddata/xcschemes/ControlKit-visionOS.xcscheme new
+111
@@ -0,0 +1,111 @@
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Scheme
3 + LastUpgradeVersion = "1430"
4 + version = "1.3">
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 = "720F3EC917A0116B593FBBBB"
18 + BuildableName = "ControlKit.app"
19 + BlueprintName = "ControlKit-visionOS"
20 + ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
21 + </BuildableReference>
22 + </BuildActionEntry>
23 + <BuildActionEntry
24 + buildForTesting = "YES"
25 + buildForRunning = "NO"
26 + buildForProfiling = "NO"
27 + buildForArchiving = "NO"
28 + buildForAnalyzing = "NO">
29 + <BuildableReference
30 + BuildableIdentifier = "primary"
31 + BlueprintIdentifier = "09F6B446FD034D1BCF7FE56B"
32 + BuildableName = "ControlKit-visionOS-UITests.xctest"
33 + BlueprintName = "ControlKit-visionOS-UITests"
34 + ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
35 + </BuildableReference>
36 + </BuildActionEntry>
37 + </BuildActionEntries>
38 + </BuildAction>
39 + <TestAction
40 + buildConfiguration = "Debug"
41 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
42 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
43 + shouldUseLaunchSchemeArgsEnv = "YES">
44 + <MacroExpansion>
45 + <BuildableReference
46 + BuildableIdentifier = "primary"
47 + BlueprintIdentifier = "720F3EC917A0116B593FBBBB"
48 + BuildableName = "ControlKit.app"
49 + BlueprintName = "ControlKit-visionOS"
50 + ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
51 + </BuildableReference>
52 + </MacroExpansion>
53 + <Testables>
54 + <TestableReference
55 + skipped = "NO">
56 + <BuildableReference
57 + BuildableIdentifier = "primary"
58 + BlueprintIdentifier = "09F6B446FD034D1BCF7FE56B"
59 + BuildableName = "ControlKit-visionOS-UITests.xctest"
60 + BlueprintName = "ControlKit-visionOS-UITests"
61 + ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
62 + </BuildableReference>
63 + </TestableReference>
64 + </Testables>
65 + </TestAction>
66 + <LaunchAction
67 + buildConfiguration = "Debug"
68 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
69 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
70 + launchStyle = "0"
71 + useCustomWorkingDirectory = "NO"
72 + ignoresPersistentStateOnLaunch = "NO"
73 + debugDocumentVersioning = "YES"
74 + debugServiceExtension = "internal"
75 + allowLocationSimulation = "YES">
76 + <BuildableProductRunnable
77 + runnableDebuggingMode = "0">
78 + <BuildableReference
79 + BuildableIdentifier = "primary"
80 + BlueprintIdentifier = "720F3EC917A0116B593FBBBB"
81 + BuildableName = "ControlKit.app"
82 + BlueprintName = "ControlKit-visionOS"
83 + ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
84 + </BuildableReference>
85 + </BuildableProductRunnable>
86 + </LaunchAction>
87 + <ProfileAction
88 + buildConfiguration = "Release"
89 + shouldUseLaunchSchemeArgsEnv = "YES"
90 + savedToolIdentifier = ""
91 + useCustomWorkingDirectory = "NO"
92 + debugDocumentVersioning = "YES">
93 + <BuildableProductRunnable
94 + runnableDebuggingMode = "0">
95 + <BuildableReference
96 + BuildableIdentifier = "primary"
97 + BlueprintIdentifier = "720F3EC917A0116B593FBBBB"
98 + BuildableName = "ControlKit.app"
99 + BlueprintName = "ControlKit-visionOS"
100 + ReferencedContainer = "container:XCRSControlKitRunner.xcodeproj">
101 + </BuildableReference>
102 + </BuildableProductRunnable>
103 + </ProfileAction>
104 + <AnalyzeAction
105 + buildConfiguration = "Debug">
106 + </AnalyzeAction>
107 + <ArchiveAction
108 + buildConfiguration = "Release"
109 + revealArchiveInOrganizer = "YES">
110 + </ArchiveAction>
111 +</Scheme>
Runners/iOS/ControlKitRunnerApp.swift
+1 -1
@@ -88,7 +88,7 @@ private struct ControlKitShowcaseView: View {
88 private var informationCard: some View {
89 VStack(alignment: .leading, spacing: 16) {
90 infoRow(title: "Project", value: "XCRSControlKit")
91 - infoRow(title: "Creator", value: "smbCloudXYZ")
91 + infoRow(title: "Creator", value: "smbCloud")
92 infoRow(title: "Platform", value: "iOS and iPadOS")
93 infoRow(title: "Purpose", value: "Native UI automation runner")
94 }
Runners/iOS/README.md
+7 -7
@@ -1,9 +1,9 @@
1 -# XCRS ControlKit iOS runner
1 +# ControlKit iOS host app
2
3 -This is the first native runner owned by XCRS ControlKit. It is an Xcode UI
4 -testing project, not a SwiftPM target, and imports the public
5 -`XCRSControlKit` package for capability and request contracts.
3 +This folder holds the iOS / iPadOS host application (`ControlKitRunnerApp.swift`
4 +and `Assets.xcassets`) for the `ControlKit-iOS` target in the shared
5 +`XCRSControlKitRunner.xcodeproj`.
6
7 -The runner exposes a small localhost JSON-RPC server to the Rust `xcrs`
8 -client using SwiftNIO's HTTP/1 server pipeline. It is an independent
9 -ControlKit implementation with no private XCTest headers.
7 +Touch input is delivered through `XCUICoordinate` taps; the `home` button maps
8 +to `XCUIDevice`. The JSON-RPC transport and server live in `../Shared` and are
9 +compiled into the `ControlKit-iOS-UITests` target.
Runners/iOS/XCRSControlKitRunner.xcodeproj/project.pbxproj deleted
-500
@@ -1,500 +0,0 @@
1 -// !$*UTF8*$!
2 -{
3 - archiveVersion = 1;
4 - classes = {
5 - };
6 - objectVersion = 46;
7 - objects = {
8 -
9 -/* Begin PBXBuildFile section */
10 - 12FB8732E528D5BC3CFD5353 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 677B2BA6304D7A19CA4199C6 /* Foundation.framework */; };
11 - 240C04374372369CF9288310 /* ControlKitRPCServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45F4A2788516250C6390D6A7 /* ControlKitRPCServer.swift */; };
12 - 5267368AE4FA4A1AF152F2BB /* ControlKitRunnerApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3825CF3F09E2C73AC5BCF561 /* ControlKitRunnerApp.swift */; };
13 - 623F26CA1E5FC3982AAB778C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C9FE4276F055DA74C55074CB /* Assets.xcassets */; };
14 - 6E7B19FB8377403D45E5B319 /* ControlKitRunnerUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97053F46DD106789E5704C28 /* ControlKitRunnerUITests.swift */; };
15 - A66D6E921CCD246E49A34BD2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 677B2BA6304D7A19CA4199C6 /* Foundation.framework */; };
16 -/* End PBXBuildFile section */
17 -
18 -/* Begin PBXContainerItemProxy section */
19 - A427DD4B39849849959312A5 /* PBXContainerItemProxy */ = {
20 - isa = PBXContainerItemProxy;
21 - containerPortal = 5A4615FAD9C725BDA6BB9D0D /* Project object */;
22 - proxyType = 1;
23 - remoteGlobalIDString = 65C69F9323FE4A33A9BD5CFD;
24 - remoteInfo = XCRSControlKitRunner;
25 - };
26 -/* End PBXContainerItemProxy section */
27 -
28 -/* Begin PBXFileReference section */
29 - 158D6AE634D750F58BFA4F3C /* XCRSControlKitRunner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XCRSControlKitRunner.app; sourceTree = BUILT_PRODUCTS_DIR; };
30 - 3825CF3F09E2C73AC5BCF561 /* ControlKitRunnerApp.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControlKitRunnerApp.swift; sourceTree = "<group>"; };
31 - 45F4A2788516250C6390D6A7 /* ControlKitRPCServer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControlKitRPCServer.swift; sourceTree = "<group>"; };
32 - 677B2BA6304D7A19CA4199C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
33 - 97053F46DD106789E5704C28 /* ControlKitRunnerUITests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControlKitRunnerUITests.swift; sourceTree = "<group>"; };
34 - C9FE4276F055DA74C55074CB /* Assets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
35 - F2384A3BC0E7D978EED69C35 /* XCRSControlKitRunnerUITests */ = {isa = PBXFileReference; includeInIndex = 0; path = XCRSControlKitRunnerUITests; sourceTree = BUILT_PRODUCTS_DIR; };
36 -/* End PBXFileReference section */
37 -
38 -/* Begin PBXFrameworksBuildPhase section */
39 - 80BD8489289F29F80E617598 /* Frameworks */ = {
40 - isa = PBXFrameworksBuildPhase;
41 - buildActionMask = 2147483647;
42 - files = (
43 - A66D6E921CCD246E49A34BD2 /* Foundation.framework in Frameworks */,
44 - );
45 - runOnlyForDeploymentPostprocessing = 0;
46 - };
47 - CE6C87241EBD1B86DA8BA3AF /* Frameworks */ = {
48 - isa = PBXFrameworksBuildPhase;
49 - buildActionMask = 2147483647;
50 - files = (
51 - 12FB8732E528D5BC3CFD5353 /* Foundation.framework in Frameworks */,
52 - );
53 - runOnlyForDeploymentPostprocessing = 0;
54 - };
55 -/* End PBXFrameworksBuildPhase section */
56 -
57 -/* Begin PBXGroup section */
58 - 26FCC7EB76F7FBFA9F2B1238 /* XCRSControlKitRunnerUITests */ = {
59 - isa = PBXGroup;
60 - children = (
61 - 97053F46DD106789E5704C28 /* ControlKitRunnerUITests.swift */,
62 - 45F4A2788516250C6390D6A7 /* ControlKitRPCServer.swift */,
63 - );
64 - name = XCRSControlKitRunnerUITests;
65 - path = .;
66 - sourceTree = "<group>";
67 - };
68 - 27707640A8563F24E4EB7902 /* Frameworks */ = {
69 - isa = PBXGroup;
70 - children = (
71 - F62FFE7A6809A05F068F78F4 /* iOS */,
72 - );
73 - name = Frameworks;
74 - sourceTree = "<group>";
75 - };
76 - 48CB2BAD4FA1AA8E4DA76E10 /* XCRSControlKitRunner */ = {
77 - isa = PBXGroup;
78 - children = (
79 - 3825CF3F09E2C73AC5BCF561 /* ControlKitRunnerApp.swift */,
80 - C9FE4276F055DA74C55074CB /* Assets.xcassets */,
81 - );
82 - name = XCRSControlKitRunner;
83 - path = .;
84 - sourceTree = "<group>";
85 - };
86 - 6B3D128F7499546CFF24AF0B /* Products */ = {
87 - isa = PBXGroup;
88 - children = (
89 - 158D6AE634D750F58BFA4F3C /* XCRSControlKitRunner.app */,
90 - F2384A3BC0E7D978EED69C35 /* XCRSControlKitRunnerUITests */,
91 - );
92 - name = Products;
93 - sourceTree = "<group>";
94 - };
95 - A58B00BE92DC60DE632CF4D2 = {
96 - isa = PBXGroup;
97 - children = (
98 - 6B3D128F7499546CFF24AF0B /* Products */,
99 - 27707640A8563F24E4EB7902 /* Frameworks */,
100 - 48CB2BAD4FA1AA8E4DA76E10 /* XCRSControlKitRunner */,
101 - 26FCC7EB76F7FBFA9F2B1238 /* XCRSControlKitRunnerUITests */,
102 - );
103 - sourceTree = "<group>";
104 - };
105 - F62FFE7A6809A05F068F78F4 /* iOS */ = {
106 - isa = PBXGroup;
107 - children = (
108 - 677B2BA6304D7A19CA4199C6 /* Foundation.framework */,
109 - );
110 - name = iOS;
111 - sourceTree = "<group>";
112 - };
113 -/* End PBXGroup section */
114 -
115 -/* Begin PBXNativeTarget section */
116 - 3D3C633B3F1CE5F513D7F973 /* XCRSControlKitRunnerUITests */ = {
117 - isa = PBXNativeTarget;
118 - buildConfigurationList = 09DCF821A316EB9B782B3281 /* Build configuration list for PBXNativeTarget "XCRSControlKitRunnerUITests" */;
119 - buildPhases = (
120 - BE45964975925FCDB7E07A02 /* Sources */,
121 - CE6C87241EBD1B86DA8BA3AF /* Frameworks */,
122 - 8C5E82B59DC87CA04ED56147 /* Resources */,
123 - );
124 - buildRules = (
125 - );
126 - dependencies = (
127 - AD9C27DDC63B00A39E2F2F6B /* PBXTargetDependency */,
128 - );
129 - name = XCRSControlKitRunnerUITests;
130 - packageProductDependencies = (
131 - 519A8A0C72E51DA6D0174E87 /* XCRSControlKit */,
132 - 3C011EAFF81B128EFF169657 /* NIOCore */,
133 - 3C599300D59533D3F1EAAB06 /* NIOHTTP1 */,
134 - 752918E24D37ADB5D048781D /* NIOPosix */,
135 - );
136 - productName = XCRSControlKitRunnerUITests;
137 - productReference = F2384A3BC0E7D978EED69C35 /* XCRSControlKitRunnerUITests */;
138 - productType = "com.apple.product-type.bundle.ui-testing";
139 - };
140 - 65C69F9323FE4A33A9BD5CFD /* XCRSControlKitRunner */ = {
141 - isa = PBXNativeTarget;
142 - buildConfigurationList = 1E9093BA177C6E09C7249452 /* Build configuration list for PBXNativeTarget "XCRSControlKitRunner" */;
143 - buildPhases = (
144 - 2E147C33CA6023EC566F9503 /* Sources */,
145 - 80BD8489289F29F80E617598 /* Frameworks */,
146 - B06C9835F24B5A268D7376F3 /* Resources */,
147 - );
148 - buildRules = (
149 - );
150 - dependencies = (
151 - );
152 - name = XCRSControlKitRunner;
153 - productName = XCRSControlKitRunner;
154 - productReference = 158D6AE634D750F58BFA4F3C /* XCRSControlKitRunner.app */;
155 - productType = "com.apple.product-type.application";
156 - };
157 -/* End PBXNativeTarget section */
158 -
159 -/* Begin PBXProject section */
160 - 5A4615FAD9C725BDA6BB9D0D /* Project object */ = {
161 - isa = PBXProject;
162 - attributes = {
163 - LastSwiftUpdateCheck = 2630;
164 - LastUpgradeCheck = 2630;
165 - };
166 - buildConfigurationList = 8E50C3CB1D836D41CF571655 /* Build configuration list for PBXProject "XCRSControlKitRunner" */;
167 - compatibilityVersion = "Xcode 3.2";
168 - developmentRegion = en;
169 - hasScannedForEncodings = 0;
170 - knownRegions = (
171 - en,
172 - Base,
173 - );
174 - mainGroup = A58B00BE92DC60DE632CF4D2;
175 - minimizedProjectReferenceProxies = 0;
176 - packageReferences = (
177 - 3DBF8CF0F31AA03CAC623B80 /* XCLocalSwiftPackageReference ".." */,
178 - 5B254FC74CBF06A66B4DD162 /* XCRemoteSwiftPackageReference "swift-nio" */,
179 - );
180 - preferredProjectObjectVersion = 77;
181 - productRefGroup = 6B3D128F7499546CFF24AF0B /* Products */;
182 - projectDirPath = "";
183 - projectRoot = "";
184 - targets = (
185 - 65C69F9323FE4A33A9BD5CFD /* XCRSControlKitRunner */,
186 - 3D3C633B3F1CE5F513D7F973 /* XCRSControlKitRunnerUITests */,
187 - );
188 - };
189 -/* End PBXProject section */
190 -
191 -/* Begin PBXResourcesBuildPhase section */
192 - 8C5E82B59DC87CA04ED56147 /* Resources */ = {
193 - isa = PBXResourcesBuildPhase;
194 - buildActionMask = 2147483647;
195 - files = (
196 - );
197 - runOnlyForDeploymentPostprocessing = 0;
198 - };
199 - B06C9835F24B5A268D7376F3 /* Resources */ = {
200 - isa = PBXResourcesBuildPhase;
201 - buildActionMask = 2147483647;
202 - files = (
203 - 623F26CA1E5FC3982AAB778C /* Assets.xcassets in Resources */,
204 - );
205 - runOnlyForDeploymentPostprocessing = 0;
206 - };
207 -/* End PBXResourcesBuildPhase section */
208 -
209 -/* Begin PBXSourcesBuildPhase section */
210 - 2E147C33CA6023EC566F9503 /* Sources */ = {
211 - isa = PBXSourcesBuildPhase;
212 - buildActionMask = 2147483647;
213 - files = (
214 - 5267368AE4FA4A1AF152F2BB /* ControlKitRunnerApp.swift in Sources */,
215 - );
216 - runOnlyForDeploymentPostprocessing = 0;
217 - };
218 - BE45964975925FCDB7E07A02 /* Sources */ = {
219 - isa = PBXSourcesBuildPhase;
220 - buildActionMask = 2147483647;
221 - files = (
222 - 6E7B19FB8377403D45E5B319 /* ControlKitRunnerUITests.swift in Sources */,
223 - 240C04374372369CF9288310 /* ControlKitRPCServer.swift in Sources */,
224 - );
225 - runOnlyForDeploymentPostprocessing = 0;
226 - };
227 -/* End PBXSourcesBuildPhase section */
228 -
229 -/* Begin PBXTargetDependency section */
230 - AD9C27DDC63B00A39E2F2F6B /* PBXTargetDependency */ = {
231 - isa = PBXTargetDependency;
232 - name = XCRSControlKitRunner;
233 - target = 65C69F9323FE4A33A9BD5CFD /* XCRSControlKitRunner */;
234 - targetProxy = A427DD4B39849849959312A5 /* PBXContainerItemProxy */;
235 - };
236 -/* End PBXTargetDependency section */
237 -
238 -/* Begin XCBuildConfiguration section */
239 - 00ABD475CB5E7B4186EF1F6F /* Debug */ = {
240 - isa = XCBuildConfiguration;
241 - buildSettings = {
242 - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
243 - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
244 - CLANG_ENABLE_OBJC_WEAK = NO;
245 - GENERATE_INFOPLIST_FILE = YES;
246 - INFOPLIST_KEY_CFBundleDisplayName = ControlKit;
247 - INFOPLIST_KEY_UIRequiresFullScreen = YES;
248 - INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
249 - IPHONEOS_DEPLOYMENT_TARGET = 16.0;
250 - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
251 - PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.runner";
252 - PRODUCT_NAME = ControlKit;
253 - SDKROOT = iphoneos;
254 - SWIFT_VERSION = 5.9;
255 - TARGETED_DEVICE_FAMILY = "1,2";
256 - };
257 - name = Debug;
258 - };
259 - 2980F2C3DA0326EBDFED9234 /* Release */ = {
260 - isa = XCBuildConfiguration;
261 - buildSettings = {
262 - ALWAYS_SEARCH_USER_PATHS = NO;
263 - CLANG_ANALYZER_NONNULL = YES;
264 - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
265 - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
266 - CLANG_CXX_LIBRARY = "libc++";
267 - CLANG_ENABLE_MODULES = YES;
268 - CLANG_ENABLE_OBJC_ARC = YES;
269 - CLANG_ENABLE_OBJC_WEAK = YES;
270 - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
271 - CLANG_WARN_BOOL_CONVERSION = YES;
272 - CLANG_WARN_COMMA = YES;
273 - CLANG_WARN_CONSTANT_CONVERSION = YES;
274 - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
275 - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
276 - CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
277 - CLANG_WARN_EMPTY_BODY = YES;
278 - CLANG_WARN_ENUM_CONVERSION = YES;
279 - CLANG_WARN_INFINITE_RECURSION = YES;
280 - CLANG_WARN_INT_CONVERSION = YES;
281 - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
282 - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
283 - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
284 - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
285 - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
286 - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
287 - CLANG_WARN_STRICT_PROTOTYPES = YES;
288 - CLANG_WARN_SUSPICIOUS_MOVE = YES;
289 - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
290 - CLANG_WARN_UNREACHABLE_CODE = YES;
291 - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
292 - COPY_PHASE_STRIP = NO;
293 - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
294 - ENABLE_NS_ASSERTIONS = NO;
295 - ENABLE_STRICT_OBJC_MSGSEND = YES;
296 - GCC_C_LANGUAGE_STANDARD = gnu11;
297 - GCC_NO_COMMON_BLOCKS = YES;
298 - GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
299 - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
300 - GCC_WARN_UNDECLARED_SELECTOR = YES;
301 - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
302 - GCC_WARN_UNUSED_FUNCTION = YES;
303 - GCC_WARN_UNUSED_VARIABLE = YES;
304 - MTL_ENABLE_DEBUG_INFO = NO;
305 - MTL_FAST_MATH = YES;
306 - PRODUCT_NAME = "$(TARGET_NAME)";
307 - SWIFT_COMPILATION_MODE = wholemodule;
308 - SWIFT_OPTIMIZATION_LEVEL = "-O";
309 - SWIFT_VERSION = 5.0;
310 - };
311 - name = Release;
312 - };
313 - 720942CCA660A8F8898D0376 /* Debug */ = {
314 - isa = XCBuildConfiguration;
315 - buildSettings = {
316 - CLANG_ENABLE_OBJC_WEAK = NO;
317 - GENERATE_INFOPLIST_FILE = YES;
318 - IPHONEOS_DEPLOYMENT_TARGET = 16.0;
319 - PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.runnerUITests";
320 - PRODUCT_NAME = XCRSControlKitRunnerUITests;
321 - SDKROOT = iphoneos;
322 - SWIFT_VERSION = 5.9;
323 - TARGETED_DEVICE_FAMILY = "1,2";
324 - TEST_TARGET_NAME = XCRSControlKitRunner;
325 - };
326 - name = Debug;
327 - };
328 - A3145EA68D6C9D1145657B84 /* Release */ = {
329 - isa = XCBuildConfiguration;
330 - buildSettings = {
331 - CLANG_ENABLE_OBJC_WEAK = NO;
332 - GENERATE_INFOPLIST_FILE = YES;
333 - IPHONEOS_DEPLOYMENT_TARGET = 16.0;
334 - PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.runnerUITests";
335 - PRODUCT_NAME = XCRSControlKitRunnerUITests;
336 - SDKROOT = iphoneos;
337 - SWIFT_VERSION = 5.9;
338 - TARGETED_DEVICE_FAMILY = "1,2";
339 - TEST_TARGET_NAME = XCRSControlKitRunner;
340 - VALIDATE_PRODUCT = YES;
341 - };
342 - name = Release;
343 - };
344 - CCA6074EF7667C1F23D52908 /* Debug */ = {
345 - isa = XCBuildConfiguration;
346 - buildSettings = {
347 - ALWAYS_SEARCH_USER_PATHS = NO;
348 - CLANG_ANALYZER_NONNULL = YES;
349 - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
350 - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
351 - CLANG_CXX_LIBRARY = "libc++";
352 - CLANG_ENABLE_MODULES = YES;
353 - CLANG_ENABLE_OBJC_ARC = YES;
354 - CLANG_ENABLE_OBJC_WEAK = YES;
355 - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
356 - CLANG_WARN_BOOL_CONVERSION = YES;
357 - CLANG_WARN_COMMA = YES;
358 - CLANG_WARN_CONSTANT_CONVERSION = YES;
359 - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
360 - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
361 - CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
362 - CLANG_WARN_EMPTY_BODY = YES;
363 - CLANG_WARN_ENUM_CONVERSION = YES;
364 - CLANG_WARN_INFINITE_RECURSION = YES;
365 - CLANG_WARN_INT_CONVERSION = YES;
366 - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
367 - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
368 - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
369 - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
370 - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
371 - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
372 - CLANG_WARN_STRICT_PROTOTYPES = YES;
373 - CLANG_WARN_SUSPICIOUS_MOVE = YES;
374 - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
375 - CLANG_WARN_UNREACHABLE_CODE = YES;
376 - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
377 - COPY_PHASE_STRIP = NO;
378 - DEBUG_INFORMATION_FORMAT = dwarf;
379 - ENABLE_STRICT_OBJC_MSGSEND = YES;
380 - ENABLE_TESTABILITY = YES;
381 - GCC_C_LANGUAGE_STANDARD = gnu11;
382 - GCC_DYNAMIC_NO_PIC = NO;
383 - GCC_NO_COMMON_BLOCKS = YES;
384 - GCC_OPTIMIZATION_LEVEL = 0;
385 - GCC_PREPROCESSOR_DEFINITIONS = (
386 - "DEBUG=1",
387 - "$(inherited)",
388 - );
389 - GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
390 - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
391 - GCC_WARN_UNDECLARED_SELECTOR = YES;
392 - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
393 - GCC_WARN_UNUSED_FUNCTION = YES;
394 - GCC_WARN_UNUSED_VARIABLE = YES;
395 - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
396 - MTL_FAST_MATH = YES;
397 - ONLY_ACTIVE_ARCH = YES;
398 - PRODUCT_NAME = "$(TARGET_NAME)";
399 - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
400 - SWIFT_OPTIMIZATION_LEVEL = "-Onone";
401 - SWIFT_VERSION = 5.0;
402 - };
403 - name = Debug;
404 - };
405 - FD6AFD55D263981B035C1B67 /* Release */ = {
406 - isa = XCBuildConfiguration;
407 - buildSettings = {
408 - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
409 - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
410 - CLANG_ENABLE_OBJC_WEAK = NO;
411 - GENERATE_INFOPLIST_FILE = YES;
412 - INFOPLIST_KEY_CFBundleDisplayName = ControlKit;
413 - INFOPLIST_KEY_UIRequiresFullScreen = YES;
414 - INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
415 - IPHONEOS_DEPLOYMENT_TARGET = 16.0;
416 - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
417 - PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.runner";
418 - PRODUCT_NAME = ControlKit;
419 - SDKROOT = iphoneos;
420 - SWIFT_VERSION = 5.9;
421 - TARGETED_DEVICE_FAMILY = "1,2";
422 - VALIDATE_PRODUCT = YES;
423 - };
424 - name = Release;
425 - };
426 -/* End XCBuildConfiguration section */
427 -
428 -/* Begin XCConfigurationList section */
429 - 09DCF821A316EB9B782B3281 /* Build configuration list for PBXNativeTarget "XCRSControlKitRunnerUITests" */ = {
430 - isa = XCConfigurationList;
431 - buildConfigurations = (
432 - A3145EA68D6C9D1145657B84 /* Release */,
433 - 720942CCA660A8F8898D0376 /* Debug */,
434 - );
435 - defaultConfigurationIsVisible = 0;
436 - defaultConfigurationName = Release;
437 - };
438 - 1E9093BA177C6E09C7249452 /* Build configuration list for PBXNativeTarget "XCRSControlKitRunner" */ = {
439 - isa = XCConfigurationList;
440 - buildConfigurations = (
441 - FD6AFD55D263981B035C1B67 /* Release */,
442 - 00ABD475CB5E7B4186EF1F6F /* Debug */,
443 - );
444 - defaultConfigurationIsVisible = 0;
445 - defaultConfigurationName = Release;
446 - };
447 - 8E50C3CB1D836D41CF571655 /* Build configuration list for PBXProject "XCRSControlKitRunner" */ = {
448 - isa = XCConfigurationList;
449 - buildConfigurations = (
450 - CCA6074EF7667C1F23D52908 /* Debug */,
451 - 2980F2C3DA0326EBDFED9234 /* Release */,
452 - );
453 - defaultConfigurationIsVisible = 0;
454 - defaultConfigurationName = Release;
455 - };
456 -/* End XCConfigurationList section */
457 -
458 -/* Begin XCLocalSwiftPackageReference section */
459 - 3DBF8CF0F31AA03CAC623B80 /* XCLocalSwiftPackageReference ".." */ = {
460 - isa = XCLocalSwiftPackageReference;
461 - relativePath = ../..;
462 - };
463 -/* End XCLocalSwiftPackageReference section */
464 -
465 -/* Begin XCRemoteSwiftPackageReference section */
466 - 5B254FC74CBF06A66B4DD162 /* XCRemoteSwiftPackageReference "swift-nio" */ = {
467 - isa = XCRemoteSwiftPackageReference;
468 - repositoryURL = "https://github.com/apple/swift-nio.git";
469 - requirement = {
470 - kind = upToNextMajorVersion;
471 - minimumVersion = 2.0.0;
472 - };
473 - };
474 -/* End XCRemoteSwiftPackageReference section */
475 -
476 -/* Begin XCSwiftPackageProductDependency section */
477 - 3C011EAFF81B128EFF169657 /* NIOCore */ = {
478 - isa = XCSwiftPackageProductDependency;
479 - package = 5B254FC74CBF06A66B4DD162 /* XCRemoteSwiftPackageReference "swift-nio" */;
480 - productName = NIOCore;
481 - };
482 - 3C599300D59533D3F1EAAB06 /* NIOHTTP1 */ = {
483 - isa = XCSwiftPackageProductDependency;
484 - package = 5B254FC74CBF06A66B4DD162 /* XCRemoteSwiftPackageReference "swift-nio" */;
485 - productName = NIOHTTP1;
486 - };
487 - 519A8A0C72E51DA6D0174E87 /* XCRSControlKit */ = {
488 - isa = XCSwiftPackageProductDependency;
489 - package = 5B254FC74CBF06A66B4DD162 /* XCRemoteSwiftPackageReference "swift-nio" */;
490 - productName = XCRSControlKit;
491 - };
492 - 752918E24D37ADB5D048781D /* NIOPosix */ = {
493 - isa = XCSwiftPackageProductDependency;
494 - package = 5B254FC74CBF06A66B4DD162 /* XCRemoteSwiftPackageReference "swift-nio" */;
495 - productName = NIOPosix;
496 - };
497 -/* End XCSwiftPackageProductDependency section */
498 - };
499 - rootObject = 5A4615FAD9C725BDA6BB9D0D /* Project object */;
500 -}
Runners/iOS/XCRSControlKitRunner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted
-42
@@ -1,42 +0,0 @@
1 -{
2 - "originHash" : "dc64d5a9a584c1afdd2823a6335adce6e83ebd68e5e5f250156866e5bdc7e973",
3 - "pins" : [
4 - {
5 - "identity" : "swift-atomics",
6 - "kind" : "remoteSourceControl",
7 - "location" : "https://github.com/apple/swift-atomics.git",
8 - "state" : {
9 - "revision" : "0442cb5a3f98ab802acb777929fdb446bda11a34",
10 - "version" : "1.3.1"
11 - }
12 - },
13 - {
14 - "identity" : "swift-collections",
15 - "kind" : "remoteSourceControl",
16 - "location" : "https://github.com/apple/swift-collections.git",
17 - "state" : {
18 - "revision" : "a0cb0954ecb21e4e31b0070e6ed5674e8556685a",
19 - "version" : "1.6.0"
20 - }
21 - },
22 - {
23 - "identity" : "swift-nio",
24 - "kind" : "remoteSourceControl",
25 - "location" : "https://github.com/apple/swift-nio.git",
26 - "state" : {
27 - "revision" : "0b18836bd8b0162e7e17a995a3fbee20ed8f3b2b",
28 - "version" : "2.101.3"
29 - }
30 - },
31 - {
32 - "identity" : "swift-system",
33 - "kind" : "remoteSourceControl",
34 - "location" : "https://github.com/apple/swift-system.git",
35 - "state" : {
36 - "revision" : "50688cacbd41d547e9eb9f7a213542340b7c442b",
37 - "version" : "1.7.5"
38 - }
39 - }
40 - ],
41 - "version" : 3
42 -}
Runners/project.yml new
+130
@@ -0,0 +1,130 @@
1 +name: XCRSControlKitRunner
2 +options:
3 + bundleIdPrefix: com.smbcloud.xcrs-controlkit
4 + createIntermediateGroups: true
5 + deploymentTarget:
6 + iOS: "16.0"
7 + tvOS: "16.0"
8 + visionOS: "1.0"
9 +
10 +settings:
11 + base:
12 + SWIFT_VERSION: "5.9"
13 + GENERATE_INFOPLIST_FILE: YES
14 + INFOPLIST_KEY_CFBundleDisplayName: ControlKit
15 + LD_RUNPATH_SEARCH_PATHS: "$(inherited) @executable_path/Frameworks"
16 +
17 +packages:
18 + XCRSControlKit:
19 + path: ..
20 + swift-nio:
21 + url: https://github.com/apple/swift-nio.git
22 + from: 2.0.0
23 +
24 +targetTemplates:
25 + Runner:
26 + type: application
27 + sources:
28 + - path: ${platformDir}
29 + settings:
30 + base:
31 + PRODUCT_NAME: ControlKit
32 + PRODUCT_BUNDLE_IDENTIFIER: com.smbcloud.xcrs-controlkit.${platformId}.runner
33 + UITests:
34 + type: bundle.ui-testing
35 + sources:
36 + - path: Shared
37 + dependencies:
38 + - target: ControlKit-${platformName}
39 + - package: XCRSControlKit
40 + product: XCRSControlKit
41 + - package: swift-nio
42 + product: NIOCore
43 + - package: swift-nio
44 + product: NIOHTTP1
45 + - package: swift-nio
46 + product: NIOPosix
47 + settings:
48 + base:
49 + PRODUCT_BUNDLE_IDENTIFIER: com.smbcloud.xcrs-controlkit.${platformId}.runnerUITests
50 + TEST_TARGET_NAME: ControlKit-${platformName}
51 +
52 +targets:
53 + ControlKit-iOS:
54 + templates: [Runner]
55 + platform: iOS
56 + templateAttributes:
57 + platformDir: iOS
58 + platformId: ios
59 + settings:
60 + base:
61 + TARGETED_DEVICE_FAMILY: "1,2"
62 + ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
63 + INFOPLIST_KEY_UIRequiresFullScreen: YES
64 + INFOPLIST_KEY_UISupportedInterfaceOrientations: UIInterfaceOrientationPortrait
65 + ControlKit-iOS-UITests:
66 + templates: [UITests]
67 + platform: iOS
68 + templateAttributes:
69 + platformName: iOS
70 + platformId: ios
71 +
72 + ControlKit-tvOS:
73 + templates: [Runner]
74 + platform: tvOS
75 + templateAttributes:
76 + platformDir: tvOS
77 + platformId: tvos
78 + settings:
79 + base:
80 + TARGETED_DEVICE_FAMILY: "3"
81 + ASSETCATALOG_COMPILER_APPICON_NAME: "App Icon & Top Shelf Image"
82 + ControlKit-tvOS-UITests:
83 + templates: [UITests]
84 + platform: tvOS
85 + templateAttributes:
86 + platformName: tvOS
87 + platformId: tvos
88 +
89 + ControlKit-visionOS:
90 + templates: [Runner]
91 + platform: visionOS
92 + templateAttributes:
93 + platformDir: visionOS
94 + platformId: visionos
95 + settings:
96 + base:
97 + TARGETED_DEVICE_FAMILY: "7"
98 + ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
99 + ControlKit-visionOS-UITests:
100 + templates: [UITests]
101 + platform: visionOS
102 + templateAttributes:
103 + platformName: visionOS
104 + platformId: visionos
105 +
106 +schemes:
107 + ControlKit-iOS:
108 + build:
109 + targets:
110 + ControlKit-iOS: all
111 + ControlKit-iOS-UITests: [test]
112 + test:
113 + targets:
114 + - ControlKit-iOS-UITests
115 + ControlKit-tvOS:
116 + build:
117 + targets:
118 + ControlKit-tvOS: all
119 + ControlKit-tvOS-UITests: [test]
120 + test:
121 + targets:
122 + - ControlKit-tvOS-UITests
123 + ControlKit-visionOS:
124 + build:
125 + targets:
126 + ControlKit-visionOS: all
127 + ControlKit-visionOS-UITests: [test]
128 + test:
129 + targets:
130 + - ControlKit-visionOS-UITests
Runners/tvOS/ControlKitRunnerApp.swift
+1 -1
@@ -72,7 +72,7 @@ private struct ControlKitShowcaseView: View {
72 private var informationCard: some View {
73 VStack(alignment: .leading, spacing: 16) {
74 infoRow(title: "Project", value: "XCRSControlKit")
75 - infoRow(title: "Creator", value: "smbCloudXYZ")
75 + infoRow(title: "Creator", value: "smbCloud")
76 infoRow(title: "Platform", value: "tvOS")
77 infoRow(title: "Purpose", value: "Native UI automation runner")
78 }
Runners/tvOS/ControlKitRunnerUITests.swift deleted
-10
@@ -1,10 +0,0 @@
1 -import XCTest
2 -
3 -final class ControlKitRunnerUITests: XCTestCase {
4 - @MainActor
5 - func testRunAutomation() async throws {
6 - continueAfterFailure = true
7 - let server = ControlKitRPCServer()
8 - try await server.start()
9 - }
10 -}
Runners/tvOS/README.md
+7 -7
@@ -1,9 +1,9 @@
1 -# XCRS ControlKit tvOS runner
1 +# ControlKit tvOS host app
2
3 -This is the native tvOS runner owned by XCRS ControlKit. It is an Xcode UI
4 -testing project, not a SwiftPM target, and imports the public
5 -`XCRSControlKit` package for capability and request contracts.
3 +This folder holds the tvOS host application (`ControlKitRunnerApp.swift` and
4 +`Assets.xcassets`) for the `ControlKit-tvOS` target in the shared
5 +`XCRSControlKitRunner.xcodeproj`.
6
7 -The runner exposes a localhost JSON-RPC server to the Rust `xcrs` client using
8 -SwiftNIO's HTTP/1 server pipeline. tvOS remote buttons are handled through
9 -`XCUIRemote`, with no private XCTest headers.
7 +tvOS is remote-driven: `device.io.button` maps to `XCUIRemote` presses and
8 +touch/`home` are intentionally unsupported. The JSON-RPC transport and server
9 +live in `../Shared` and are compiled into the `ControlKit-tvOS-UITests` target.
Runners/tvOS/XCRSControlKitRunner.xcodeproj/project.pbxproj deleted
-497
@@ -1,497 +0,0 @@
1 -// !$*UTF8*$!
2 -{
3 - archiveVersion = 1;
4 - classes = {
5 - };
6 - objectVersion = 60;
7 - objects = {
8 -
9 -/* Begin PBXBuildFile section */
10 - 035513224895A0CE4FB0D064 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 30183ACB20CEB829E0490ED5 /* Assets.xcassets */; };
11 - 0D569CAD6B368B9B5C36E8BE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2EC08D851E6330976D22EA82 /* Foundation.framework */; };
12 - 3580744EA3A51BD112ABA6D9 /* ControlKitRunnerApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC8BA1384D1001CFCB138C1 /* ControlKitRunnerApp.swift */; };
13 - 42240429301B7F4D00D1B8E9 /* XCRSControlKit in Frameworks */ = {isa = PBXBuildFile; productRef = 8E9294EFB8D77093FD3218B5 /* XCRSControlKit */; };
14 - 4224042A301B7F4D00D1B8E9 /* NIOCore in Frameworks */ = {isa = PBXBuildFile; productRef = B0B9B1FF3D723F8C6B727F7D /* NIOCore */; };
15 - 4224042B301B7F4D00D1B8E9 /* NIOHTTP1 in Frameworks */ = {isa = PBXBuildFile; productRef = B7FD539749497B63541C3CA6 /* NIOHTTP1 */; };
16 - 4224042C301B7F4D00D1B8E9 /* NIOPosix in Frameworks */ = {isa = PBXBuildFile; productRef = B81BFC255C5D3B81571A1A59 /* NIOPosix */; };
17 - 5AD6201B303072328B2B1CF3 /* ControlKitRunnerUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 675B8D131573D551CBDD5C49 /* ControlKitRunnerUITests.swift */; };
18 - 5F061CEA82FE3FDD1B4FB7CD /* ControlKitRPCServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87228C0BF79EA823E25797A5 /* ControlKitRPCServer.swift */; };
19 - E550F44417BCF134B5F636A8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2EC08D851E6330976D22EA82 /* Foundation.framework */; };
20 -/* End PBXBuildFile section */
21 -
22 -/* Begin PBXContainerItemProxy section */
23 - 4072D01C68F474F1230D8E2E /* PBXContainerItemProxy */ = {
24 - isa = PBXContainerItemProxy;
25 - containerPortal = 0B09FAC4377C92AD60C7E93C /* Project object */;
26 - proxyType = 1;
27 - remoteGlobalIDString = 297E6EBCF6A5F1F8FE403639;
28 - remoteInfo = XCRSControlKitRunner;
29 - };
30 -/* End PBXContainerItemProxy section */
31 -
32 -/* Begin PBXFileReference section */
33 - 2EC08D851E6330976D22EA82 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
34 - 30183ACB20CEB829E0490ED5 /* Assets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
35 - 675B8D131573D551CBDD5C49 /* ControlKitRunnerUITests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControlKitRunnerUITests.swift; sourceTree = "<group>"; };
36 - 87228C0BF79EA823E25797A5 /* ControlKitRPCServer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControlKitRPCServer.swift; path = ../iOS/ControlKitRPCServer.swift; sourceTree = "<group>"; };
37 - A310FFE002FC01D2DF5242A0 /* XCRSControlKitRunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XCRSControlKitRunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
38 - C3B8D9F0D2E11E792710F2B9 /* ControlKit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ControlKit.app; sourceTree = BUILT_PRODUCTS_DIR; };
39 - CEC8BA1384D1001CFCB138C1 /* ControlKitRunnerApp.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControlKitRunnerApp.swift; sourceTree = "<group>"; };
40 -/* End PBXFileReference section */
41 -
42 -/* Begin PBXFrameworksBuildPhase section */
43 - 124443B6555ADFF30C5C0A78 /* Frameworks */ = {
44 - isa = PBXFrameworksBuildPhase;
45 - buildActionMask = 2147483647;
46 - files = (
47 - 4224042C301B7F4D00D1B8E9 /* NIOPosix in Frameworks */,
48 - 4224042B301B7F4D00D1B8E9 /* NIOHTTP1 in Frameworks */,
49 - 4224042A301B7F4D00D1B8E9 /* NIOCore in Frameworks */,
50 - 42240429301B7F4D00D1B8E9 /* XCRSControlKit in Frameworks */,
51 - 0D569CAD6B368B9B5C36E8BE /* Foundation.framework in Frameworks */,
52 - );
53 - runOnlyForDeploymentPostprocessing = 0;
54 - };
55 - 4D5B6A5287328D2C1161CAD0 /* Frameworks */ = {
56 - isa = PBXFrameworksBuildPhase;
57 - buildActionMask = 2147483647;
58 - files = (
59 - E550F44417BCF134B5F636A8 /* Foundation.framework in Frameworks */,
60 - );
61 - runOnlyForDeploymentPostprocessing = 0;
62 - };
63 -/* End PBXFrameworksBuildPhase section */
64 -
65 -/* Begin PBXGroup section */
66 - 69B76CD159FC79D016CC57A1 /* XCRSControlKitRunnerUITests */ = {
67 - isa = PBXGroup;
68 - children = (
69 - 675B8D131573D551CBDD5C49 /* ControlKitRunnerUITests.swift */,
70 - 87228C0BF79EA823E25797A5 /* ControlKitRPCServer.swift */,
71 - );
72 - name = XCRSControlKitRunnerUITests;
73 - sourceTree = "<group>";
74 - };
75 - 6ACA23F5AEF94EEAA4DD0680 /* Products */ = {
76 - isa = PBXGroup;
77 - children = (
78 - C3B8D9F0D2E11E792710F2B9 /* ControlKit.app */,
79 - A310FFE002FC01D2DF5242A0 /* XCRSControlKitRunnerUITests.xctest */,
80 - );
81 - name = Products;
82 - sourceTree = "<group>";
83 - };
84 - 762B4572EF9B0155C2D74F08 /* Frameworks */ = {
85 - isa = PBXGroup;
86 - children = (
87 - DD999D2C8FCBE1D3F9F52834 /* tvOS */,
88 - );
89 - name = Frameworks;
90 - sourceTree = "<group>";
91 - };
92 - 79823D8EFB85505638E6F389 /* XCRSControlKitRunner */ = {
93 - isa = PBXGroup;
94 - children = (
95 - CEC8BA1384D1001CFCB138C1 /* ControlKitRunnerApp.swift */,
96 - 30183ACB20CEB829E0490ED5 /* Assets.xcassets */,
97 - );
98 - name = XCRSControlKitRunner;
99 - sourceTree = "<group>";
100 - };
101 - CBAFCCCB076AD09654393A3B = {
102 - isa = PBXGroup;
103 - children = (
104 - 762B4572EF9B0155C2D74F08 /* Frameworks */,
105 - 79823D8EFB85505638E6F389 /* XCRSControlKitRunner */,
106 - 69B76CD159FC79D016CC57A1 /* XCRSControlKitRunnerUITests */,
107 - );
108 - sourceTree = "<group>";
109 - };
110 - DD999D2C8FCBE1D3F9F52834 /* tvOS */ = {
111 - isa = PBXGroup;
112 - children = (
113 - 2EC08D851E6330976D22EA82 /* Foundation.framework */,
114 - );
115 - name = tvOS;
116 - sourceTree = "<group>";
117 - };
118 -/* End PBXGroup section */
119 -
120 -/* Begin PBXNativeTarget section */
121 - 297E6EBCF6A5F1F8FE403639 /* XCRSControlKitRunner */ = {
122 - isa = PBXNativeTarget;
123 - buildConfigurationList = 89DAAF59F302E76CB2702737 /* Build configuration list for PBXNativeTarget "XCRSControlKitRunner" */;
124 - buildPhases = (
125 - C5901C5F5EE82CE5F1CDFAAF /* Sources */,
126 - 4D5B6A5287328D2C1161CAD0 /* Frameworks */,
127 - 33EE014E63B28349A2846990 /* Resources */,
128 - );
129 - buildRules = (
130 - );
131 - dependencies = (
132 - );
133 - name = XCRSControlKitRunner;
134 - productName = XCRSControlKitRunner;
135 - productReference = C3B8D9F0D2E11E792710F2B9 /* ControlKit.app */;
136 - productType = "com.apple.product-type.application";
137 - };
138 - 40F02CDFEAF28D1FA9935842 /* XCRSControlKitRunnerUITests */ = {
139 - isa = PBXNativeTarget;
140 - buildConfigurationList = B71370B2451E9AC83FC63C82 /* Build configuration list for PBXNativeTarget "XCRSControlKitRunnerUITests" */;
141 - buildPhases = (
142 - D43ABD22F352B6001DBD40E8 /* Sources */,
143 - 124443B6555ADFF30C5C0A78 /* Frameworks */,
144 - BB611355B972490541A99EA9 /* Resources */,
145 - );
146 - buildRules = (
147 - );
148 - dependencies = (
149 - ED17078DE028C0301457A09B /* PBXTargetDependency */,
150 - );
151 - name = XCRSControlKitRunnerUITests;
152 - packageProductDependencies = (
153 - 8E9294EFB8D77093FD3218B5 /* XCRSControlKit */,
154 - B0B9B1FF3D723F8C6B727F7D /* NIOCore */,
155 - B7FD539749497B63541C3CA6 /* NIOHTTP1 */,
156 - B81BFC255C5D3B81571A1A59 /* NIOPosix */,
157 - );
158 - productName = XCRSControlKitRunnerUITests;
159 - productReference = A310FFE002FC01D2DF5242A0 /* XCRSControlKitRunnerUITests.xctest */;
160 - productType = "com.apple.product-type.bundle.ui-testing";
161 - };
162 -/* End PBXNativeTarget section */
163 -
164 -/* Begin PBXProject section */
165 - 0B09FAC4377C92AD60C7E93C /* Project object */ = {
166 - isa = PBXProject;
167 - attributes = {
168 - LastSwiftUpdateCheck = 2630;
169 - LastUpgradeCheck = 2630;
170 - };
171 - buildConfigurationList = D057C3520D2F6DF298BDCE07 /* Build configuration list for PBXProject "XCRSControlKitRunner" */;
172 - compatibilityVersion = "Xcode 3.2";
173 - developmentRegion = en;
174 - hasScannedForEncodings = 0;
175 - knownRegions = (
176 - en,
177 - Base,
178 - );
179 - mainGroup = CBAFCCCB076AD09654393A3B;
180 - packageReferences = (
181 - 62D4A3BB7E58C0EEDFBD3798 /* XCLocalSwiftPackageReference "../.." */,
182 - 33CCE93A21C53FF1112828ED /* XCRemoteSwiftPackageReference "swift-nio" */,
183 - );
184 - productRefGroup = 6ACA23F5AEF94EEAA4DD0680 /* Products */;
185 - projectDirPath = "";
186 - projectRoot = "";
187 - targets = (
188 - 297E6EBCF6A5F1F8FE403639 /* XCRSControlKitRunner */,
189 - 40F02CDFEAF28D1FA9935842 /* XCRSControlKitRunnerUITests */,
190 - );
191 - };
192 -/* End PBXProject section */
193 -
194 -/* Begin PBXResourcesBuildPhase section */
195 - 33EE014E63B28349A2846990 /* Resources */ = {
196 - isa = PBXResourcesBuildPhase;
197 - buildActionMask = 2147483647;
198 - files = (
199 - 035513224895A0CE4FB0D064 /* Assets.xcassets in Resources */,
200 - );
201 - runOnlyForDeploymentPostprocessing = 0;
202 - };
203 - BB611355B972490541A99EA9 /* Resources */ = {
204 - isa = PBXResourcesBuildPhase;
205 - buildActionMask = 2147483647;
206 - files = (
207 - );
208 - runOnlyForDeploymentPostprocessing = 0;
209 - };
210 -/* End PBXResourcesBuildPhase section */
211 -
212 -/* Begin PBXSourcesBuildPhase section */
213 - C5901C5F5EE82CE5F1CDFAAF /* Sources */ = {
214 - isa = PBXSourcesBuildPhase;
215 - buildActionMask = 2147483647;
216 - files = (
217 - 3580744EA3A51BD112ABA6D9 /* ControlKitRunnerApp.swift in Sources */,
218 - );
219 - runOnlyForDeploymentPostprocessing = 0;
220 - };
221 - D43ABD22F352B6001DBD40E8 /* Sources */ = {
222 - isa = PBXSourcesBuildPhase;
223 - buildActionMask = 2147483647;
224 - files = (
225 - 5AD6201B303072328B2B1CF3 /* ControlKitRunnerUITests.swift in Sources */,
226 - 5F061CEA82FE3FDD1B4FB7CD /* ControlKitRPCServer.swift in Sources */,
227 - );
228 - runOnlyForDeploymentPostprocessing = 0;
229 - };
230 -/* End PBXSourcesBuildPhase section */
231 -
232 -/* Begin PBXTargetDependency section */
233 - ED17078DE028C0301457A09B /* PBXTargetDependency */ = {
234 - isa = PBXTargetDependency;
235 - name = XCRSControlKitRunner;
236 - target = 297E6EBCF6A5F1F8FE403639 /* XCRSControlKitRunner */;
237 - targetProxy = 4072D01C68F474F1230D8E2E /* PBXContainerItemProxy */;
238 - };
239 -/* End PBXTargetDependency section */
240 -
241 -/* Begin XCBuildConfiguration section */
242 - 1E279C47A0AE151A4005B2B0 /* Debug */ = {
243 - isa = XCBuildConfiguration;
244 - buildSettings = {
245 - GENERATE_INFOPLIST_FILE = YES;
246 - PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.tvos.runnerUITests";
247 - PRODUCT_NAME = XCRSControlKitRunnerUITests;
248 - SDKROOT = appletvos;
249 - SWIFT_VERSION = 5.9;
250 - TVOS_DEPLOYMENT_TARGET = 16.0;
251 - };
252 - name = Debug;
253 - };
254 - 20B98D730FB57BAC0F7745B2 /* Release */ = {
255 - isa = XCBuildConfiguration;
256 - buildSettings = {
257 - ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
258 - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
259 - GENERATE_INFOPLIST_FILE = YES;
260 - INFOPLIST_KEY_CFBundleDisplayName = ControlKit;
261 - LD_RUNPATH_SEARCH_PATHS = (
262 - "$(inherited)",
263 - "@executable_path/Frameworks",
264 - );
265 - PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.tvos.runner";
266 - PRODUCT_NAME = ControlKit;
267 - SDKROOT = appletvos;
268 - SWIFT_VERSION = 5.9;
269 - TARGETED_DEVICE_FAMILY = 3;
270 - TVOS_DEPLOYMENT_TARGET = 16.0;
271 - VALIDATE_PRODUCT = YES;
272 - };
273 - name = Release;
274 - };
275 - 2D3CFBA5256921E446A203DF /* Release */ = {
276 - isa = XCBuildConfiguration;
277 - buildSettings = {
278 - ALWAYS_SEARCH_USER_PATHS = NO;
279 - CLANG_ANALYZER_NONNULL = YES;
280 - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
281 - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
282 - CLANG_CXX_LIBRARY = "libc++";
283 - CLANG_ENABLE_MODULES = YES;
284 - CLANG_ENABLE_OBJC_ARC = YES;
285 - CLANG_ENABLE_OBJC_WEAK = YES;
286 - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
287 - CLANG_WARN_BOOL_CONVERSION = YES;
288 - CLANG_WARN_COMMA = YES;
289 - CLANG_WARN_CONSTANT_CONVERSION = YES;
290 - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
291 - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
292 - CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
293 - CLANG_WARN_EMPTY_BODY = YES;
294 - CLANG_WARN_ENUM_CONVERSION = YES;
295 - CLANG_WARN_INFINITE_RECURSION = YES;
296 - CLANG_WARN_INT_CONVERSION = YES;
297 - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
298 - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
299 - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
300 - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
301 - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
302 - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
303 - CLANG_WARN_STRICT_PROTOTYPES = YES;
304 - CLANG_WARN_SUSPICIOUS_MOVE = YES;
305 - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
306 - CLANG_WARN_UNREACHABLE_CODE = YES;
307 - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
308 - COPY_PHASE_STRIP = NO;
309 - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
310 - ENABLE_NS_ASSERTIONS = NO;
311 - ENABLE_STRICT_OBJC_MSGSEND = YES;
312 - GCC_C_LANGUAGE_STANDARD = gnu11;
313 - GCC_NO_COMMON_BLOCKS = YES;
314 - GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
315 - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
316 - GCC_WARN_UNDECLARED_SELECTOR = YES;
317 - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
318 - GCC_WARN_UNUSED_FUNCTION = YES;
319 - GCC_WARN_UNUSED_VARIABLE = YES;
320 - MTL_ENABLE_DEBUG_INFO = NO;
321 - MTL_FAST_MATH = YES;
322 - PRODUCT_NAME = "$(TARGET_NAME)";
323 - SWIFT_COMPILATION_MODE = wholemodule;
324 - SWIFT_OPTIMIZATION_LEVEL = "-O";
325 - SWIFT_VERSION = 5.0;
326 - };
327 - name = Release;
328 - };
329 - B86BCF1CBC84DDBB0482F50E /* Release */ = {
330 - isa = XCBuildConfiguration;
331 - buildSettings = {
332 - GENERATE_INFOPLIST_FILE = YES;
333 - PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.tvos.runnerUITests";
334 - PRODUCT_NAME = XCRSControlKitRunnerUITests;
335 - SDKROOT = appletvos;
336 - SWIFT_VERSION = 5.9;
337 - TVOS_DEPLOYMENT_TARGET = 16.0;
338 - VALIDATE_PRODUCT = YES;
339 - };
340 - name = Release;
341 - };
342 - EDCF57E98B03BA7A29CF004B /* Debug */ = {
343 - isa = XCBuildConfiguration;
344 - buildSettings = {
345 - ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
346 - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
347 - GENERATE_INFOPLIST_FILE = YES;
348 - INFOPLIST_KEY_CFBundleDisplayName = ControlKit;
349 - LD_RUNPATH_SEARCH_PATHS = (
350 - "$(inherited)",
351 - "@executable_path/Frameworks",
352 - );
353 - PRODUCT_BUNDLE_IDENTIFIER = "com.smbcloud.xcrs-controlkit.tvos.runner";
354 - PRODUCT_NAME = ControlKit;
355 - SDKROOT = appletvos;
356 - SWIFT_VERSION = 5.9;
357 - TARGETED_DEVICE_FAMILY = 3;
358 - TVOS_DEPLOYMENT_TARGET = 16.0;
359 - };
360 - name = Debug;
361 - };
362 - EE217233EFC84E56C7BF8952 /* Debug */ = {
363 - isa = XCBuildConfiguration;
364 - buildSettings = {
365 - ALWAYS_SEARCH_USER_PATHS = NO;
366 - CLANG_ANALYZER_NONNULL = YES;
367 - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
368 - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
369 - CLANG_CXX_LIBRARY = "libc++";
370 - CLANG_ENABLE_MODULES = YES;
371 - CLANG_ENABLE_OBJC_ARC = YES;
372 - CLANG_ENABLE_OBJC_WEAK = YES;
373 - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
374 - CLANG_WARN_BOOL_CONVERSION = YES;
375 - CLANG_WARN_COMMA = YES;
376 - CLANG_WARN_CONSTANT_CONVERSION = YES;
377 - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
378 - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
379 - CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
380 - CLANG_WARN_EMPTY_BODY = YES;
381 - CLANG_WARN_ENUM_CONVERSION = YES;
382 - CLANG_WARN_INFINITE_RECURSION = YES;
383 - CLANG_WARN_INT_CONVERSION = YES;
384 - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
385 - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
386 - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
387 - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
388 - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
389 - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
390 - CLANG_WARN_STRICT_PROTOTYPES = YES;
391 - CLANG_WARN_SUSPICIOUS_MOVE = YES;
392 - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
393 - CLANG_WARN_UNREACHABLE_CODE = YES;
394 - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
395 - COPY_PHASE_STRIP = NO;
396 - DEBUG_INFORMATION_FORMAT = dwarf;
397 - ENABLE_STRICT_OBJC_MSGSEND = YES;
398 - ENABLE_TESTABILITY = YES;
399 - GCC_C_LANGUAGE_STANDARD = gnu11;
400 - GCC_DYNAMIC_NO_PIC = NO;
401 - GCC_NO_COMMON_BLOCKS = YES;
402 - GCC_OPTIMIZATION_LEVEL = 0;
403 - GCC_PREPROCESSOR_DEFINITIONS = (
404 - "DEBUG=1",
405 - "$(inherited)",
406 - );
407 - GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
408 - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
409 - GCC_WARN_UNDECLARED_SELECTOR = YES;
410 - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
411 - GCC_WARN_UNUSED_FUNCTION = YES;
412 - GCC_WARN_UNUSED_VARIABLE = YES;
413 - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
414 - MTL_FAST_MATH = YES;
415 - ONLY_ACTIVE_ARCH = YES;
416 - PRODUCT_NAME = "$(TARGET_NAME)";
417 - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
418 - SWIFT_OPTIMIZATION_LEVEL = "-Onone";
419 - SWIFT_VERSION = 5.0;
420 - };
421 - name = Debug;
422 - };
423 -/* End XCBuildConfiguration section */
424 -
425 -/* Begin XCConfigurationList section */
426 - 89DAAF59F302E76CB2702737 /* Build configuration list for PBXNativeTarget "XCRSControlKitRunner" */ = {
427 - isa = XCConfigurationList;
428 - buildConfigurations = (
429 - 20B98D730FB57BAC0F7745B2 /* Release */,
430 - EDCF57E98B03BA7A29CF004B /* Debug */,
431 - );
432 - defaultConfigurationIsVisible = 0;
433 - defaultConfigurationName = Release;
434 - };
435 - B71370B2451E9AC83FC63C82 /* Build configuration list for PBXNativeTarget "XCRSControlKitRunnerUITests" */ = {
436 - isa = XCConfigurationList;
437 - buildConfigurations = (
438 - B86BCF1CBC84DDBB0482F50E /* Release */,
439 - 1E279C47A0AE151A4005B2B0 /* Debug */,
440 - );
441 - defaultConfigurationIsVisible = 0;
442 - defaultConfigurationName = Release;
443 - };
444 - D057C3520D2F6DF298BDCE07 /* Build configuration list for PBXProject "XCRSControlKitRunner" */ = {
445 - isa = XCConfigurationList;
446 - buildConfigurations = (
447 - EE217233EFC84E56C7BF8952 /* Debug */,
448 - 2D3CFBA5256921E446A203DF /* Release */,
449 - );
450 - defaultConfigurationIsVisible = 0;
451 - defaultConfigurationName = Release;
452 - };
453 -/* End XCConfigurationList section */
454 -
455 -/* Begin XCLocalSwiftPackageReference section */
456 - 62D4A3BB7E58C0EEDFBD3798 /* XCLocalSwiftPackageReference "../.." */ = {
457 - isa = XCLocalSwiftPackageReference;
458 - relativePath = ../..;
459 - };
460 -/* End XCLocalSwiftPackageReference section */
461 -
462 -/* Begin XCRemoteSwiftPackageReference section */
463 - 33CCE93A21C53FF1112828ED /* XCRemoteSwiftPackageReference "swift-nio" */ = {
464 - isa = XCRemoteSwiftPackageReference;
465 - repositoryURL = "https://github.com/apple/swift-nio.git";
466 - requirement = {
467 - kind = upToNextMajorVersion;
468 - minimumVersion = 2.0.0;
469 - };
470 - };
471 -/* End XCRemoteSwiftPackageReference section */
472 -
473 -/* Begin XCSwiftPackageProductDependency section */
474 - 8E9294EFB8D77093FD3218B5 /* XCRSControlKit */ = {
475 - isa = XCSwiftPackageProductDependency;
476 - package = 33CCE93A21C53FF1112828ED /* XCRemoteSwiftPackageReference "swift-nio" */;
477 - productName = XCRSControlKit;
478 - };
479 - B0B9B1FF3D723F8C6B727F7D /* NIOCore */ = {
480 - isa = XCSwiftPackageProductDependency;
481 - package = 33CCE93A21C53FF1112828ED /* XCRemoteSwiftPackageReference "swift-nio" */;
482 - productName = NIOCore;
483 - };
484 - B7FD539749497B63541C3CA6 /* NIOHTTP1 */ = {
485 - isa = XCSwiftPackageProductDependency;
486 - package = 33CCE93A21C53FF1112828ED /* XCRemoteSwiftPackageReference "swift-nio" */;
487 - productName = NIOHTTP1;
488 - };
489 - B81BFC255C5D3B81571A1A59 /* NIOPosix */ = {
490 - isa = XCSwiftPackageProductDependency;
491 - package = 33CCE93A21C53FF1112828ED /* XCRemoteSwiftPackageReference "swift-nio" */;
492 - productName = NIOPosix;
493 - };
494 -/* End XCSwiftPackageProductDependency section */
495 - };
496 - rootObject = 0B09FAC4377C92AD60C7E93C /* Project object */;
497 -}
Runners/tvOS/XCRSControlKitRunner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted
-8
@@ -1,8 +0,0 @@
1 -<?xml version="1.0" encoding="UTF-8"?>
2 -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 -<plist version="1.0">
4 -<dict>
5 - <key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>
6 - <true/>
7 -</dict>
8 -</plist>
Runners/visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Back.png
Binary files /dev/null and b/Runners/visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Back.png differ
Runners/visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json new
+13
@@ -0,0 +1,13 @@
1 +{
2 + "images": [
3 + {
4 + "filename": "Back.png",
5 + "idiom": "vision",
6 + "scale": "2x"
7 + }
8 + ],
9 + "info": {
10 + "author": "xcode",
11 + "version": 1
12 + }
13 +}
\ No newline at end of file
Runners/visionOS/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json new
+6
@@ -0,0 +1,6 @@
1 +{
2 + "info": {
3 + "author": "xcode",
4 + "version": 1
5 + }
6 +}
\ No newline at end of file
Runners/visionOS/Assets.xcassets/AppIcon.solidimagestack/Contents.json new
+14
@@ -0,0 +1,14 @@
1 +{
2 + "info": {
3 + "author": "xcode",
4 + "version": 1
5 + },
6 + "layers": [
7 + {
8 + "filename": "Front.solidimagestacklayer"
9 + },
10 + {
11 + "filename": "Back.solidimagestacklayer"
12 + }
13 + ]
14 +}
\ No newline at end of file
Runners/visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json new
+13
@@ -0,0 +1,13 @@
1 +{
2 + "images": [
3 + {
4 + "filename": "Front.png",
5 + "idiom": "vision",
6 + "scale": "2x"
7 + }
8 + ],
9 + "info": {
10 + "author": "xcode",
11 + "version": 1
12 + }
13 +}
\ No newline at end of file
Runners/visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Front.png
Binary files /dev/null and b/Runners/visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Front.png differ
Runners/visionOS/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json new
+6
@@ -0,0 +1,6 @@
1 +{
2 + "info": {
3 + "author": "xcode",
4 + "version": 1
5 + }
6 +}
\ No newline at end of file
Runners/visionOS/ControlKitRunnerApp.swift new
+98
@@ -0,0 +1,98 @@
1 +import SwiftUI
2 +
3 +@main
4 +struct ControlKitRunnerApp: App {
5 + var body: some Scene {
6 + WindowGroup {
7 + ControlKitShowcaseView()
8 + }
9 + .defaultSize(width: 820, height: 620)
10 + }
11 +}
12 +
13 +private struct ControlKitShowcaseView: View {
14 + private let repositoryURL = URL(string: "https://github.com/ondeinference/xcrs-controlkit")!
15 +
16 + var body: some View {
17 + ScrollView {
18 + VStack(alignment: .leading, spacing: 28) {
19 + HStack(spacing: 18) {
20 + logo
21 + VStack(alignment: .leading, spacing: 4) {
22 + Text("ControlKit")
23 + .font(.system(size: 40, weight: .bold, design: .rounded))
24 + Text("Apple platform automation")
25 + .font(.title3)
26 + .foregroundStyle(.secondary)
27 + }
28 + }
29 +
30 + Text("A clean-room runner for reliable black-box testing across Apple platforms.")
31 + .font(.title2.weight(.medium))
32 + .fixedSize(horizontal: false, vertical: true)
33 +
34 + statusCard
35 + informationCard
36 +
37 + Link(destination: repositoryURL) {
38 + Label("View project on GitHub", systemImage: "arrow.up.right")
39 + .font(.headline)
40 + .frame(maxWidth: .infinity)
41 + }
42 + .buttonStyle(.borderedProminent)
43 + }
44 + .padding(40)
45 + .frame(maxWidth: 760, alignment: .leading)
46 + }
47 + }
48 +
49 + private var logo: some View {
50 + Text("XC\nRS")
51 + .font(.system(size: 30, weight: .black, design: .rounded))
52 + .multilineTextAlignment(.center)
53 + .lineSpacing(-8)
54 + .foregroundStyle(Color.controlKitGreen)
55 + .frame(width: 96, height: 96)
56 + .background(Color.controlKitCream, in: RoundedRectangle(cornerRadius: 24))
57 + }
58 +
59 + private var statusCard: some View {
60 + VStack(alignment: .leading, spacing: 14) {
61 + Label("Runner online", systemImage: "checkmark.circle.fill")
62 + .font(.headline)
63 + .foregroundStyle(.green)
64 + Text("The XCTest host is ready to receive ControlKit automation requests.")
65 + .foregroundStyle(.secondary)
66 + }
67 + .padding(22)
68 + .frame(maxWidth: .infinity, alignment: .leading)
69 + .background(.thinMaterial, in: RoundedRectangle(cornerRadius: 20))
70 + }
71 +
72 + private var informationCard: some View {
73 + VStack(alignment: .leading, spacing: 16) {
74 + infoRow(title: "Project", value: "XCRSControlKit")
75 + infoRow(title: "Creator", value: "smbCloud")
76 + infoRow(title: "Platform", value: "visionOS")
77 + infoRow(title: "Purpose", value: "Native spatial automation runner")
78 + }
79 + .padding(22)
80 + .frame(maxWidth: .infinity, alignment: .leading)
81 + .background(.thinMaterial, in: RoundedRectangle(cornerRadius: 20))
82 + }
83 +
84 + private func infoRow(title: String, value: String) -> some View {
85 + HStack {
86 + Text(title)
87 + .foregroundStyle(.secondary)
88 + Spacer()
89 + Text(value)
90 + .fontWeight(.semibold)
91 + }
92 + }
93 +}
94 +
95 +private extension Color {
96 + static let controlKitGreen = Color(red: 0.106, green: 0.263, blue: 0.196)
97 + static let controlKitCream = Color(red: 0.961, green: 0.953, blue: 0.925)
98 +}
Runners/visionOS/README.md new
+11
@@ -0,0 +1,11 @@
1 +# ControlKit visionOS host app
2 +
3 +This folder holds the visionOS host application (`ControlKitRunnerApp.swift` and
4 +`Assets.xcassets`) for the `ControlKit-visionOS` target in the shared
5 +`XCRSControlKitRunner.xcodeproj`.
6 +
7 +visionOS is spatial: `device.io.spatial.tap` performs accessibility-driven
8 +activation through an `XCUICoordinate` tap, while raw `device.io.tap`, `home`,
9 +and orientation controls are intentionally unsupported. The JSON-RPC transport
10 +and server live in `../Shared` and are compiled into the
11 +`ControlKit-visionOS-UITests` target.