Mit der Verbindungsebene beginnen

Probleme mit dem Cloud-Mac? Ebene für Ebene prüfen statt zu raten

Von SSH, grafischer Oberfläche und Dateiübertragung bis zu Xcode, Runner, fastlane und Knotennetzwerken: erst mit reproduzierbaren Befehlen den Fehler eingrenzen, dann Konfiguration anpassen oder ein Support-Ticket eröffnen.

Dedizierter physischer Rechner Grafische Oberfläche und Kommandozeile von macOS Netzwerkprüfung für vier Knoten
Engineering-Cluster aus mehreren physischen Mac-mini-Knoten und Netzwerkverbindungen
diagnose@mac-node — zsh

$ ssh -v "$MAC_USER@$MAC_HOST"

debug1: Authentication succeeded

$ xcodebuild -version

Xcode-Toolchain bereit

$ scutil --dns | grep nameserver

Resolver-Pfad verifiziert

Erste Einrichtung

Zuerst eine überprüfbare SSH-Verbindung herstellen

Öffnen Sie im Portal die entsprechende Instanz und prüfen Sie Hostadresse, Anmeldenamen und anfängliche Zugangsdaten. Die erste Verbindung erfüllt drei Aufgaben: Zielhost verifizieren, am System anmelden und die folgenden Anmeldungen auf einen Schlüssel umstellen.

  1. 01

    Instanz und lokale Umgebung prüfen

    Prüfen Sie zunächst, ob die Instanz ordnungsgemäß läuft, und schreiben Sie Hostadresse und Benutzernamen aus dem Portal getrennt in lokale Umgebungsvariablen. Passwörter, private Schlüssel oder vollständige Zugangsdaten gehören nicht in Repositorys, Chatverläufe oder Automatisierungsprotokolle.

    export MAC_HOST="Hostadresse aus der Konsole"
    export MAC_USER="Benutzername aus der Konsole"
    test -n "$MAC_HOST" && test -n "$MAC_USER" && echo "connection variables ready"
  2. 02

    Erste Verbindung herstellen und Hostschlüssel prüfen

    Vergleichen Sie nach dem Verbindungsaufbau den im Terminal angezeigten Fingerabdruck mit den Angaben im Portal. Ändern sich Hostadresse oder Fingerabdruck nach einer Neuinstallation oder existiert lokal ein alter Eintrag, ignorieren Sie die Warnung nicht direkt, sondern prüfen Sie zuerst, ob es weiterhin dasselbe Gerät ist.

    ssh -v "$MAC_USER@$MAC_HOST"
    ssh-keygen -F "$MAC_HOST"
  3. 03

    Separaten Schlüssel erzeugen und installieren

    Erzeugen Sie für den Cloud-Mac einen eigenen Ed25519-Schlüssel, damit Rotation und Widerruf einfach bleiben. Lassen Sie die aktuelle Sitzung nach der Installation des öffentlichen Schlüssels geöffnet und prüfen Sie die Schlüsselanmeldung in einem zweiten Terminal, bevor Sie die ursprüngliche Sitzung beenden.

    ssh-keygen -t ed25519 -a 64 -f "$HOME/.ssh/macrents_build"
    cat "$HOME/.ssh/macrents_build.pub" | ssh "$MAC_USER@$MAC_HOST" 'umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys'
    ssh -i "$HOME/.ssh/macrents_build" "$MAC_USER@$MAC_HOST"
  4. 04

    Clientkonfiguration festlegen und Baseline prüfen

    Legen Sie für die Instanz einen eigenen Alias, Schlüsselpfad und Keepalive-Parameter fest. Erfassen Sie nach der Anmeldung macOS-Version, freien Speicher, aktuellen Benutzer und Systemzeit, um spätere Umgebungsänderungen bei fehlgeschlagenen Builds schnell zu erkennen.

    sw_vers
    whoami
    date
    df -h /
    uptime

Verbindungs-Timeout und fehlgeschlagene Authentifizierung sind unterschiedliche Probleme

Bei einem Timeout prüfen Sie zuerst lokales Netzwerk, Port, Knotenroute und Beschränkungen für Quelladressen. Bei Permission denied prüfen Sie zunächst Benutzername, Schlüsseldatei, Dateiberechtigungen und Autorisierungsprotokolle des Servers. Ändern Sie bei Authentifizierungsfehlern nicht wiederholt DNS und setzen Sie bei einer unterbrochenen Netzwerkverbindung nicht fortlaufend Zugangsdaten zurück.

Remote-Zugriff

Terminal, grafische Oberfläche oder Dateiübertragung passend zur Aufgabe wählen

Für Builds und Automatisierung bevorzugt SSH verwenden; für UI-Debugging, Simulatoren oder Desktop-Tools einen grafischen Remote-Desktop; für die Synchronisierung großer Projekte und Artefakte eine fortsetzbare Dateiübertragung.

Terminalverbindung

Geeignet zum Abrufen von Repositorys, Installieren von Abhängigkeiten, Ausführen von Builds und Verwalten dauerhafter Aufgaben. Aktivieren Sie bei instabilen Verbindungen Keepalive und ermitteln Sie mit ausführlichen Protokollen, ob die Unterbrechung beim Handshake, bei der Authentifizierung oder in der Sitzung auftritt.

ssh -vvv -o ServerAliveInterval=30 -o ServerAliveCountMax=4 "$MAC_USER@$MAC_HOST"

Grafischer Remote-Desktop

Öffnen Sie den grafischen Zugriff über das Portal. Er eignet sich für Xcode-UI-Debugging, die Beobachtung von Simulatoren und Tools mit Desktop-Interaktion. Bei Verzögerungen senken Sie zunächst Auflösung und Bildwiederholrate und vergleichen anschließend die Terminal-Latenz, um Kodierungsprobleme von Netzwerkproblemen zu unterscheiden.

Dateiübertragung

Für wenige Dateien eignet sich scp; für große Verzeichnisse und Build-Caches wird rsyncempfohlen. Schließen Sie vor der Übertragung abgeleitete Daten, temporäre Archive und Abhängigkeits-Caches aus, damit rekonstruierbare Inhalte nicht wiederholt grenzüberschreitend übertragen werden.

rsync -azP --partial --exclude DerivedData/ ./project/ "$MAC_USER@$MAC_HOST:~/workspace/project/"

Sitzungssicherheit und Wiederaufnahme nach Verbindungsabbruch

Verlassen Sie sich bei langen Builds nicht auf ein einziges Vordergrundterminal. Verwenden Sie einen Sitzungsmanager oder den macOS-Servicemechanismus, halten Sie Aufgaben aktiv und schreiben Sie Protokolle regelmäßig in ein kontrolliertes Verzeichnis. Widerrufen Sie nicht mehr benötigte öffentliche Schlüssel und Zugriffstoken.

tmux new -s build
tmux attach -t build
tail -n 200 "$HOME/logs/build.log"
Build-Toolchain

Vor der Xcode-Fehleranalyse die tatsächlich verwendete Toolchain prüfen

Das in der grafischen Oberfläche angezeigte Xcode und das per Kommandozeile ausgewählte Entwicklerverzeichnis können unterschiedliche Versionen sein. Erfassen Sie zunächst Pfad, Version, SDK, Simulator und Signierungsumgebung und führen Sie anschließend einen minimalen Build erneut aus.

Grundlegende Prüfkommandos

xcode-select -p
xcodebuild -version
xcodebuild -showsdks
xcrun simctl list devices available
xcrun --find swift
swift --version
security list-keychains -d user
security find-identity -v -p codesigning
A

Entwicklerverzeichnis

xcode-select -p muss auf das für diesen Build erforderliche Xcode zeigen. Bei einem falschen Pfad stoppen Sie zuerst den Runner, wechseln das Verzeichnis und starten ihn anschließend neu, damit laufende Aufgaben nicht die alte Umgebung übernehmen.

B

SDK und Simulator

Wenn das Ziel-SDK in der Ausgabe von -showsdks nicht erscheint, lässt sich die Toolchain nicht durch eine Änderung der Projektparameter ergänzen. Bei Simulatoraufgaben sind außerdem Gerätestatus, Runtime-Version und freier Speicher zu prüfen.

C

Signierungsidentität und Schlüsselbund

Eine vorhandene Signierungsidentität bedeutet nicht, dass der Automatisierungsprozess auf den privaten Schlüssel zugreifen kann. Vergleichen Sie Benutzer, Schlüsselbund-Suchliste und Entsperrstatus von interaktivem Terminal und Runner-Dienst.

D

Minimalen Build reproduzieren

Fixieren Sie zunächst Arbeitsbereich, Scheme, Configuration und Destination und deaktivieren Sie irrelevante Skripte. Bewahren Sie vollständigen Exit-Code und die letzten Protokollzeilen auf, statt nur die letzte Fehlermeldung zu kopieren.

set -o pipefail
xcodebuild -workspace Project.xcworkspace -scheme Project -configuration Release -destination 'generic/platform=macOS' clean build | tee "$HOME/logs/xcode-build.log"
printf 'exit_code=%s\n' "$?"
Automatisierung anbinden

Ein registrierter Runner bedeutet noch keine reproduzierbare Build-Umgebung

Self-hosted Runner und dauerhafte Agents sollten Benutzer, Arbeitsverzeichnis, Toolchain-Pfad, Cache-Grenzen und Zugriff auf Schlüssel fest vorgeben. Lassen Sie zunächst eine minimale Aufgabe stabil abschließen und aktivieren Sie Parallelisierung, Caches und Verteilung danach schrittweise.

GitHub Actions

Self-hosted Mac Runner

Erzeugen Sie in den Projekt- oder Organisationseinstellungen einmalige Registrierungsinformationen und registrieren Sie den Runner auf dem Cloud-Mac unter einem dedizierten Systembenutzer. Tags sollten mindestens Betriebssystem, Chipklasse und Zweck unterscheiden; Workflows routen macOS-Aufgaben nur an passende Knoten.

  • Nach der Registrierung als dauerhaften Dienst installieren
  • Build- und Zugangsdatenverzeichnis trennen
  • Temporäre Signierungsmaterialien nach jedem Auftrag löschen
  • Zunächst Einzelparallelität erzwingen, dann die Warteschlange bewerten
whoami
xcode-select -p
printenv | sort
df -h "$HOME"
GitLab CI

macOS Runner

Wählen Sie bei der Registrierung eine für macOS geeignete Ausführungsart und begrenzen Sie die Auftragsquellen mit geschützten Tags. Der Dienstbenutzer muss auf Projektverzeichnis und benötigte Schlüsselbünde zugreifen können, darf aber keine für den Build unnötigen Systemrechte erhalten.

  • Tags und Regeln für geschützte Branches prüfen
  • Toolchain- und Abhängigkeitsversion in den Cache-Schlüssel aufnehmen
  • Wiederholungen nur für vorübergehende Netzwerkschritte verwenden
  • Vor dem Artefakt-Upload Prüfsumme und Größe protokollieren
git status --short
git rev-parse HEAD
shasum -a 256 "$HOME/artifacts/app.zip"
du -sh "$HOME/build-cache"
Dauerhafter Build-Agent

Als Dienst ausführen

Eigene oder andere Build-Agents sollten vom macOS-Servicemechanismus verwaltet werden. Legen Sie Startbenutzer, Datei mit Umgebungsvariablen, Standardausgabe und Neustartstrategie nach einem Exit fest. Verlassen Sie sich nicht darauf, dass eine Remote-Desktop-Sitzung dauerhaft verbunden bleibt.

  • Stabiles und eindeutiges Arbeitsverzeichnis konfigurieren
  • Protokollgröße begrenzen und Fehlerkontext aufbewahren
  • Nach Neustarts automatisch wiederherstellen, aber Fehler-Schleifen vermeiden
  • Toolchain- und Speicher-Baseline regelmäßig prüfen
launchctl list | grep build
ps aux | grep '[b]uild-agent'
lsof -nP -iTCP -sTCP:ESTABLISHED
tail -n 200 "$HOME/logs/agent.log"

Empfohlene minimale Reihenfolge der Einrichtung

  1. Umgebungsprobe: Benutzer, Xcode-Pfad, Version, Speicher und Arbeitsverzeichnis ausgeben.
  2. Repository-Aufgabe: Nur Checkout und Abhängigkeitsauflösung ausführen und Netzwerk sowie Dateiberechtigungen prüfen.
  3. Build ohne Signierung: Kompilierung und Tests prüfen und Zertifikatsvariablen ausschließen.
  4. Signiertes Archiv: Kontrollierten Schlüsselbund und erforderliche Umgebungsvariablen anbinden.
  5. Artefakt-Upload: Exit-Code, Dateigröße, Prüfsumme und Upload-Protokoll erfassen.
  6. Parallelisierung erweitern: Erst CPU, Unified Memory, Festplatten-I/O und Warteschlangenzeit beobachten, dann weitere Aufgaben hinzufügen.
Release-Automatisierung

Bei fastlane-Fehlern nach Zertifikaten, Berechtigungen, Variablen und Protokollen vorgehen

Installieren Sie nicht sofort alle Abhängigkeiten neu. Prüfen Sie zuerst, ob der Fehler bei Signierungsvorbereitung, Archivierung, Export oder Upload auftritt, und erfassen Sie für diese Phase Eingaben, Exit-Code und bereinigte Protokolle.

Häufige fastlane-Probleme, Prüfkommandos und Lösungsansätze
Prüfebene Typisches Erscheinungsbild Zuerst prüfen Vorgehensweise
Zertifikate Signierungsidentität nicht gefunden, Anzahl der Identitäten ist null security find-identity -v -p codesigning Zielschlüsselbund, Zertifikatsgültigkeit und Zuordnung zum privaten Schlüssel prüfen
Provisioning-Profile Bezeichner stimmen nicht überein, Capabilities sind inkonsistent Zielbezeichner, Teamdaten, erforderliche Capabilities und Profilinhalt Provisioning-Profile verschiedener Projekte oder Umgebungen nicht vermischen
Schlüsselbundberechtigungen Build im Terminal möglich, Signierung durch Runner nicht möglich Ausführender Benutzer, Suchliste, Entsperrstatus und Zugriffskontrolle des privaten Schlüssels Dem Automatisierungsprozess nur die für diesen Auftrag erforderlichen Signierungsmaterialien zugänglich machen
Umgebungsvariablen Interaktiv erfolgreich, Dienstausführung ohne Parameter printenv : Unterschiede bei der Bereinigung und Dienststartkonfiguration Variablen explizit injizieren und nicht von interaktiven Shell-Konfigurationsdateien abhängen
Upload-Protokolle Archivierung erfolgreich, Upload unterbrochen oder Status ungleich null Vollständiger Exit-Code, Wiederholungen, Dateigröße und Netzwerk-Zeitachse Zuerst Artefaktgültigkeit prüfen und Upload- sowie Build-Probleme getrennt behandeln
Warum funktioniert die Ausführung im Terminal, während der Runner keine Signierungsidentität findet?

Am häufigsten unterscheiden sich die ausführenden Benutzer oder der Dienstprozess hat die Schlüsselbund-Suchliste der interaktiven Sitzung nicht übernommen. Erfassen Sie getrennt whoami sowie security list-keychains -d user und die Ausgabe der Signierungsidentitäten und vergleichen Sie anschließend beide Umgebungen. Lockern Sie nicht die Berechtigungen aller privaten Schlüssel, um Benutzergrenzen zu verschleiern.

Wie lässt sich feststellen, ob fastlane eine Umgebungsvariable statt einer Projektkonfiguration vermisst?

Geben Sie bei identischem Commit, Xcode-Pfad und Arbeitsverzeichnis im interaktiven Terminal und im Runner jeweils eine bereinigte Liste der Variablennamen aus. Vergleichen Sie nur, ob Variablen vorhanden sind, und geben Sie keine Tokenwerte aus. Sind die Variablen vollständig, prüfen Sie Arbeitsverzeichnis, Shell-Typ, Abhängigkeitsversionen und ausführenden Benutzer.

Welche Protokolle sollten beim Melden eines fastlane-Problems erhalten bleiben?

Bewahren Sie Lane-Name, Fehlerphase, vollständigen Exit-Code, Xcode- und fastlane-Version, Start- und Endzeit, Kontext der letzten Zeilen und reproduzierbare Befehle auf. Entfernen Sie Zugriffstoken, Zertifikatspasswörter, private Schlüssel, Sitzungsdaten und personenbezogene Daten vor dem Senden. Ein Screenshot nur mit der letzten Fehlermeldung reicht meist nicht zur Eingrenzung aus.

Netzwerk mit vier Knoten

Singapur, Japan (Tokio), Südkorea (Seoul) und Hongkong mit denselben Messwerten vergleichen

Wählen Sie den Knoten nach Teamstandort, Quellen von Code und Abhängigkeiten, Ziel der Artefakte und tatsächlicher Route. Bewerten Sie nicht nur eine einzelne Latenzmessung, sondern mindestens Round-Trip-Latenz, Paketverlust, DNS-Auflösung und Routenänderungen und dokumentieren Sie den Testzeitraum.

SG

Singapur

Geeignet für Teams und Abhängigkeiten in Südostasien. Bei plötzlich steigender Latenz vergleichen Sie Büro-, Mobilfunk- und eine weitere Ausgangsleitung, um Änderungen der lokalen Providerroute zu erkennen.

JP

Japan (Tokio)

Geeignet für Projekte in Japan und Nordostasien. Bei grenzüberschreitenden Verbindungen zugleich Direktlatenz, Routerhops und Übertragungsrate erfassen, statt nur die flüssige Darstellung des Remote-Desktops zu bewerten.

KR

Südkorea (Seoul)

Geeignet für Zugriffe aus Südkorea und angrenzenden Regionen. Wenn SSH funktioniert, große Dateien aber instabil übertragen werden, prüfen Sie Paketverlust, Pfad-MTU, lokalen Proxy und Anzahl paralleler Übertragungen.

HK

Hongkong

Geeignet für grenzüberschreitende Zusammenarbeit in Asien und Teams an mehreren Standorten. Wenn ein Netzwerk erreichbar ist und ein anderes ein Timeout liefert, speichern Sie beide Routenergebnisse und vermerken Sie den Typ des Ausgangsnetzes.

Latenz und Paketverlust

Kurztests bestätigen die Erreichbarkeit, Dauertests zeigen Schwankungen und sporadischen Paketverlust. Setzen Sie $MAC_HOST auf die Adresse der aktuellen Instanz und führen Sie anschließend Folgendes aus:

ping -c 20 "$MAC_HOST"
nc -vz -w 5 "$MAC_HOST" 22
traceroute "$MAC_HOST"

DNS und lokale Auflösung

Bei Verbindungen über einen Hostnamen prüfen Sie zuerst, ob das Auflösungsergebnis stabil ist. Schlägt die Verbindung auch bei direkter Verwendung der Adresse fehl, liegt das Problem meist nicht bei DNS. Erfassen Sie den aktuellen lokalen Resolver und das Abfrageergebnis:

scutil --dns
dscacheutil -q host -a name "$MAC_HOST"
dig "$MAC_HOST"

Routen und Schnittstellen

Prüfen Sie, ob der Datenverkehr über die erwartete Schnittstelle läuft, und ob lokales VPN, Proxy oder mehrere Netzwerkkarten die Standardroute ändern. Stellen Sie die ursprünglichen Netzwerkeinstellungen nach dem Test wieder her und ändern Sie nicht mehrere Variablen gleichzeitig:

route -n get "$MAC_HOST"
netstat -rn
ifconfig
networkQuality

Validierung der Übertragungsschicht

Wenn der SSH-Handshake normal verläuft, die Übertragung aber langsam ist, wiederholen Sie den Test mit einer festen Datei und erfassen Sie Größe, Dauer und Clientnetzwerk. Vergleichen Sie keine Ergebnisse aus unterschiedlichen Projektverzeichnissen oder mit unterschiedlicher Komprimierung direkt:

time scp "$HOME/test-transfer.bin" "$MAC_USER@$MAC_HOST:~/"
shasum -a 256 "$HOME/test-transfer.bin"
ssh "$MAC_USER@$MAC_HOST" 'shasum -a 256 ~/test-transfer.bin'

Alle Knoten laufen 365 Tage im Jahr stabil

Sammeln Sie bei Verbindungsproblemen Belege zu Ausgangsnetz, Zielknoten, Protokoll und Zeitraum. Eine einzelne Geschwindigkeitsmessung sagt nichts über die langfristige Leitungsqualität aus; führen Sie denselben Test mindestens einmal im problematischen und einmal in einem Vergleichsnetz aus, um lokalen Ausgang, grenzüberschreitende Route und Zielverbindung zu unterscheiden.

Support durch Mitarbeitende anfordern

Support-Ticket mit reproduzierbarem Kontext einreichen

Bestehende Kunden melden sich bevorzugt im Portal an und eröffnen dort ein Ticket, damit Auftrag und Instanz zugeordnet werden können. Wenn der Portalzugang nicht möglich ist, senden Sie eine E-Mail an support@macrents.com. Beide Wege führen in denselben Supportprozess.

Diese Angaben gehören ins Ticket

  • Bestellnummer und betroffene Instanz
  • Knoten: Singapur, Japan (Tokio), Südkorea (Seoul) oder Hongkong
  • Zeitraum des Problems und Zeitzone
  • Erwartetes Ergebnis, tatsächliches Ergebnis und Reproduktionsschritte
  • Clientsystem, Netzwerktyp und verwendetes Protokoll
  • Exit-Codes der Befehle und bereinigte relevante Protokolle
  • Bereits durchgeführte Prüfungen und deren Ergebnisse

Nicht per Nachricht senden

  • Private Schlüsseldateien oder den Inhalt privater Schlüssel
  • Vollständige Passwörter, Zugriffstoken oder Sitzungsdaten
  • Zertifikatspasswörter und unverschlüsselte Signierungsmaterialien
  • Vollständige Datenbanken oder Projektarchive mit Benutzerdaten
  • Unbearbeitete personenbezogene Daten und Geschäftsgeheimnisse

Erforderliche Teile von Hostadressen dürfen in Protokollen erhalten bleiben. Entfernen Sie jedoch Token, Passwörter, Request-Header, Signierungsmaterialien und personenbezogene Daten. Wenn der Support weitere Informationen benötigt, nennt er im Ticket den minimal erforderlichen Umfang.

Ablauf nach dem Einreichen

Bestellung und Instanz bestätigen Reproduktionsbedingungen prüfen Verbindungs- oder Umgebungsebene eingrenzen Handlungsschritte bereitstellen Wiederherstellung verifizieren

Geben Sie bei Verbindungsabbrüchen, nicht erreichbaren Instanzen oder dauerhaft fehlschlagenden Builds den geschäftlichen Auswirkungsbereich an. Fragen zur Konfiguration vor der Bestellung können direkt per E-Mail gestellt werden. Bei technischen Problemen zu bestehenden Bestellungen, Hoststatus und Protokollen verwenden Sie bevorzugt ein Portal-Ticket.

Nächster Schritt

Erst die passende Konfiguration wählen, dann die Fehlerbehebung in den Teamprozess integrieren

Alle drei Tarife umfassen einen dedizierten physischen Mac-mini-Knoten, keine virtuelle Maschine. Wählen Sie nach Build-Parallelität, Unified-Memory-Bedarf und Mietdauer. Bei Problemen mit einer bestehenden Instanz können Sie direkt im Portal ein Ticket eröffnen.