The iFarm guide

iFarm runs real iPhones from your Mac: watch them live, control them with the mouse and keyboard, and automate what you'd otherwise do by hand. This guide goes from unboxing to running a farm around the clock.

1. What you can use it for

Use it however suits your work. Some common uses (the ⓘ button in the toolbar lists them too):

How you use it is up to you; follow the rules of the apps you automate and of any client you test for. iFarm doesn't hide automation from apps (no spoofing or detection tricks) and never buys anything. By default it asks before posting, sending or following; you can switch that off in Setup → Preferences.

2. Before you start

Hardware

How many phones can one Mac run?

Mac memoryPhones, comfortably
8 GB (MacBook Air, base Mac mini)5–10
16 GB10–20
32 GB or more20–30, limited by USB hubs

Each phone costs the Mac about 100 MB for its helper process plus about 40 MB for its live view. Grid tiles run at 10 fps (about 1 MB/s each); only the phone you open runs at full speed (about 7 MB/s). Other limits come first on big Macs: a powered USB hub carries about 10–15 phones (use several hubs on separate ports), phones on Wi-Fi share your network (past about 10, use cables), and a paid Apple developer team can register 100 iPhones a year. With your own Claude Code, each phone Claude is driving adds about 200–400 MB. Health → Capacity shows the real numbers for your Mac (see section 15).

Apple Developer account

iFarm installs a small helper app (WebDriverAgent) on each phone. iOS only runs it if it's signed by an Apple Developer team you belong to.

AccountCostHelper app lastsNotes
Free (Personal Team)$07 days, then re-signLimited app IDs per week
Apple Developer Program$99/yr1 yearRecommended for a farm

Add the Apple ID in Xcode → Settings → Accounts.

Xcode (free from the App Store) builds the helper app. Install it and open it once: agree to the license and let it install its components. Recent Xcode versions download iPhone support separately; if it's missing, Setup offers a Download iOS support button (or Xcode → Settings → Components → iOS → Get). If your Mac's developer tools point at the Command Line Tools instead of Xcode, you don't need to change anything: iFarm uses Xcode directly.

3. Install iFarm

  1. Download iFarm-x.y.z.dmg from the iFarm website (only from there: a copy from anywhere else could have been changed).
  2. Open it and drag iFarm onto Applications.
  3. Open iFarm from Applications. (Keep it there: start-at-login only works from Applications.)

The first time, macOS warns you. iFarm isn't notarized by Apple yet. Notarizing needs a paid Apple Developer ID and Apple checking every build, and iFarm is a free, independent project. So macOS says it "could not verify iFarm is free of malware". That means Apple hasn't checked the app, not that anything was found. To open it:

  1. When the warning appears, click Done (not Move to Trash).
  2. Open System Settings → Privacy & Security and scroll down to "iFarm was blocked to protect your Mac".
  3. Click Open Anyway and confirm with your Mac's password or Touch ID (that's macOS asking, not iFarm).

You do this once. After an update replaces the app, macOS may ask again.

Updating: download the new DMG and replace the app. Your phones, settings, automations and history are kept (they live in ~/Library/Application Support/iFarm).

From source (developers): git clone, then scripts/build-app.sh. The app is in build/iFarm.app. scripts/make-dmg.sh makes a DMG; with a Developer ID certificate it signs and notarizes it too (see the script).

4. Prepare each phone

  1. Plug it in by USB the first time (Wi-Fi works after that), with a data cable. If the Mac asks "Allow accessory to connect?", click Allow.
  2. Trust this Mac: unlock the phone, tap Trust and enter the passcode.
  3. Developer Mode: Settings → Privacy & Security → Developer Mode → On. The phone restarts; unlock it and confirm "Turn On". (The switch only appears after the phone has been plugged into a Mac with Xcode.)
  4. Keep it awake: Settings → Display & Brightness → Auto-Lock → Never. For dedicated farm phones, also consider no passcode. Otherwise save the passcode in iFarm for auto-unlock (section 6).
  5. Turn off Low Power Mode, and keep the phone charging.

5. First run

iFarm opens a setup guide that checks each step and tells you what to do:

  1. Xcode: a green check, or a button to install or open it.
  2. Signing team: pick your team (paid teams are listed first) and a bundle ID prefix you own, such as com.yourname. iFarm suggests one. The helper is installed as com.yourname.WebDriverAgentRunner.
  3. Phones: a checklist per phone: connected, trusts this Mac, Developer Mode on, helper running. Anything not ready says how to fix it, with a button where possible.
  4. Preferences: start phones automatically, Wi-Fi control.

You can reopen it any time with the gear button.

The first start of a phone:

If iOS shows "Untrusted Developer", go to Settings → General → VPN & Device Management, tap your developer entry and trust it, then press Try again.

The helper app on the phone. After the first start you'll see an app called iFarm (black phones icon) on each phone. iFarm starts it from the Mac; you never need to open it. If you tap it by hand it shows a blank screen and closes. That's normal. The phone shows nothing while iFarm drives it other than what's happening on screen; when you want to stop, hold volume up + down together (section 9).

6. Controlling a phone

The frame rate is shown under the screen.

iPhone frame (optional): the switch at the top of All phones (and under a phone's screen) shows each phone inside an iPhone body instead of a plain screen. Its buttons work: volume up and down on the left; the side button on the right locks the phone, or wakes it if it's locked; and Home is the bar at the bottom of the screen (or the round button on iPhones that have one). Each button lights up when you point at it. Switch back to the plain look any time.

USB or Wi-Fi? Both work. iFarm uses the cable whenever one is plugged in. Phones without a cable are controlled over Wi-Fi, protected by a secret only your Mac knows (each phone has its own, kept in the Keychain). Connections without it are refused. The Wi-Fi traffic isn't encrypted, so use a private network. To allow USB only, turn off Setup → Preferences → Allow control over Wi-Fi: the phone's helper then can't be reached from the network at all.

Lock screen: on a phone's page, save its passcode (stored only in this Mac's Keychain) and iFarm can unlock it by itself. Keep this phone awake and unlocked checks every 30 seconds. Wake / Unlock now do it once.

The saved passcode works while the phone's helper is running. Whenever the helper has to start on a locked phone (after the phone restarts, after iFarm restarts, or after the helper stopped while idle), unlock the phone by hand once: iOS won't start the helper on a locked phone, and iFarm can't type the passcode without it. The phone's tile says Unlock the phone by hand to continue when this is needed. To make it rare, set the idle stop to Never (Setup → Preferences) and keep the phone charging.

7. Many phones

Several accounts on one phone

A phone can hold several of your own TikTok accounts. Farm → Accounts lists them by phone.

  1. Log in to each account once in TikTok on the phone: Profile → tap your name at the top → Add account. (iFarm never types passwords.)
  2. In iFarm, press Find accounts on this phone. iFarm opens TikTok's account list and adds every account it finds. You can also Add… a handle by hand.
  3. From then on, anything can be for an account:
    • Run… next to an account runs any automation for it.
    • Schedules → On: Chosen accounts: each account gets its own random times; runs on the same phone take turns.
    • Programs → Add phones or accounts…: each account follows the program from its own Day 1 (for example the warm-up).
    • Drafts: when you drop a file on a phone, pick the account; in the drop folder, use the account's @handle folder. Post now on a saved draft switches back to the account it was saved under.

Before each run for an account, iFarm switches TikTok to it with TikTok's own account switcher and checks the profile shows that @handle. If the account isn't logged in on the phone, the run stops and says so. The phone tile shows the active account next to the phone's name, and History has an Account column and filter; each account on the Accounts page has its own history.

8. Automations

Ask iFarm: describe it, and it runs on autopilot

At the top of All phones, type what you want in plain words and press Plan it. For example:

Claude (whichever you set up: your Claude Code or an API key) turns it into a plan and shows it to you before anything runs: what it will do, how, on which phones or accounts, and when (now, once, or daily in a time window, on chosen days). Change anything before it runs: the name, the task, Where (all phones, a group, one phone or one account) and When (now, once at a time, or every day in a time window), then press Do it. There are three ways a plan can run, and Claude picks the cheapest that works:

Schedules it creates appear under Plan → Schedules, automations it builds under Automations, and "Claude every run" tasks under Scenarios; edit or delete them there. Note that "all phones" means every phone iFarm sees, and a scheduled run starts a phone's helper if it isn't running.

Record one: open a phone large, press Record (Automations box), and use the phone through iFarm's live screen. Taps, swipes, holds, Home/volume buttons, typed text and the pauses between them are recorded. Press Stop and save; it appears under Automations in the sidebar.

Text settings: automations can have text settings such as site or search, used in steps as $site. They appear in the automation's Settings box; on built-in templates you can change them without duplicating.

Open a link: opens a web address in a new Safari tab (tabs you have open aren't touched), or an app link. Text settings work inside it, e.g. https://www.google.com/search?q=$search.

Open app: pick the app by name: apps installed on your phones (your own apps included; Read phones refreshes the list), well-known apps such as TikTok, Instagram, YouTube, X, WhatsApp, Settings or Safari, or type any bundle ID. Steps then read "Open TikTok" rather than an ID.

Edit: every step can be edited (text to look for, waits as random ranges like 2–5 s, hold times), moved, deleted or added: tap text, wait, swipe, wait for text, "if text is on screen", repeat N times, repeat for N minutes, "sometimes (50%)", open app, type, Home. Built-in templates are read-only; Duplicate makes your own copy. Export… saves a JSON file others can Import.

Run: pick checked phones, all phones, a group or one phone, then Run. A phone that was disconnected for being idle is started first.

Built-in templates:

Durations are editable in each template's Settings.

Scenarios: saved instructions for Claude

An automation replays recorded steps with no AI. A scenario is a task in plain words that Claude does each time it runs, so you don't have to type it again. Use one when every run needs judgment (reading the screen and deciding); for anything that's the same every time, an automation is faster and free.

Each run uses your Claude plan and can go a little differently each time. The usual controls still apply: Stop, ⌘. and the phone's emergency stop work as for any run, and your Claude settings (such as Ask before posting) apply to scenarios too.

Testing apps (test mode)

For QA on real iPhones (your own app or a client's), turn on Test mode in an automation's header. Then:

Build tests by recording, by describing them to Claude (Ask iFarm or the phone's Claude card), or by writing steps. Schedule them nightly to catch regressions on every phone. Note: iFarm's helper and Xcode's own UI tests (XCUITest) can't drive the same phone at the same time; give each its own phone, or stop iFarm on that phone while those run.

9. Stopping, recovery and safety

When something gets in the way, iFarm tries, in order: dismiss a system alert, tap a "Not now / Skip / Close / Cancel…" button, go back, go Home and reopen the app, force-quit and reopen it. If the step still can't be done, the run stops with a screenshot of where it got stuck and the phone is sent Home, so it never sits blocked.

Stopping:

Idle phones: Setup → Preferences → "Disconnect a phone after no use for…" (default 30 minutes) stops a phone's helper when nobody has used it, to save battery. Press Start, or run an automation, to bring it back.

Safety: only run automations on phones dedicated to the farm. A replay taps and swipes whatever is on screen, so don't run one on a phone someone is using.

10. Posting: drag, draft, you decide

Drag one video, or several photos (up to 35), from Finder onto a phone's tile (or onto its large view). Drop onto one of several checked phones to do it on all of them. A box asks what to do:

If the phone is busy, it all waits in the phone's Up next queue.

By default nothing is posted without your click: the engine refuses any step that taps Post, Story, Send or Follow unless you chose it. To let automations and drafts post on their own, turn off Setup → Preferences → Ask me before posting, sending or following; dropped files are then posted straight away. Taps on Buy or Pay are always refused.

The first time, the phone asks to allow Photos access for iFarm (the helper app). Tap Allow Full Access or Limit Access… on the phone.

11. Posting from anywhere: the drop folder

Open Waiting for you → Drop folder → Choose… and pick (or create) a folder inside Google Drive, Dropbox or iCloud Drive on this Mac. Create phone folders makes one sub-folder per phone and group, plus All. Then, from anywhere (e.g. the Google Drive app on your phone):

You putiFarm does
Apple's iPhone/clip.mp4one video post on that phone
clip.txt next to ituses its text as the caption
Apple's iPhone/Beach day/1.jpg, 2.jpg… + caption.txtone slideshow (photos sorted by name)
clip.json with {"draft_at": "2026-11-02T18:30:00Z"}waits until then
a file in a group's folder, or Allthe same post on each of those phones

Files are picked up once they've stopped changing for 10 seconds (the sync has finished). The post is prepared on the phone exactly like a drag-and-drop and appears in Waiting for you (with a Mac notification) for Save draft / Post / Discard. After 30 minutes without an answer it's saved as a TikTok draft and listed under Saved as TikTok drafts, where Post now later opens TikTok's drafts, finds that draft by its caption, and posts it. (Drafts without a caption can't be found again, so give remote posts a caption.)

When a post is done, its files move into _drafted, _posted, _discarded or _failed (with a .reason.txt), so whoever dropped it can see what happened from anywhere.

12. Schedules, programs, flows and history

Planned runs wait while a phone is busy, stopped from the phone, offline, or in use: when its screen changed in the last minute without iFarm touching it, iFarm assumes someone is using it and retries until the window ends. A run missed by more than an hour (Mac asleep, iFarm closed) is skipped.

Connection tags: every phone shows a green USB or orange Wi-Fi tag. Measured on an iPhone 13 Pro Max: USB answers commands in about 6 ms vs 18 ms over Wi-Fi. The live stream is the same (24 fps, about 7.4 MB/s per phone at full quality). With many phones, USB keeps that traffic off your Wi-Fi.

13. Claude auto mode

Give a phone a goal ("warm up on my niche and suggest a few comments") and an AI drives it: it looks at screenshots and taps, swipes and types through iFarm. You watch it live on the tile, with each action in the run log. The AI is the brain and iFarm is the hands, so the brain is your choice: Claude, OpenAI, Google Gemini, or any OpenAI-compatible endpoint. Whichever you pick, iFarm's own rules still apply: Ask before posting, the run log, Stop and ⌘., and never buying anything. The brain must be able to see images and call tools (function calling); text-only models can't drive a phone.

Set up (AI brain button in the toolbar):

Describe it, then save it (works for anything): on a phone's page, describe the task in plain words, tick Save what Claude does as a new automation, and press Hand the phone to Claude. Claude does it once while you watch; when it finishes, iFarm saves every step it took as a normal automation ("Built by Claude: …"). From then on it replays without Claude: fast, free, on any phone, on schedules, in flows, and shareable to the gallery. Each tap gets the same text matching and next-screen checks as a recording. If Claude took a detour (tapped the wrong thing and went back), the saved steps include it; delete those steps in the editor.

Use it: on a phone's page, enter the account's niche keywords, pick a goal preset or write one, and press Hand the phone to Claude. The built-in Claude: niche warm-up with comment suggestions automation does the same and can be scheduled.

How long Claude can run: each look, tap or swipe is a step (about one a second). Runs from a phone's Claude box can take up to 500 steps (about 10 minutes) by default; change it under Longest run in the toolbar's AI brain settings (up to 2,000, about 40 minutes). If a run reaches the limit, it says so; send it again to keep going. Longer runs use more of your AI plan or API credit.

Typing, sending and posting: Claude can type anywhere, including drafts in message and comment boxes ("prepare a text saying hello" leaves it in the box for you). Whether it then sends follows Setup → Preferences → Ask me before posting, sending or following:

Stop Claude any time: Stop, ⌘., or hold volume up + down on the phone.

Niche search without Claude: the TikTok: niche search session automation searches the phone's next niche keyword, opens the video results and watches them. Schedule it to steer the feed.

Control iFarm from the Claude app: you can also drive the whole farm from a Claude Code chat, for example in the Claude desktop app's Code tab. In iFarm: the toolbar's AI brain, turn on Let Claude Code control iFarm, then press Connect Claude Code. Start a new chat and ask things like "list my iFarm phones", "show me Phone's screen", "run the niche warm-up on all phones for 20 minutes" or "on the 13 Pro Max, open Safari and search for my site". Claude can list phones and automations, start a phone's helper, see screens, tap, swipe and type, run automations, hand a phone a task (iFarm's own Claude then does it), check progress and stop.

It can also plan ahead: "warm up all phones every evening between 7 and 10", "post the niche session on the 13 Pro Max tomorrow at 9:30" or "what's scheduled?" (list_schedules, schedule_automation, remove_schedule). These are ordinary iFarm schedules, shown in Plan → Schedules: random times inside the window, busy or in-use phones retried, runs over an hour late skipped, and iFarm must be open for them to run.

Other AI apps can connect the same way. iFarm's line is a standard MCP server (over HTTP, on this Mac only), so any AI app on this Mac that supports MCP can use the same tools: press Copy setup for other AI apps and paste it into that app's MCP settings. It contains the secret key, so keep it private.

It can also hand iFarm media, the same as dragging a file onto a phone: send_media puts a video or photos (files on this Mac, or https links) into phones' Photos, and post_media also posts them to Instagram, TikTok, Snapchat, YouTube, Facebook or X with your caption. So with a media-generation tool connected to the same chat, one message can make a video and post it, e.g. "make a 10-second sunrise video and post it to Instagram and TikTok on the 13 Pro Max with the caption 'Morning ☀️'".

14. Community templates

Automations → Community templates lists automations other iFarm users have shared: what each does, who shared it, the apps it uses, and which iPhones and iOS versions it was tested on.

Share yours: open one of your automations → Share to community….

  1. iFarm removes private details: phone names and IDs, saved passcodes, your Mac user name and file paths. Typed text becomes $keyword (filled in from each phone's niche keywords) and draft captions become $caption. It lists what it changed and warns about anything else that looks personal (emails, @handles, long numbers).
  2. Fill in a name, a description and your GitHub username. You see the exact file that will be shared and can edit it.
  3. Open pull request on GitHub (when the gallery is hosted on GitHub) opens GitHub in your browser, signed in as you, with the file filled in. Press Propose new file, then Create pull request. Checks run automatically, and people can review it in the open. Otherwise, Save template file… and send it to whoever runs your gallery.

Source → A gallery folder on this Mac lets you try a gallery (or your own templates) before publishing.

15. Running 24/7

Open Health in the sidebar (its badge counts problems). It shows:

iFarm also raises its own open-file limit at launch so many phones don't run out of connections. That only affects iFarm itself.

16. Privacy and security

Proxies and VPNs: iFarm doesn't change the phones' network settings. Each phone uses whatever Wi-Fi, cellular, VPN or proxy it's set to; if you want one, set it up on the phone yourself (iOS Settings or a proxy/VPN app), within the rules of the apps you use. For app testing, Settings → Wi-Fi → ⓘ → Configure Proxy works with debugging proxies like Charles or Proxyman.

17. Troubleshooting

Every problem iFarm recognises shows a card with the fix. The common ones:

CardWhat to do
Turn on Developer ModeSee section 4, step 3.
Trust the developer on the phoneSettings → General → VPN & Device Management → Trust.
Unlock the phoneUnlock it; iFarm retries on its own.
Sign in to the team in XcodeXcode → Settings → Accounts → add the Apple ID.
Accept Apple's latest agreementAccount Holder accepts it at developer.apple.com/account.
Free team app limit reachedUse a paid team or wait a week.
Phone is being preparedFirst connection only; keep the phone unlocked for about a minute.
Phone not reachableUse a USB cable, unlock the phone, try again.
Connect this phone with USBWi-Fi control is off in Setup → Preferences; plug in a cable or turn it on.
macOS says it can't verify iFarm is free of malwareExpected the first time: iFarm isn't notarized by Apple yet. System Settings → Privacy & Security → Open Anyway (see Install iFarm).
Community gallery isn't online yetThis copy wasn't built with a gallery address; use Source → a gallery folder, or download the release build.
A community template won't runOpen it and press I've read the steps first.

USB tips (learned the hard way):

If USB drops, iFarm switches that phone to Wi-Fi (when allowed) without stopping, and moves back to USB when the cable works again.

Phones found over the network: iFarm also lists phones that Xcode can reach over Wi-Fi without a cable. These are never started automatically (a phone paired with this Mac in the past may not be part of your farm), so press Start on the ones you want.

Logs are in ~/Library/Application Support/iFarm/Logs (the Show logs button opens the folder). wda-build.log has the build and wda-<phone id>.log has each phone's runner output.

18. Uninstall

  1. Quit iFarm. If you enabled start at login, disable it on the Health page first.
  2. Drag iFarm from Applications to the Trash.
  3. To remove its data too: delete ~/Library/Application Support/iFarm.
  4. On each phone, delete the iFarm helper app (press and hold → Remove App).
  5. Optional: in Keychain Access, search for "iFarm" to remove saved passcodes and secrets.