2026-05-20 Xcode-16-Pfade für Provisioning Profiles und parallele Multi-Lane-Archive auf einem headless gemieteten Apple-Silicon-Cloud-Mac (HK / JP / KR / SG / US)
Teams, die Mac mini M4-Builder in Hongkong, Tokio, Seoul, Singapur oder den Vereinigten Staaten mieten und Xcode 16 headless betreiben, treffen auf eine leise Breaking Change: Provisioning Profiles „leben“ nicht mehr nur unter dem Legacy-Baum MobileDevice. Xcode 16 liest und schreibt den kanonischen Speicher unter UserData, während ältere Skripte, Fastlane-Helfer und Drittanbieter-CLIs .mobileprovision-Dateien weiter in den Pfad vor Xcode kopieren. Sobald Sie auf einem gemieteten Host mehrere parallele xcodebuild archive-Lanes hinzufügen, wird diese Pfad-Drift zu Signatur-Rennen, Phantomfehlern „Profil nicht gefunden“ und sporadischen errSecInternalComponent-Fehlern, die sich auf dem Entwickler-Laptop nie reproduzieren. Dieses Runbook 2026-05-20 formuliert die Policy vorweg: Profile in UserData und Legacy spiegeln, bis jedes Tool auf dem Host Xcode-16-bewusst ist, CI-Schlüsselbunde pro Lane sowie DerivedData-Wurzeln isolieren und parallele Archive-Lanes auf einem Standard-Mac mini M4 auf zwei begrenzen, sofern keine gemessene NVMe- und Unified-Memory-Reserve vorliegt. Sie erhalten eine Pfadvergleichstabelle, eine Multi-Lane-Matrix, Headless-Signatur-Triage, einen Acht-Schritte-Rollout und FAQ-Antworten, abgestimmt mit unserer Keychain- und Provisioning-CI-Baseline, dem Leitfaden automatische vs. manuelle Signierung und dem Artikel zur Disziplin paralleler xcodebuild-Jobs.
Wer Provisioning-Pfad-Drift auf einem gemieteten Headless-Mac trifft
Das Versagen meldet sich selten als „falsches Verzeichnis“. Stattdessen gelingt Lane B das Archiv, während Lane A No profile for team 'XXXXXXXXXX' matching meldet, obwohl beide Jobs dieselbe UUID importiert haben. Auf einem gemieteten Host ist die Wirkung größer: Golden Images backen Helper-Skripte von 2024 ein, Jenkins-Plugins rufen weiter ~/Library/MobileDevice/Provisioning Profiles auf, und die Fastlane-Lane eines Neuzugangs lädt nach UserData, während ein nächtlicher Cron nur den Legacy-Ordner aktualisiert. Multi-Branch-CI mit einem gemeinsamen macOS-Benutzerkonto verstärkt die Drift, weil jede Lane dasselbe Home-Verzeichnis liest, sofern Sie Pfade nicht bewusst trennen.
- Release-Ingenieure, die zwei oder mehr parallele Archive für unterschiedliche Bundle-IDs auf einem Mac mini M4 fahren, brauchen deterministische Profilauflösung pro Lane.
- Plattform-Teams, die Golden Images pflegen, müssen dokumentieren, welchen Pfad Xcode 16,
xcodebuildund Hilfstools währendarchiveundexportArchivelesen. - Security-Reviewer verlangen den Nachweis, dass Lane A das Distributionszertifikat von Lane B nicht lesen kann — pro Lane getrennte Schlüsselbunde sind bei Hot-Swap-Profilen nicht verhandelbar.
Beginnen Sie jedes Design-Review beim Versprechen der MacXCode-Startseite: Apple Silicon nah an Apple-APIs, und ordnen Sie dann zu, welche Signatur-Artefakte mit dem Checkout auf dem Miet-Host colokiert sein müssen. Wenn Sie Profile nur nach MobileDevice kopieren, werten Sie das als technische Schuld, die zuverlässigen Multi-Lane-Durchsatz blockiert — unser Leitfaden Remote-Archive liegt vor der UserData-Verschiebung und sollte mit diesem Update gelesen werden.
Legacy MobileDevice vs. Xcode-16-UserData-Profilpfade
Xcode 16 behandelt ~/Library/Developer/Xcode/UserData/Provisioning Profiles als primären On-Disk-Speicher, wenn Sie Profile aus dem Xcode-Konto-Bereich laden oder xcodebuild -allowProvisioningUpdates Entitlements aktualisiert. Der Legacy-Pfad ~/Library/MobileDevice/Provisioning Profiles bleibt relevant, weil viele CI-Rezepte, ältere Fastlane-Actions und interne Shell-Installer ausschließlich dort hinschreiben. Bis Sie jeden Einstieg auditiert haben, ist die sichere Betriebsvorgabe byte-identische Kopien in beiden Bäumen nach jeder Profilrotation, mit dem UUID-Dateinamen aus dem Apple-Plist (security cms -D -i datei.mobileprovision → Schlüssel UUID).
| Pfad | Typischer Konsument | Verhalten Xcode 16 | CI-Hinweis auf Miet-Hosts |
|---|---|---|---|
~/Library/Developer/Xcode/UserData/Provisioning Profiles |
Xcode-IDE, modernes xcodebuild |
Kanonisches Lesen/Schreiben für GUI-Downloads | xcode-select vor dem Kopieren pinnen; per Konten-Export prüfen |
~/Library/MobileDevice/Provisioning Profiles |
Legacy-Skripte, manche Fastlane-Versionen | Von vielen CLI-Flows weiterhin akzeptiert | Hier spiegeln, bis Skripte außer Betrieb sind |
Lane-Staging (z. B. /var/ci/lane-a/profiles) |
Eigene Installer vor dem Kopieren | Wird nicht direkt gelesen; reduziert Home-Verzeichnis-Rennen | Pro Lane-Job in beide kanonische Pfade kopieren |
ASC-API + -allowProvisioningUpdates |
Automatische Signatur-Pipelines | Kann nur UserData füllen | API-Keys abschotten; siehe Fastlane vs. natives ASC |
mtime-Werte neben security find-identity -v -p codesigning wie in der Keychain-Baseline.
Matrix paralleler Multi-Lane-Archive auf einem Mac mini M4
Parallele Archive sind auf einem gemieteten Mac mini M4 keine „kostenlose Parallelität“: Unified Memory, NVMe-Warteschlangentiefe und Signatur-Session-Zustand serialisieren weiter unter Last. Die Matrix unten setzt voraus, dass jede Lane ein dediziertes -derivedDataPath, einen eigenen CI-Schlüsselbund und gespiegelte Profile nutzt — Muster aus unserem Parallel-Jobs-Leitfaden und dem Artikel Schema + xcconfig für mehrere Branches.
| Anzahl Lanes | Typische NVMe-Reserve | Unified Memory | Operator-Urteil |
|---|---|---|---|
| 1 serielles Archiv | 120 GB+ frei auf dem Systemvolume | 16 GB Minimum; 24 GB komfortabel | Standard für gemeinsame Release-Züge; einfachste Logs |
| 2 parallele Archive | 120–180 GB frei pro Lane unter /var/ci |
24 GB+ empfohlen | Praktisches Limit auf Serien-M4; DerivedData + Schlüsselbunde isolieren |
| 3+ parallele Archive | NVMe-Klasse 2 TB; aggressives Aufräumen | 32 GB+ oder Kompressions-Stalls erwarten | Nur nach Messung; Speicherhygiene planen |
| Archive + schwerer Test-Shard | Getrennte Wurzeln; ModuleCache nie teilen | 4 GB Puffer für XCTest freilassen | Serielles Archiv nach Tests oder getrennte Hosts bevorzugen |
Beispiel für eine lane-spezifische Archive-Zeile (manuelle Signatur mit explizitem Specifier):
KEYCHAIN_PATH=/var/ci/lane-a/ci.keychain-db DERIVED=/var/ci/lane-a/dd xcodebuild -workspace App.xcworkspace -scheme Release -configuration Release -archivePath /var/ci/lane-a/out/App.xcarchive -derivedDataPath "$DERIVED" CODE_SIGN_STYLE=Manual PROVISIONING_PROFILE_SPECIFIER='MyApp AppStore' archive
Headless-Signatur-Triage, wenn Profile „installiert“ wirken
SSH-Sitzungen fühlen sich interaktiv an; launchd und CI-Runner nicht. Die häufigsten Headless-Fehler nach einem Xcode-16-Upgrade: Profile nur nach MobileDevice kopiert, Distributionsidentitäten im Login-Schlüsselbund importiert, während xcodebuild auf einen leeren CI-Schlüsselbund zeigt, und Lane B entsperrt einen Schlüsselbund, den Lane A noch exklusiv braucht. Behandeln Sie jedes Archiv als dreiteiligen Fingerabdruck: security list-keychains, security find-identity -v -p codesigning und ls -lt beider Profilordner auf die drei neuesten UUIDs begrenzt.
Wenn codesign errSecInternalComponent ausgibt, entsperren Sie den CI-Schlüsselbund vor dem Archiv non-interaktiv, setzen Sie Partition-Listen für codesign-Zugriff, und prüfen Sie, ob die Entitlements des Provisioning Profiles zu den Fähigkeiten des Targets passen — insbesondere Push, App Groups und Associated Domains nach Portal-Änderungen. Automatische Signatur mit ASC-API kann Pfad-Drift bis zum Export maskieren; manuelle Lanes zeigen sie sofort. Lesen Sie automatisch vs. manuell, bevor Sie Stile auf einem Host mischen.
ci-lane-a.keychain-db und ci-lane-b.keychain-db unter /var/ci an, importieren Sie Distributions-.p12 mit security import -k "$KEYCHAIN_PATH" -P "$P12_PASS" -T /usr/bin/codesign, und begrenzen Sie security list-keychains -s auf die Job-Laufzeit.
| Symptom | Wahrscheinliche Ursache | Nächster Befehl oder Fix |
|---|---|---|
| Profil fehlt im Xcode-Report | UserData leer; nur Legacy-Installation | UUID-Datei nach UserData spiegeln; Archiv erneut ausführen |
errSecInternalComponent |
Gesperrter Schlüsselbund oder falsche Partition-Liste | security unlock-keychain -p "$PASS" "$KEYCHAIN_PATH"; set-key-partition-list |
| Lane A ok, Lane B scheitert am selben Commit | Geteiltes DerivedData oder Profil-Race | -derivedDataPath trennen; Profilkopie serialisieren |
| Export ok, Upload abgelehnt | Falscher Profiltyp oder abgelaufene Entitlements | Mit Export + ASC-Upload-Checkliste prüfen |
Nach dem Archiv dSYMs hochladen, bevor Sie Lane-Ordner löschen — unser dSYM-Symbolikations-Leitfaden setzt voraus, dass Archive pro Lane unter /var/ci/…/out adressierbar bleiben.
Acht-Schritte-Rollout für Xcode-16-Pfade + Multi-Lane-Archive
xcode-select -pauf die gewünschte Xcode 16.app pinnen;xcodebuild -versionim Golden-Image-Manifest festhalten.- Jedes Skript prüfen, das
.mobileprovisionkopiert; Installer so aktualisieren, dass sie beide Pfade UserData und MobileDevice mit UUID-Dateinamen beschreiben. - CI-Schlüsselbunde pro Lane anlegen und Distributionszertifikate importieren; Lanes den Zugriff auf fremde Schlüsselbunddateien verweigern.
KEYCHAIN_PATH,PROVISIONING_PROFILE_SPECIFIER(oder Profil-UUID) und lane-spezifischesDERIVED_DATA_ROOTin CI-Umgebungsblöcken exportieren.- Trockenlauf
xcodebuild -showBuildSettingspro Lane;CODE_SIGN_STYLEgegen die Policy aus dem Leitfaden Signaturmodus prüfen. -allowProvisioningUpdatesnur aktivieren, wenn ASC-API-Zugangsdaten abgeschottet und überwacht sind — siehe natives ASC vs. Fastlane.- Mit einer Archive-Lane starten, bis Profil-Spiegelung stabil ist; Lane zwei mit separaten NVMe-Wurzeln und Logdateien hinzufügen.
- Wöchentliche Speicherbereinigung planen und Profile mit Überlapp rotieren; Hot-Swap-Kopien in Lane-Staging-Verzeichnissen halten.
Muster für non-interaktive Profilinstallation (Pfade durch Ihr Lane-Staging ersetzen):
UUID=$(security cms -D -i "$PROFILE" | plutil -extract UUID raw -) && cp "$PROFILE" "$HOME/Library/Developer/Xcode/UserData/Provisioning Profiles/$UUID.mobileprovision" && cp "$PROFILE" "$HOME/Library/MobileDevice/Provisioning Profiles/$UUID.mobileprovision"
FAQ
Wo speichert Xcode 16 Provisioning Profiles? Primärpfad ist ~/Library/Developer/Xcode/UserData/Provisioning Profiles. Legacy-Tools können weiter ~/Library/MobileDevice/Provisioning Profiles lesen — auf CI-Hosts beide spiegeln, bis alle Installer aktualisiert sind.
Wie viele parallele Archive-Lanes passen auf einen Mac mini M4? Zwei Lanes mit je 120–180 GB NVMe-Reserve sind ein praktischer Standard; eine dritte Lane braucht 2 TB Speicher, aggressives Aufräumen und sorgfältiges Speicher-Budget laut Matrix oben.
Warum schlägt codesign per SSH mit errSecInternalComponent fehl? Meist gesperrter Schlüsselbund, fehlende Partition-Liste für den CI-Schlüsselbund oder Profile nur unter dem Legacy-Pfad, während Xcode 16 zuerst UserData auflöst.
Sollen Lanes DerivedData teilen, um Builds zu beschleunigen? Nein für Release-Archive — ModuleCache und Index-Stores racen bei parallelen Archiven. Pro Lane -derivedDataPath nutzen und optionale gemeinsame read-only-Abhängigkeits-Caches erst nach einem einzelnen Writer für Paketauflösung.
Für Navigation: Blog-Index und Hilfe-Center bookmarken, damit Bereitschaft dieses Runbooks ohne Chat-Suche findet.
Warum Mac-mini-M4-Mieten zu Multi-Lane-Xcode-16-Archiven passen
Apple Silicon M4 liefert genug Unified-Memory-Bandbreite, um zwei mittlere iOS-Graphen parallel zu kompilieren, wenn Sie DerivedData isolieren und Lanes ehrlich begrenzen. Native macOS-Code-Signatur vermeidet Hypervisor-Schlüsselbund-Eigenheiten, die emulierte Mac-Umgebungen plagen — relevant, wenn drei Nightly-Branches jeweils ein frisches Distribution-Profil brauchen. Mieten entfernt CapEx in intensiven Release-Wochen: Builder in Tokio für App-Store-Connect-Nähe, Singapur für ASEAN-Egress oder den Vereinigten Staaten für US-West-API-Endpunkte hochfahren und nach dem Zug wieder herunterskalieren. Regionen auf der Seite Preise vergleichen, SSH im Hilfe-Center proben und diesen Artikel mit Remote-Archive-Workflows koppeln, wenn ein neues Repo auf einer headless Mietmaschine ankommt.
Apple Silicon mieten, wo Xcode-16-Signatur planbar bleibt
HK / JP / KR / SG / US · headless SSH · Multi-Lane-Archive bereit