mirror of
https://github.com/priyanshujain/sanderling.git
synced 2026-10-02 19:17:10 +00:00
76 lines
2.5 KiB
Go
76 lines
2.5 KiB
Go
// Package transport is the only layer that touches the generated companion
|
|
// gRPC stubs. Everything above it speaks the brand-free Companion interface,
|
|
// so the companion binary stays swappable behind this boundary.
|
|
package transport
|
|
|
|
import (
|
|
"context"
|
|
|
|
pb "github.com/priyanshujain/sanderling/internal/driver/ioscompanion/companionpb"
|
|
)
|
|
|
|
// Companion drives a single booted iOS simulator through the companion.
|
|
// Callers own per-call deadlines by passing a context.
|
|
type Companion interface {
|
|
// AccessibilityInfo returns the describe-all accessibility tree as the
|
|
// raw flat-format JSON string the companion emits.
|
|
AccessibilityInfo(ctx context.Context) (string, error)
|
|
|
|
// SendHID opens the HID stream, sends every event in order, then closes.
|
|
SendHID(ctx context.Context, events ...HIDEvent) error
|
|
|
|
// Screenshot captures the current screen, returning the encoded image
|
|
// bytes and the image format string the companion reports.
|
|
Screenshot(ctx context.Context) (imageData []byte, imageFormat string, err error)
|
|
|
|
// Launch brings the app to the foreground, starting it if needed.
|
|
Launch(ctx context.Context, bundleID string, foregroundIfRunning bool) error
|
|
|
|
// Terminate stops the running app with the given bundle identifier.
|
|
Terminate(ctx context.Context, bundleID string) error
|
|
|
|
// ListApps reports every installed app and its current process state.
|
|
ListApps(ctx context.Context) ([]InstalledApp, error)
|
|
|
|
// Install installs a .app bundle directory by streaming it to the
|
|
// companion.
|
|
Install(ctx context.Context, appPath string) error
|
|
|
|
// Uninstall removes the app with the given bundle identifier.
|
|
Uninstall(ctx context.Context, bundleID string) error
|
|
|
|
// Close releases the underlying connection.
|
|
Close() error
|
|
}
|
|
|
|
// ProcessState mirrors the companion's notion of whether an app is running.
|
|
type ProcessState int
|
|
|
|
const (
|
|
ProcessStateUnknown ProcessState = iota
|
|
ProcessStateNotRunning
|
|
ProcessStateRunning
|
|
)
|
|
|
|
// InstalledApp describes one installed app. ProcessState and ProcessIdentifier
|
|
// together answer whether the app is currently running and in the foreground.
|
|
type InstalledApp struct {
|
|
BundleID string
|
|
Name string
|
|
InstallType string
|
|
ProcessState ProcessState
|
|
Debuggable bool
|
|
ProcessIdentifier uint64
|
|
}
|
|
|
|
func processStateFromProto(s pb.InstalledAppInfo_AppProcessState) ProcessState {
|
|
switch s {
|
|
case pb.InstalledAppInfo_RUNNING:
|
|
return ProcessStateRunning
|
|
case pb.InstalledAppInfo_NOT_RUNNING:
|
|
return ProcessStateNotRunning
|
|
default:
|
|
return ProcessStateUnknown
|
|
}
|
|
}
|