prod-FARM-IOS-Core README

The project's README from github.com/Git-Agni/prod-FARM-IOS-Core. As one markdown file: README.md.

Phone Farm iOS

An open-source, standalone application for operating physical iOS devices and running scheduled TikTok workflows. It includes guided device registration, WDA/Appium supervision, live video and remote input, PostgreSQL-backed scheduling, recurring jobs, uploads, execution history, the dashboard/API server, and a built-in TikTok automation plugin.

It runs locally as-is; authentication is optional on a loopback bind. Harden it for a shared or exposed deployment by supplying your own AuthProvider (PHONE_FARM_AUTH_PLUGIN) and process supervision — no fork required. Tasks are persisted as pluginId, taskType, taskVersion, and a JSON payload, so an old schedule can never silently execute a new contract.

Live demo and setup walkthrough: gethandler.ai/ios-farm

The full engineering writeup, TikTok on 9 real iPhones reverse engineered from the screen up (Apple's test daemon, the two WebDriverAgent patches, pixel-level UI detection, OCR account switching, never posting twice): gethandler.ai/tiktok-iphone-farm

Documentation

Run the standalone application

Requirements are Node 22+, PostgreSQL, Xcode, a signed real-device WebDriverAgent, and Appium's XCUITest driver.

npm install
cp .env.example .env
npm run appium:install-driver
npm run db:up
npm run db:migrate
npm run wda:prepare

Run these long-lived processes (wrap each in a launchd agent or systemd unit for an always-on host):

npm run appium
npm run wda:service
npm run worker
npm run web

TikTok support is enabled by default. Set PHONE_FARM_PLUGINS to comma-separated ESM package names to add more task plugins. Set PHONE_FARM_AUTH_PLUGIN to an ESM authentication provider before binding WEB_HOST outside loopback; startup deliberately fails otherwise.

Plugin contract

src/plugin.ts defines the stable interfaces. A plugin can provide versioned tasks, registration checks, device-page panels, namespaced HTTP routes, and declared WDA extensions. Task execution receives the exact device, that plugin's own per-device data, resolved assets, a temporary workspace, cancellation, durable logging, safe device primitives, and an observed subprocess runner.

See PLUGIN_DEVELOPMENT.md for compatibility and trust rules.

src/example-plugin.ts is a minimal open-app plugin. Production plugins should be separate packages and should never require changes to core routing or scheduler code.

Repository policy

This repository uses GitHub-hosted CI only. Never connect production devices, Apple signing material, production databases, self-hosted runners, or deployment credentials to workflows triggered by pull requests. See SECURITY.md.

npm run check

prod-FARM-IOS-Core (Git-Agni/prod-FARM-IOS-Core)

Searching Database…

Что это?Опенсорсное приложение для самостоятельного хостинга, которое с Mac управляет фермой реальных физических iPhone: пошаговая регистрация устройств, живое видео и удалённое управление, планирование на базе PostgreSQL и встроенный плагин автоматизации TikTok.
Это фреймворк, на котором я строю решение, или готовое к запуску приложение?Это отдельное приложение с сервером дашборда/API и системой плагинов, а не библиотека для импорта — вы запускаете его как набор долго живущих серверных процессов и расширяете плагинами.
Как его запустить?Установите Node 22+, PostgreSQL, Xcode, подписанную сборку WebDriverAgent для реального устройства и драйвер XCUITest для Appium, затем запустите процессы Appium, сервиса WDA и дашборда/API (завёрнутые в юниты launchd или systemd) и зарегистрируйте устройство согласно docs/getting-started.md.
Нужны настоящие iPhone и инструменты разработчика Apple или можно тестировать на симуляторах?Нужны реальные подписанные физические устройства — для настройки требуются Xcode, подписанная сборка WebDriverAgent для реального устройства и драйвер XCUITest для Appium; путь через симуляторы не описан.
Безопасно ли открывать дашборд за пределы локальной сети?Не из коробки — аутентификация опциональна при привязке к loopback, а запуск намеренно падает, если попытаться привязаться вне loopback, не предоставив свой AuthProvider и надзор за процессами.
Я запускаю это на самих iPhone или на Mac, который ими управляет?Оно запускается на Mac, который контролирует и удалённо управляет подключёнными физическими iPhone через WDA/Appium — телефоны являются управляемыми устройствами, а не хостом.
Чем это отличается от использования iOS-симулятора?Оно управляет реальными физическими iPhone через тестовый демон Apple и патченные сборки WebDriverAgent, а не симуляторы, поскольку сценарии TikTok зависят от поведения реального устройства.
Есть ли автоматизация TikTok из коробки?Да, встроенный плагин автоматизации TikTok включён по умолчанию, включая переключение аккаунтов на основе OCR и логику, не дающую опубликовать один и тот же контент дважды.
Можно ли писать собственные плагины автоматизации?Да, src/plugin.ts определяет стабильный интерфейс для версионированных задач, проверок при регистрации, панелей страниц устройств и HTTP-маршрутов с пространствами имён; продакшн-плагины стоит поставлять отдельными пакетами.
Как он исключает, что старое расписание случайно выполнит несовместимую задачу?Задачи сохраняются с pluginId, taskType, taskVersion и JSON-пейлоадом, поэтому устаревшее расписание никогда не сможет молча выполниться против несовместимого, более нового контракта задачи.
Creator
Git-Agni
Size
0.2 MB
Stars
1.7K
Updated
CommitSep 07
Age
1mo
Commits · 90 Days