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.
This commit is contained in:
Paul Nothaft
2026-09-02 14:25:28 +02:00
parent 12bc9e4220
commit e250b6c5e1
2 changed files with 20 additions and 12 deletions
+10 -3
View File
@@ -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.
@@ -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) {