>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Go

Tworzenie aplikacji iOS bez MacBooka za pomocą narzędzia Builder

Każdy, kto próbował pisać aplikacje mobilne we Flutterze lub React Native na Linuxie lub Windowsie, nieuchronnie napotyka ścianę sprzętową Apple. Budowanie na Androida trwa kilka minut lokalnie, ale iOS zawsze wymaga Maca z zainstalowanym Xcode. Kupowanie Mac mini tylko po to, by dwa razy w tygodniu zbudować artefakt testowy, wygląda na wątpliwą inwestycję, szczególnie dla projektów hobbystycznych lub małych zespołów.

Niedawno natknąłem się na repozytorium ios-builder od zespołu MobAI. To małe narzędzie w Go, które obsługuje całą rutynę: uruchamia build w chmurze GitHub Actions, pobiera gotowy plik IPA i łączy lokalny proces programowania z prawdziwym iPhonem.

Builder Demo

Jak to działa pod maską

Idea jest oczywista, ale tutaj przerobili ją na gotowe narzędzie CLI. Zamiast ręcznie konfigurować skomplikowane pipeline'y, instalujesz narzędzie builder, które generuje plik workflow dla GitHub Actions.

Workflow wygląda następująco:

  1. Uruchamiasz polecenie build w terminalu.
  2. CLI wysyła kod do repozytorium i uruchamia runner GitHub Actions na macOS.
  3. Xcode w chmurze kompiluje projekt i pakuje artefakt.
  4. Narzędzie pobiera gotowy IPA do lokalnego folderu ./dist/.

Oznacza to, że nie musisz płacić za Maca — korzystasz z darmowych minut CI od GitHub. Jednak darmowe konta mają mnożnik x10 dla macOS. Z 20 000 darmowych minut miesięcznie na runnerach Mac, zostaje ci około 2 000 minut. To mniej więcej 15-20 buildów. To wystarczająco dużo na wydania i okresowe testowanie, ale nie będziesz w stanie uruchamiać CI przy każdym commicie.

Co potrafi narzędzie

Tool jest zaprojektowany do pracy z popularnymi wieloplatformowymi stackami i projektami natywnymi.

  • Automatyczne wykrywanie struktury projektu. Narzędzie rozumie Flutter, zwykły React Native, wyeksportowany Expo, Cordova/Ionic oraz natywne projekty Swift.
  • Zarządzanie podpisywaniem kodu. Możesz przesyłać certyfikaty i profile provisioning bezpośrednio do GitHub secrets za pomocą polecenia builder signing setup.
  • Hot Reload. Najbardziej przydatna część dla osób piszących we Flutterze lub React Native.
  • Uruchamianie na zdalnym symulatorze. Przez usługę MobAI możesz testować zbudowaną aplikację w symulatorze prosto z przeglądarki lub klienta desktopowego, choć ta opcja wymaga subskrypcji Pro.

Konfiguracja i pierwsze uruchomienie

Instalacja jest prosta. Na Windowsie możesz pobrać gotowy binarny plik ze strony releases, a na Linuxie, WSL lub macOS uruchomić polecenie przez terminal:

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

Albo zbuduj ze źródeł, jeśli masz już Go na maszynie:

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

Po instalacji musisz autoryzować się w GitHub i zainicjować projekt w głównym folderze repozytorium:

builder auth github
cd your-ios-project
builder init

Polecenie builder init w trybie interaktywnym utworzy plik konfiguracyjny .github/workflows/ios-build.yml i lokalny folder builder.json.

Przykładowa zawartość 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
    }
  }
}

Build uruchamia się jedną linią:

builder ios build

Jeśli certyfikaty Apple Developer nie są jeszcze skonfigurowane, możesz zbudować niepodpisany build z flagą --unsigned.

Programowanie z Hot Reload bez macOS

Zbudowanie pliku IPA to tylko połowa sukcesu. Prawdziwy ból zaczyna się, gdy musisz szybko poprawić UI i logikę. Przebudowywanie projektu w CI przy każdej zmianie przycisku mija się z celem, ponieważ build trwa kilka minut.

Twórcy rozwiązali ten problem, integrując się z aplikacją MobAI, która łączy fizyczny iPhone z twoim komputerem przez USB.

Workflow we Flutterze wygląda tak:

  1. Podłączasz iPhone'a do komputera z Windowsem lub Linuxem przez kabel.
  2. Budujesz bazowy IPA przez builder ios build i instalujesz go na urządzeniu.
  3. Uruchamiasz tryb programowania:
builder dev flutter

Narzędzie uruchamia file watcher w folderze lib/. Gdy zmieniasz kod Dart i zapisujesz plik, builder wysyła sygnał Hot Reload przez flutter attach. Wygenerowane pliki jak .freezed.dart i .g.dart są ignorowane, aby uniknąć wyzwalania niepotrzebnych przeładowań.

Będziesz musiał przebudować całą aplikację przez chmurę tylko wtedy, gdy dotkniesz kodu natywnego: zmieniasz Podfile, dodajesz wtyczki ze złożonymi zależnościami natywnymi lub edytujesz pliki Swift.

Dla React Native proces jest praktycznie taki sam:

builder dev rn

Polecenie uruchamia lokalny serwer Metro, przekierowuje odpowiedni port i łączy bundler z aplikacją działającą na telefonie. Jeśli pracujesz wewnątrz WSL2, musisz zezwolić na zewnętrzne połączenia w ustawieniach MobAI i podać adres sieciowy maszyny hosta z Windowsem.

Pułapki

Narzędzie wygląda atrakcyjnie, ale jest kilka praktycznych pytań na jego temat:

Przy ponownym podpisywaniu aplikacji w locie przez darmowe konto Apple ID, Bundle ID się zmienia (dodawany jest sufiks zespołu). Może to zepsuć powiadomienia push lub Sign in with Apple, jeśli są powiązane z konkretnym identyfikatorem.

Zależność od zewnętrznego narzędzia MobAI. Samo CLI builder jest rozpowszechniane na licencji MIT i jest napisane przejrzyście. Jednak część funkcjonalności (instalacja na urządzeniach, symulatory) opiera się na zastrzeżonej aplikacji MobAI, gdzie niektóre funkcje są płatne.

Limity GitHub Actions. Jeśli pracujesz w aktywnej fazie układania natywnego UI bez frameworków, darmowe minuty na runnerach szybko się skończą.

Czy warto spróbować

Jeśli piszesz we Flutterze lub React Native na Windowsie/Linuxie i okazjonalnie potrzebujesz przetestować aplikację na prawdziwym iPhonie lub zbudować wersję testową dla klienta, ios-builder zaoszczędzi mnóstwo czasu i nerwów. Eliminuje potrzebę ręcznego pisania plików YAML dla GitHub Actions i konfigurowania pobierania artefaktów.

W przypadku dużych projektów z rygorystycznymi wymaganiami bezpieczeństwa certyfikatów i złożonymi pipeline'ami CI/CD nadal będziesz potrzebować dedykowanego Maca. Ale dla niezależnych programistów i małych zespołów to wygodne obejście.

Powiązane projekty