From a799d3d48135eb9e72f36b92e1825be2c6afd412 Mon Sep 17 00:00:00 2001 From: Seto Elkahfi Date: Tue, 30 Jun 2026 13:44:32 +0200 Subject: [PATCH 1/5] Add tvOS UITest runner support The DeviceKit XCUITest runner now builds for tvOS, so the automation stack can drive the tvOS Simulator. - Add a `devicekit-tvos` scheme and tvOS target to the Xcode project, plus a `scripts/patch-tvos-runner.sh` helper and Makefile targets that build and patch the tvOS runner. - On tvOS, register a `device.io.button` handler that maps button names to `XCUIRemote.Button` presses (up, down, left, right, select, menu, home, playPause). tvOS navigates by focus, not touch. - Keep the touch, keyboard, and orientation handlers iOS-only in the JSON-RPC dispatcher, behind `#if os(iOS)`. - Read the screen size from `UIScreen.main.bounds` on tvOS, since there is no SpringBoard to query. - Guard the remaining iOS-only handlers and helpers with `#if os(iOS)` so the shared sources still compile for both platforms. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../JSONRPC/Handlers/DeviceInfo.swift | 8 + .../JSONRPC/Handlers/IOButton.swift | 68 ++++- .../JSONRPC/Handlers/IOGesture.swift | 2 + DeviceKitTests/JSONRPC/Handlers/IOKeys.swift | 2 + .../JSONRPC/Handlers/IOLongpress.swift | 2 + .../JSONRPC/Handlers/IOOrientationGet.swift | 2 + .../JSONRPC/Handlers/IOOrientationSet.swift | 2 + DeviceKitTests/JSONRPC/Handlers/IOSwipe.swift | 2 + DeviceKitTests/JSONRPC/Handlers/IOTap.swift | 2 + DeviceKitTests/JSONRPC/Handlers/IOText.swift | 2 + .../JSONRPC/JSONRPCDispatcher.swift | 22 +- DeviceKitTests/XCTest/EventRecord.swift | 2 + .../XCTest/OrientationGeometry.swift | 2 + DeviceKitTests/XCTest/PointerEventPath.swift | 2 + DeviceKitTests/XCTest/RunnerDaemonProxy.swift | 2 + .../XCTest/SystemPermissionManager.swift | 2 + Makefile | 41 ++- devicekit-ios.xcodeproj/project.pbxproj | 275 +++++++++++++++++- .../xcschemes/devicekit-tvos.xcscheme | 68 +++++ scripts/patch-tvos-runner.sh | 41 +++ 20 files changed, 533 insertions(+), 16 deletions(-) create mode 100644 devicekit-ios.xcodeproj/xcshareddata/xcschemes/devicekit-tvos.xcscheme create mode 100755 scripts/patch-tvos-runner.sh diff --git a/DeviceKitTests/JSONRPC/Handlers/DeviceInfo.swift b/DeviceKitTests/JSONRPC/Handlers/DeviceInfo.swift index bcb9771..232a06b 100644 --- a/DeviceKitTests/JSONRPC/Handlers/DeviceInfo.swift +++ b/DeviceKitTests/JSONRPC/Handlers/DeviceInfo.swift @@ -13,11 +13,19 @@ struct DeviceInfoMethodHandler: RPCMethodHandler { let start = Date() + #if os(tvOS) + // tvOS has no SpringBoard; the main screen bounds describe the full UI. + let bounds = UIScreen.main.bounds + let scale = Int(UIScreen.main.scale) + let width = Int(bounds.width) + let height = Int(bounds.height) + #else let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard") let frame = springboard.frame let scale = Int(UIScreen.main.scale) let width = Int(frame.width) let height = Int(frame.height) + #endif let duration = Date().timeIntervalSince(start) logger.info("Device info took \(duration), screen: \(width)x\(height)@\(scale)x") diff --git a/DeviceKitTests/JSONRPC/Handlers/IOButton.swift b/DeviceKitTests/JSONRPC/Handlers/IOButton.swift index a9dcf63..f1e1e0c 100644 --- a/DeviceKitTests/JSONRPC/Handlers/IOButton.swift +++ b/DeviceKitTests/JSONRPC/Handlers/IOButton.swift @@ -1,6 +1,9 @@ +import XCTest import os -struct IOButtonRequest : Codable { +#if os(iOS) + +struct IOButtonRequest: Codable { enum Button: String, Codable { case home case lock @@ -52,3 +55,66 @@ struct IOButtonMethodHandler: RPCMethodHandler { } } +#elseif os(tvOS) + +struct IOButtonRequest: Codable { + /// tvOS is driven by the Siri Remote. Every button maps to an + /// `XCUIRemote.Button` press against the currently focused element. + enum Button: String, Codable { + case up + case down + case left + case right + case select + case menu + case home + case playPause + } + + let button: Button +} + +@MainActor +struct IOButtonMethodHandler: RPCMethodHandler { + static let methodName = "device.io.button" + + private let logger = Logger( + subsystem: Bundle.main.bundleIdentifier!, + category: String(describing: Self.self) + ) + + func execute(params: JSONValue?) async throws -> JSONValue { + let request = try decodeParams(IOButtonRequest.self, from: params) + + let start = Date() + + logger.info("[Start] Pressing remote button: \(request.button.rawValue)") + let remoteButton: XCUIRemote.Button + switch request.button { + case .up: + remoteButton = .up + case .down: + remoteButton = .down + case .left: + remoteButton = .left + case .right: + remoteButton = .right + case .select: + remoteButton = .select + case .menu: + remoteButton = .menu + case .home: + remoteButton = .home + case .playPause: + remoteButton = .playPause + } + XCUIRemote.shared.press(remoteButton) + logger.info("[Done] Pressing remote button: \(request.button.rawValue)") + + let duration = Date().timeIntervalSince(start) + logger.info("Remote button press duration took \(duration)") + return .object(["success": .bool(true)]) + } +} + +#endif diff --git a/DeviceKitTests/JSONRPC/Handlers/IOGesture.swift b/DeviceKitTests/JSONRPC/Handlers/IOGesture.swift index 1d41b41..24e0c05 100644 --- a/DeviceKitTests/JSONRPC/Handlers/IOGesture.swift +++ b/DeviceKitTests/JSONRPC/Handlers/IOGesture.swift @@ -1,3 +1,4 @@ +#if os(iOS) import Foundation import os @@ -226,3 +227,4 @@ struct IOGestureMethodHandler: RPCMethodHandler { logger.info("Finger \(fingerIndex): path completed, total duration \(currentOffset)s") } } +#endif diff --git a/DeviceKitTests/JSONRPC/Handlers/IOKeys.swift b/DeviceKitTests/JSONRPC/Handlers/IOKeys.swift index abf2480..225d863 100644 --- a/DeviceKitTests/JSONRPC/Handlers/IOKeys.swift +++ b/DeviceKitTests/JSONRPC/Handlers/IOKeys.swift @@ -1,3 +1,4 @@ +#if os(iOS) import XCTest import os @@ -126,3 +127,4 @@ struct IOKeysMethodHandler: RPCMethodHandler { return flags } } +#endif diff --git a/DeviceKitTests/JSONRPC/Handlers/IOLongpress.swift b/DeviceKitTests/JSONRPC/Handlers/IOLongpress.swift index 90d7195..7286d8d 100644 --- a/DeviceKitTests/JSONRPC/Handlers/IOLongpress.swift +++ b/DeviceKitTests/JSONRPC/Handlers/IOLongpress.swift @@ -1,3 +1,4 @@ +#if os(iOS) import os struct IOLongpressRequest: Codable { @@ -44,3 +45,4 @@ struct IOLongpressMethodHandler: RPCMethodHandler { } } } +#endif diff --git a/DeviceKitTests/JSONRPC/Handlers/IOOrientationGet.swift b/DeviceKitTests/JSONRPC/Handlers/IOOrientationGet.swift index 43aeb74..a4182b2 100644 --- a/DeviceKitTests/JSONRPC/Handlers/IOOrientationGet.swift +++ b/DeviceKitTests/JSONRPC/Handlers/IOOrientationGet.swift @@ -1,3 +1,4 @@ +#if os(iOS) import os @MainActor @@ -32,3 +33,4 @@ struct IOOrientationGetMethodHandler: RPCMethodHandler { return .object(["orientation": .string(value)]) } } +#endif diff --git a/DeviceKitTests/JSONRPC/Handlers/IOOrientationSet.swift b/DeviceKitTests/JSONRPC/Handlers/IOOrientationSet.swift index 8697e7d..47cc014 100644 --- a/DeviceKitTests/JSONRPC/Handlers/IOOrientationSet.swift +++ b/DeviceKitTests/JSONRPC/Handlers/IOOrientationSet.swift @@ -1,3 +1,4 @@ +#if os(iOS) import os struct IOOrientationSetRequest: Codable { @@ -35,3 +36,4 @@ struct IOOrientationSetMethodHandler: RPCMethodHandler { return .object(["success": .bool(true)]) } } +#endif diff --git a/DeviceKitTests/JSONRPC/Handlers/IOSwipe.swift b/DeviceKitTests/JSONRPC/Handlers/IOSwipe.swift index 9b2d63b..ed625bd 100644 --- a/DeviceKitTests/JSONRPC/Handlers/IOSwipe.swift +++ b/DeviceKitTests/JSONRPC/Handlers/IOSwipe.swift @@ -1,3 +1,4 @@ +#if os(iOS) import os private enum Constants { @@ -46,3 +47,4 @@ struct IOSwipeMethodHandler: RPCMethodHandler { try await RunnerDaemonProxy().synthesize(eventRecord: eventRecord) } } +#endif diff --git a/DeviceKitTests/JSONRPC/Handlers/IOTap.swift b/DeviceKitTests/JSONRPC/Handlers/IOTap.swift index 973928f..f1fb225 100644 --- a/DeviceKitTests/JSONRPC/Handlers/IOTap.swift +++ b/DeviceKitTests/JSONRPC/Handlers/IOTap.swift @@ -1,3 +1,4 @@ +#if os(iOS) import os struct IOTapRequest: Codable { @@ -42,3 +43,4 @@ struct IOTapMethodHandler: RPCMethodHandler { } } +#endif diff --git a/DeviceKitTests/JSONRPC/Handlers/IOText.swift b/DeviceKitTests/JSONRPC/Handlers/IOText.swift index fdf681d..c02d82d 100644 --- a/DeviceKitTests/JSONRPC/Handlers/IOText.swift +++ b/DeviceKitTests/JSONRPC/Handlers/IOText.swift @@ -1,3 +1,4 @@ +#if os(iOS) import XCTest import os @@ -88,3 +89,4 @@ struct IOTextMethodHandler: RPCMethodHandler { } } } +#endif diff --git a/DeviceKitTests/JSONRPC/JSONRPCDispatcher.swift b/DeviceKitTests/JSONRPC/JSONRPCDispatcher.swift index d70ce7d..48c1387 100644 --- a/DeviceKitTests/JSONRPC/JSONRPCDispatcher.swift +++ b/DeviceKitTests/JSONRPC/JSONRPCDispatcher.swift @@ -12,22 +12,28 @@ final class JSONRPCDispatcher { private var handlers: [String: any RPCMethodHandler] = [:] init() { - registerHandler(IOTapMethodHandler()) + // Shared handlers (available on both iOS and tvOS). registerHandler(DumpUIMethodHandler()) - registerHandler(IOTextMethodHandler()) - registerHandler(IOKeysMethodHandler()) registerHandler(AppsLaunchMethodHandler()) registerHandler(AppsTerminateMethodHandler()) - registerHandler(IOSwipeMethodHandler()) - registerHandler(IOLongpressMethodHandler()) registerHandler(ScreenshotMethodHandler()) registerHandler(URLMethodHandler()) - registerHandler(IOGestureMethodHandler()) registerHandler(IOButtonMethodHandler()) - registerHandler(IOOrientationGetMethodHandler()) - registerHandler(IOOrientationSetMethodHandler()) registerHandler(DeviceInfoMethodHandler()) registerHandler(AppsForegroundMethodHandler()) + + // Touch- and keyboard-driven input is iOS-only. tvOS uses focus-based + // remote navigation via the (shared) device.io.button handler. + #if os(iOS) + registerHandler(IOTapMethodHandler()) + registerHandler(IOTextMethodHandler()) + registerHandler(IOKeysMethodHandler()) + registerHandler(IOSwipeMethodHandler()) + registerHandler(IOLongpressMethodHandler()) + registerHandler(IOGestureMethodHandler()) + registerHandler(IOOrientationGetMethodHandler()) + registerHandler(IOOrientationSetMethodHandler()) + #endif } func registerHandler(_ handler: T) { diff --git a/DeviceKitTests/XCTest/EventRecord.swift b/DeviceKitTests/XCTest/EventRecord.swift index 7bae489..b645c6f 100644 --- a/DeviceKitTests/XCTest/EventRecord.swift +++ b/DeviceKitTests/XCTest/EventRecord.swift @@ -1,3 +1,4 @@ +#if os(iOS) import Foundation import UIKit @@ -50,3 +51,4 @@ final class EventRecord: NSObject { return self } } +#endif diff --git a/DeviceKitTests/XCTest/OrientationGeometry.swift b/DeviceKitTests/XCTest/OrientationGeometry.swift index c6e6957..943e959 100644 --- a/DeviceKitTests/XCTest/OrientationGeometry.swift +++ b/DeviceKitTests/XCTest/OrientationGeometry.swift @@ -1,3 +1,4 @@ +#if os(iOS) import XCTest struct OrientationGeometry { @@ -100,3 +101,4 @@ struct OrientationGeometry { } } } +#endif diff --git a/DeviceKitTests/XCTest/PointerEventPath.swift b/DeviceKitTests/XCTest/PointerEventPath.swift index bd8b446..439532b 100644 --- a/DeviceKitTests/XCTest/PointerEventPath.swift +++ b/DeviceKitTests/XCTest/PointerEventPath.swift @@ -1,3 +1,4 @@ +#if os(iOS) import Foundation struct PointerEventPath { @@ -60,3 +61,4 @@ struct PointerEventPath { method(path, selector, text as NSString, offset, UInt64(typingSpeed), shouldRedact) } } +#endif diff --git a/DeviceKitTests/XCTest/RunnerDaemonProxy.swift b/DeviceKitTests/XCTest/RunnerDaemonProxy.swift index 6916632..cd9cc9e 100644 --- a/DeviceKitTests/XCTest/RunnerDaemonProxy.swift +++ b/DeviceKitTests/XCTest/RunnerDaemonProxy.swift @@ -1,3 +1,4 @@ +#if os(iOS) import Foundation @MainActor @@ -70,3 +71,4 @@ class RunnerDaemonProxy { } } } +#endif diff --git a/DeviceKitTests/XCTest/SystemPermissionManager.swift b/DeviceKitTests/XCTest/SystemPermissionManager.swift index be2c588..058ecb7 100644 --- a/DeviceKitTests/XCTest/SystemPermissionManager.swift +++ b/DeviceKitTests/XCTest/SystemPermissionManager.swift @@ -21,6 +21,7 @@ final class SystemPermissionManager { static func handleSystemPermissionAlertIfNeeded( foregroundApp: XCUIApplication ) { + #if os(iOS) let predicate = NSPredicate( format: "label CONTAINS[c] %@", notificationsPermissionLabel @@ -70,5 +71,6 @@ final class SystemPermissionManager { NSLog( "[Done] Foreground app is springboard attempting to tap on permissions dialog" ) + #endif } } diff --git a/Makefile b/Makefile index 3bd73c1..33594f2 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ CODE_SIGN_IDENTITY ?= Apple Development # Export method for IPA (development, ad-hoc, app-store, enterprise) EXPORT_METHOD ?= development -.PHONY: help clean build archive ipa-unsigned sim-zip-arm64 sim-zip-x86_64 sim-zip sim-install test-coverage coverage-html lint +.PHONY: help clean build archive ipa-unsigned sim-zip-arm64 sim-zip-x86_64 sim-zip sim-install tvos-sim-zip-arm64 tvos-sim-install test-coverage coverage-html lint .DEFAULT_GOAL := help @@ -25,6 +25,8 @@ help: @echo " sim-zip-arm64 Build XCUITest runner zip for iOS Simulator (arm64 / Apple Silicon)" @echo " sim-zip-x86_64 Build XCUITest runner zip for iOS Simulator (x86_64 / Intel)" @echo " sim-install Build and install on the currently booted simulator" + @echo " tvos-sim-zip-arm64 Build XCUITest runner zip for tvOS Simulator (arm64 / Apple Silicon)" + @echo " tvos-sim-install Build and install the tvOS runner on the booted tvOS simulator" @echo " ipa-unsigned Build unsigned IPA with XCUITest runner for real iOS devices" @echo " debug Build with Debug configuration" @echo " release Build with Release configuration" @@ -109,6 +111,43 @@ sim-zip-x86_64: # Build both simulator zips sim-zip: sim-zip-arm64 sim-zip-x86_64 +# Build XCUITest runner for tvOS Simulator (arm64 — Apple Silicon) +tvos-sim-zip-arm64: + @echo "Building devicekit-tvos XCUITest runner for tvOS Simulator (arm64)..." + xcodebuild build-for-testing \ + -project $(PROJECT) \ + -scheme devicekit-tvos \ + -configuration $(CONFIGURATION) \ + -destination 'generic/platform=tvOS Simulator' \ + -derivedDataPath $(BUILD_DIR) \ + CODE_SIGN_IDENTITY="" \ + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGNING_ALLOWED=NO \ + ARCHS=arm64 | xcbeautify + @mkdir -p $(EXPORT_PATH) + @cp -r "$(BUILD_DIR)/Build/Products/$(CONFIGURATION)-appletvsimulator/devicekit-tvosUITests-Runner.app" $(EXPORT_PATH)/ + @scripts/patch-tvos-runner.sh "$(EXPORT_PATH)/devicekit-tvosUITests-Runner.app" + @codesign --force --sign - "$(EXPORT_PATH)/devicekit-tvosUITests-Runner.app" + @cd $(EXPORT_PATH) && zip -r devicekit-tvos-Sim-arm64.zip devicekit-tvosUITests-Runner.app + @rm -rf "$(EXPORT_PATH)/devicekit-tvosUITests-Runner.app" + @echo "Simulator zip created at: $(EXPORT_PATH)/devicekit-tvos-Sim-arm64.zip" + +# Build and install tvOS runner on the booted tvOS simulator +tvos-sim-install: + @BOOTED=$$(xcrun simctl list devices booted -j | jq -r '[.devices[][] | select(.state=="Booted")] | first | .udid'); \ + echo "Building tvOS runner for simulator $$BOOTED..."; \ + xcodebuild build-for-testing \ + -project $(PROJECT) \ + -scheme devicekit-tvos \ + -configuration $(CONFIGURATION) \ + -destination "id=$$BOOTED" \ + -derivedDataPath $(BUILD_DIR)/local-tvos | xcbeautify; \ + PRODUCTS="$(BUILD_DIR)/local-tvos/Build/Products/$(CONFIGURATION)-appletvsimulator"; \ + scripts/patch-tvos-runner.sh "$$PRODUCTS/devicekit-tvosUITests-Runner.app"; \ + codesign --force --sign - "$$PRODUCTS/devicekit-tvosUITests-Runner.app"; \ + xcrun simctl install "$$BOOTED" "$$PRODUCTS/devicekit-tvosUITests-Runner.app"; \ + echo "Installed tvOS runner on simulator $$BOOTED" + # Build and install on booted simulator sim-install: @BOOTED=$$(xcrun simctl list devices booted -j | jq -r '[.devices[][] | select(.state=="Booted")] | first | .udid'); \ diff --git a/devicekit-ios.xcodeproj/project.pbxproj b/devicekit-ios.xcodeproj/project.pbxproj index 7cde7c2..775e5ce 100644 --- a/devicekit-ios.xcodeproj/project.pbxproj +++ b/devicekit-ios.xcodeproj/project.pbxproj @@ -7,6 +7,29 @@ objects = { /* Begin PBXBuildFile section */ + 00C48C967AE3D00B221ADC02 /* FBScreenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 785281472F2BEC40002A7531 /* FBScreenshot.h */; }; + 0161FB34A40138543E558E15 /* XCAXClient_iOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D8FA402D6DCC600015FAB3 /* XCAXClient_iOS.h */; }; + 034CAE017DBB0653A564F523 /* XCUIApplication+Helper.m in Sources */ = {isa = PBXBuildFile; fileRef = 521C1F0A2D801A350024EE42 /* XCUIApplication+Helper.m */; }; + 05DB44E2FA2B136BEA2F0B3C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BEB7B3F9D0E9FC3377B3F800 /* Foundation.framework */; }; + 0A405966B03B19257EE892F2 /* XCUIApplication+FBQuiescence.m in Sources */ = {isa = PBXBuildFile; fileRef = 52D8FAB32D6DD54F0015FAB3 /* XCUIApplication+FBQuiescence.m */; }; + 122FABEEC00A0F17E4F04811 /* FBLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 52D8FAAB2D6DD3A20015FAB3 /* FBLogger.m */; }; + 1941E2F4FA085893EC1177EF /* XCUIApplication+Helper.h in Headers */ = {isa = PBXBuildFile; fileRef = 521C1F082D80184D0024EE42 /* XCUIApplication+Helper.h */; }; + 1DCF3F02252DC8BB0A150045 /* devicekit-iosUITests-Bridging-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D8FA922D6DCF2C0015FAB3 /* devicekit-iosUITests-Bridging-Header.h */; }; + 22704AE8F9FB64145D90DF72 /* DeviceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7865E4C62F423ACA00D0F45F /* DeviceInfo.swift */; }; + 235F49B2463019B3FBAB9B01 /* IOOrientationGet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7865E4C22F423A8700D0F45F /* IOOrientationGet.swift */; }; + 244DD46D3E8F596EB3BFFCD8 /* JSONRPCDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787C47922F227F6B0027A012 /* JSONRPCDispatcher.swift */; }; + 259CD442315E5B812702C64B /* JSONRPCModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787C47932F227F6B0027A012 /* JSONRPCModels.swift */; }; + 286C8DE34DA6FDEE5643630F /* AppsTerminate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78EA9F902F36611B008B17D3 /* AppsTerminate.swift */; }; + 28984ED83F9513779C061381 /* CDStructures.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D8FA332D6DCC600015FAB3 /* CDStructures.h */; }; + 2F386FCD920B2C009F1A6BBC /* XCAXClient_iOS+FBSnapshotReqParams.h in Headers */ = {isa = PBXBuildFile; fileRef = 526111772DE5E8D0007C356B /* XCAXClient_iOS+FBSnapshotReqParams.h */; }; + 30151A4111977439D0303164 /* IOSwipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78147FCA2F27C03500E61E3B /* IOSwipe.swift */; }; + 316F0F773353E7A652D56807 /* EventRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 612DE413298426EF003C2BE0 /* EventRecord.swift */; }; + 355EC369900195D9605B763C /* XCAccessibilityElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 521C1F042D8016950024EE42 /* XCAccessibilityElement.h */; }; + 3CE3C8A2ABF9D07AD61EEA73 /* FBScreenshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 785281482F2BEC40002A7531 /* FBScreenshot.m */; }; + 3EA30189877288CD244B9A0B /* XCTestManager_ManagerInterface-Protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D8FA622D6DCC600015FAB3 /* XCTestManager_ManagerInterface-Protocol.h */; }; + 4567136EF51F97DF02F7009A /* AXElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6124329D2A4DA5BB00F5F619 /* AXElement.swift */; }; + 4DC8EC2D308A07DFAD64F3EB /* Screenshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 781480362F27CEF000E61E3B /* Screenshot.swift */; }; + 4EB43A87FBDB74F092EE24E6 /* DumpUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787C47DC2F228B770027A012 /* DumpUI.swift */; }; 52049BF8293503A200807AA3 /* devicekit_iosUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52049BF7293503A200807AA3 /* devicekit_iosUITests.swift */; }; 521C1F032D8014410024EE42 /* AXClientProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 521C1F022D8014340024EE42 /* AXClientProxy.h */; }; 521C1F052D8016950024EE42 /* XCAccessibilityElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 521C1F042D8016950024EE42 /* XCAccessibilityElement.h */; }; @@ -35,14 +58,17 @@ 52D8FAB42D6DD54F0015FAB3 /* XCUIApplication+FBQuiescence.m in Sources */ = {isa = PBXBuildFile; fileRef = 52D8FAB32D6DD54F0015FAB3 /* XCUIApplication+FBQuiescence.m */; }; 52D8FAB52D6DD54F0015FAB3 /* XCUIApplication+FBQuiescence.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D8FAB22D6DD54F0015FAB3 /* XCUIApplication+FBQuiescence.h */; }; 52E35D432A654F67001D97A8 /* RunningApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52E35D422A654F67001D97A8 /* RunningApp.swift */; }; + 54BD87EBA4EBCC2897C7B08F /* IOLongpress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7814800A2F27C55500E61E3B /* IOLongpress.swift */; }; + 56AD8C619AFABA24BB9BF726 /* XCTestServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787C47952F227F6B0027A012 /* XCTestServer.swift */; }; 610D58FB2A49E3CA00B4BBEB /* AXClientSwizzler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 610D58FA2A49E3CA00B4BBEB /* AXClientSwizzler.swift */; }; 6124329E2A4DA5BB00F5F619 /* AXElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6124329D2A4DA5BB00F5F619 /* AXElement.swift */; }; 612DE40229801F71003C2BE0 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 612DE40129801F71003C2BE0 /* XCTest.framework */; }; 612DE4122984114B003C2BE0 /* RunnerDaemonProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 612DE4112984114B003C2BE0 /* RunnerDaemonProxy.swift */; }; 612DE414298426EF003C2BE0 /* EventRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 612DE413298426EF003C2BE0 /* EventRecord.swift */; }; 613E87D7299A64BD00FF8551 /* PointerEventPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 613E87D6299A64BD00FF8551 /* PointerEventPath.swift */; }; + 624D02949107BFAA1A01CE29 /* XCUIApplicationImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D8FA7E2D6DCC600015FAB3 /* XCUIApplicationImpl.h */; }; + 7270F40D1DD94D314AD9556F /* URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 781480742F27D2B900E61E3B /* URL.swift */; }; 78147F0F2F27AA6B00E61E3B /* IOText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78147F0E2F27AA6B00E61E3B /* IOText.swift */; }; - 78E4A1B12F5C110200D4F1AA /* IOKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78E4A1B02F5C110200D4F1AA /* IOKeys.swift */; }; 78147F3D2F27BDBC00E61E3B /* AppsLaunch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78147F3C2F27BDBC00E61E3B /* AppsLaunch.swift */; }; 78147FCB2F27C04400E61E3B /* IOSwipe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78147FCA2F27C03500E61E3B /* IOSwipe.swift */; }; 7814800B2F27C56100E61E3B /* IOLongpress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7814800A2F27C55500E61E3B /* IOLongpress.swift */; }; @@ -65,11 +91,47 @@ 787C48482F228D960027A012 /* JSONRPCMessageHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787C48472F228D950027A012 /* JSONRPCMessageHandler.swift */; }; 787C95982F17F23500AB3BF1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 787C95972F17F23500AB3BF1 /* Assets.xcassets */; }; 78A190B62F3A3ADA007F24E0 /* IOButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78A190B52F3A3ADA007F24E0 /* IOButton.swift */; }; + 78E4A1B12F5C110200D4F1AA /* IOKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78E4A1B02F5C110200D4F1AA /* IOKeys.swift */; }; 78EA9F912F36611B008B17D3 /* AppsTerminate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78EA9F902F36611B008B17D3 /* AppsTerminate.swift */; }; 78F689392F17EF1B0025C8AC /* devicekit_iosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78F689372F17EF1B0025C8AC /* devicekit_iosApp.swift */; }; + 7D450004153BD0CAA803391A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79019D07340032631918358D /* XCTest.framework */; }; + 884A0247F2AFAC2C8E289FBF /* FBLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D8FAAA2D6DD3A20015FAB3 /* FBLogger.h */; }; + 8E8BBE0BBBB73B8074357641 /* IOOrientationSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7865E4C32F423A8700D0F45F /* IOOrientationSet.swift */; }; + 938D7BDFE204AC0B8AC3E1CF /* OrientationGeometry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9811C9082C49751D00DDACA0 /* OrientationGeometry.swift */; }; 94826F4429DB082100795E9B /* SystemPermissionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94826F4329DB082100795E9B /* SystemPermissionManager.swift */; }; 9811C9092C49751D00DDACA0 /* OrientationGeometry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9811C9082C49751D00DDACA0 /* OrientationGeometry.swift */; }; + 9B63CAE92B8CF4FBBA5140A5 /* XCTestDaemonsProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 521C1F0D2D8051890024EE42 /* XCTestDaemonsProxy.h */; }; + 9BB1385B2D6CB97B5E1DF262 /* XCUIDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D8FA812D6DCC600015FAB3 /* XCUIDevice.h */; }; + 9C765909539AE04A217DD1F4 /* AppsLaunch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78147F3C2F27BDBC00E61E3B /* AppsLaunch.swift */; }; + A00D5AB8F6E0F5CE06377310 /* AXClientSwizzler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 610D58FA2A49E3CA00B4BBEB /* AXClientSwizzler.swift */; }; + A1A0950E2FF49EEB56A7931A /* XCUIApplicationProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D8FA7F2D6DCC600015FAB3 /* XCUIApplicationProcess.h */; }; + A543801BC12FCCAE0623EAD8 /* AXClientProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 521C1F022D8014340024EE42 /* AXClientProxy.h */; }; + A6E5ACA822551BCC70942D55 /* JSONRPCHTTPHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787C48452F228D8C0027A012 /* JSONRPCHTTPHandler.swift */; }; + A7F7596026F95FBD8297CC7F /* AppsForeground.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7865E50E2F42596200D0F45F /* AppsForeground.swift */; }; AAAA00022F82000100000001 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AAAA00012F82000100000001 /* Assets.xcassets */; }; + AC75A950D43275503666ECC8 /* devicekit_iosUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52049BF7293503A200807AA3 /* devicekit_iosUITests.swift */; }; + AD3EADC830FE8CCA1585818B /* FBConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D8FAAE2D6DD4100015FAB3 /* FBConfiguration.h */; }; + B073667315FB4D9E4332C5AE /* XCAXClient_iOS+FBSnapshotReqParams.m in Sources */ = {isa = PBXBuildFile; fileRef = 526111792DE5E8E5007C356B /* XCAXClient_iOS+FBSnapshotReqParams.m */; }; + B3E24A58415777E32C267B79 /* IOTap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787C47DD2F228B770027A012 /* IOTap.swift */; }; + B636674E8B56967896BD08C6 /* IOGesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 781480FE2F27DEE600E61E3B /* IOGesture.swift */; }; + B8FBFB840AABD10B05DEF0E8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AAAA00012F82000100000001 /* Assets.xcassets */; }; + B95556082A6382C6D0A9C3EC /* IOText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78147F0E2F27AA6B00E61E3B /* IOText.swift */; }; + C7330BE333EB2E786B2D9C74 /* JSONRPCMessageHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787C48472F228D950027A012 /* JSONRPCMessageHandler.swift */; }; + CF4FB3A7202D31A03341B7B3 /* XCUIApplicationProcess+FBQuiescence.m in Sources */ = {isa = PBXBuildFile; fileRef = 52D8FA9C2D6DCFAF0015FAB3 /* XCUIApplicationProcess+FBQuiescence.m */; }; + D7B293D07B4CB605C14C044C /* AXClientProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 521C1F062D8017460024EE42 /* AXClientProxy.m */; }; + D7DA3A8AF6A06A325423F66E /* FBConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 52D8FAAF2D6DD4100015FAB3 /* FBConfiguration.m */; }; + DAC965FEC9FB0DA876F81C2F /* RPCMethodHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787C47942F227F6B0027A012 /* RPCMethodHandler.swift */; }; + DBC6B81C12180306B0D14C54 /* XCUIApplication+FBQuiescence.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D8FAB22D6DD54F0015FAB3 /* XCUIApplication+FBQuiescence.h */; }; + DCF95ADBF618D3E7DEAC31EC /* RunningApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52E35D422A654F67001D97A8 /* RunningApp.swift */; }; + DFD8C5E67F731688B7AD8276 /* XCUIApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D8FA7D2D6DCC600015FAB3 /* XCUIApplication.h */; }; + E2433B8447C892108A11FC74 /* RunnerDaemonProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 612DE4112984114B003C2BE0 /* RunnerDaemonProxy.swift */; }; + EC7C56E5A57A24F6310F1A09 /* XCUIApplicationProcess+FBQuiescence.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D8FA9B2D6DCFAF0015FAB3 /* XCUIApplicationProcess+FBQuiescence.h */; }; + EC9B50B9764C1544B5B91FD2 /* SystemPermissionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94826F4329DB082100795E9B /* SystemPermissionManager.swift */; }; + ECDFA922C0117DEBE58D1F69 /* XCTestDaemonsProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 521C1F0F2D8051F20024EE42 /* XCTestDaemonsProxy.m */; }; + F0881FEA5B0136EB00959663 /* IOKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78E4A1B02F5C110200D4F1AA /* IOKeys.swift */; }; + F696916E157EB09BDBCF5132 /* FlyingFox in Frameworks */ = {isa = PBXBuildFile; productRef = EBF28227FF61B70D19DDE281 /* FlyingFox */; }; + FE73645026930316D712AFBB /* IOButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78A190B52F3A3ADA007F24E0 /* IOButton.swift */; }; + FF8B283A8DF6D51B1A7E4CD0 /* PointerEventPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 613E87D6299A64BD00FF8551 /* PointerEventPath.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -83,6 +145,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 06DB3D932EBB93028B539685 /* devicekit-tvosUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "devicekit-tvosUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 52049BD32935039F00807AA3 /* devicekit-ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "devicekit-ios.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 52049BF3293503A200807AA3 /* devicekit-iosUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "devicekit-iosUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 52049BF7293503A200807AA3 /* devicekit_iosUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = devicekit_iosUITests.swift; sourceTree = ""; }; @@ -125,7 +188,6 @@ 612DE413298426EF003C2BE0 /* EventRecord.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventRecord.swift; sourceTree = ""; }; 613E87D6299A64BD00FF8551 /* PointerEventPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PointerEventPath.swift; sourceTree = ""; }; 78147F0E2F27AA6B00E61E3B /* IOText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOText.swift; sourceTree = ""; }; - 78E4A1B02F5C110200D4F1AA /* IOKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOKeys.swift; sourceTree = ""; }; 78147F3C2F27BDBC00E61E3B /* AppsLaunch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppsLaunch.swift; sourceTree = ""; }; 78147FCA2F27C03500E61E3B /* IOSwipe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOSwipe.swift; sourceTree = ""; }; 7814800A2F27C55500E61E3B /* IOLongpress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOLongpress.swift; sourceTree = ""; }; @@ -148,17 +210,40 @@ 787C48472F228D950027A012 /* JSONRPCMessageHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONRPCMessageHandler.swift; sourceTree = ""; }; 787C95972F17F23500AB3BF1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 78A190B52F3A3ADA007F24E0 /* IOButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOButton.swift; sourceTree = ""; }; + 78E4A1B02F5C110200D4F1AA /* IOKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOKeys.swift; sourceTree = ""; }; 78EA9F902F36611B008B17D3 /* AppsTerminate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppsTerminate.swift; sourceTree = ""; }; 78F689132F17EE190025C8AC /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 78F689372F17EF1B0025C8AC /* devicekit_iosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = devicekit_iosApp.swift; sourceTree = ""; }; + 79019D07340032631918358D /* XCTest.framework */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/AppleTVOS.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 94826F4329DB082100795E9B /* SystemPermissionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemPermissionManager.swift; sourceTree = ""; }; 9811C9082C49751D00DDACA0 /* OrientationGeometry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrientationGeometry.swift; sourceTree = ""; }; AAAA00012F82000100000001 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + BEB7B3F9D0E9FC3377B3F800 /* 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; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ - 787C95D52F17F59E00AB3BF1 /* View */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = View; sourceTree = ""; }; - 78C54BD12F2D67E300A9369C /* Streamer */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Streamer; sourceTree = ""; }; + 787C95D52F17F59E00AB3BF1 /* View */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + ); + explicitFileTypes = { + }; + explicitFolders = ( + ); + path = View; + sourceTree = ""; + }; + 78C54BD12F2D67E300A9369C /* Streamer */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + ); + explicitFileTypes = { + }; + explicitFolders = ( + ); + path = Streamer; + sourceTree = ""; + }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ @@ -178,6 +263,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 8A77574C67E658C83CA4A70C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 05DB44E2FA2B136BEA2F0B3C /* Foundation.framework in Frameworks */, + 7D450004153BD0CAA803391A /* XCTest.framework in Frameworks */, + F696916E157EB09BDBCF5132 /* FlyingFox in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -196,6 +291,7 @@ children = ( 52049BD32935039F00807AA3 /* devicekit-ios.app */, 52049BF3293503A200807AA3 /* devicekit-iosUITests.xctest */, + 06DB3D932EBB93028B539685 /* devicekit-tvosUITests.xctest */, ); name = Products; sourceTree = ""; @@ -231,6 +327,7 @@ children = ( 612DE40129801F71003C2BE0 /* XCTest.framework */, 78F689132F17EE190025C8AC /* UIKit.framework */, + A8FA10DE933F63445BAE2595 /* tvOS */, ); name = Frameworks; sourceTree = ""; @@ -348,6 +445,14 @@ path = Handlers; sourceTree = ""; }; + A8FA10DE933F63445BAE2595 /* tvOS */ = { + isa = PBXGroup; + children = ( + BEB7B3F9D0E9FC3377B3F800 /* Foundation.framework */, + ); + name = tvOS; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -376,9 +481,58 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A2691B44CC31F76D90452444 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 624D02949107BFAA1A01CE29 /* XCUIApplicationImpl.h in Headers */, + 00C48C967AE3D00B221ADC02 /* FBScreenshot.h in Headers */, + DBC6B81C12180306B0D14C54 /* XCUIApplication+FBQuiescence.h in Headers */, + A1A0950E2FF49EEB56A7931A /* XCUIApplicationProcess.h in Headers */, + 9BB1385B2D6CB97B5E1DF262 /* XCUIDevice.h in Headers */, + DFD8C5E67F731688B7AD8276 /* XCUIApplication.h in Headers */, + 2F386FCD920B2C009F1A6BBC /* XCAXClient_iOS+FBSnapshotReqParams.h in Headers */, + 1941E2F4FA085893EC1177EF /* XCUIApplication+Helper.h in Headers */, + 884A0247F2AFAC2C8E289FBF /* FBLogger.h in Headers */, + 3EA30189877288CD244B9A0B /* XCTestManager_ManagerInterface-Protocol.h in Headers */, + AD3EADC830FE8CCA1585818B /* FBConfiguration.h in Headers */, + 0161FB34A40138543E558E15 /* XCAXClient_iOS.h in Headers */, + 9B63CAE92B8CF4FBBA5140A5 /* XCTestDaemonsProxy.h in Headers */, + 355EC369900195D9605B763C /* XCAccessibilityElement.h in Headers */, + 28984ED83F9513779C061381 /* CDStructures.h in Headers */, + 1DCF3F02252DC8BB0A150045 /* devicekit-iosUITests-Bridging-Header.h in Headers */, + EC7C56E5A57A24F6310F1A09 /* XCUIApplicationProcess+FBQuiescence.h in Headers */, + A543801BC12FCCAE0623EAD8 /* AXClientProxy.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 297871A835D8238B41FA004B /* devicekit-tvosUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = CECC47FDB7287DB2B421819E /* Build configuration list for PBXNativeTarget "devicekit-tvosUITests" */; + buildPhases = ( + A2691B44CC31F76D90452444 /* Headers */, + F73CF66FF777D0663EBA7715 /* Sources */, + 8A77574C67E658C83CA4A70C /* Frameworks */, + 57D5ECFBBD4579E6247685AB /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 78C54BD12F2D67E300A9369C /* Streamer */, + ); + name = "devicekit-tvosUITests"; + packageProductDependencies = ( + EBF28227FF61B70D19DDE281 /* FlyingFox */, + ); + productName = "devicekit-tvosUITests"; + productReference = 06DB3D932EBB93028B539685 /* devicekit-tvosUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; 52049BD22935039F00807AA3 /* devicekit-ios */ = { isa = PBXNativeTarget; buildConfigurationList = 52049BFD293503A200807AA3 /* Build configuration list for PBXNativeTarget "devicekit-ios" */; @@ -395,8 +549,6 @@ 787C95D52F17F59E00AB3BF1 /* View */, ); name = "devicekit-ios"; - packageProductDependencies = ( - ); productName = "maestro-driver-ios"; productReference = 52049BD32935039F00807AA3 /* devicekit-ios.app */; productType = "com.apple.product-type.application"; @@ -464,6 +616,7 @@ targets = ( 52049BD22935039F00807AA3 /* devicekit-ios */, 52049BF2293503A200807AA3 /* devicekit-iosUITests */, + 297871A835D8238B41FA004B /* devicekit-tvosUITests */, ); }; /* End PBXProject section */ @@ -485,6 +638,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 57D5ECFBBD4579E6247685AB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B8FBFB840AABD10B05DEF0E8 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -543,6 +704,53 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + F73CF66FF777D0663EBA7715 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A6E5ACA822551BCC70942D55 /* JSONRPCHTTPHandler.swift in Sources */, + B636674E8B56967896BD08C6 /* IOGesture.swift in Sources */, + E2433B8447C892108A11FC74 /* RunnerDaemonProxy.swift in Sources */, + EC9B50B9764C1544B5B91FD2 /* SystemPermissionManager.swift in Sources */, + 122FABEEC00A0F17E4F04811 /* FBLogger.m in Sources */, + 3CE3C8A2ABF9D07AD61EEA73 /* FBScreenshot.m in Sources */, + A7F7596026F95FBD8297CC7F /* AppsForeground.swift in Sources */, + D7B293D07B4CB605C14C044C /* AXClientProxy.m in Sources */, + 22704AE8F9FB64145D90DF72 /* DeviceInfo.swift in Sources */, + B073667315FB4D9E4332C5AE /* XCAXClient_iOS+FBSnapshotReqParams.m in Sources */, + 9C765909539AE04A217DD1F4 /* AppsLaunch.swift in Sources */, + A00D5AB8F6E0F5CE06377310 /* AXClientSwizzler.swift in Sources */, + B3E24A58415777E32C267B79 /* IOTap.swift in Sources */, + 4EB43A87FBDB74F092EE24E6 /* DumpUI.swift in Sources */, + ECDFA922C0117DEBE58D1F69 /* XCTestDaemonsProxy.m in Sources */, + FE73645026930316D712AFBB /* IOButton.swift in Sources */, + FF8B283A8DF6D51B1A7E4CD0 /* PointerEventPath.swift in Sources */, + 30151A4111977439D0303164 /* IOSwipe.swift in Sources */, + C7330BE333EB2E786B2D9C74 /* JSONRPCMessageHandler.swift in Sources */, + 938D7BDFE204AC0B8AC3E1CF /* OrientationGeometry.swift in Sources */, + 316F0F773353E7A652D56807 /* EventRecord.swift in Sources */, + 259CD442315E5B812702C64B /* JSONRPCModels.swift in Sources */, + 8E8BBE0BBBB73B8074357641 /* IOOrientationSet.swift in Sources */, + 235F49B2463019B3FBAB9B01 /* IOOrientationGet.swift in Sources */, + DAC965FEC9FB0DA876F81C2F /* RPCMethodHandler.swift in Sources */, + 54BD87EBA4EBCC2897C7B08F /* IOLongpress.swift in Sources */, + 4DC8EC2D308A07DFAD64F3EB /* Screenshot.swift in Sources */, + 56AD8C619AFABA24BB9BF726 /* XCTestServer.swift in Sources */, + 7270F40D1DD94D314AD9556F /* URL.swift in Sources */, + 244DD46D3E8F596EB3BFFCD8 /* JSONRPCDispatcher.swift in Sources */, + 034CAE017DBB0653A564F523 /* XCUIApplication+Helper.m in Sources */, + CF4FB3A7202D31A03341B7B3 /* XCUIApplicationProcess+FBQuiescence.m in Sources */, + AC75A950D43275503666ECC8 /* devicekit_iosUITests.swift in Sources */, + 286C8DE34DA6FDEE5643630F /* AppsTerminate.swift in Sources */, + D7DA3A8AF6A06A325423F66E /* FBConfiguration.m in Sources */, + B95556082A6382C6D0A9C3EC /* IOText.swift in Sources */, + F0881FEA5B0136EB00959663 /* IOKeys.swift in Sources */, + 4567136EF51F97DF02F7009A /* AXElement.swift in Sources */, + DCF95ADBF618D3E7DEAC31EC /* RunningApp.swift in Sources */, + 0A405966B03B19257EE892F2 /* XCUIApplication+FBQuiescence.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -554,6 +762,26 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ + 32B97BC56CF509E075A39851 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + GENERATE_INFOPLIST_FILE = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.mobilenext.devicekit-tvosUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_OBJC_BRIDGING_HEADER = "DeviceKitTests/Categories/devicekit-iosUITests-Bridging-Header.h"; + SWIFT_VERSION = 5.9; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 16.0; + }; + name = Debug; + }; 52049BFB293503A200807AA3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -800,6 +1028,27 @@ }; name = Release; }; + 5DF6AA80074B9E86C4D4CFAB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + GENERATE_INFOPLIST_FILE = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.mobilenext.devicekit-tvosUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = appletvos; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_OBJC_BRIDGING_HEADER = "DeviceKitTests/Categories/devicekit-iosUITests-Bridging-Header.h"; + SWIFT_VERSION = 5.9; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 16.0; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -830,6 +1079,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + CECC47FDB7287DB2B421819E /* Build configuration list for PBXNativeTarget "devicekit-tvosUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5DF6AA80074B9E86C4D4CFAB /* Release */, + 32B97BC56CF509E075A39851 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ @@ -849,6 +1107,11 @@ package = 52049C062935E04D00807AA3 /* XCRemoteSwiftPackageReference "FlyingFox" */; productName = FlyingFox; }; + EBF28227FF61B70D19DDE281 /* FlyingFox */ = { + isa = XCSwiftPackageProductDependency; + package = 52049C062935E04D00807AA3 /* XCRemoteSwiftPackageReference "FlyingFox" */; + productName = FlyingFox; + }; /* End XCSwiftPackageProductDependency section */ }; rootObject = 52049BCB2935039F00807AA3 /* Project object */; diff --git a/devicekit-ios.xcodeproj/xcshareddata/xcschemes/devicekit-tvos.xcscheme b/devicekit-ios.xcodeproj/xcshareddata/xcschemes/devicekit-tvos.xcscheme new file mode 100644 index 0000000..9e7f28f --- /dev/null +++ b/devicekit-ios.xcodeproj/xcshareddata/xcschemes/devicekit-tvos.xcscheme @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scripts/patch-tvos-runner.sh b/scripts/patch-tvos-runner.sh new file mode 100755 index 0000000..a7d7955 --- /dev/null +++ b/scripts/patch-tvos-runner.sh @@ -0,0 +1,41 @@ +#!/bin/sh +# Embed the Swift Testing support libraries that the tvOS Simulator runtime does +# not ship in its dyld shared cache. Without this, the XCTest runner links +# (transitively, via XCTestCore) against Testing.framework -> lib_TestingInterop.dylib +# and _Testing_Foundation.framework, which are present on iOS simulators but missing +# on tvOS simulators. The runner therefore launches fine via `xcodebuild +# test-without-building` (which injects toolchain search paths) but aborts at dyld +# time when started directly via `simctl launch` (how mobilecli starts the agent). +# +# This script makes the runner self-contained by copying the missing libraries into +# the bundle's Frameworks directory, adding an @rpath so they resolve as siblings, +# and re-signing the modified Mach-O files ad-hoc for the simulator. +# +# Usage: scripts/patch-tvos-runner.sh +set -e + +APP="${1:?Usage: $0 }" +FW="$APP/Frameworks" +TVDIR="$(xcode-select -p)/Platforms/AppleTVSimulator.platform/Developer" + +if [ ! -d "$APP" ]; then + echo "error: runner app not found at $APP" + exit 1 +fi + +cp "$TVDIR/usr/lib/lib_TestingInterop.dylib" "$FW/" +cp -R "$TVDIR/Library/Frameworks/_Testing_Foundation.framework" "$FW/" + +# Make each Swift Testing binary resolve its @rpath siblings from Frameworks/. +add_rpath() { + install_name_tool -add_rpath '@loader_path/..' "$1" 2>/dev/null || true +} +add_rpath "$FW/Testing.framework/Testing" +add_rpath "$FW/_Testing_Foundation.framework/_Testing_Foundation" + +# Re-sign modified Mach-O files (ad-hoc) for the simulator. +codesign --force --sign - "$FW/lib_TestingInterop.dylib" +codesign --force --sign - "$FW/Testing.framework" +codesign --force --sign - "$FW/_Testing_Foundation.framework" + +echo "Patched tvOS runner with Swift Testing support libraries" From 816073bf66ec2f8ba3e419fb995ae11743fc723d Mon Sep 17 00:00:00 2001 From: Seto Elkahfi Date: Thu, 2 Jul 2026 13:23:22 +0200 Subject: [PATCH 2/5] Update tvOS test runner app icon to match iOS Add a compiled brandassets catalog (imagestack/imagestacklayer) for the tvOS UI test runner, wire up ASSETCATALOG_COMPILER_APPICON_NAME and CFBundleDisplayName on the devicekit-tvosUITests target, and extend patch-tvos-runner.sh to copy the compiled Assets.car and set CFBundleIcons/CFBundleDisplayName on the Runner.app so the tvOS test runner now shows the same Device Kit icon as the iOS one. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Content.imageset/Contents.json | 12 +++++++ .../Content.imageset/bkg.png | Bin 0 -> 4601 bytes .../Back.imagestacklayer/Contents.json | 6 ++++ .../Contents.json | 17 ++++++++++ .../Content.imageset/Contents.json | 12 +++++++ .../Content.imageset/logo.png | Bin 0 -> 94852 bytes .../Front.imagestacklayer/Contents.json | 6 ++++ .../Content.imageset/Contents.json | 12 +++++++ .../Content.imageset/mask_clean.png | Bin 0 -> 3890 bytes .../Middle.imagestacklayer/Contents.json | 6 ++++ .../Content.imageset/Contents.json | 18 ++++++++++ .../Content.imageset/bkg@1x.png | Bin 0 -> 869 bytes .../Content.imageset/bkg@2x.png | Bin 0 -> 2245 bytes .../Back.imagestacklayer/Contents.json | 6 ++++ .../App Icon.imagestack/Contents.json | 17 ++++++++++ .../Content.imageset/Contents.json | 18 ++++++++++ .../Content.imageset/logo@1x.png | Bin 0 -> 21125 bytes .../Content.imageset/logo@2x.png | Bin 0 -> 54247 bytes .../Front.imagestacklayer/Contents.json | 6 ++++ .../Content.imageset/Contents.json | 18 ++++++++++ .../Content.imageset/mask_clean@1x.png | Bin 0 -> 452 bytes .../Content.imageset/mask_clean@2x.png | Bin 0 -> 1569 bytes .../Middle.imagestacklayer/Contents.json | 6 ++++ .../Contents.json | 32 ++++++++++++++++++ .../Contents.json | 16 +++++++++ .../Top Shelf Image.imageset/Contents.json | 16 +++++++++ devicekit-ios.xcodeproj/project.pbxproj | 4 +++ scripts/patch-tvos-runner.sh | 25 ++++++++++++++ 28 files changed, 253 insertions(+) create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/bkg.png create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/logo.png create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/mask_clean.png create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/bkg@1x.png create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/bkg@2x.png create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/logo@1x.png create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/logo@2x.png create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/mask_clean@1x.png create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/mask_clean@2x.png create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json create mode 100644 DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json new file mode 100644 index 0000000..8ed5cfc --- /dev/null +++ b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "bkg.png", + "idiom" : "tv" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/bkg.png b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/bkg.png new file mode 100644 index 0000000000000000000000000000000000000000..d7884c546b5301b9cd3edf436cd9a2d436d0afc1 GIT binary patch literal 4601 zcmeAS@N?(olHy`uVBq!ia0y~yUSquz<2RvOILn`LHz3wQ;peS&_ zz=HL4ysq93$ypjNwpXW#0Tu3f_uCpsG2|H>0Fo*a2|!Ya#{fujvPm#7G_Wx9FfceY zF|si*C>#Wu&M+aNfsuj1V^sNQ$c!d}(d;o=5{#CSqt(G^MLF6g7;P<$HVj9b%%i=7 r(SFlt7jd-nJUUK5`3OpasLbC>YzCj^ZF~b9k74k1^>bP0l+XkKXdqa= literal 0 HcmV?d00001 diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json new file mode 100644 index 0000000..de59d88 --- /dev/null +++ b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json @@ -0,0 +1,17 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + }, + "layers" : [ + { + "filename" : "Front.imagestacklayer" + }, + { + "filename" : "Middle.imagestacklayer" + }, + { + "filename" : "Back.imagestacklayer" + } + ] +} diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json new file mode 100644 index 0000000..3be21fb --- /dev/null +++ b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "logo.png", + "idiom" : "tv" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/logo.png b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b6f70c9f12460abd64015ab9807c56937eaa20bd GIT binary patch literal 94852 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

C5CFQqWjh&ZfC;uS8$x1b8^R#uomRml+&OP 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 Rtrn1HJYD@<);T3K0RW2T6D9xv literal 0 HcmV?d00001 diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json new file mode 100644 index 0000000..61f789c --- /dev/null +++ b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "filename" : "bkg@1x.png", + "idiom" : "tv", + "scale" : "1x" + }, + { + "filename" : "bkg@2x.png", + "idiom" : "tv", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/bkg@1x.png b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/bkg@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..efaa55003e1d08cfe526502da1edab4d04a2ebc7 GIT binary patch literal 869 zcmeAS@N?(olHy`uVBq!ia0y~yV4MJCf8byOk_+ROmNGCf>v+02hE&XXd&QBLK|$bv zfy2R{;oYotDW0nn*1w$@$-w%&oZ*1>VJ0IU?h^(&3Wql|@QiXs!(arag9uUaI8G)3 Uug)JIf!T+_)78&qol`;+0PheSd;kCd literal 0 HcmV?d00001 diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/bkg@2x.png b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/bkg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0b5733ebcaa704576906d851373920e3b71fab90 GIT binary patch literal 2245 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 literal 0 HcmV?d00001 diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json new file mode 100644 index 0000000..612ca1e --- /dev/null +++ b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "filename" : "mask_clean@1x.png", + "idiom" : "tv", + "scale" : "1x" + }, + { + "filename" : "mask_clean@2x.png", + "idiom" : "tv", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/mask_clean@1x.png b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/mask_clean@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..69a1e2d59b547c6e121c03755dee98a00a8b6cda GIT binary patch literal 452 zcmeAS@N?(olHy`uVBq!ia0y~yV4MJCf8byPl6p2qNFVdQ&MBb@0QYVc!vFvP literal 0 HcmV?d00001 diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/mask_clean@2x.png b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/mask_clean@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1e8f5eca09094c47938613f8a08d0bfb0b19192d GIT binary patch literal 1569 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV0^&A1{8^9=lsgR!1}_|#WAE}&f9~Aj6lId y3%>g2a@j8cGDpE^2#kinXb6mkz%U4b20yl9O9n>Ym{r$6zVUSRb6Mw<&;$S(fE4Wj literal 0 HcmV?d00001 diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json new file mode 100644 index 0000000..f47ba43 --- /dev/null +++ b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json @@ -0,0 +1,32 @@ +{ + "assets" : [ + { + "filename" : "App Icon - App Store.imagestack", + "idiom" : "tv", + "role" : "primary-app-icon", + "size" : "1280x768" + }, + { + "filename" : "App Icon.imagestack", + "idiom" : "tv", + "role" : "primary-app-icon", + "size" : "400x240" + }, + { + "filename" : "Top Shelf Image Wide.imageset", + "idiom" : "tv", + "role" : "top-shelf-image-wide", + "size" : "2320x720" + }, + { + "filename" : "Top Shelf Image.imageset", + "idiom" : "tv", + "role" : "top-shelf-image", + "size" : "1920x720" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json new file mode 100644 index 0000000..795cce1 --- /dev/null +++ b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "idiom" : "tv", + "scale" : "1x" + }, + { + "idiom" : "tv", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json new file mode 100644 index 0000000..795cce1 --- /dev/null +++ b/DeviceKitTests/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "idiom" : "tv", + "scale" : "1x" + }, + { + "idiom" : "tv", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/devicekit-ios.xcodeproj/project.pbxproj b/devicekit-ios.xcodeproj/project.pbxproj index 775e5ce..efc4bb6 100644 --- a/devicekit-ios.xcodeproj/project.pbxproj +++ b/devicekit-ios.xcodeproj/project.pbxproj @@ -765,11 +765,13 @@ 32B97BC56CF509E075A39851 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_STYLE = Manual; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "Device Kit"; PRODUCT_BUNDLE_IDENTIFIER = "com.mobilenext.devicekit-tvosUITests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; @@ -1031,11 +1033,13 @@ 5DF6AA80074B9E86C4D4CFAB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; CODE_SIGN_STYLE = Manual; DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "Device Kit"; PRODUCT_BUNDLE_IDENTIFIER = "com.mobilenext.devicekit-tvosUITests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; diff --git a/scripts/patch-tvos-runner.sh b/scripts/patch-tvos-runner.sh index a7d7955..a3ced12 100755 --- a/scripts/patch-tvos-runner.sh +++ b/scripts/patch-tvos-runner.sh @@ -11,6 +11,14 @@ # the bundle's Frameworks directory, adding an @rpath so they resolve as siblings, # and re-signing the modified Mach-O files ad-hoc for the simulator. # +# It also patches the display name and app icon on the auto-generated Runner.app, +# mirroring what scripts/patch-runner.sh does for the iOS runner. tvOS icons only +# work through a compiled asset catalog (Assets.car), so instead of copying loose +# PNGs we reuse the Assets.car + CFBundleIcons/CFBundleDisplayName that Xcode already +# compiled into the nested .xctest bundle (from the "App Icon & Top Shelf Image" +# brandassets in DeviceKitTests/Assets.xcassets) and copy them to the Runner.app root, +# where the Home Screen actually looks for them. +# # Usage: scripts/patch-tvos-runner.sh set -e @@ -39,3 +47,20 @@ codesign --force --sign - "$FW/Testing.framework" codesign --force --sign - "$FW/_Testing_Foundation.framework" echo "Patched tvOS runner with Swift Testing support libraries" + +# Set display name to match the iOS runner. +/usr/bin/plutil -replace CFBundleDisplayName -string "Device Kit" "${APP}/Info.plist" + +# Copy the compiled app icon catalog from the nested .xctest bundle to the +# Runner.app root and point the Runner's Info.plist at it, so the icon shows +# up on the Home Screen instead of the default placeholder. +XCTEST_DIR="${APP}/PlugIns/devicekit-tvosUITests.xctest" +if [ -f "${XCTEST_DIR}/Assets.car" ]; then + cp "${XCTEST_DIR}/Assets.car" "${APP}/Assets.car" + /usr/bin/plutil -replace CFBundleIcons -json \ + '{"CFBundlePrimaryIcon":"App Icon"}' \ + "${APP}/Info.plist" + echo "Patched tvOS runner: display name and icon applied" +else + echo "warning: no Assets.car found in ${XCTEST_DIR}, skipping icon patch" +fi From 3d1f4f766bf0cdcc62bb544dfb9eca782cc50b2b Mon Sep 17 00:00:00 2001 From: Seto Elkahfi Date: Thu, 2 Jul 2026 14:52:57 +0200 Subject: [PATCH 3/5] Add tvOS real-device runner build (tvos-ipa-unsigned) Mirror the iOS real-device flow for tvOS. patch-tvos-runner.sh now takes a simulator|device argument so it can pull the Swift Testing support libraries from AppleTVOS.platform for device builds; the new tvos-ipa-unsigned Makefile target builds the devicekit-tvos runner for generic/platform=tvOS, patches in the Device Kit display name and icon, and packages an unsigned devicekit-tvos-runner.ipa for re-signing at install time. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- Makefile | 25 ++++++++++++++++++++++++- README.md | 2 ++ scripts/patch-tvos-runner.sh | 25 ++++++++++++++++++++++--- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 33594f2..406bdd0 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ CODE_SIGN_IDENTITY ?= Apple Development # Export method for IPA (development, ad-hoc, app-store, enterprise) EXPORT_METHOD ?= development -.PHONY: help clean build archive ipa-unsigned sim-zip-arm64 sim-zip-x86_64 sim-zip sim-install tvos-sim-zip-arm64 tvos-sim-install test-coverage coverage-html lint +.PHONY: help clean build archive ipa-unsigned tvos-ipa-unsigned sim-zip-arm64 sim-zip-x86_64 sim-zip sim-install tvos-sim-zip-arm64 tvos-sim-install test-coverage coverage-html lint .DEFAULT_GOAL := help @@ -28,6 +28,7 @@ help: @echo " tvos-sim-zip-arm64 Build XCUITest runner zip for tvOS Simulator (arm64 / Apple Silicon)" @echo " tvos-sim-install Build and install the tvOS runner on the booted tvOS simulator" @echo " ipa-unsigned Build unsigned IPA with XCUITest runner for real iOS devices" + @echo " tvos-ipa-unsigned Build unsigned IPA with XCUITest runner for real Apple TV devices" @echo " debug Build with Debug configuration" @echo " release Build with Release configuration" @echo " clean Remove build artifacts" @@ -132,6 +133,28 @@ tvos-sim-zip-arm64: @rm -rf "$(EXPORT_PATH)/devicekit-tvosUITests-Runner.app" @echo "Simulator zip created at: $(EXPORT_PATH)/devicekit-tvos-Sim-arm64.zip" +# Create unsigned IPA with XCUITest runner for real Apple TV devices +tvos-ipa-unsigned: + @echo "Building unsigned tvOS test runner for arm64 Apple TV devices..." + xcodebuild build-for-testing \ + -project $(PROJECT) \ + -scheme devicekit-tvos \ + -configuration $(CONFIGURATION) \ + -destination 'generic/platform=tvOS' \ + -derivedDataPath $(BUILD_DIR) \ + CODE_SIGN_IDENTITY="" \ + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGNING_ALLOWED=NO | xcbeautify + @scripts/patch-tvos-runner.sh "$(BUILD_DIR)/Build/Products/$(CONFIGURATION)-appletvos/devicekit-tvosUITests-Runner.app" device + @echo "Packaging tvOS runner IPA..." + @rm -rf $(EXPORT_PATH)/Payload + @rm -f $(EXPORT_PATH)/devicekit-tvos-runner.ipa + @mkdir -p $(EXPORT_PATH)/Payload + @cp -r "$(BUILD_DIR)/Build/Products/$(CONFIGURATION)-appletvos/devicekit-tvosUITests-Runner.app" $(EXPORT_PATH)/Payload/ + @cd $(EXPORT_PATH) && zip -r devicekit-tvos-runner.ipa Payload + @rm -rf $(EXPORT_PATH)/Payload + @echo "Runner IPA created at: $(EXPORT_PATH)/devicekit-tvos-runner.ipa" + # Build and install tvOS runner on the booted tvOS simulator tvos-sim-install: @BOOTED=$$(xcrun simctl list devices booted -j | jq -r '[.devices[][] | select(.state=="Booted")] | first | .udid'); \ diff --git a/README.md b/README.md index 7e9c61a..0909f73 100644 --- a/README.md +++ b/README.md @@ -64,9 +64,11 @@ make sim-zip | Target | Output | Description | |--------|--------|-------------| | `make ipa-unsigned` | `build/export/devicekit-ios-unsigned.ipa` | Unsigned IPA for arm64 devices | +| `make tvos-ipa-unsigned` | `build/export/devicekit-tvos-runner.ipa` | Unsigned IPA for arm64 Apple TV devices | | `make sim-zip-arm64` | `build/export/devicekit-ios-Sim-arm64.zip` | Simulator runner (Apple Silicon) | | `make sim-zip-x86_64` | `build/export/devicekit-ios-Sim-x86_64.zip` | Simulator runner (Intel) | | `make sim-zip` | Both simulator zips | arm64 + x86_64 | +| `make tvos-sim-zip-arm64` | `build/export/devicekit-tvos-Sim-arm64.zip` | tvOS Simulator runner (Apple Silicon) | | `make lint` | — | Run SwiftLint | | `make clean` | — | Remove build artifacts | diff --git a/scripts/patch-tvos-runner.sh b/scripts/patch-tvos-runner.sh index a3ced12..ae82930 100755 --- a/scripts/patch-tvos-runner.sh +++ b/scripts/patch-tvos-runner.sh @@ -19,12 +19,31 @@ # brandassets in DeviceKitTests/Assets.xcassets) and copy them to the Runner.app root, # where the Home Screen actually looks for them. # -# Usage: scripts/patch-tvos-runner.sh +# The Swift Testing libraries are pulled from the AppleTVSimulator platform for +# simulator runners and from the AppleTVOS platform for real-device runners. The +# ad-hoc signature applied here to the copied binaries is a placeholder for the +# simulator; real-device runners are re-signed with a provisioning profile at +# install time (mobilecli's ResignIPA deep-signs Frameworks/), which replaces it. +# +# Usage: scripts/patch-tvos-runner.sh [simulator|device] set -e -APP="${1:?Usage: $0 }" +APP="${1:?Usage: $0 [simulator|device]}" +TARGET="${2:-simulator}" FW="$APP/Frameworks" -TVDIR="$(xcode-select -p)/Platforms/AppleTVSimulator.platform/Developer" + +case "$TARGET" in + device) + TVDIR="$(xcode-select -p)/Platforms/AppleTVOS.platform/Developer" + ;; + simulator) + TVDIR="$(xcode-select -p)/Platforms/AppleTVSimulator.platform/Developer" + ;; + *) + echo "error: unknown target '$TARGET' (expected 'simulator' or 'device')" + exit 1 + ;; +esac if [ ! -d "$APP" ]; then echo "error: runner app not found at $APP" From 0db2b7e02a00ca5040281a494e19577db6f1f4a4 Mon Sep 17 00:00:00 2001 From: Seto Elkahfi <1797197+setoelkahfi@users.noreply.github.com> Date: Tue, 14 Jul 2026 16:21:56 +0200 Subject: [PATCH 4/5] feat(tvos): add device.io.focus RPC for accessibility-identity focus Add a tvOS-only device.io.focus JSON-RPC handler that selects an element by accessibility identifier/label and drives Siri Remote focus with a bounded (<=50-move) traversal, returning the focused element on success or a focusNotFound (-32002) error carrying the last focused element. - New IOFocusMethodHandler (#if os(tvOS)); registered in the dispatcher - Re-reads the target frame each move to handle tvOS focus scrolling - Early-exit on no-progress (dead end / oscillation) - Guard SpringBoard-specific DumpUI normalisation behind #if os(iOS) so tvOS dumps the foreground app's own accessibility hierarchy - Remove throwaway Viaplay exploration scaffolding + unused import Implements: SPECS/quality/real-tvos-device-support/SPEC.md (Milestone 4) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- DeviceKitTests/JSONRPC/Handlers/DumpUI.swift | 12 ++ DeviceKitTests/JSONRPC/Handlers/IOFocus.swift | 194 ++++++++++++++++++ .../JSONRPC/JSONRPCDispatcher.swift | 5 + DeviceKitTests/JSONRPC/JSONRPCModels.swift | 4 + DeviceKitTests/JSONRPC/RPCMethodHandler.swift | 3 + DeviceKitTests/devicekit_iosUITests.swift | 1 - devicekit-ios.xcodeproj/project.pbxproj | 6 + 7 files changed, 224 insertions(+), 1 deletion(-) create mode 100644 DeviceKitTests/JSONRPC/Handlers/IOFocus.swift diff --git a/DeviceKitTests/JSONRPC/Handlers/DumpUI.swift b/DeviceKitTests/JSONRPC/Handlers/DumpUI.swift index bf9d3f0..10c346c 100644 --- a/DeviceKitTests/JSONRPC/Handlers/DumpUI.swift +++ b/DeviceKitTests/JSONRPC/Handlers/DumpUI.swift @@ -54,9 +54,15 @@ struct DumpUIMethodHandler: RPCMethodHandler { do { let foregroundApp = RunningApp.getForegroundApp() guard let foregroundApp = foregroundApp else { + #if os(iOS) logger.warning("No foreground app found, returning springboard app hierarchy") let springboardHierarchy = try elementHierarchy(xcuiElement: springboardApplication) return try formatResponse(axElement: springboardHierarchy, format: format) + #else + // tvOS has no SpringBoard; without a foreground app there is no + // hierarchy to serialise. + throw RPCMethodError.internalError("No foreground app found") + #endif } logger.info("[Start] View hierarchy snapshot for \(foregroundApp)") @@ -106,6 +112,7 @@ struct DumpUIMethodHandler: RPCMethodHandler { SystemPermissionManager.handleSystemPermissionAlertIfNeeded(foregroundApp: foregroundApp) let appHierarchy = try getHierarchyWithFallback(foregroundApp) + #if os(iOS) let statusBars = logger.measure(message: "Fetch status bar hierarchy") { fullStatusBars(springboardApplication) } ?? [] @@ -134,6 +141,11 @@ struct DumpUIMethodHandler: RPCMethodHandler { } return buildRootElement(app: appHierarchy, statusBars: statusBars, safari: safariWebViewHierarchy) + #else + // tvOS has no SpringBoard / status bars / Safari view service. Use the + // foreground app's own root hierarchy directly. + return buildRootElement(app: appHierarchy, statusBars: [], safari: nil) + #endif } private func buildRootElement(app: AXElement, statusBars: [AXElement], safari: AXElement?) -> AXElement { diff --git a/DeviceKitTests/JSONRPC/Handlers/IOFocus.swift b/DeviceKitTests/JSONRPC/Handlers/IOFocus.swift new file mode 100644 index 0000000..a8a2813 --- /dev/null +++ b/DeviceKitTests/JSONRPC/Handlers/IOFocus.swift @@ -0,0 +1,194 @@ +import XCTest +import os + +#if os(tvOS) + +/// Parameters for `device.io.focus`. +/// +/// The target element is selected by accessibility `identifier` and/or `label`. +/// At least one of `identifier`/`label` must be supplied. `elementType` is an +/// optional hint carried for forward compatibility. +struct IOFocusRequest: Codable { + let identifier: String? + let label: String? + let elementType: String? +} + +@MainActor +struct IOFocusMethodHandler: RPCMethodHandler { + static let methodName = "device.io.focus" + + /// Upper bound on Siri Remote moves before giving up (D3). + private static let maxMoves = 50 + + private let logger = Logger( + subsystem: Bundle.main.bundleIdentifier!, + category: String(describing: Self.self) + ) + + func execute(params: JSONValue?) async throws -> JSONValue { + let request = try decodeParams(IOFocusRequest.self, from: params) + + let identifier = request.identifier.flatMap { $0.isEmpty ? nil : $0 } + let label = request.label.flatMap { $0.isEmpty ? nil : $0 } + + guard identifier != nil || label != nil else { + throw RPCMethodError.invalidParams( + "device.io.focus requires at least one of 'identifier' or 'label'" + ) + } + + let selectorDescription = Self.selectorDescription(identifier: identifier, label: label) + + guard let app = RunningApp.getForegroundApp() else { + throw RPCMethodError.internalError( + "device.io.focus: no foreground app to search for [\(selectorDescription)]" + ) + } + + let target = app.descendants(matching: .any) + .matching(Self.matchPredicate(identifier: identifier, label: label)) + .firstMatch + + guard target.exists else { + throw focusFailure( + selector: selectorDescription, + moves: 0, + lastFocused: focusedElement(in: app), + reason: "target element not found" + ) + } + + var lastFocused = focusedElement(in: app) + // Signature (identifier + frame) of the focused element captured just + // before the last press, used to detect a no-progress dead end. + var previousSignature: (identifier: String, frame: CGRect)? + var movesTaken = 0 + var noProgress = false + + for move in 0...Self.maxMoves { + movesTaken = move + guard let focused = focusedElement(in: app) else { + // No focusable element currently; nudge with a right press and retry. + if move < Self.maxMoves { + XCUIRemote.shared.press(.right) + continue + } + break + } + lastFocused = focused + + if matches(focused, identifier: identifier, label: label) { + logger.info("[Done] Focused [\(selectorDescription)] after \(move) move(s)") + return try serialize(focused) + } + + // No-progress early exit: if the last press did not change the + // focused element (same identifier + frame), we are at a dead end + // or oscillating — fail early instead of burning all 50 moves. + let currentSignature = (identifier: focused.identifier, frame: focused.frame) + if let previousSignature, + previousSignature.identifier == currentSignature.identifier, + previousSignature.frame == currentSignature.frame { + noProgress = true + break + } + + if move == Self.maxMoves { break } + + // Re-read the target's frame each iteration: on tvOS, moving focus + // scrolls the container and shifts the target's on-screen frame, so + // a centre computed once before the loop would be stale. + let targetCenter = center(of: target.frame) + let focusedCenter = center(of: currentSignature.frame) + let dx = targetCenter.x - focusedCenter.x + let dy = targetCenter.y - focusedCenter.y + let direction: XCUIRemote.Button + if abs(dx) > abs(dy) { + direction = dx > 0 ? .right : .left + } else { + direction = dy > 0 ? .down : .up + } + logger.info("Focus move \(move): pressing \(String(describing: direction)) toward [\(selectorDescription)]") + XCUIRemote.shared.press(direction) + previousSignature = currentSignature + } + + let reason = noProgress + ? "focus did not change after \(movesTaken) move(s) (dead end or oscillation)" + : "element not focused after \(Self.maxMoves) move(s)" + throw focusFailure( + selector: selectorDescription, + moves: noProgress ? movesTaken : Self.maxMoves, + lastFocused: lastFocused, + reason: reason + ) + } + + // MARK: - Helpers + + private func focusedElement(in app: XCUIApplication) -> XCUIElement? { + let focused = app.descendants(matching: .any) + .matching(NSPredicate(format: "hasFocus == true")) + .firstMatch + return focused.exists ? focused : nil + } + + private func matches(_ element: XCUIElement, identifier: String?, label: String?) -> Bool { + if let identifier, element.identifier == identifier { return true } + if let label, element.label == label { return true } + return false + } + + private func center(of frame: CGRect) -> CGPoint { + CGPoint(x: frame.midX, y: frame.midY) + } + + private func serialize(_ element: XCUIElement) throws -> JSONValue { + do { + let snapshotDictionary = try element.snapshot().dictionaryRepresentation + let sourceTree = SourceTreeElement(axElement: AXElement(snapshotDictionary)) + return try JSONValue.from(sourceTree) + } catch { + throw RPCMethodError.internalError( + "device.io.focus: failed to serialize element snapshot: \(error.localizedDescription)" + ) + } + } + + private func focusFailure( + selector: String, + moves: Int, + lastFocused: XCUIElement?, + reason: String + ) -> RPCMethodError { + var data: JSONValue? + if let lastFocused, lastFocused.exists { + // Wrapped in serialize(), which converts any snapshot/serialisation + // failure into an internalError; swallowed here so the failure path + // still returns the -32002 focusNotFound error with best-effort data. + data = try? serialize(lastFocused) + } + let message = "device.io.focus could not focus element matching [\(selector)] (\(reason))" + return RPCMethodError.focusNotFound(message: message, data: data) + } + + private static func matchPredicate(identifier: String?, label: String?) -> NSPredicate { + if let identifier, let label { + return NSPredicate(format: "identifier == %@ OR label == %@", identifier, label) + } else if let identifier { + return NSPredicate(format: "identifier == %@", identifier) + } else { + return NSPredicate(format: "label == %@", label ?? "") + } + } + + private static func selectorDescription(identifier: String?, label: String?) -> String { + var parts: [String] = [] + if let identifier { parts.append("identifier=\(identifier)") } + if let label { parts.append("label=\(label)") } + return parts.joined(separator: ", ") + } +} + +#endif diff --git a/DeviceKitTests/JSONRPC/JSONRPCDispatcher.swift b/DeviceKitTests/JSONRPC/JSONRPCDispatcher.swift index 48c1387..e71683d 100644 --- a/DeviceKitTests/JSONRPC/JSONRPCDispatcher.swift +++ b/DeviceKitTests/JSONRPC/JSONRPCDispatcher.swift @@ -34,6 +34,11 @@ final class JSONRPCDispatcher { registerHandler(IOOrientationGetMethodHandler()) registerHandler(IOOrientationSetMethodHandler()) #endif + + // Focus-based navigation is tvOS-only (Siri Remote driven). + #if os(tvOS) + registerHandler(IOFocusMethodHandler()) + #endif } func registerHandler(_ handler: T) { diff --git a/DeviceKitTests/JSONRPC/JSONRPCModels.swift b/DeviceKitTests/JSONRPC/JSONRPCModels.swift index 581fe72..5c0563d 100644 --- a/DeviceKitTests/JSONRPC/JSONRPCModels.swift +++ b/DeviceKitTests/JSONRPC/JSONRPCModels.swift @@ -90,6 +90,10 @@ struct JSONRPCError: Codable { static func preconditionFailed(message: String) -> JSONRPCError { JSONRPCError(code: -32001, message: message) } + + static func focusNotFound(message: String, data: JSONValue? = nil) -> JSONRPCError { + JSONRPCError(code: -32002, message: message, data: data) + } } enum JSONValue: Codable, Equatable { diff --git a/DeviceKitTests/JSONRPC/RPCMethodHandler.swift b/DeviceKitTests/JSONRPC/RPCMethodHandler.swift index 0cf5d34..3bd732b 100644 --- a/DeviceKitTests/JSONRPC/RPCMethodHandler.swift +++ b/DeviceKitTests/JSONRPC/RPCMethodHandler.swift @@ -30,6 +30,7 @@ enum RPCMethodError: Error { case invalidParams(String) case internalError(String) case timeout(String) + case focusNotFound(message: String, data: JSONValue?) var jsonRPCError: JSONRPCError { switch self { @@ -39,6 +40,8 @@ enum RPCMethodError: Error { return .internalError(message: message) case .timeout(let message): return .timeout(message: message) + case .focusNotFound(let message, let data): + return .focusNotFound(message: message, data: data) } } } diff --git a/DeviceKitTests/devicekit_iosUITests.swift b/DeviceKitTests/devicekit_iosUITests.swift index d035e19..9ebbc5f 100644 --- a/DeviceKitTests/devicekit_iosUITests.swift +++ b/DeviceKitTests/devicekit_iosUITests.swift @@ -1,4 +1,3 @@ -import FlyingFox import XCTest import os diff --git a/devicekit-ios.xcodeproj/project.pbxproj b/devicekit-ios.xcodeproj/project.pbxproj index efc4bb6..ecff0a3 100644 --- a/devicekit-ios.xcodeproj/project.pbxproj +++ b/devicekit-ios.xcodeproj/project.pbxproj @@ -91,6 +91,7 @@ 787C48482F228D960027A012 /* JSONRPCMessageHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787C48472F228D950027A012 /* JSONRPCMessageHandler.swift */; }; 787C95982F17F23500AB3BF1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 787C95972F17F23500AB3BF1 /* Assets.xcassets */; }; 78A190B62F3A3ADA007F24E0 /* IOButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78A190B52F3A3ADA007F24E0 /* IOButton.swift */; }; + B10F0C05E0000000000A0002 /* IOFocus.swift in Sources */ = {isa = PBXBuildFile; fileRef = B10F0C05E0000000000A0001 /* IOFocus.swift */; }; 78E4A1B12F5C110200D4F1AA /* IOKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78E4A1B02F5C110200D4F1AA /* IOKeys.swift */; }; 78EA9F912F36611B008B17D3 /* AppsTerminate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78EA9F902F36611B008B17D3 /* AppsTerminate.swift */; }; 78F689392F17EF1B0025C8AC /* devicekit_iosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78F689372F17EF1B0025C8AC /* devicekit_iosApp.swift */; }; @@ -131,6 +132,7 @@ F0881FEA5B0136EB00959663 /* IOKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78E4A1B02F5C110200D4F1AA /* IOKeys.swift */; }; F696916E157EB09BDBCF5132 /* FlyingFox in Frameworks */ = {isa = PBXBuildFile; productRef = EBF28227FF61B70D19DDE281 /* FlyingFox */; }; FE73645026930316D712AFBB /* IOButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78A190B52F3A3ADA007F24E0 /* IOButton.swift */; }; + B10F0C05E0000000000A0003 /* IOFocus.swift in Sources */ = {isa = PBXBuildFile; fileRef = B10F0C05E0000000000A0001 /* IOFocus.swift */; }; FF8B283A8DF6D51B1A7E4CD0 /* PointerEventPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 613E87D6299A64BD00FF8551 /* PointerEventPath.swift */; }; /* End PBXBuildFile section */ @@ -210,6 +212,7 @@ 787C48472F228D950027A012 /* JSONRPCMessageHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONRPCMessageHandler.swift; sourceTree = ""; }; 787C95972F17F23500AB3BF1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 78A190B52F3A3ADA007F24E0 /* IOButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOButton.swift; sourceTree = ""; }; + B10F0C05E0000000000A0001 /* IOFocus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOFocus.swift; sourceTree = ""; }; 78E4A1B02F5C110200D4F1AA /* IOKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOKeys.swift; sourceTree = ""; }; 78EA9F902F36611B008B17D3 /* AppsTerminate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppsTerminate.swift; sourceTree = ""; }; 78F689132F17EE190025C8AC /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; @@ -433,6 +436,7 @@ 781480362F27CEF000E61E3B /* Screenshot.swift */, 7814800A2F27C55500E61E3B /* IOLongpress.swift */, 78A190B52F3A3ADA007F24E0 /* IOButton.swift */, + B10F0C05E0000000000A0001 /* IOFocus.swift */, 78147FCA2F27C03500E61E3B /* IOSwipe.swift */, 7865E50E2F42596200D0F45F /* AppsForeground.swift */, 78147F3C2F27BDBC00E61E3B /* AppsLaunch.swift */, @@ -677,6 +681,7 @@ 787C47E02F228B770027A012 /* DumpUI.swift in Sources */, 521C1F102D8051FC0024EE42 /* XCTestDaemonsProxy.m in Sources */, 78A190B62F3A3ADA007F24E0 /* IOButton.swift in Sources */, + B10F0C05E0000000000A0002 /* IOFocus.swift in Sources */, 613E87D7299A64BD00FF8551 /* PointerEventPath.swift in Sources */, 78147FCB2F27C04400E61E3B /* IOSwipe.swift in Sources */, 787C48482F228D960027A012 /* JSONRPCMessageHandler.swift in Sources */, @@ -724,6 +729,7 @@ 4EB43A87FBDB74F092EE24E6 /* DumpUI.swift in Sources */, ECDFA922C0117DEBE58D1F69 /* XCTestDaemonsProxy.m in Sources */, FE73645026930316D712AFBB /* IOButton.swift in Sources */, + B10F0C05E0000000000A0003 /* IOFocus.swift in Sources */, FF8B283A8DF6D51B1A7E4CD0 /* PointerEventPath.swift in Sources */, 30151A4111977439D0303164 /* IOSwipe.swift in Sources */, C7330BE333EB2E786B2D9C74 /* JSONRPCMessageHandler.swift in Sources */, From 55e7ab5a74423cd1fcfc61ee39dfd5639560048c Mon Sep 17 00:00:00 2001 From: Seto Elkahfi <1797197+setoelkahfi@users.noreply.github.com> Date: Wed, 15 Jul 2026 14:43:47 +0200 Subject: [PATCH 5/5] fix(tvos): bind DeviceKit server on IPv6 tunnel hosts Allow the tvOS XCTest server to bind CoreDevice IPv6 tunnel addresses while preserving IPv4 localhost behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- DeviceKitTests/XCTestServer.swift | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/DeviceKitTests/XCTestServer.swift b/DeviceKitTests/XCTestServer.swift index b896a85..f3df604 100644 --- a/DeviceKitTests/XCTestServer.swift +++ b/DeviceKitTests/XCTestServer.swift @@ -1,4 +1,5 @@ import FlyingFox +import FlyingSocks import Foundation import os @@ -100,7 +101,7 @@ final class XCTestServer { func start() async throws { let port = ProcessInfo.processInfo.environment["DEVICEKIT_LISTEN_PORT"]?.toUInt16() ?? defaultPort let server = HTTPServer( - address: try .inet(ip4: localhost, port: port), + address: try listenAddress(host: localhost, port: port), timeout: defaultTimeout ) @@ -134,5 +135,11 @@ final class XCTestServer { logger.info("Server is ready (WebSocket: ws://\(self.localhost):\(port)/ws, HTTP: POST http://\(self.localhost):\(port)/rpc, MJPEG: http://\(self.localhost):\(port)/mjpeg)") try await server.run() } -} + private func listenAddress(host: String, port: UInt16) throws -> any SocketAddress { + if host.contains(":") { + return try sockaddr_in6.inet6(ip6: host, port: port) + } + return try sockaddr_in.inet(ip4: host, port: port) + } +}