Noureddine RAMDI / KittyFarm: unified iOS and Android emulator management on macOS without screen recording prompts

Created Mon, 04 May 2026 10:23:02 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

dnakov/kittyfarm

KittyFarm addresses a pain point for mobile developers who often have to manage multiple iOS Simulators and Android Emulators at once. Instead of juggling separate windows and dealing with macOS screen recording permission prompts, this tool aggregates all connected devices into a single window with synchronized touch input, streamlining cross-platform testing workflows.

what kittyfarm does and how it’s built

KittyFarm is a macOS utility written in Swift designed to aggregate multiple iOS Simulators and Android Emulators into one unified window. The primary goal is to simplify multi-device testing by displaying all simulators and emulators side-by-side with synchronized touch input, allowing developers to interact with multiple devices simultaneously.

Under the hood, KittyFarm uses private SimulatorKit APIs provided by Apple to capture and render iOS Simulator frames. This is a clever workaround that avoids the need for macOS screen recording permissions, which usually trigger user consent dialogs and add latency. For Android Emulators, KittyFarm controls them via gRPC, which is a robust mechanism for remote procedure calls, enabling smooth input synchronization and control.

The app requires macOS 26 or newer and Xcode 17+, reflecting its use of the latest platform features and private APIs only available in recent versions. It uses Metal, Apple’s GPU-accelerated graphics API, to efficiently render device frames at low latency. The device bezels are rendered using Apple’s CoreSimulator chrome assets for iOS and Android SDK skins for Android emulators, maintaining authentic device appearance.

The project is built with Swift and uses XcodeGen for declarative project generation. This approach improves maintainability by keeping project configuration as code.

the technical approach and tradeoffs

What sets KittyFarm apart is its use of private SimulatorKit APIs to render iOS Simulator frames without screen recording permissions. Normally, to capture a simulator’s screen, macOS requires user consent for screen recording, which can interrupt automated workflows and affect developer experience (DX). By using SimulatorKit’s internal APIs, KittyFarm bypasses this, providing a seamless and low-latency display.

The tradeoff here is the reliance on private APIs, which Apple can change or remove in future macOS or Xcode updates, potentially breaking the app. This means maintaining KittyFarm could require ongoing updates aligned with Apple’s internal API changes.

On the Android side, controlling emulators via gRPC is a robust and scalable design choice, allowing for parallel build-and-deploy workflows across all connected devices. This means developers can push builds simultaneously and control inputs on multiple devices in lockstep.

The codebase benefits from declarative project generation using XcodeGen, which makes the build system more transparent and easier to modify. Using Metal for rendering is expected given the need for performant display of multiple device frames.

Overall, the code is surprisingly clean given the complex domain of multi-device synchronization and private API usage. The project’s architecture clearly separates concerns: rendering, input synchronization, device management, and build workflows.

explore the project

The repo’s README specifies the main requirements:

### Requirements

- macOS 26+
- Xcode 17+
- Metal Toolchain component for Xcode
- Android SDK (for emulator support)
- XcodeGen

There is no explicit quickstart command sequence provided, so getting started likely involves cloning the repo, installing dependencies like XcodeGen and the Android SDK, and opening the Xcode project generated by XcodeGen. The README and source code organization are the best resources to understand the setup and usage.

The key directories to explore are likely the Swift source files handling SimulatorKit integration and the gRPC client for Android emulators. The Project.yml file used by XcodeGen should give insight into the project structure and dependencies.

Investigating how input synchronization is implemented, possibly through shared event handling or a centralized input dispatcher, would be valuable to understand the core innovation.

verdict

KittyFarm is a specialized utility for macOS developers who need to manage multiple iOS Simulators and Android Emulators simultaneously with synchronized input and unified display. Its use of private SimulatorKit APIs to avoid screen recording permissions is a clever but risky tradeoff that improves developer experience by eliminating permission prompts and reducing latency.

The requirement for macOS 26+ and Xcode 17+ restricts its audience to developers on the latest Apple platforms. Additionally, reliance on private APIs means the project may require active maintenance to keep pace with Apple platform changes.

For teams doing cross-platform mobile development who often run multiple simulators/emulators, KittyFarm offers a streamlined workflow and a well-thought-out architecture. However, those looking for a stable, long-term supported tool may want to weigh the tradeoff of private API usage.

It’s a solid example of pragmatic engineering to solve a real problem in mobile development, with clean code and clear architectural decisions. Worth understanding even if you don’t adopt it directly.


→ GitHub Repo: dnakov/kittyfarm ⭐ 171 · Swift