>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Go

Sviluppo iOS senza MacBook usando l'utility Builder

Chiunque abbia provato a scrivere app mobile in Flutter o React Native seduto su Linux o Windows inevitabilmente si scontra con il muro hardware di Apple. Compilare per Android richiede un paio di minuti in locale, ma iOS richiede sempre un Mac con Xcode installato. Acquistare un Mac mini solo per compilare un artefatto di test un paio di volte a settimana sembra un investimento discutibile, specialmente per progetti personali o team piccoli.

Recentemente mi sono imbattuto nel repository ios-builder del team MobAI. È una piccola utility Go che gestisce la routine: attiva una compilazione nel cloud di GitHub Actions, scarica il file IPA pronto e connette il processo di sviluppo locale a un iPhone reale.

Builder Demo

Come Funziona Internamente

L'idea è ovvia, ma qui l'hanno trasformata in uno strumento CLI pronto all'uso. Invece di configurare manualmente pipeline complesse, installi l'utility builder che genera un file di workflow per GitHub Actions.

Il workflow funziona così:

  1. Esegui il comando di build nel terminale.
  2. La CLI carica il codice nel tuo repository e avvia un runner di GitHub Actions su macOS.
  3. Xcode nel cloud compila il progetto e crea il pacchetto dell'artefatto.
  4. L'utility scarica l'IPA pronto nella cartella locale ./dist/.

Questo significa che non devi pagare per un Mac: usi i minuti CI gratuiti di GitHub. Tuttavia, gli account gratuiti hanno un moltiplicatore x10 per macOS. Su 20.000 minuti gratuiti al mese sui runner Mac, ti restano circa 2.000 minuti. Sono più o meno 15-20 build. Sono sufficienti per le release e i test periodici, ma non potrai eseguire CI su ogni commit.

Cosa Può Fare l'Utility

Lo strumento è progettato per funzionare con stack multipiattaforma popolari e progetti nativi.

  • Rilevamento automatico della struttura del progetto. L'utility comprende progetti Flutter, React Native semplice, Expo esportato, Cordova/Ionic e progetti Swift nativi.
  • Gestione del code signing. Puoi caricare certificati e provisioning profile direttamente nei secret di GitHub tramite il comando builder signing setup.
  • Hot Reload. La parte più utile per chi scrive in Flutter o React Native.
  • Esecuzione su un simulatore remoto. Attraverso il servizio MobAI, puoi testare l'app compilata in un simulatore direttamente dal browser o dal client desktop, anche se questa opzione richiede un abbonamento Pro.

Setup e Prima Esecuzione

L'installazione è semplice. Su Windows puoi scaricare un binario già pronto dalla pagina delle release, mentre su Linux, WSL o macOS esegui il comando tramite terminale:

curl -sSL https://raw.githubusercontent.com/MobAI-App/ios-builder/main/install.sh | bash

Oppure compila dal codice sorgente se hai già Go sulla tua macchina:

git clone https://github.com/MobAI-App/ios-builder.git
cd ios-builder
go build -o builder ./cmd/builder

Dopo l'installazione, devi autorizzarti con GitHub e inizializzare il progetto nella root del repository:

builder auth github
cd your-ios-project
builder init

Il comando builder init in modalità interattiva creerà un file di configurazione .github/workflows/ios-build.yml e un hook locale builder.json.

Esempio di contenuto di builder.json:

{
  "project": "MyApp",
  "platform": "ios",
  "github": {
    "owner": "username",
    "repo": "my-ios-app"
  },
  "ios": {
    "path": "ios",
    "scheme": "",
    "signing": true
  },
  "mobai": {
    "url": "http://localhost:8686",
    "device_id": ""
  },
  "flutter": {
    "watch": {
      "dirs": ["lib"],
      "patterns": [".dart"],
      "ignore": [".g.dart", ".freezed.dart"],
      "debounce": 100
    }
  }
}

Una build viene avviata con una singola riga:

builder ios build

Se i certificati Apple Developer non sono ancora configurati, puoi compilare una build non firmata con il flag --unsigned.

Sviluppo con Hot Reload Senza macOS

Compilare un file IPA è solo metà del lavoro. Il vero dolore inizia quando devi correggere rapidamente UI e logica. Ricompilare il progetto in CI per ogni modifica a un pulsante è inutile perché la build richiede diversi minuti.

Gli sviluppatori hanno risolto questo problema integrandosi con la loro app MobAI, che connette un iPhone fisico al tuo computer via USB.

Il workflow per Flutter funziona così:

  1. Connetti il tuo iPhone al tuo PC Windows o Linux via cavo.
  2. Compili l'IPA base tramite builder ios build e lo installi sul dispositivo.
  3. Avvii la modalità di sviluppo:
builder dev flutter

L'utility avvia un file watcher nella directory lib/. Quando modifichi il codice Dart e salvi il file, builder invia un segnale di Hot Reload tramite flutter attach. I file generati come .freezed.dart e .g.dart vengono ignorati per evitare di attivare reload non necessari.

Dovrai ricompilare l'intera app tramite il cloud solo quando tocchi codice nativo: modificare Podfile, aggiungere plugin con dipendenze native complesse o modificare file Swift.

Per React Native, il processo è praticamente lo stesso:

builder dev rn

Il comando avvia un server Metro locale, inoltra la porta corretta e connette il bundler all'app in esecuzione sul telefono. Se stai lavorando dentro WSL2, dovrai abilitare le connessioni esterne nelle impostazioni di MobAI e specificare l'indirizzo di rete della macchina host Windows.

Insidie

Lo strumento sembra attraente, ma ci sono diverse domande pratiche a riguardo:

Quando si ri-firma l'app on the fly tramite un account Apple ID gratuito, il Bundle ID cambia (viene aggiunto un suffisso team). Questo può rompere le push notification o Sign in with Apple se sono legate a un identificatore specifico.

Dipendenza dall'utility proprietaria MobAI. La CLI builder stessa è distribuita sotto licenza MIT gratuita ed è scritta in modo trasparente. Tuttavia, parte della funzionalità (installazione sui dispositivi, simulatori) si basa sull'app proprietaria MobAI, dove alcune funzionalità sono a pagamento.

Limiti di GitHub Actions. Se stai lavorando in una fase attiva di layout dell'UI nativa senza framework, i minuti gratuiti sui runner finiranno rapidamente.

Vale la Pena Provare

Se scrivi in Flutter o React Native su Windows/Linux e occasionalmente hai bisogno di testare l'app su un iPhone reale o compilare una versione di test per un cliente, ios-builder farà risparmiare molto tempo e nervi. Elimina la necessità di scrivere manualmente file YAML per GitHub Actions e configurare i download degli artefatti.

Per progetti grandi con requisiti di sicurezza dei certificati rigorosi e pipeline CI/CD complesse, avrai ancora bisogno di un Mac dedicato. Ma per sviluppatori indie e team piccoli, è una soluzione alternativa comoda.

Progetti correlati