From e250b6c5e1e1d1cadaebc1df8aad825e9fd65724 Mon Sep 17 00:00:00 2001 From: Paul Nothaft Date: Wed, 2 Sep 2026 14:25:28 +0200 Subject: [PATCH] Share-Erweiterung wurde doppelt eingebettet - eine Copy-Phase zu viel Erster Lauf des Einrichtungsskripts auf einem Mac. Xcode brach ab mit "error: Unexpected duplicate tasks", zweimal ValidateEmbeddedBinary auf dieselbe DataMetric360Share.appex. Ursache: addTarget() legt fuer den Typ app_extension selbst schon eine Copy-Phase nach PlugIns am ersten Ziel an. Das Skript fuegte danach eine zweite mit demselben Ziel und derselben Datei hinzu. Die explizite Phase entfaellt jetzt; belegt am erzeugten Projekt: genau eine Phase mit dstSubfolderSpec 13 statt zwei. Alles Uebrige des Skripts lief auf Anhieb: Ziel, Entitlements, URL-Schema, Idempotenz. --- companion-app/docs/SHARE_EXTENSION.md | 13 ++++++++++--- .../scripts/ios-teilen-einrichten.mjs | 19 ++++++++++--------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/companion-app/docs/SHARE_EXTENSION.md b/companion-app/docs/SHARE_EXTENSION.md index 095fe1b..8eb42cc 100644 --- a/companion-app/docs/SHARE_EXTENSION.md +++ b/companion-app/docs/SHARE_EXTENSION.md @@ -79,9 +79,16 @@ Archivieren. ## Wenn das Skript abbricht `ios-teilen-einrichten.mjs` bearbeitet die `project.pbxproj` über das -npm-Paket `xcode`. **Das ist auf keinem Mac erprobt** — geschrieben ohne -Zugriff auf macOS. Bricht es ab, ist nichts halb eingerichtet (es bricht vor -dem Schreiben ab), und dasselbe lässt sich in Xcode von Hand erledigen: +npm-Paket `xcode`. **Erstmals auf einem Mac gelaufen am 2026-09-02**; dabei kam +genau ein Fehler heraus, seither behoben: die Erweiterung wurde **zweimal** +eingebettet, weil `addTarget()` für den Typ `app_extension` von sich aus schon +eine Copy-Phase nach `PlugIns` anlegt und das Skript eine zweite hinzufügte. +Xcode quittierte das mit `error: Unexpected duplicate tasks`. Das Anlegen des +Ziels selbst, die Entitlements, das URL-Schema und die Idempotenz funktionierten +auf Anhieb. + +Bricht es ab, ist nichts halb eingerichtet (es bricht vor dem Schreiben ab), und +dasselbe lässt sich in Xcode von Hand erledigen: 1. **File → New → Target… → Share Extension**, Name `DataMetric360Share`, Sprache Swift, „Activate scheme" verneinen. diff --git a/companion-app/scripts/ios-teilen-einrichten.mjs b/companion-app/scripts/ios-teilen-einrichten.mjs index 04d6311..9a118ed 100644 --- a/companion-app/scripts/ios-teilen-einrichten.mjs +++ b/companion-app/scripts/ios-teilen-einrichten.mjs @@ -173,15 +173,16 @@ try { } } - // Erweiterung in die App einbetten - ohne diese Phase liegt sie zwar im - // Projekt, wandert aber nicht mit ins fertige .ipa. - projekt.addBuildPhase( - [`${ZIEL_NAME}.appex`], - "PBXCopyFilesBuildPhase", - "Embed App Extensions", - projekt.getFirstTarget().uuid, - "app_extension", - ) + // Eingebettet wird die Erweiterung bereits von `addTarget`: die Bibliothek + // legt fuer den Typ "app_extension" von sich aus eine Copy-Phase nach + // PlugIns am ersten Ziel an. Hier noch eine zweite anzulegen, hat genau das + // erzeugt, wogegen Xcode sich wehrt (2026-09-02, erster Lauf ueberhaupt auf + // einem Mac): + // error: Unexpected duplicate tasks + // note: Target 'App': ValidateEmbeddedBinary .../DataMetric360Share.appex + // note: Target 'App': ValidateEmbeddedBinary .../DataMetric360Share.appex + // Beide Phasen zeigten auf dieselbe Datei und dasselbe Ziel - die .appex + // waere zweimal an denselben Ort kopiert worden. writeFileSync(pbxPfad, projekt.writeSync(), "utf8") } catch (fehler) {