mrkeyoor.com_
Thu 24 Sept 07:40 UTC
Automationevaluationupdated 24 Sept 2026

prod-FARM-IOS-Core review

Phone Farm iOS turns a Mac and connected iPhones into a local device-control and scheduling system. It provides live screens, remote input, recurring jobs, execution history, and a built-in TikTok workflow, while a plugin interface lets developers add other tasks.

Verdict

Our Phone Farm iOS install failed after 39 seconds when node-native-ocr hit ERR_DLOPEN_FAILED under Node 22.23.2, so setup needs hands-on investigation before a device ever connects. It is worth testing for a team that already owns the Apple hardware and wants the scheduler, dashboard, and TikTok workflow in one codebase. Wait if you need a tagged release or a fresh-clone path with the Appium version conflict already settled.

We ran it

Lab card: what happened when we ran prod-FARM-IOS-CoreScreenshot of prod-FARM-IOS-Core (gethandler.ai/ios-farm)
Install✗ · 39s
Build
Repo104 files~9,284 lines of source · 1 MB · 0 CI workflows · tests dir

Answers from our run

Does prod-FARM-IOS-Core build from source?

The dependency install failed, and the project has no separate build step. We cloned commit 3e936ba into a clean Debian container with 3 CPUs and no project-specific setup.

Who should not use prod-FARM-IOS-Core?

Linux-only or Windows-only operators: the setup requires macOS, full Xcode, a signed WebDriverAgent, an Apple Developer team, and a physical iPhone.

What are the alternatives to prod-FARM-IOS-Core?

Appium, Maestro, DeviceFarmer STF. Our Phone Farm iOS install failed after 39 seconds when node-native-ocr hit ERR_DLOPEN_FAILED under Node 22.

Setup1/5Install failed in 39 seconds before the Apple toolchain steps
Docs4/5Detailed Mac, signing, process, plugin, and security guides
Community3/51,556 stars, but only a small and unresolved issue queue
Maturity2/5No tagged release and the documented install path has open fixes

Who it’s for

Teams that already own Macs, physical iPhones, and Apple signing access, and want to operate the devices themselves.
Developers automating repeatable TikTok work on real iOS hardware rather than simulators.
Internal tool builders who need scheduled device jobs, logs, uploaded assets, and live remote control in one dashboard.
TypeScript teams willing to write trusted plugins for apps and tasks beyond the bundled TikTok workflow.

Who it’s NOT for

Linux-only or Windows-only operators: the setup requires macOS, full Xcode, a signed WebDriverAgent, an Apple Developer team, and a physical iPhone.
Anyone expecting the documented fresh-clone path to work unchanged: the current source pins Appium 3.7.0, while open pull request #6 says the pinned XCUITest 7.26.3 driver requires Appium 2.
Teams that need a clean Node 22 install in a fresh Debian container: our run failed while node-native-ocr loaded its native module.
Operators who want untrusted extensions: the plugin guide says plugins receive the service account's filesystem, network, process, database, and device access.
Buyers who require a tagged release before adoption: GitHub returned no latest release for this repository.

Setup reality

Our sandbox install at commit 3e936ba failed after 39 seconds with exit code 1. The final log shows ERR_DLOPEN_FAILED while node-native-ocr ran its install script under Node 22.23.2. The log tail does not say why the native module failed, so we cannot narrow it further.

A working host needs Node 22 or newer, PostgreSQL, full Xcode, an Apple Developer team, a trusted physical iPhone, Appium's XCUITest driver, and a signed WebDriverAgent. You then run four long-lived processes for Appium, WDA supervision, the worker, and the web server.

The dashboard may run without authentication only on loopback. Exposing it requires a custom auth provider. Device passcodes live in a local file, plugins run with the service account's access, and the web and worker processes must load matching plugin versions.

Four processes turn one Mac into an iPhone farm

Phone Farm iOS runs 4 cooperating processes: a Fastify web server, a scheduler worker, a WebDriverAgent supervisor, and Appium. The browser dashboard shows each phone, proxies its MJPEG screen, forwards taps and swipes, stores schedules in PostgreSQL, and records execution logs. A bundled plugin can doomscroll or post in TikTok. The appeal is the shared control plane around real devices, rather than any new way of driving iOS itself.

commit 3e936ba was a 1 MB checkout with 104 files and about 9,284 lines of source. That is compact for a system covering registration, remote control, scheduling, uploaded assets, plugins, and app-specific automation. The small repository does not make the operating model small: each active phone still depends on Apple signing, USB connectivity, WDA, Appium, assigned local ports, and a host that stays logged in.

Node 22 is only the first requirement

The documented floor is Node 22, but the real boundary is Apple hardware and tooling. Setup requires macOS with full Xcode, PostgreSQL, a physical iPhone in Developer Mode, and an Apple Developer team that can sign WebDriverAgent. The guide says the login keychain must be unlocked when WDA is prepared, which makes a bare SSH session a poor first setup environment. A paid developer team is also needed for more than one device without weekly expiry.

Each registered phone gets WDA and MJPEG forwarding on ports beginning at 8100 and 9100. The host also runs Appium on port 4725 and the dashboard on port 3000 by default. Device registration checks Xcode selection, USB visibility, signing identity, developer support, and WDA reachability before saving the phone. Those checks are useful, but they happen after npm dependencies, the database, Xcode, pairing, and signing are already in place.

What happened when we ran it

Our sandbox install failed after 39 seconds with exit code 1. We cloned commit 3e936ba into an unprivileged container with 3 CPUs, 8 GB of RAM, Node 22.23.2, and no secrets. The repository contained 104 files, about 9,284 source lines, and occupied 1 MB before installation. Because installation did not finish, our run produced no build or test result.

The last log lines show Node trying to load node-native-ocr through node-gyp-build, followed by ERR_DLOPEN_FAILED. They do not identify a missing library, an unsupported processor, or another specific cause. The defensible finding is that npm install did not complete in our fresh Debian environment. The repository had a tests directory and a Compose file for PostgreSQL, but no Dockerfile and 0 CI workflow files in the measured checkout.

Appium 3.7.0 conflicts with the pinned XCUITest driver

The current package.json declares Appium 3.7.0 and installs XCUITest driver 7.26.3. Open pull request #6 says that driver requires Appium 2 and changes the dependency to 2.19.0. A broader pull request describing the same fresh-clone failure was closed without merging on September 23. This conflict is independent of our OCR failure because our run stopped earlier, during the initial dependency install.

Issue #4 records a second, narrower failure on an iPhone XS: registration, video, TikTok launch, and a standalone touch worked, but the farm's verification flow lost WDA on port 8101 during its touch step. No maintainer reply or fix is recorded there. One report cannot establish fleet-wide behavior, yet it is a good acceptance test: keep a device connected through registration, remote video, touch, and one scheduled task before adding more phones.

Loopback binding blocks an unauthenticated remote dashboard

The default web host is 127.0.0.1, where authentication is optional. If an operator binds outside loopback without supplying an AuthProvider, startup deliberately fails. That is the right default for a dashboard holding device controls, uploaded media, logs, and registration routes. The project also keeps device passcodes in a git-ignored file written with mode 0600 and omits them from device API responses.

Plugins deserve the same review as server code. The plugin guide says they are not sandboxed and receive the service account's filesystem, network, process, database-facing context, and device access. Web and worker must run identical plugin versions or the dashboard can accept schedules the worker cannot execute. Persisted tasks include a plugin ID, task type, and integer version, which prevents an old schedule from silently adopting a changed contract.

No tagged release exists after the September 7 push

GitHub showed 1,556 stars, 2 open issues and pull requests combined, and no latest release. The repository was created on August 27, 2026, and its last source push was September 7. Issue activity continued later in September, including the open Appium fix, but issue discussion is not the same as a shipped revision. The project is active enough to inspect and still too young to treat its current setup contract as settled.

A sensible trial starts with 1 spare iPhone on a dedicated Mac. First make npm install finish on that host, then resolve the Appium and XCUITest versions, sign WDA, and keep the dashboard on loopback until an auth provider is installed. Add a second phone only after video, touch, a scheduled TikTok job, stop behavior, and execution logs all work on the first.

Alternatives

ProjectWhat it isPick it when
AppiumA cross-platform WebDriver automation server for mobile and other app types.pick this instead when you need a lower-level automation server and will build your own scheduling, fleet, and dashboard layers.
MaestroA mobile UI testing framework built around readable flow files and repeatable test runs.pick this instead when app testing is the job and you do not need a persistent browser-controlled iPhone farm.
DeviceFarmer STFA browser-based system for controlling and managing Android devices.pick this instead when your fleet is Android and multi-user browser access matters more than iOS and TikTok workflows.

What people are saying

  1. [velocity-scout] Git-Agni/prod-FARM-IOS-Core

Sources

  1. Phone Farm iOS repository and README
  2. Phone Farm iOS getting started guide
  3. Phone Farm iOS architecture
  4. Plugin development and trust rules
  5. Pull request 6: Appium and XCUITest version conflict
  6. Issue 4: WDA becomes unreachable during verification

More automation reviews

ha_xiaomi_home · FreePEP · fragment-api-dev · undress-service · fullsend · linkedin-skills · the whole board →