Studio Atelico · Bobium Brawlers · iPad build handoff
v1 · Read me first

The iPad build
handoff

You build the IPA on our Mac Studio over SSH. You install it on your iPad from your Windows machine with Sideloadly. No Mac required on your end. The whole loop takes under a minute once it's set up.

01 / SETUP — ONE TIME

Before we start.

Studio side

What I do.

  1. Add your iPad's UDID to our dev provisioning profile. Send me the UDID. Easiest way to get it on Windows: plug the iPad in, open iTunes, click the device, click the serial number until it cycles to UDID, right-click → copy.
  2. Drop a build script on the Mac at ~/build-dev-ipa.sh. You'll SSH in and run it. It pulls latest from main, builds a development-signed IPA, and puts it at ~/builds/bobium-dev-latest.ipa. Something like this:
    #!/bin/bash
    set -e
    cd ~/code/bobium-brawlers
    git pull
    fastlane gym \
      --scheme "BobiumBrawlers" \
      --export_method development \
      --output_directory ~/builds \
      --output_name "bobium-dev-latest.ipa"
    echo "Done. IPA at ~/builds/bobium-dev-latest.ipa"
  3. Make sure your SSH user can run the script and the keychain is unlocked for signing. You'll get an account on the Mac with access to the repo and the build script. The signing certs live in a keychain I'll unlock for you.
  4. Confirm Tailscale is set up on the Mac. Already done. The Mac's Tailscale name is what you'll SSH into and copy IPAs from.
Contractor side

What you do.

  1. Install iTunes from apple.com/itunes. The web installer, not the Microsoft Store "Apple Devices" app. Sideloadly needs the drivers that only ship with the classic installer. This bites everyone, get it right the first time.
  2. Install Sideloadly from sideloadly.io. Free. Windows binary. No account needed.
  3. Install Tailscale and sign in with the studio account I send. This is how you reach the Mac and pull builds.
  4. Install libimobiledevice for Windows (for live device logs). Easiest path: imobiledevice-net releases, grab the latest Windows zip, extract somewhere on your PATH. You only need this if you want live os_log output, which you do.
  5. Plug iPad into Windows via USB. Trust the prompt on the iPad. "Trust this computer?" → Trust. Enter passcode. One time only per machine.
  6. Send me your iPad UDID so I can add it to the profile (see step 01 on my side).
  7. After my first build is on your iPad, enable Developer Mode. Settings → Privacy & Security → Developer Mode → on. iPad reboots, you confirm. The toggle does not appear until a development-signed app has touched the device, so do this after your first install, not before.
02 / DAILY LOOP — ~60 SECONDS

Every time you want a fresh build.

STEP 01
SSH into the Mac
From Windows: ssh you@mac-studio over Tailscale.
STEP 02
Run the build script
~/build-dev-ipa.sh — takes 30–60s. Output lands at ~/builds/.
STEP 03
Pull the IPA back
From a Windows shell: scp mac-studio:~/builds/bobium-dev-latest.ipa .
STEP 04
Sideload to iPad
Open Sideloadly → drag IPA in → Advanced → Normal Install → Start. ~15s.
STEP 05
Launch and play
App is on the home screen. Open it and start testing.
The one Sideloadly setting that matters
Click Advanced and set install mode to Normal Install. Do not use the default Apple ID Sideload mode.
Normal Install preserves our team signature so the app stays valid as long as the provisioning profile does (about a year). The default Sideload mode re-signs with a personal cert and the app dies after 7 days.
03 / WHEN SOMETHING IS WEIRD

Seeing what the iPad is doing.

You can't run Xcode from Windows. That's fine. There are two channels of visibility that cover most of what you'll need.

Live console output

Plug iPad into Windows via USB. In a terminal:

idevicesyslog --process BobiumBrawlers

Streams every print() and os_log line from the running app. This is your Console.app substitute.

Crashes after the fact

If the app hard-crashes, on the iPad:

Settings → Privacy & Security → Analytics & Improvements → Analytics Data

Find the .ips file with our app's name. Share it to yourself, send it to me. We can also wire up Sentry if it becomes a real problem.

04 / TRAPS

The two things that will trip you up.

Gotcha 01 · Microsoft Store iTunes
If you install iTunes from the Microsoft Store, Sideloadly will not see your iPad and you'll lose an hour figuring out why.
Uninstall it. Install the version from apple.com/itunes instead. The Microsoft Store version ships without the Apple Mobile Device Service drivers.
Gotcha 02 · The Developer Mode toggle is invisible
On a brand new iPad the Developer Mode toggle does not exist in Settings until a development-signed app has been installed at least once.
Install your first build via Sideloadly first. Then the toggle appears at Settings → Privacy & Security → Developer Mode. Flip it on, iPad reboots, confirm. Done forever.
Gotcha 03 · "SSL error -5" on first idevicesyslog
Sometimes libimobiledevice fails to pair on the very first connection.
Unplug the iPad, plug it back in, run the command again. Almost always works the second time.