From e04f97c2477a026bb5c3bed79a44b9091d75d449 Mon Sep 17 00:00:00 2001 From: Paul Nothaft Date: Wed, 2 Sep 2026 14:55:04 +0200 Subject: [PATCH] Erweiterung wurde ohne Programm gebaut - Quelle hing in keiner Sources-Phase An der fertigen .ipa gemessen: DataMetric360Share.appex enthielt nur Info.plist, Signatur und Profil - keine ausfuehrbare Datei, obwohl CFBundleExecutable eine versprach. Xcode meldet dabei nichts, der Bau gilt als erfolgreich. Das Teilen-Blatt haette schlicht nicht funktioniert. Ursache: addSourceFile() legt die Datei nur in die uebergebene Gruppe, wenn man ihm eine mitgibt - an eine Sources-Phase haengt es sie dann nicht. Der PBXBuildFile-Eintrag existierte, war aber verwaist, und alle Sources-Phasen des Ziels blieben leer. Die Quelle wird jetzt direkt beim Anlegen der Sources-Phase uebergeben. Belegt am neu erzeugten Projekt: zwei Sources-Phasen, die der App mit AppDelegate/SceneDelegate, die der Erweiterung mit ShareViewController. --- .../scripts/ios-teilen-einrichten.mjs | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/companion-app/scripts/ios-teilen-einrichten.mjs b/companion-app/scripts/ios-teilen-einrichten.mjs index 4ae2c02..ad99960 100644 --- a/companion-app/scripts/ios-teilen-einrichten.mjs +++ b/companion-app/scripts/ios-teilen-einrichten.mjs @@ -139,12 +139,26 @@ try { // Eigene Build-Phasen: ohne sie hat das Ziel keine Quelldateien und keine // Ressourcen, und Xcode baut ein leeres Bündel. - projekt.addBuildPhase([], "PBXSourcesBuildPhase", "Sources", ziel.uuid) + // + // Die Quelle gehoert hier hinein und nicht in ein spaeteres addSourceFile: + // reicht man diesem eine Gruppe mit, legt es die Datei nur in die Gruppe + // (Navigator) und haengt sie an keine Sources-Phase. Das Ergebnis war ein + // .appex ganz ohne Programm - nur Info.plist und Signatur, obwohl + // CFBundleExecutable eines versprach (2026-09-02 an der fertigen .ipa + // gemessen). Xcode meldet dabei nichts; der Bau gilt als erfolgreich. + projekt.addBuildPhase( + ["ShareViewController.swift"], + "PBXSourcesBuildPhase", + "Sources", + ziel.uuid, + ) projekt.addBuildPhase([], "PBXResourcesBuildPhase", "Resources", ziel.uuid) projekt.addBuildPhase([], "PBXFrameworksBuildPhase", "Frameworks", ziel.uuid) + // Nur zur Anzeige in Xcode. Die Quelle ist oben bereits der Sources-Phase + // zugeordnet und steht deshalb hier nicht noch einmal. const gruppe = projekt.addPbxGroup( - ["ShareViewController.swift", "Info.plist", `${ZIEL_NAME}.entitlements`], + ["Info.plist", `${ZIEL_NAME}.entitlements`], ZIEL_NAME, ZIEL_NAME, ) @@ -154,8 +168,6 @@ try { ) if (wurzel) projekt.addToPbxGroup(gruppe.uuid, wurzel) - projekt.addSourceFile("ShareViewController.swift", { target: ziel.uuid }, gruppe.uuid) - // Einstellungen, die `addTarget` nicht selbst setzt. const konfigs = projekt.pbxXCBuildConfigurationSection() for (const schluessel of Object.keys(konfigs)) {