iOS cluster control is a technique for centrally managing multiple iPhones from one computer, without jailbreaking, without plugins and without dev boards.
This one answers: How Do You Schedule Batch Sends in iOS Cluster Control.
Someone told me something after he got his script running that I still repeat.
He said: getting it to run, and getting it to run every day, are two different things.
At that point his script was running smoothly on one phone. Put it on twenty, and within a week he hit three problems he had no answer for: two phones never started on schedule, one stalled halfway, and one finished with the wrong result.
On a single phone, none of those happen.
Why one phone is not twenty
While debugging one device, you are standing next to it. A screen hangs and you wait. A tap lands wrong and you run it again. The phone gets hot and you move it.
With a batch, none of that exists. Twenty phones run the same steps on the same timetable, and a phone that goes wrong does not get nudged back on course. It stays wrong, and it drags the steps after it.
So batch execution is not about making it run. It is about three things: when it runs, in what order, and what happens when it breaks.
Staggering the timers
The easiest mistake is putting every device on the same clock.
Set a job to run on the hour and twenty phones start the same action in the same minute. From outside, that is twenty machines doing one thing. It does not look like a person, and it makes diagnosis miserable, because you cannot tell which one failed first.
Split into three batches, ten or fifteen minutes apart. Inside each batch, offset individual devices by seconds to tens of seconds so they never line up exactly. Rotate which batch goes first day to day.
Time of day matters too. If the state is visible to customers, avoid their night. If it is purely internal, run it while you are awake: a problem found at 3 p.m. costs an hour; the same problem found at 8 a.m. the next day costs a day.
Ordering the batch
Ordering is invisible on one phone.
If a device already has a problem and you let it go first, it holds up the whole batch: the script waits on that one while the other nineteen idle. So check connectivity before dispatch, drop the phones that are offline, and send only to devices that answer.
Dependencies matter as well. If a step relies on the previous one,log in, then act,those cannot run in parallel. Wait for the whole previous stage to report before starting the next. Independent steps can go out together.
After a failure
Every action returns something: success comes back empty, failure comes back with a description. Read it. Plenty of people do not, and walk straight into the next step even though the last one never took effect.
My approach has three parts.
First, wrap the check in one small function so success is judged the same way everywhere, rather than reimplemented at every call site.
Second, retry once. Phones are not computers; the same step lands late on an older handset, and a single retry catches most of the transient cases.
Third, two failures in a row means removing that device from this round and recording it. Do not let one phone hold up the rest. Two broken out of twenty still leaves eighteen that should finish.
There is a separate case where the session itself goes bad,the screen still updates but taps do nothing. Reset the session rather than unplugging and replugging, and you avoid touching twenty cables.
When to stop and look
This is the part people skip.
Retries handle transient problems, not systemic ones. If the same step fails across ten devices in a row, ten phones did not break at once. The script is wrong, or the page it depends on changed.
Retrying there just burns time and leaves a trail of odd activity. Stop, take one device, and walk that step by hand to see where it actually sticks.
A simple rule of thumb: one device failing repeatedly, retry. Many devices failing at once, stop.
A schedule worth copying
Put together, it looks like this.
Check which devices are online and drop the rest. Split the survivors into three batches, ten or fifteen minutes apart, each offset internally by a few seconds. Retry each action once; two failures in a row means flag and skip. After the round, read the failure list and rerun only those devices. If the failures cluster on the same step, fix the script before re-running anything.
None of it is clever, but it is the difference between working and working daily. That person now checks two numbers each morning: how many ran, and how many need a rerun. Script capabilities and group control cover the details.